@witnet/sdk 1.0.0-beta.0
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/LICENSE +21 -0
- package/README.md +103 -0
- package/dist/package.json +72 -0
- package/dist/src/bin/helpers.d.ts +91 -0
- package/dist/src/bin/helpers.d.ts.map +1 -0
- package/dist/src/bin/helpers.js +816 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +47 -0
- package/dist/src/lib/crypto/account.d.ts +32 -0
- package/dist/src/lib/crypto/account.d.ts.map +1 -0
- package/dist/src/lib/crypto/account.js +106 -0
- package/dist/src/lib/crypto/coinbase.d.ts +10 -0
- package/dist/src/lib/crypto/coinbase.d.ts.map +1 -0
- package/dist/src/lib/crypto/coinbase.js +28 -0
- package/dist/src/lib/crypto/index.d.ts +8 -0
- package/dist/src/lib/crypto/index.d.ts.map +1 -0
- package/dist/src/lib/crypto/index.js +30 -0
- package/dist/src/lib/crypto/interfaces.d.ts +85 -0
- package/dist/src/lib/crypto/interfaces.d.ts.map +1 -0
- package/dist/src/lib/crypto/interfaces.js +3 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +55 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.js +339 -0
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts +28 -0
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/StakePayload.js +142 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +36 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.js +154 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +25 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +128 -0
- package/dist/src/lib/crypto/payloads.d.ts +57 -0
- package/dist/src/lib/crypto/payloads.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads.js +170 -0
- package/dist/src/lib/crypto/signer.d.ts +33 -0
- package/dist/src/lib/crypto/signer.d.ts.map +1 -0
- package/dist/src/lib/crypto/signer.js +194 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +15 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.js +23 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +12 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.js +17 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +18 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +53 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +11 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.js +16 -0
- package/dist/src/lib/crypto/transmitters.d.ts +47 -0
- package/dist/src/lib/crypto/transmitters.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters.js +416 -0
- package/dist/src/lib/crypto/types.d.ts +161 -0
- package/dist/src/lib/crypto/types.d.ts.map +1 -0
- package/dist/src/lib/crypto/types.js +273 -0
- package/dist/src/lib/crypto/utils.d.ts +21 -0
- package/dist/src/lib/crypto/utils.d.ts.map +1 -0
- package/dist/src/lib/crypto/utils.js +156 -0
- package/dist/src/lib/crypto/wallet.d.ts +120 -0
- package/dist/src/lib/crypto/wallet.d.ts.map +1 -0
- package/dist/src/lib/crypto/wallet.js +258 -0
- package/dist/src/lib/index.d.ts +5 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +44 -0
- package/dist/src/lib/radon/ccdr/eth.d.ts +160 -0
- package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/eth.js +272 -0
- package/dist/src/lib/radon/ccdr/index.d.ts +14 -0
- package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/index.js +39 -0
- package/dist/src/lib/radon/ccdr/wit.d.ts +23 -0
- package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/wit.js +35 -0
- package/dist/src/lib/radon/filters.d.ts +14 -0
- package/dist/src/lib/radon/filters.d.ts.map +1 -0
- package/dist/src/lib/radon/filters.js +45 -0
- package/dist/src/lib/radon/index.d.ts +296 -0
- package/dist/src/lib/radon/index.d.ts.map +1 -0
- package/dist/src/lib/radon/index.js +707 -0
- package/dist/src/lib/radon/reducers.d.ts +29 -0
- package/dist/src/lib/radon/reducers.d.ts.map +1 -0
- package/dist/src/lib/radon/reducers.js +66 -0
- package/dist/src/lib/radon/types.d.ts +521 -0
- package/dist/src/lib/radon/types.d.ts.map +1 -0
- package/dist/src/lib/radon/types.js +936 -0
- package/dist/src/lib/radon/utils.d.ts +53 -0
- package/dist/src/lib/radon/utils.d.ts.map +1 -0
- package/dist/src/lib/radon/utils.js +153 -0
- package/dist/src/lib/rpc/index.d.ts +3 -0
- package/dist/src/lib/rpc/index.d.ts.map +1 -0
- package/dist/src/lib/rpc/index.js +19 -0
- package/dist/src/lib/rpc/nodes.d.ts +40 -0
- package/dist/src/lib/rpc/nodes.d.ts.map +1 -0
- package/dist/src/lib/rpc/nodes.js +293 -0
- package/dist/src/lib/rpc/provider.d.ts +88 -0
- package/dist/src/lib/rpc/provider.d.ts.map +1 -0
- package/dist/src/lib/rpc/provider.js +336 -0
- package/dist/src/lib/rpc/reporter.d.ts +18 -0
- package/dist/src/lib/rpc/reporter.d.ts.map +1 -0
- package/dist/src/lib/rpc/reporter.js +30 -0
- package/dist/src/lib/rpc/types.d.ts +409 -0
- package/dist/src/lib/rpc/types.d.ts.map +1 -0
- package/dist/src/lib/rpc/types.js +81 -0
- package/dist/src/lib/types.d.ts +18 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +7 -0
- package/dist/src/lib/utils.d.ts +13 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +97 -0
- package/dist/witnet/assets/index.d.ts +30 -0
- package/dist/witnet/assets/index.d.ts.map +1 -0
- package/dist/witnet/assets/index.js +6 -0
- package/dist/witnet/assets/modals/index.d.ts +18 -0
- package/dist/witnet/assets/modals/index.d.ts.map +1 -0
- package/dist/witnet/assets/modals/index.js +21 -0
- package/dist/witnet/assets/modals/web3/eth.d.ts +5 -0
- package/dist/witnet/assets/modals/web3/eth.d.ts.map +1 -0
- package/dist/witnet/assets/modals/web3/eth.js +26 -0
- package/dist/witnet/assets/modals/web3/wit.d.ts +4 -0
- package/dist/witnet/assets/modals/web3/wit.d.ts.map +1 -0
- package/dist/witnet/assets/modals/web3/wit.js +20 -0
- package/dist/witnet/assets/requests.d.ts +11 -0
- package/dist/witnet/assets/requests.d.ts.map +1 -0
- package/dist/witnet/assets/requests.js +88 -0
- package/dist/witnet/witnet.proto.json +1325 -0
- package/package.json +72 -0
- package/src/bin/cli/history.js +31 -0
- package/src/bin/cli/inspect.js +359 -0
- package/src/bin/cli/network.js +592 -0
- package/src/bin/cli/nodes.js +364 -0
- package/src/bin/cli/radon.js +814 -0
- package/src/bin/cli/wallet.js +1000 -0
- package/src/bin/helpers.js +829 -0
- package/src/bin/postinstall.js +9 -0
- package/src/bin/toolkit.js +294 -0
- package/witnet/assets/_index.js +8 -0
- package/witnet/assets/_requests.js +25 -0
- package/witnet/assets/_sources.js +36 -0
- package/witnet/assets/_templates.js +36 -0
- package/witnet/assets/index.js +4 -0
- package/witnet/assets/modals/index.js +25 -0
- package/witnet/assets/modals/web3/btc.js +0 -0
- package/witnet/assets/modals/web3/eth.js +29 -0
- package/witnet/assets/modals/web3/sol.js +0 -0
- package/witnet/assets/modals/web3/wit.js +23 -0
- package/witnet/assets/requests.js +94 -0
- package/witnet/witnet.proto.json +1325 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataRequestPayload = void 0;
|
|
4
|
+
const Long = require("long");
|
|
5
|
+
const protobufjs_1 = require("protobufjs");
|
|
6
|
+
const protoRoot = protobufjs_1.Root.fromJSON(require("../../../../witnet/witnet.proto.json"));
|
|
7
|
+
const helpers_1 = require("../../../bin/helpers");
|
|
8
|
+
const radon_1 = require("../../radon");
|
|
9
|
+
const payloads_1 = require("../payloads");
|
|
10
|
+
const types_1 = require("../types");
|
|
11
|
+
const utils_1 = require("../utils");
|
|
12
|
+
const DR_COMMIT_TX_WEIGHT = 400;
|
|
13
|
+
const DR_REVEAL_TX_WEIGHT = 200;
|
|
14
|
+
const DR_TALLY_TX_WEIGHT = 100;
|
|
15
|
+
const DR_TX_WEIGHT_ALPHA = 1;
|
|
16
|
+
const DR_TX_WEIGHT_BETA = 1;
|
|
17
|
+
const TX_WEIGHT_INPUT_SIZE = 133;
|
|
18
|
+
const TX_WEIGHT_OUTPUT_SIZE = 36;
|
|
19
|
+
class DataRequestPayload extends payloads_1.TransactionPayloadMultiSig {
|
|
20
|
+
constructor(protoTypeName, radon, initialTarget) {
|
|
21
|
+
super(protoTypeName, initialTarget);
|
|
22
|
+
if (radon instanceof radon_1.RadonRequest) {
|
|
23
|
+
this._request = radon;
|
|
24
|
+
}
|
|
25
|
+
else if (radon instanceof radon_1.RadonTemplate) {
|
|
26
|
+
this.template = radon;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
throw new TypeError(`DataRequestPayload: unsupported Radon asset type: ${radon?.constructor.name}`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
get droHash() {
|
|
33
|
+
const obj = this._toDrOutputProtobuf();
|
|
34
|
+
if (obj) {
|
|
35
|
+
const DataRequestOutput = protoRoot.lookupType("DataRequestOutput");
|
|
36
|
+
const err = DataRequestOutput.verify(obj);
|
|
37
|
+
if (err) {
|
|
38
|
+
throw TypeError(err);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// console.log("\ndroHash.obj =>", JSON.stringify(obj))
|
|
42
|
+
const message = DataRequestOutput.fromObject(obj);
|
|
43
|
+
// console.log("\ndroHash.message =>", JSON.stringify(message))
|
|
44
|
+
const bytecode = DataRequestOutput.encode(message).finish();
|
|
45
|
+
// console.log("\ndroHash.bytecode =>", bytecode)
|
|
46
|
+
return (0, helpers_1.toHexString)((0, utils_1.sha256)(bytecode));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
get droSLA() {
|
|
54
|
+
if (this._target && this._fees) {
|
|
55
|
+
const minConsensusPercentage = 51;
|
|
56
|
+
const witnesses = (typeof this._target.witnesses === 'object'
|
|
57
|
+
? Object.keys(this._target.witnesses).length
|
|
58
|
+
: this._target.witnesses || 0);
|
|
59
|
+
const commitAndRevealFee = this._fees2UnitaryCommitRevealReward(this._fees, witnesses);
|
|
60
|
+
const witnessReward = this._fees2UnitaryReward(this._fees);
|
|
61
|
+
const collateral = witnessReward * BigInt(DataRequestPayload.COLLATERAL_RATIO);
|
|
62
|
+
if (collateral > Number.MAX_SAFE_INTEGER)
|
|
63
|
+
throw new TypeError(`${this.constructor.name}: too much witness collateral: ${collateral.toString()} > ${Number.MAX_SAFE_INTEGER}`);
|
|
64
|
+
else if (witnessReward > Number.MAX_SAFE_INTEGER)
|
|
65
|
+
throw new TypeError(`${this.constructor.name}: too much witness reward: ${witnessReward.toString()} > ${Number.MAX_SAFE_INTEGER}`);
|
|
66
|
+
else if (commitAndRevealFee > Number.MAX_SAFE_INTEGER)
|
|
67
|
+
throw new TypeError(`${this.constructor.name}: too much commit/reveal fee: ${commitAndRevealFee.toString()} > ${Number.MAX_SAFE_INTEGER}`);
|
|
68
|
+
return {
|
|
69
|
+
collateral: Number(collateral),
|
|
70
|
+
commitAndRevealFee: Number(commitAndRevealFee),
|
|
71
|
+
minConsensusPercentage,
|
|
72
|
+
witnesses,
|
|
73
|
+
witnessReward: Number(witnessReward),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
get hash() {
|
|
81
|
+
const _bytecode = this.bytecode;
|
|
82
|
+
if (_bytecode && this.droHash) {
|
|
83
|
+
return (0, helpers_1.toHexString)((0, utils_1.sha256)(Buffer.concat([
|
|
84
|
+
(0, helpers_1.fromHexString)(this.droHash),
|
|
85
|
+
(0, utils_1.sha256)(_bytecode),
|
|
86
|
+
])));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
get maxWeight() {
|
|
93
|
+
return DataRequestPayload.MAX_WEIGHT;
|
|
94
|
+
}
|
|
95
|
+
get parameterized() {
|
|
96
|
+
return !!this.template;
|
|
97
|
+
}
|
|
98
|
+
get prepared() {
|
|
99
|
+
return (this.covered
|
|
100
|
+
&& this._inputs.length > 0
|
|
101
|
+
&& !!this._request
|
|
102
|
+
&& !!this._target);
|
|
103
|
+
}
|
|
104
|
+
get radArgs() {
|
|
105
|
+
return this.template ? this._target?.args : undefined;
|
|
106
|
+
}
|
|
107
|
+
get radHash() {
|
|
108
|
+
return this.request?.radHash;
|
|
109
|
+
}
|
|
110
|
+
get request() {
|
|
111
|
+
return this._request;
|
|
112
|
+
}
|
|
113
|
+
get value() {
|
|
114
|
+
if (this._target && this._fees) {
|
|
115
|
+
return types_1.Coins.fromPedros(this._fees2Value(this._fees, this._target.witnesses || 0));
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
return types_1.Coins.zero();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
get weight() {
|
|
122
|
+
if (this._request && this._target) {
|
|
123
|
+
const witnesses = typeof this._target.witnesses === 'object' ? Object.keys(this._target.witnesses).length : this._target.witnesses || 0;
|
|
124
|
+
return (DR_TX_WEIGHT_ALPHA * (this._request.weight() + 8 + 2 + 8 + 4 + 8),
|
|
125
|
+
+this._inputs.length * TX_WEIGHT_INPUT_SIZE
|
|
126
|
+
+ this._outputs.length * TX_WEIGHT_OUTPUT_SIZE
|
|
127
|
+
+ witnesses * (DR_COMMIT_TX_WEIGHT
|
|
128
|
+
+ DR_REVEAL_TX_WEIGHT * DR_TX_WEIGHT_BETA
|
|
129
|
+
+ TX_WEIGHT_OUTPUT_SIZE // TODO V2.1: typeof this._target.witnesses === 'object' ? TX_WEIGHT_OUTPUT_SIZE : 0
|
|
130
|
+
)
|
|
131
|
+
+ Math.max(DR_TALLY_TX_WEIGHT, this._target?.maxResultSize || 0) * DR_TX_WEIGHT_BETA);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
return 0;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async consumeUtxos(ledger, reload) {
|
|
138
|
+
if (!this._target) {
|
|
139
|
+
throw new Error(`${this.constructor.name}: internal error: no in-flight params.`);
|
|
140
|
+
}
|
|
141
|
+
else if (this._target?.fees instanceof types_1.Coins) {
|
|
142
|
+
this._fees = this._target.fees.pedros;
|
|
143
|
+
return super.consumeUtxos(ledger, reload);
|
|
144
|
+
}
|
|
145
|
+
if (!this.covered) {
|
|
146
|
+
if (!this._target.witnesses) {
|
|
147
|
+
this._target.witnesses = Math.min(DataRequestPayload.DEFAULT_WITNESSES, await ledger.provider.witnesses());
|
|
148
|
+
if (this._target.witnesses < 3) {
|
|
149
|
+
delete this._target.witnesses;
|
|
150
|
+
throw new Error(`${this.constructor.name}: cannot estimate witnesses: network not ready for witnessing.`);
|
|
151
|
+
}
|
|
152
|
+
else if (this.weight > DataRequestPayload.MAX_WEIGHT * 0.8) {
|
|
153
|
+
const delta = this.weight - DataRequestPayload.MAX_WEIGHT * 0.8;
|
|
154
|
+
this._target.witnesses -= Math.ceil(delta / (DR_COMMIT_TX_WEIGHT + DR_REVEAL_TX_WEIGHT * TX_WEIGHT_OUTPUT_SIZE));
|
|
155
|
+
if (this._target.witnesses < 3) {
|
|
156
|
+
delete this._target.witnesses;
|
|
157
|
+
throw new Error(`${this.constructor.name}: cannot estimate witnesses: radon request too complex: ${this.weight} weight units`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const priority = this._target?.fees || types_1.TransactionPriority.Opulent;
|
|
162
|
+
let estimatedFees = await this._estimateNetworkFees(ledger.provider, priority);
|
|
163
|
+
while (this._fees < estimatedFees) {
|
|
164
|
+
this._fees = estimatedFees;
|
|
165
|
+
this._outputs = [];
|
|
166
|
+
this._inputs = [];
|
|
167
|
+
this._covered = 0n;
|
|
168
|
+
// consume utxos as to cover for estimated value and estimated fees
|
|
169
|
+
const value = this._fees2Value(this._fees, this._target.witnesses);
|
|
170
|
+
const utxos = await ledger.selectUtxos({
|
|
171
|
+
value: types_1.Coins.fromPedros(value + this._fees - this._covered),
|
|
172
|
+
reload,
|
|
173
|
+
});
|
|
174
|
+
this._covered += utxos.map(utxo => BigInt(utxo.value)).reduce((prev, curr) => prev + curr, 0n);
|
|
175
|
+
this._inputs.push(...utxos);
|
|
176
|
+
ledger.consumeUtxos(...utxos);
|
|
177
|
+
this._change = this._covered - (value + this._fees);
|
|
178
|
+
if (this._change >= 0) {
|
|
179
|
+
this.prepareOutputs({ value: this._change });
|
|
180
|
+
estimatedFees = await this._estimateNetworkFees(ledger.provider, priority);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
// insufficient funds ...
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return this._change;
|
|
189
|
+
}
|
|
190
|
+
intoReceipt(target) {
|
|
191
|
+
return {
|
|
192
|
+
droHash: this.droHash,
|
|
193
|
+
radArgs: this.radArgs,
|
|
194
|
+
radHash: this.radHash,
|
|
195
|
+
witnesses: target.witnesses,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
prepareOutputs(change) {
|
|
199
|
+
if (change?.value) {
|
|
200
|
+
this._outputs.push({
|
|
201
|
+
pkh: this._inputs[0].signer,
|
|
202
|
+
value: change.value,
|
|
203
|
+
time_lock: 0,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
resetTarget(target) {
|
|
208
|
+
this._change = 0n;
|
|
209
|
+
this._covered = 0n;
|
|
210
|
+
this._fees = 0n;
|
|
211
|
+
this._inputs = [];
|
|
212
|
+
this._outputs = [];
|
|
213
|
+
this._target = target;
|
|
214
|
+
if (this.droSLA?.collateral && this.droSLA.collateral < DataRequestPayload.MIN_COLLATERAL) {
|
|
215
|
+
throw new TypeError(`${this.constructor.name}: witnessing collateral below minimum: ${this.droSLA.collateral} < ${DataRequestPayload.MIN_COLLATERAL}`);
|
|
216
|
+
}
|
|
217
|
+
if (this.template) {
|
|
218
|
+
const args = target?.args;
|
|
219
|
+
if (args === undefined) {
|
|
220
|
+
throw new TypeError(`${this.constructor.name}: no template args were passed.`);
|
|
221
|
+
}
|
|
222
|
+
else if (typeof args === 'string') {
|
|
223
|
+
this._request = this.template.buildRadonRequest([args]);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
this._request = this.template.buildRadonRequest(args);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
delete this._priorities;
|
|
230
|
+
}
|
|
231
|
+
toJSON(humanize = false) {
|
|
232
|
+
const droSLA = this.droSLA;
|
|
233
|
+
return {
|
|
234
|
+
inputs: this.inputs
|
|
235
|
+
.map(utxo => ({ output_pointer: utxo.output_pointer })),
|
|
236
|
+
outputs: this.outputs.map(vto => ({
|
|
237
|
+
pkh: vto.pkh,
|
|
238
|
+
time_lock: vto.time_lock,
|
|
239
|
+
value: vto.value.toString(),
|
|
240
|
+
})),
|
|
241
|
+
dr_output: {
|
|
242
|
+
...(this._request ? { data_request: this._request.toJSON(humanize) } : {}),
|
|
243
|
+
commit_and_reveal_fee: droSLA?.commitAndRevealFee,
|
|
244
|
+
min_consensus_percentage: droSLA?.minConsensusPercentage,
|
|
245
|
+
witnesses: droSLA?.witnesses,
|
|
246
|
+
witness_reward: droSLA?.witnessReward,
|
|
247
|
+
collateral: droSLA?.collateral
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
toProtobuf() {
|
|
252
|
+
if (this.prepared && this._target && this._request) {
|
|
253
|
+
return {
|
|
254
|
+
inputs: this.inputs
|
|
255
|
+
.map(utxo => {
|
|
256
|
+
const transactionId = utxo.output_pointer.split(':')[0];
|
|
257
|
+
const outputIndex = parseInt(utxo.output_pointer.split(':')[1]);
|
|
258
|
+
return {
|
|
259
|
+
outputPointer: {
|
|
260
|
+
transactionId: { SHA256: Array.from((0, helpers_1.fromHexString)(transactionId)) },
|
|
261
|
+
...(outputIndex > 0 ? { outputIndex } : {}),
|
|
262
|
+
},
|
|
263
|
+
};
|
|
264
|
+
}),
|
|
265
|
+
outputs: this.outputs.map(vto => ({
|
|
266
|
+
pkh: { hash: Array.from(types_1.PublicKeyHash.fromBech32(vto.pkh).toBytes20()), },
|
|
267
|
+
value: Long.fromValue(vto.value),
|
|
268
|
+
...(vto.time_lock > 0 ? { timeLock: vto.time_lock } : {}),
|
|
269
|
+
})),
|
|
270
|
+
drOutput: this._toDrOutputProtobuf(),
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
validateTarget(target) {
|
|
275
|
+
target = this._cleanTargetExtras(target);
|
|
276
|
+
if (target && Object.keys(target).length > 0) {
|
|
277
|
+
if (!(target
|
|
278
|
+
&& (!target?.fees
|
|
279
|
+
|| (target.fees instanceof types_1.Coins && target.fees.pedros > 0
|
|
280
|
+
|| Object.values(types_1.TransactionPriority).includes(target.fees)))
|
|
281
|
+
&& (target?.witnesses || target?.witnesses === undefined)
|
|
282
|
+
&& (!this.template || target?.args))) {
|
|
283
|
+
throw new TypeError(`${this.constructor.name}: invalid options: ${JSON.stringify(target)}`);
|
|
284
|
+
}
|
|
285
|
+
else if (target?.witnesses) {
|
|
286
|
+
if (typeof target.witnesses === 'object') {
|
|
287
|
+
throw new TypeError(`${this.constructor.name}: explicit witnessing committees not yet supported: ${target.witnesses}`);
|
|
288
|
+
}
|
|
289
|
+
target.witnesses = parseInt(target.witnesses);
|
|
290
|
+
}
|
|
291
|
+
return target;
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
return undefined;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
_cleanTargetExtras(target) {
|
|
298
|
+
if (target) {
|
|
299
|
+
return Object.fromEntries(Object.entries(target).filter(([key,]) => [
|
|
300
|
+
'args',
|
|
301
|
+
'fees',
|
|
302
|
+
'maxResultSize',
|
|
303
|
+
'witnesses',
|
|
304
|
+
].includes(key)));
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
async _estimateNetworkFees(provider, priority = types_1.TransactionPriority.Medium) {
|
|
308
|
+
if (!this._priorities) {
|
|
309
|
+
this._priorities = await provider.priorities();
|
|
310
|
+
}
|
|
311
|
+
return BigInt(Math.floor(this._priorities[`drt_${priority}`].priority * (this.covered ? this.weight : (this.weight
|
|
312
|
+
// estimate weight of one single output in case there was change to pay back
|
|
313
|
+
+ TX_WEIGHT_OUTPUT_SIZE))));
|
|
314
|
+
}
|
|
315
|
+
_fees2UnitaryCommitRevealReward(fees, witnesses) {
|
|
316
|
+
return fees / BigInt(witnesses) || 1n;
|
|
317
|
+
}
|
|
318
|
+
_fees2UnitaryReward(fees) {
|
|
319
|
+
return utils_1.BigMath.max(fees, 1n + DataRequestPayload.MIN_COLLATERAL / BigInt(DataRequestPayload.COLLATERAL_RATIO));
|
|
320
|
+
}
|
|
321
|
+
_fees2Value(fees, witnesses) {
|
|
322
|
+
return (BigInt(witnesses) * (this._fees2UnitaryReward(fees)
|
|
323
|
+
+ 2n * this._fees2UnitaryCommitRevealReward(fees, witnesses)));
|
|
324
|
+
}
|
|
325
|
+
_toDrOutputProtobuf() {
|
|
326
|
+
if (this._request) {
|
|
327
|
+
return {
|
|
328
|
+
...this.droSLA,
|
|
329
|
+
dataRequest: this._request.toProtobuf()
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
exports.DataRequestPayload = DataRequestPayload;
|
|
335
|
+
DataRequestPayload.COLLATERAL_RATIO = 125;
|
|
336
|
+
DataRequestPayload.DEFAULT_WITNESSES = 12;
|
|
337
|
+
DataRequestPayload.MAX_WEIGHT = 80000;
|
|
338
|
+
DataRequestPayload.MIN_COLLATERAL = 20000000000n;
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YVJlcXVlc3RQYXlsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vcGF5bG9hZHMvRGF0YVJlcXVlc3RQYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUU1QiwyQ0FBOEM7QUFDOUMsTUFBTSxTQUFTLEdBQUcsaUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQTtBQUVyRixrREFBaUU7QUFFakUsdUNBQXlEO0FBSXpELDBDQUF3RDtBQUN4RCxvQ0FBdUY7QUFDdkYsb0NBQTBDO0FBa0IxQyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQTtBQUMvQixNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQTtBQUMvQixNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQTtBQUU5QixNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQTtBQUM1QixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQTtBQUUzQixNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQTtBQUNoQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQTtBQUVoQyxNQUFhLGtCQUFtQixTQUFRLHFDQUE2QztJQVVqRixZQUFhLGFBQXFCLEVBQUUsS0FBbUMsRUFBRSxhQUFpQztRQUN0RyxLQUFLLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ25DLElBQUksS0FBSyxZQUFZLG9CQUFZLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtRQUN6QixDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVkscUJBQWEsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxJQUFJLFNBQVMsQ0FB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LGdEQW9YQztBQWxYaUIsbUNBQWdCLEdBQUcsR0FBRyxDQUFBO0FBQ3RCLG9DQUFpQixHQUFHLEVBQUUsQ0FBQTtBQUN0Qiw2QkFBVSxHQUFHLEtBQU0sQ0FBQTtBQUNuQixpQ0FBYyxHQUFHLFlBQWUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IExvbmcgPSByZXF1aXJlKFwibG9uZ1wiKVxyXG5cclxuaW1wb3J0IHsgUm9vdCBhcyBQcm90b1Jvb3QgfSBmcm9tIFwicHJvdG9idWZqc1wiXHJcbmNvbnN0IHByb3RvUm9vdCA9IFByb3RvUm9vdC5mcm9tSlNPTihyZXF1aXJlKFwiLi4vLi4vLi4vLi4vd2l0bmV0L3dpdG5ldC5wcm90by5qc29uXCIpKVxyXG5cclxuaW1wb3J0IHsgZnJvbUhleFN0cmluZywgdG9IZXhTdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vYmluL2hlbHBlcnNcIlxyXG5cclxuaW1wb3J0IHsgUmFkb25SZXF1ZXN0LCBSYWRvblRlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL3JhZG9uXCJcclxuaW1wb3J0IHsgSGFzaCwgSGV4U3RyaW5nLCBJSnNvblJwY1Byb3ZpZGVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCJcclxuXHJcbmltcG9ydCB7IElMZWRnZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiXHJcbmltcG9ydCB7IFRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnIH0gZnJvbSBcIi4uL3BheWxvYWRzXCJcclxuaW1wb3J0IHsgQ29pbnMsIFB1YmxpY0tleUhhc2gsIFRyYW5zYWN0aW9uUGFyYW1zLCBUcmFuc2FjdGlvblByaW9yaXR5IH0gZnJvbSBcIi4uL3R5cGVzXCJcclxuaW1wb3J0IHsgQmlnTWF0aCwgc2hhMjU2IH0gZnJvbSBcIi4uL3V0aWxzXCJcclxuXHJcbmV4cG9ydCB0eXBlIERhdGFSZXF1ZXN0VGVtcGxhdGVBcmdzID0gYW55IHwgc3RyaW5nIHwgc3RyaW5nW10gfCBzdHJpbmdbXVtdXHJcbiAgICBcclxuZXhwb3J0IHR5cGUgRGF0YVJlcXVlc3RQYXJhbXMgPSBUcmFuc2FjdGlvblBhcmFtcyAmIHtcclxuICAgIGFyZ3M/OiBEYXRhUmVxdWVzdFRlbXBsYXRlQXJncyxcclxuICAgIG1heFJlc3VsdFNpemU/OiBudW1iZXIsXHJcbiAgICB3aXRuZXNzZXM/OiBudW1iZXIsXHJcbn1cclxuXHJcbnR5cGUgRGF0YVJlcXVlc3RPdXRwdXRTTEEgPSB7XHJcbiAgICBjb2xsYXRlcmFsOiBudW1iZXIsXHJcbiAgICBjb21taXRBbmRSZXZlYWxGZWU6IG51bWJlcixcclxuICAgIG1pbkNvbnNlbnN1c1BlcmNlbnRhZ2U6IG51bWJlcixcclxuICAgIHdpdG5lc3NlczogbnVtYmVyLFxyXG4gICAgd2l0bmVzc1Jld2FyZD86IG51bWJlcixcclxufVxyXG5cclxuY29uc3QgRFJfQ09NTUlUX1RYX1dFSUdIVCA9IDQwMFxyXG5jb25zdCBEUl9SRVZFQUxfVFhfV0VJR0hUID0gMjAwXHJcbmNvbnN0IERSX1RBTExZX1RYX1dFSUdIVCA9IDEwMFxyXG5cclxuY29uc3QgRFJfVFhfV0VJR0hUX0FMUEhBID0gMVxyXG5jb25zdCBEUl9UWF9XRUlHSFRfQkVUQSA9IDFcclxuXHJcbmNvbnN0IFRYX1dFSUdIVF9JTlBVVF9TSVpFID0gMTMzXHJcbmNvbnN0IFRYX1dFSUdIVF9PVVRQVVRfU0laRSA9IDM2XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0YVJlcXVlc3RQYXlsb2FkIGV4dGVuZHMgVHJhbnNhY3Rpb25QYXlsb2FkTXVsdGlTaWc8RGF0YVJlcXVlc3RQYXJhbXM+IHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIENPTExBVEVSQUxfUkFUSU8gPSAxMjVcclxuICAgIHB1YmxpYyBzdGF0aWMgREVGQVVMVF9XSVRORVNTRVMgPSAxMlxyXG4gICAgcHVibGljIHN0YXRpYyBNQVhfV0VJR0hUID0gODBfMDAwXHJcbiAgICBwdWJsaWMgc3RhdGljIE1JTl9DT0xMQVRFUkFMID0gMjBfMDAwXzAwMF8wMDBuXHJcblxyXG4gICAgcHJvdGVjdGVkIF9yZXF1ZXN0PzogUmFkb25SZXF1ZXN0IFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHRlbXBsYXRlPzogUmFkb25UZW1wbGF0ZVxyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvciAocHJvdG9UeXBlTmFtZTogc3RyaW5nLCByYWRvbjogUmFkb25SZXF1ZXN0IHwgUmFkb25UZW1wbGF0ZSwgaW5pdGlhbFRhcmdldD86IERhdGFSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgc3VwZXIocHJvdG9UeXBlTmFtZSwgaW5pdGlhbFRhcmdldClcclxuICAgICAgICBpZiAocmFkb24gaW5zdGFuY2VvZiBSYWRvblJlcXVlc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdCA9IHJhZG9uXHJcbiAgICAgICAgfSBlbHNlIGlmIChyYWRvbiBpbnN0YW5jZW9mIFJhZG9uVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHJhZG9uXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRGF0YVJlcXVlc3RQYXlsb2FkOiB1bnN1cHBvcnRlZCBSYWRvbiBhc3NldCB0eXBlOiAkeyhyYWRvbiBhcyBhbnkpPy5jb25zdHJ1Y3Rvci5uYW1lfWApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZHJvSGFzaCgpOiBIYXNoIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICBjb25zdCBvYmogPSB0aGlzLl90b0RyT3V0cHV0UHJvdG9idWYoKVxyXG4gICAgICAgIGlmIChvYmopIHtcclxuICAgICAgICAgICAgY29uc3QgRGF0YVJlcXVlc3RPdXRwdXQgPSBwcm90b1Jvb3QubG9va3VwVHlwZShcIkRhdGFSZXF1ZXN0T3V0cHV0XCIpXHJcbiAgICAgICAgICAgIGNvbnN0IGVyciA9IERhdGFSZXF1ZXN0T3V0cHV0LnZlcmlmeShvYmopXHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihlcnIpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcbmRyb0hhc2gub2JqID0+XCIsIEpTT04uc3RyaW5naWZ5KG9iaikpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gRGF0YVJlcXVlc3RPdXRwdXQuZnJvbU9iamVjdChvYmopXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcbmRyb0hhc2gubWVzc2FnZSA9PlwiLCBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVjb2RlID0gRGF0YVJlcXVlc3RPdXRwdXQuZW5jb2RlKG1lc3NhZ2UpLmZpbmlzaCgpXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlxcbmRyb0hhc2guYnl0ZWNvZGUgPT5cIiwgYnl0ZWNvZGUpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9IZXhTdHJpbmcoc2hhMjU2KGJ5dGVjb2RlKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBkcm9TTEEoKTogRGF0YVJlcXVlc3RPdXRwdXRTTEEgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIGlmICh0aGlzLl90YXJnZXQgJiYgdGhpcy5fZmVlcykge1xyXG4gICAgICAgICAgICBjb25zdCBtaW5Db25zZW5zdXNQZXJjZW50YWdlID0gNTFcclxuICAgICAgICAgICAgY29uc3Qgd2l0bmVzc2VzID0gKFxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPT09ICdvYmplY3QnXHJcbiAgICAgICAgICAgICAgICAgICAgPyBPYmplY3Qua2V5cyh0aGlzLl90YXJnZXQud2l0bmVzc2VzKS5sZW5ndGggXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl90YXJnZXQud2l0bmVzc2VzIHx8IDBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgY29tbWl0QW5kUmV2ZWFsRmVlID0gdGhpcy5fZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKHRoaXMuX2ZlZXMsIHdpdG5lc3NlcylcclxuICAgICAgICAgICAgY29uc3Qgd2l0bmVzc1Jld2FyZCA9IHRoaXMuX2ZlZXMyVW5pdGFyeVJld2FyZCh0aGlzLl9mZWVzKSBcclxuICAgICAgICAgICAgY29uc3QgY29sbGF0ZXJhbCA9IHdpdG5lc3NSZXdhcmQgKiBCaWdJbnQoRGF0YVJlcXVlc3RQYXlsb2FkLkNPTExBVEVSQUxfUkFUSU8pXHJcbiAgICAgICAgICAgIGlmIChjb2xsYXRlcmFsID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIFxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0b28gbXVjaCB3aXRuZXNzIGNvbGxhdGVyYWw6ICR7Y29sbGF0ZXJhbC50b1N0cmluZygpfSA+ICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHdpdG5lc3NSZXdhcmQgPiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUilcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogdG9vIG11Y2ggd2l0bmVzcyByZXdhcmQ6ICR7d2l0bmVzc1Jld2FyZC50b1N0cmluZygpfSA+ICR7TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJ9YCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbW1pdEFuZFJldmVhbEZlZSA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiB0b28gbXVjaCBjb21taXQvcmV2ZWFsIGZlZTogJHtjb21taXRBbmRSZXZlYWxGZWUudG9TdHJpbmcoKX0gPiAke051bWJlci5NQVhfU0FGRV9JTlRFR0VSfWApO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgY29sbGF0ZXJhbDogTnVtYmVyKGNvbGxhdGVyYWwpLFxyXG4gICAgICAgICAgICAgICAgY29tbWl0QW5kUmV2ZWFsRmVlOiBOdW1iZXIoY29tbWl0QW5kUmV2ZWFsRmVlKSxcclxuICAgICAgICAgICAgICAgIG1pbkNvbnNlbnN1c1BlcmNlbnRhZ2UsXHJcbiAgICAgICAgICAgICAgICB3aXRuZXNzZXMsXHJcbiAgICAgICAgICAgICAgICB3aXRuZXNzUmV3YXJkOiBOdW1iZXIod2l0bmVzc1Jld2FyZCksXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGhhc2goKTogSGFzaCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgY29uc3QgX2J5dGVjb2RlID0gdGhpcy5ieXRlY29kZVxyXG4gICAgICAgIGlmIChfYnl0ZWNvZGUgJiYgdGhpcy5kcm9IYXNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0b0hleFN0cmluZyhzaGEyNTYoQnVmZmVyLmNvbmNhdChbXHJcbiAgICAgICAgICAgICAgICBmcm9tSGV4U3RyaW5nKHRoaXMuZHJvSGFzaCksXHJcbiAgICAgICAgICAgICAgICBzaGEyNTYoX2J5dGVjb2RlKSxcclxuICAgICAgICAgICAgXSkpKSBhcyBIYXNoXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IG1heFdlaWdodCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBEYXRhUmVxdWVzdFBheWxvYWQuTUFYX1dFSUdIVFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcGFyYW1ldGVyaXplZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLnRlbXBsYXRlXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwcmVwYXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmNvdmVyZWRcclxuICAgICAgICAgICAgICAgICYmIHRoaXMuX2lucHV0cy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAmJiAhIXRoaXMuX3JlcXVlc3RcclxuICAgICAgICAgICAgICAgICYmICEhdGhpcy5fdGFyZ2V0XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmFkQXJncygpOiBEYXRhUmVxdWVzdFRlbXBsYXRlQXJncyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGUgPyB0aGlzLl90YXJnZXQ/LmFyZ3MgOiB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHJhZEhhc2goKTogSGV4U3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0Py5yYWRIYXNoXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCByZXF1ZXN0KCk6IFJhZG9uUmVxdWVzdCB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IENvaW5zIHtcclxuICAgICAgICBpZiAodGhpcy5fdGFyZ2V0ICYmIHRoaXMuX2ZlZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvaW5zLmZyb21QZWRyb3ModGhpcy5fZmVlczJWYWx1ZSh0aGlzLl9mZWVzLCB0aGlzLl90YXJnZXQud2l0bmVzc2VzIHx8IDApKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBDb2lucy56ZXJvKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB3ZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCAmJiB0aGlzLl90YXJnZXQpIHtcclxuICAgICAgICAgICAgY29uc3Qgd2l0bmVzc2VzID0gdHlwZW9mIHRoaXMuX3RhcmdldC53aXRuZXNzZXMgPT09ICdvYmplY3QnID8gT2JqZWN0LmtleXModGhpcy5fdGFyZ2V0LndpdG5lc3NlcykubGVuZ3RoIDogdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyB8fCAwXHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBEUl9UWF9XRUlHSFRfQUxQSEEgKiAodGhpcy5fcmVxdWVzdC53ZWlnaHQoKSArIDggKyAyICsgOCArIDQgKyA4KSxcclxuICAgICAgICAgICAgICAgICAgICArIHRoaXMuX2lucHV0cy5sZW5ndGggKiBUWF9XRUlHSFRfSU5QVVRfU0laRSBcclxuICAgICAgICAgICAgICAgICAgICArIHRoaXMuX291dHB1dHMubGVuZ3RoICogVFhfV0VJR0hUX09VVFBVVF9TSVpFIFxyXG4gICAgICAgICAgICAgICAgICAgICsgd2l0bmVzc2VzICogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJfQ09NTUlUX1RYX1dFSUdIVFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgRFJfUkVWRUFMX1RYX1dFSUdIVCAqIERSX1RYX1dFSUdIVF9CRVRBICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIFRYX1dFSUdIVF9PVVRQVVRfU0laRSAvLyBUT0RPIFYyLjE6IHR5cGVvZiB0aGlzLl90YXJnZXQud2l0bmVzc2VzID09PSAnb2JqZWN0JyA/IFRYX1dFSUdIVF9PVVRQVVRfU0laRSA6IDBcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKyBNYXRoLm1heChEUl9UQUxMWV9UWF9XRUlHSFQsIHRoaXMuX3RhcmdldD8ubWF4UmVzdWx0U2l6ZSB8fCAwKSAqIERSX1RYX1dFSUdIVF9CRVRBXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDBcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGNvbnN1bWVVdHhvcyhsZWRnZXI6IElMZWRnZXIsIHJlbG9hZD86IGJvb2xlYW4pOiBQcm9taXNlPGJpZ2ludD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnRlcm5hbCBlcnJvcjogbm8gaW4tZmxpZ2h0IHBhcmFtcy5gKVxyXG4gICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuX3RhcmdldCBhcyBhbnkpPy5mZWVzIGluc3RhbmNlb2YgQ29pbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5fZmVlcyA9ICh0aGlzLl90YXJnZXQgYXMgYW55KS5mZWVzLnBlZHJvcztcclxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmNvbnN1bWVVdHhvcyhsZWRnZXIsIHJlbG9hZClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jb3ZlcmVkKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fdGFyZ2V0LndpdG5lc3Nlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA9IE1hdGgubWluKFxyXG4gICAgICAgICAgICAgICAgICAgIERhdGFSZXF1ZXN0UGF5bG9hZC5ERUZBVUxUX1dJVE5FU1NFUywgXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbGVkZ2VyLnByb3ZpZGVyLndpdG5lc3NlcygpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGFyZ2V0LndpdG5lc3NlcyA8IDMpIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGFyZ2V0LndpdG5lc3Nlc1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBjYW5ub3QgZXN0aW1hdGUgd2l0bmVzc2VzOiBuZXR3b3JrIG5vdCByZWFkeSBmb3Igd2l0bmVzc2luZy5gKSAgICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLndlaWdodCA+IERhdGFSZXF1ZXN0UGF5bG9hZC5NQVhfV0VJR0hUICogMC44KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsdGEgPSB0aGlzLndlaWdodCAtIERhdGFSZXF1ZXN0UGF5bG9hZC5NQVhfV0VJR0hUICogMC44XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcyAtPSBNYXRoLmNlaWwoZGVsdGEgLyAoRFJfQ09NTUlUX1RYX1dFSUdIVCArIERSX1JFVkVBTF9UWF9XRUlHSFQgKiBUWF9XRUlHSFRfT1VUUFVUX1NJWkUpKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90YXJnZXQud2l0bmVzc2VzIDwgMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGFyZ2V0LndpdG5lc3Nlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogY2Fubm90IGVzdGltYXRlIHdpdG5lc3NlczogcmFkb24gcmVxdWVzdCB0b28gY29tcGxleDogJHt0aGlzLndlaWdodH0gd2VpZ2h0IHVuaXRzYClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcHJpb3JpdHkgPSAodGhpcy5fdGFyZ2V0IGFzIGFueSk/LmZlZXMgYXMgVHJhbnNhY3Rpb25Qcmlvcml0eSB8fCBUcmFuc2FjdGlvblByaW9yaXR5Lk9wdWxlbnRcclxuICAgICAgICAgICAgbGV0IGVzdGltYXRlZEZlZXMgPSBhd2FpdCB0aGlzLl9lc3RpbWF0ZU5ldHdvcmtGZWVzKGxlZGdlci5wcm92aWRlciwgcHJpb3JpdHkpO1xyXG4gICAgICAgICAgICB3aGlsZSAodGhpcy5fZmVlcyA8IGVzdGltYXRlZEZlZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZlZXMgPSBlc3RpbWF0ZWRGZWVzXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRzID0gW11cclxuICAgICAgICAgICAgICAgIHRoaXMuX2lucHV0cyA9IFtdXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3ZlcmVkID0gMG5cclxuICAgICAgICAgICAgICAgIC8vIGNvbnN1bWUgdXR4b3MgYXMgdG8gY292ZXIgZm9yIGVzdGltYXRlZCB2YWx1ZSBhbmQgZXN0aW1hdGVkIGZlZXMgXHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuX2ZlZXMyVmFsdWUodGhpcy5fZmVlcywgdGhpcy5fdGFyZ2V0LndpdG5lc3NlcylcclxuICAgICAgICAgICAgICAgIGNvbnN0IHV0eG9zID0gYXdhaXQgbGVkZ2VyLnNlbGVjdFV0eG9zKHsgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IENvaW5zLmZyb21QZWRyb3ModmFsdWUgKyB0aGlzLl9mZWVzIC0gdGhpcy5fY292ZXJlZCksIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbG9hZCxcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3ZlcmVkICs9IHV0eG9zLm1hcCh1dHhvID0+IEJpZ0ludCh1dHhvLnZhbHVlKSkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3VyciwgMG4pXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnB1dHMucHVzaCguLi51dHhvcylcclxuICAgICAgICAgICAgICAgIGxlZGdlci5jb25zdW1lVXR4b3MoLi4udXR4b3MpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2UgPSB0aGlzLl9jb3ZlcmVkIC0gKHZhbHVlICsgdGhpcy5fZmVlcylcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFuZ2UgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZU91dHB1dHMoeyB2YWx1ZTogdGhpcy5fY2hhbmdlIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgZXN0aW1hdGVkRmVlcyA9IGF3YWl0IHRoaXMuX2VzdGltYXRlTmV0d29ya0ZlZXMobGVkZ2VyLnByb3ZpZGVyLCBwcmlvcml0eSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaW5zdWZmaWNpZW50IGZ1bmRzIC4uLlxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbnRvUmVjZWlwdCh0YXJnZXQ6IERhdGFSZXF1ZXN0UGFyYW1zKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkcm9IYXNoOiB0aGlzLmRyb0hhc2gsXHJcbiAgICAgICAgICAgIHJhZEFyZ3M6IHRoaXMucmFkQXJncyxcclxuICAgICAgICAgICAgcmFkSGFzaDogdGhpcy5yYWRIYXNoLFxyXG4gICAgICAgICAgICB3aXRuZXNzZXM6IHRhcmdldC53aXRuZXNzZXMsXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmVwYXJlT3V0cHV0cyhjaGFuZ2U/OiB7IHZhbHVlOiBiaWdpbnQgfSk6IGFueSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZT8udmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBraDogdGhpcy5faW5wdXRzWzBdLnNpZ25lcixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBjaGFuZ2UudmFsdWUsXHJcbiAgICAgICAgICAgICAgICB0aW1lX2xvY2s6IDAsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldFRhcmdldCh0YXJnZXQ6IERhdGFSZXF1ZXN0UGFyYW1zKTogYW55IHtcclxuICAgICAgICB0aGlzLl9jaGFuZ2UgPSAwblxyXG4gICAgICAgIHRoaXMuX2NvdmVyZWQgPSAwblxyXG4gICAgICAgIHRoaXMuX2ZlZXMgPSAwblxyXG4gICAgICAgIHRoaXMuX2lucHV0cyA9IFtdXHJcbiAgICAgICAgdGhpcy5fb3V0cHV0cyA9IFtdXHJcbiAgICAgICAgdGhpcy5fdGFyZ2V0ID0gdGFyZ2V0XHJcbiAgICAgICAgaWYgKHRoaXMuZHJvU0xBPy5jb2xsYXRlcmFsICYmIHRoaXMuZHJvU0xBLmNvbGxhdGVyYWwgPCBEYXRhUmVxdWVzdFBheWxvYWQuTUlOX0NPTExBVEVSQUwpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcclxuICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHdpdG5lc3NpbmcgY29sbGF0ZXJhbCBiZWxvdyBtaW5pbXVtOiAke1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvU0xBLmNvbGxhdGVyYWxcclxuICAgICAgICAgICAgICAgIH0gPCAke1xyXG4gICAgICAgICAgICAgICAgICAgIERhdGFSZXF1ZXN0UGF5bG9hZC5NSU5fQ09MTEFURVJBTFxyXG4gICAgICAgICAgICAgICAgfWBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJncyA9IHRhcmdldD8uYXJnc1xyXG4gICAgICAgICAgICBpZiAoYXJncyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IG5vIHRlbXBsYXRlIGFyZ3Mgd2VyZSBwYXNzZWQuYClcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJncyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSB0aGlzLnRlbXBsYXRlLmJ1aWxkUmFkb25SZXF1ZXN0KFthcmdzXSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSB0aGlzLnRlbXBsYXRlLmJ1aWxkUmFkb25SZXF1ZXN0KGFyZ3MpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX3ByaW9yaXRpZXNcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9KU09OKGh1bWFuaXplID0gZmFsc2UpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IGRyb1NMQSA9IHRoaXMuZHJvU0xBICAgICAgICBcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpbnB1dHM6IHRoaXMuaW5wdXRzXHJcbiAgICAgICAgICAgICAgICAubWFwKHV0eG8gPT4gKHsgb3V0cHV0X3BvaW50ZXI6IHV0eG8ub3V0cHV0X3BvaW50ZXIgfSkpLFxyXG4gICAgICAgICAgICBvdXRwdXRzOiB0aGlzLm91dHB1dHMubWFwKHZ0byA9PiAoeyBcclxuICAgICAgICAgICAgICAgIHBraDogdnRvLnBraCxcclxuICAgICAgICAgICAgICAgIHRpbWVfbG9jazogdnRvLnRpbWVfbG9jayxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB2dG8udmFsdWUudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICBkcl9vdXRwdXQ6IHtcclxuICAgICAgICAgICAgICAgIC4uLih0aGlzLl9yZXF1ZXN0ID8geyBkYXRhX3JlcXVlc3Q6IHRoaXMuX3JlcXVlc3QudG9KU09OKGh1bWFuaXplKSB9IDoge30pLFxyXG4gICAgICAgICAgICAgICAgY29tbWl0X2FuZF9yZXZlYWxfZmVlOiBkcm9TTEE/LmNvbW1pdEFuZFJldmVhbEZlZSxcclxuICAgICAgICAgICAgICAgIG1pbl9jb25zZW5zdXNfcGVyY2VudGFnZTogZHJvU0xBPy5taW5Db25zZW5zdXNQZXJjZW50YWdlLFxyXG4gICAgICAgICAgICAgICAgd2l0bmVzc2VzOiBkcm9TTEE/LndpdG5lc3NlcyxcclxuICAgICAgICAgICAgICAgIHdpdG5lc3NfcmV3YXJkOiBkcm9TTEE/LndpdG5lc3NSZXdhcmQsXHJcbiAgICAgICAgICAgICAgICBjb2xsYXRlcmFsOiBkcm9TTEE/LmNvbGxhdGVyYWxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gICBcclxuXHJcbiAgICBwdWJsaWMgdG9Qcm90b2J1ZigpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLnByZXBhcmVkICYmIHRoaXMuX3RhcmdldCAmJiB0aGlzLl9yZXF1ZXN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7ICAgIFxyXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB0aGlzLmlucHV0c1xyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAodXR4byA9PiB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbklkID0gdXR4by5vdXRwdXRfcG9pbnRlci5zcGxpdCgnOicpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dEluZGV4ID0gcGFyc2VJbnQodXR4by5vdXRwdXRfcG9pbnRlci5zcGxpdCgnOicpWzFdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UG9pbnRlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQ6IHsgU0hBMjU2OiBBcnJheS5mcm9tKGZyb21IZXhTdHJpbmcodHJhbnNhY3Rpb25JZCkpIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKG91dHB1dEluZGV4ID4gMCA/IHsgb3V0cHV0SW5kZXggfSA6IHt9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIG91dHB1dHM6IHRoaXMub3V0cHV0cy5tYXAodnRvID0+ICh7IFxyXG4gICAgICAgICAgICAgICAgICAgIHBraDogeyBoYXNoOiBBcnJheS5mcm9tKFB1YmxpY0tleUhhc2guZnJvbUJlY2gzMih2dG8ucGtoKS50b0J5dGVzMjAoKSksIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IExvbmcuZnJvbVZhbHVlKHZ0by52YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uKHZ0by50aW1lX2xvY2sgPiAwID8geyB0aW1lTG9jazogdnRvLnRpbWVfbG9jayB9IDoge30pLFxyXG4gICAgICAgICAgICAgICAgfSkpLFxyXG4gICAgICAgICAgICAgICAgZHJPdXRwdXQ6IHRoaXMuX3RvRHJPdXRwdXRQcm90b2J1ZigpLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0ZVRhcmdldCh0YXJnZXQ/OiBhbnkpOiBEYXRhUmVxdWVzdFBhcmFtcyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGhpcy5fY2xlYW5UYXJnZXRFeHRyYXModGFyZ2V0KVxyXG4gICAgICAgIGlmICh0YXJnZXQgJiYgT2JqZWN0LmtleXModGFyZ2V0KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICghKFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0XHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGFyZ2V0Py5mZWVzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZmVlcyBpbnN0YW5jZW9mIENvaW5zICYmICh0YXJnZXQuZmVlcyBhcyBDb2lucykucGVkcm9zID4gMCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IE9iamVjdC52YWx1ZXMoVHJhbnNhY3Rpb25Qcmlvcml0eSkuaW5jbHVkZXModGFyZ2V0LmZlZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKHRhcmdldD8ud2l0bmVzc2VzIHx8IHRhcmdldD8ud2l0bmVzc2VzID09PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgKCF0aGlzLnRlbXBsYXRlIHx8IHRhcmdldD8uYXJncylcclxuICAgICAgICAgICAgKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0KX1gKVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldD8ud2l0bmVzc2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldC53aXRuZXNzZXMgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBleHBsaWNpdCB3aXRuZXNzaW5nIGNvbW1pdHRlZXMgbm90IHlldCBzdXBwb3J0ZWQ6ICR7dGFyZ2V0LndpdG5lc3Nlc31gKVxyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgIHRhcmdldC53aXRuZXNzZXMgPSBwYXJzZUludCh0YXJnZXQud2l0bmVzc2VzIGFzIHN0cmluZylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0IGFzIERhdGFSZXF1ZXN0UGFyYW1zXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldD86IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModGFyZ2V0KS5maWx0ZXIoKFtrZXksXSkgPT4gW1xyXG4gICAgICAgICAgICAgICAgICAgICdhcmdzJyxcclxuICAgICAgICAgICAgICAgICAgICAnZmVlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ21heFJlc3VsdFNpemUnLFxyXG4gICAgICAgICAgICAgICAgICAgICd3aXRuZXNzZXMnLFxyXG4gICAgICAgICAgICAgICAgXS5pbmNsdWRlcyhrZXkpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBfZXN0aW1hdGVOZXR3b3JrRmVlcyhwcm92aWRlcjogSUpzb25ScGNQcm92aWRlciwgcHJpb3JpdHkgPSBUcmFuc2FjdGlvblByaW9yaXR5Lk1lZGl1bSk6IFByb21pc2U8YmlnaW50PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wcmlvcml0aWVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByaW9yaXRpZXMgPSBhd2FpdCBwcm92aWRlci5wcmlvcml0aWVzKClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEJpZ0ludChNYXRoLmZsb29yKFxyXG4gICAgICAgICAgICB0aGlzLl9wcmlvcml0aWVzW2BkcnRfJHtwcmlvcml0eX1gXS5wcmlvcml0eSAqIChcclxuICAgICAgICAgICAgICAgIHRoaXMuY292ZXJlZCA/IHRoaXMud2VpZ2h0IDogKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2VpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXN0aW1hdGUgd2VpZ2h0IG9mIG9uZSBzaW5nbGUgb3V0cHV0IGluIGNhc2UgdGhlcmUgd2FzIGNoYW5nZSB0byBwYXkgYmFja1xyXG4gICAgICAgICAgICAgICAgICAgICsgVFhfV0VJR0hUX09VVFBVVF9TSVpFIFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9mZWVzMlVuaXRhcnlDb21taXRSZXZlYWxSZXdhcmQoZmVlczogYmlnaW50LCB3aXRuZXNzZXM6IG51bWJlcik6IGJpZ2ludCB7XHJcbiAgICAgICAgcmV0dXJuIGZlZXMgLyBCaWdJbnQod2l0bmVzc2VzKSB8fCAxblxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZmVlczJVbml0YXJ5UmV3YXJkKGZlZXM6IGJpZ2ludCk6IGJpZ2ludCB7XHJcbiAgICAgICAgcmV0dXJuIEJpZ01hdGgubWF4KFxyXG4gICAgICAgICAgICBmZWVzLFxyXG4gICAgICAgICAgICAxbiArIERhdGFSZXF1ZXN0UGF5bG9hZC5NSU5fQ09MTEFURVJBTCAvIEJpZ0ludChEYXRhUmVxdWVzdFBheWxvYWQuQ09MTEFURVJBTF9SQVRJTylcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9mZWVzMlZhbHVlKGZlZXM6IGJpZ2ludCwgd2l0bmVzc2VzOiBudW1iZXIpOiBiaWdpbnQge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIEJpZ0ludCh3aXRuZXNzZXMpICogKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZmVlczJVbml0YXJ5UmV3YXJkKGZlZXMpXHJcbiAgICAgICAgICAgICAgICArIDJuICogdGhpcy5fZmVlczJVbml0YXJ5Q29tbWl0UmV2ZWFsUmV3YXJkKGZlZXMsIHdpdG5lc3NlcylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90b0RyT3V0cHV0UHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5kcm9TTEEsXHJcbiAgICAgICAgICAgICAgICBkYXRhUmVxdWVzdDogdGhpcy5fcmVxdWVzdC50b1Byb3RvYnVmKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { HexString, IJsonRpcProvider, Network } from "../../types";
|
|
2
|
+
import { TransactionPayloadMultiSig } from "../payloads";
|
|
3
|
+
import { Coins, PublicKeyHashString, TransactionParams, TransactionPriority } from "../types";
|
|
4
|
+
export type StakeDepositParams = TransactionParams & {
|
|
5
|
+
authorization: HexString;
|
|
6
|
+
value: Coins;
|
|
7
|
+
withdrawer: PublicKeyHashString;
|
|
8
|
+
};
|
|
9
|
+
export declare class StakePayload extends TransactionPayloadMultiSig<StakeDepositParams> {
|
|
10
|
+
static MAX_WEIGHT: number;
|
|
11
|
+
static MIN_VALUE: number;
|
|
12
|
+
constructor(protoTypeName: string, specs?: any);
|
|
13
|
+
get maxWeight(): number;
|
|
14
|
+
get prepared(): boolean;
|
|
15
|
+
get value(): Coins;
|
|
16
|
+
get weight(): number;
|
|
17
|
+
intoReceipt(target: StakeDepositParams, network?: Network): {
|
|
18
|
+
authorization: string;
|
|
19
|
+
withdrawer: string;
|
|
20
|
+
validator: string;
|
|
21
|
+
};
|
|
22
|
+
toJSON(_humanize?: boolean, network?: Network): any;
|
|
23
|
+
toProtobuf(): any;
|
|
24
|
+
validateTarget(target?: any): StakeDepositParams | undefined;
|
|
25
|
+
protected _cleanTargetExtras(target?: any): any;
|
|
26
|
+
protected _estimateNetworkFees(provider: IJsonRpcProvider, priority?: TransactionPriority): Promise<bigint>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=StakePayload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StakePayload.d.ts","sourceRoot":"","sources":["../../../../../src/lib/crypto/payloads/StakePayload.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAElE,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EACH,KAAK,EAGL,mBAAmB,EAEnB,iBAAiB,EACjB,mBAAmB,EACtB,MAAM,UAAU,CAAA;AAEjB,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACjD,aAAa,EAAE,SAAS,CAAC;IACzB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,mBAAmB,CAAC;CACnC,CAAA;AAMD,qBAAa,YAAa,SAAQ,0BAA0B,CAAC,kBAAkB,CAAC;IAE5E,OAAc,UAAU,SAAS;IACjC,OAAc,SAAS,SAAmB;gBAE7B,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG;IAI/C,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,QAAQ,IAAI,OAAO,CAM7B;IAED,IAAW,KAAK,IAAI,KAAK,CAExB;IAED,IAAW,MAAM,IAAI,MAAM,CAM1B;IAEM,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,OAAO;;;;;IAQzD,MAAM,CAAC,SAAS,UAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,GAAG;IA6BjD,UAAU,IAAI,GAAG;IAoCjB,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,kBAAkB,GAAG,SAAS;IA2CnE,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG;cAa/B,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,sBAA6B,GAAG,OAAO,CAAC,MAAM,CAAC;CAgB3H"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StakePayload = void 0;
|
|
4
|
+
const Long = require("long");
|
|
5
|
+
const helpers_1 = require("../../../bin/helpers");
|
|
6
|
+
const payloads_1 = require("../payloads");
|
|
7
|
+
const types_1 = require("../types");
|
|
8
|
+
const TX_WEIGHT_BASE = 105;
|
|
9
|
+
const TX_WEIGHT_INPUT_SIZE = 133;
|
|
10
|
+
const TX_WEIGHT_OUTPUT_SIZE = 36;
|
|
11
|
+
class StakePayload extends payloads_1.TransactionPayloadMultiSig {
|
|
12
|
+
constructor(protoTypeName, specs) {
|
|
13
|
+
super(protoTypeName, specs);
|
|
14
|
+
}
|
|
15
|
+
get maxWeight() {
|
|
16
|
+
return StakePayload.MAX_WEIGHT;
|
|
17
|
+
}
|
|
18
|
+
get prepared() {
|
|
19
|
+
return (!!this._target
|
|
20
|
+
&& this._covered >= this._target.value.pedros
|
|
21
|
+
&& this._inputs.length > 0);
|
|
22
|
+
}
|
|
23
|
+
get value() {
|
|
24
|
+
return this._target?.value || types_1.Coins.zero();
|
|
25
|
+
}
|
|
26
|
+
get weight() {
|
|
27
|
+
return (TX_WEIGHT_BASE
|
|
28
|
+
+ this._inputs.length * TX_WEIGHT_INPUT_SIZE
|
|
29
|
+
+ this._outputs.length * TX_WEIGHT_OUTPUT_SIZE);
|
|
30
|
+
}
|
|
31
|
+
intoReceipt(target, network) {
|
|
32
|
+
return {
|
|
33
|
+
authorization: target.authorization,
|
|
34
|
+
withdrawer: target.withdrawer,
|
|
35
|
+
validator: types_1.PublicKeyHash.fromHexString(target.authorization.substring(0, 40)).toBech32(network),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
toJSON(_humanize = false, network) {
|
|
39
|
+
return {
|
|
40
|
+
inputs: this.inputs
|
|
41
|
+
.map(utxo => {
|
|
42
|
+
return { output_pointer: utxo.output_pointer };
|
|
43
|
+
}),
|
|
44
|
+
...(this._target ? { output: {
|
|
45
|
+
authorization: types_1.RecoverableSignature.from(this._target.authorization.substring(40), types_1.PublicKeyHash.fromBech32(this._target.withdrawer).toBytes32()).toKeyedSignature(),
|
|
46
|
+
key: {
|
|
47
|
+
validator: types_1.PublicKeyHash.fromHexString(this._target.authorization.substring(0, 40)).toBech32(network),
|
|
48
|
+
withdrawer: this._target.withdrawer,
|
|
49
|
+
},
|
|
50
|
+
value: this._target.value.pedros.toString(),
|
|
51
|
+
} } : {}),
|
|
52
|
+
...(this.outputs.length > 0 ? { change: {
|
|
53
|
+
pkh: this.outputs[0].pkh,
|
|
54
|
+
value: this.outputs[0].value.toString(),
|
|
55
|
+
time_lock: 0,
|
|
56
|
+
} } : {}),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
toProtobuf() {
|
|
60
|
+
if (this.prepared && this._target) {
|
|
61
|
+
return {
|
|
62
|
+
inputs: this.inputs
|
|
63
|
+
.map(utxo => {
|
|
64
|
+
const transactionId = utxo.output_pointer.split(':')[0];
|
|
65
|
+
const outputIndex = parseInt(utxo.output_pointer.split(':')[1]);
|
|
66
|
+
return {
|
|
67
|
+
outputPointer: {
|
|
68
|
+
transactionId: { SHA256: Array.from((0, helpers_1.fromHexString)(transactionId)) },
|
|
69
|
+
...(outputIndex > 0 ? { outputIndex } : {}),
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}),
|
|
73
|
+
output: {
|
|
74
|
+
authorization: types_1.RecoverableSignature.from(this._target.authorization.substring(40), types_1.PublicKeyHash.fromBech32(this._target.withdrawer).toBytes32()).toProtobuf(),
|
|
75
|
+
key: {
|
|
76
|
+
validator: { hash: Array.from(types_1.PublicKeyHash.fromHexString(this._target.authorization.substring(0, 40)).toBytes20()) },
|
|
77
|
+
withdrawer: { hash: Array.from(types_1.PublicKeyHash.fromBech32(this._target.withdrawer).toBytes20()) },
|
|
78
|
+
},
|
|
79
|
+
value: Long.fromValue(this._target.value.pedros),
|
|
80
|
+
},
|
|
81
|
+
...(this._outputs.length > 0 ? { change: {
|
|
82
|
+
pkh: { hash: Array.from(types_1.PublicKeyHash.fromBech32(this.outputs[0].pkh).toBytes20()) },
|
|
83
|
+
value: Long.fromValue(this.outputs[0].value.toString()),
|
|
84
|
+
// timeLock: 0,
|
|
85
|
+
} } : { change: { pkh: { hash: Array(20).fill(0) } } }),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
validateTarget(target) {
|
|
90
|
+
target = this._cleanTargetExtras(target);
|
|
91
|
+
if (target && Object.keys(target).length > 0) {
|
|
92
|
+
if (!(target
|
|
93
|
+
&& target?.authorization
|
|
94
|
+
&& (!target?.fees
|
|
95
|
+
|| (target.fees instanceof types_1.Coins && target.fees.pedros > 0
|
|
96
|
+
|| Object.values(types_1.TransactionPriority).includes(target.fees)))
|
|
97
|
+
&& target?.value && target.value.pedros > 0
|
|
98
|
+
&& target?.withdrawer)) {
|
|
99
|
+
throw new TypeError(`${this.constructor.name}: invalid options: ${JSON.stringify(target)}`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
if (target.value.pedros < StakePayload.MIN_VALUE) {
|
|
103
|
+
throw new TypeError(`${this.constructor.name}: value below minimum stake: ${target.value.wits} < ${types_1.Coins.fromNanowits(BigInt(StakePayload.MIN_VALUE)).wits} $WIT`);
|
|
104
|
+
}
|
|
105
|
+
const pubKey = types_1.PublicKey.recoverFrom(target.authorization.substring(40), types_1.PublicKeyHash.fromBech32(target.withdrawer).toBytes32());
|
|
106
|
+
if (pubKey.hash().toHexString() !== target.authorization.substring(0, 40)) {
|
|
107
|
+
throw new TypeError(`${this.constructor.name}: authorization code not valid for withdrawer ${target.withdrawer}.`);
|
|
108
|
+
}
|
|
109
|
+
return target;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
_cleanTargetExtras(target) {
|
|
117
|
+
if (target) {
|
|
118
|
+
return Object.fromEntries(Object.entries(target).filter(([key,]) => [
|
|
119
|
+
'authorization',
|
|
120
|
+
'fees',
|
|
121
|
+
'value',
|
|
122
|
+
'withdrawer',
|
|
123
|
+
].includes(key)));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async _estimateNetworkFees(provider, priority = types_1.TransactionPriority.Medium) {
|
|
127
|
+
if (!this._priorities) {
|
|
128
|
+
this._priorities = await provider.priorities();
|
|
129
|
+
}
|
|
130
|
+
return BigInt(Math.floor(
|
|
131
|
+
// todo: replace `vtt_` for `st_`
|
|
132
|
+
this._priorities[`vtt_${priority}`].priority * (this.covered ? this.weight : this.weight
|
|
133
|
+
// estimate one more input as to cover for network fees
|
|
134
|
+
+ TX_WEIGHT_INPUT_SIZE
|
|
135
|
+
// estimate weight of one single output in case there was change to pay back
|
|
136
|
+
+ TX_WEIGHT_OUTPUT_SIZE)));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.StakePayload = StakePayload;
|
|
140
|
+
StakePayload.MAX_WEIGHT = 10000; // 10,000
|
|
141
|
+
StakePayload.MIN_VALUE = 10000 * 10 ** 9; // 10,000.00 $WIT
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3Rha2VQYXlsb2FkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jcnlwdG8vcGF5bG9hZHMvU3Rha2VQYXlsb2FkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUU1QixrREFBb0Q7QUFJcEQsMENBQXdEO0FBQ3hELG9DQVFpQjtBQVFqQixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFDM0IsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFFakMsTUFBYSxZQUFhLFNBQVEscUNBQThDO0lBSzVFLFlBQWEsYUFBcUIsRUFBRSxLQUFXO1FBQzNDLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVELElBQVcsU0FBUztRQUNoQixPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUE7SUFDbEMsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sQ0FDSCxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU87ZUFDUCxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07ZUFDMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNqQyxDQUFBO0lBQ0wsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksYUFBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzlDLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLENBQ0gsY0FBYztjQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLG9CQUFvQjtjQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FDckQsQ0FBQztJQUNOLENB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QUFDO0lBQ0wsQ0FBQztJQUVTLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxRQUEwQixFQUFFLFFBQVEsR0FBRywyQkFBbUIsQ0FBQyxNQUFNO1FBQ2xHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNsRCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUs7UUFDcEIsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUNwQyx1REFBdUQ7Y0FDckQsb0JBQW9CO1lBQ3RCLDRFQUE0RTtjQUMxRSxxQkFBcUIsQ0FDOUIsQ0FDSixDQUFDLENBQUM7SUFDUCxDQUFDOztBQWhMTCxvQ0FrTEM7QUFoTGlCLHVCQUFVLEdBQUcsS0FBSyxDQUFDLENBQVUsU0FBUztBQUN0QyxzQkFBUyxHQUFHLEtBQUssR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTG9uZyA9IHJlcXVpcmUoXCJsb25nXCIpXHJcblxyXG5pbXBvcnQgeyBmcm9tSGV4U3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL2Jpbi9oZWxwZXJzXCJcclxuXHJcbmltcG9ydCB7IEhleFN0cmluZywgSUpzb25ScGNQcm92aWRlciwgTmV0d29yayB9IGZyb20gXCIuLi8uLi90eXBlc1wiXHJcblxyXG5pbXBvcnQgeyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZyB9IGZyb20gXCIuLi9wYXlsb2Fkc1wiXHJcbmltcG9ydCB7IFxyXG4gICAgQ29pbnMsXHJcbiAgICBQdWJsaWNLZXksIFxyXG4gICAgUHVibGljS2V5SGFzaCwgXHJcbiAgICBQdWJsaWNLZXlIYXNoU3RyaW5nLCBcclxuICAgIFJlY292ZXJhYmxlU2lnbmF0dXJlLCBcclxuICAgIFRyYW5zYWN0aW9uUGFyYW1zLCBcclxuICAgIFRyYW5zYWN0aW9uUHJpb3JpdHksXHJcbn0gZnJvbSBcIi4uL3R5cGVzXCJcclxuXHJcbmV4cG9ydCB0eXBlIFN0YWtlRGVwb3NpdFBhcmFtcyA9IFRyYW5zYWN0aW9uUGFyYW1zICYge1xyXG4gICAgYXV0aG9yaXphdGlvbjogSGV4U3RyaW5nLFxyXG4gICAgdmFsdWU6IENvaW5zLFxyXG4gICAgd2l0aGRyYXdlcjogUHVibGljS2V5SGFzaFN0cmluZyxcclxufVxyXG5cclxuY29uc3QgVFhfV0VJR0hUX0JBU0UgPSAxMDU7XHJcbmNvbnN0IFRYX1dFSUdIVF9JTlBVVF9TSVpFID0gMTMzO1xyXG5jb25zdCBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgPSAzNjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTdGFrZVBheWxvYWQgZXh0ZW5kcyBUcmFuc2FjdGlvblBheWxvYWRNdWx0aVNpZzxTdGFrZURlcG9zaXRQYXJhbXM+IHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIE1BWF9XRUlHSFQgPSAxMDAwMDsgICAgICAgICAgLy8gMTAsMDAwXHJcbiAgICBwdWJsaWMgc3RhdGljIE1JTl9WQUxVRSA9IDEwMDAwICogMTAgKiogOTsgLy8gMTAsMDAwLjAwICRXSVRcclxuXHJcbiAgICBjb25zdHJ1Y3RvciAocHJvdG9UeXBlTmFtZTogc3RyaW5nLCBzcGVjcz86IGFueSkge1xyXG4gICAgICAgIHN1cGVyKHByb3RvVHlwZU5hbWUsIHNwZWNzKVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgbWF4V2VpZ2h0KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIFN0YWtlUGF5bG9hZC5NQVhfV0VJR0hUXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBwcmVwYXJlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAhIXRoaXMuX3RhcmdldFxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5fY292ZXJlZCA+PSB0aGlzLl90YXJnZXQudmFsdWUucGVkcm9zIFxyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5faW5wdXRzLmxlbmd0aCA+IDBcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBDb2lucyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldD8udmFsdWUgfHwgQ29pbnMuemVybygpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB3ZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBUWF9XRUlHSFRfQkFTRVxyXG4gICAgICAgICAgICAgICAgKyB0aGlzLl9pbnB1dHMubGVuZ3RoICogVFhfV0VJR0hUX0lOUFVUX1NJWkUgXHJcbiAgICAgICAgICAgICAgICArIHRoaXMuX291dHB1dHMubGVuZ3RoICogVFhfV0VJR0hUX09VVFBVVF9TSVpFIFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGludG9SZWNlaXB0KHRhcmdldDogU3Rha2VEZXBvc2l0UGFyYW1zLCBuZXR3b3JrPzogTmV0d29yaykge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml6YXRpb246IHRhcmdldC5hdXRob3JpemF0aW9uLFxyXG4gICAgICAgICAgICB3aXRoZHJhd2VyOiB0YXJnZXQud2l0aGRyYXdlcixcclxuICAgICAgICAgICAgdmFsaWRhdG9yOiBQdWJsaWNLZXlIYXNoLmZyb21IZXhTdHJpbmcodGFyZ2V0LmF1dGhvcml6YXRpb24uc3Vic3RyaW5nKDAsIDQwKSkudG9CZWNoMzIobmV0d29yayksXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b0pTT04oX2h1bWFuaXplID0gZmFsc2UsIG5ldHdvcms/OiBOZXR3b3JrKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpbnB1dHM6IHRoaXMuaW5wdXRzXHJcbiAgICAgICAgICAgICAgICAubWFwKHV0eG8gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG91dHB1dF9wb2ludGVyOiB1dHhvLm91dHB1dF9wb2ludGVyIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAuLi4oXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXQgPyB7IG91dHB1dDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IFJlY292ZXJhYmxlU2lnbmF0dXJlLmZyb20oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXJnZXQuYXV0aG9yaXphdGlvbi5zdWJzdHJpbmcoNDApLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY0tleUhhc2guZnJvbUJlY2gzMih0aGlzLl90YXJnZXQud2l0aGRyYXdlcikudG9CeXRlczMyKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKS50b0tleWVkU2lnbmF0dXJlKCksXHJcbiAgICAgICAgICAgICAgICAgICAga2V5OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogUHVibGljS2V5SGFzaC5mcm9tSGV4U3RyaW5nKHRoaXMuX3RhcmdldC5hdXRob3JpemF0aW9uLnN1YnN0cmluZygwLCA0MCkpLnRvQmVjaDMyKG5ldHdvcmspLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoZHJhd2VyOiB0aGlzLl90YXJnZXQud2l0aGRyYXdlcixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl90YXJnZXQudmFsdWUucGVkcm9zLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB9fSA6IHt9XHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIC4uLihcclxuICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0cy5sZW5ndGggPiAwID8geyBjaGFuZ2U6IHtcclxuICAgICAgICAgICAgICAgICAgICBwa2g6IHRoaXMub3V0cHV0c1swXS5wa2gsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMub3V0cHV0c1swXS52YWx1ZS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWVfbG9jazogMCxcclxuICAgICAgICAgICAgICAgIH19IDoge31cclxuICAgICAgICAgICAgKSxcclxuICAgICAgICB9XHJcbiAgICB9ICAgXHJcblxyXG4gICAgcHVibGljIHRvUHJvdG9idWYoKTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5wcmVwYXJlZCAmJiB0aGlzLl90YXJnZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgICAgXHJcbiAgICAgICAgICAgICAgICBpbnB1dHM6IHRoaXMuaW5wdXRzXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcCh1dHhvID0+IHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSB1dHhvLm91dHB1dF9wb2ludGVyLnNwbGl0KCc6JylbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0SW5kZXggPSBwYXJzZUludCh1dHhvLm91dHB1dF9wb2ludGVyLnNwbGl0KCc6JylbMV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRQb2ludGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25JZDogeyBTSEEyNTY6IEFycmF5LmZyb20oZnJvbUhleFN0cmluZyh0cmFuc2FjdGlvbklkKSkgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4ob3V0cHV0SW5kZXggPiAwID8geyBvdXRwdXRJbmRleCB9IDoge30pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgb3V0cHV0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogUmVjb3ZlcmFibGVTaWduYXR1cmUuZnJvbShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RhcmdldC5hdXRob3JpemF0aW9uLnN1YnN0cmluZyg0MCksIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljS2V5SGFzaC5mcm9tQmVjaDMyKHRoaXMuX3RhcmdldC53aXRoZHJhd2VyKS50b0J5dGVzMzIoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLnRvUHJvdG9idWYoKSxcclxuICAgICAgICAgICAgICAgICAgICBrZXk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiB7IGhhc2g6IEFycmF5LmZyb20oUHVibGljS2V5SGFzaC5mcm9tSGV4U3RyaW5nKHRoaXMuX3RhcmdldC5hdXRob3JpemF0aW9uLnN1YnN0cmluZygwLCA0MCkpLnRvQnl0ZXMyMCgpKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoZHJhd2VyOiB7IGhhc2g6IEFycmF5LmZyb20oUHVibGljS2V5SGFzaC5mcm9tQmVjaDMyKHRoaXMuX3RhcmdldC53aXRoZHJhd2VyKS50b0J5dGVzMjAoKSkgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBMb25nLmZyb21WYWx1ZSh0aGlzLl90YXJnZXQudmFsdWUucGVkcm9zKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAuLi4oXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3V0cHV0cy5sZW5ndGggPiAwID8geyBjaGFuZ2UgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBraDogeyBoYXNoOiBBcnJheS5mcm9tKFB1YmxpY0tleUhhc2guZnJvbUJlY2gzMih0aGlzLm91dHB1dHNbMF0ucGtoKS50b0J5dGVzMjAoKSkgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IExvbmcuZnJvbVZhbHVlKHRoaXMub3V0cHV0c1swXS52YWx1ZS50b1N0cmluZygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGltZUxvY2s6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgfX0gOiB7IGNoYW5nZTogeyBwa2g6IHsgaGFzaDogQXJyYXkoMjApLmZpbGwoMCkgfX19XHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0ZVRhcmdldCh0YXJnZXQ/OiBhbnkpOiBTdGFrZURlcG9zaXRQYXJhbXMgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHRhcmdldCA9IHRoaXMuX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldClcclxuICAgICAgICBpZiAodGFyZ2V0ICYmIE9iamVjdC5rZXlzKHRhcmdldCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoIShcclxuICAgICAgICAgICAgICAgIHRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRhcmdldD8uYXV0aG9yaXphdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICYmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXRhcmdldD8uZmVlcyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmZlZXMgaW5zdGFuY2VvZiBDb2lucyAmJiAodGFyZ2V0LmZlZXMgYXMgQ29pbnMpLnBlZHJvcyA+IDAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBPYmplY3QudmFsdWVzKFRyYW5zYWN0aW9uUHJpb3JpdHkpLmluY2x1ZGVzKHRhcmdldC5mZWVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRhcmdldD8udmFsdWUgJiYgKHRhcmdldC52YWx1ZSBhcyBDb2lucykucGVkcm9zID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRhcmdldD8ud2l0aGRyYXdlclxyXG4gICAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludmFsaWQgb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeSh0YXJnZXQpfWApXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHRhcmdldC52YWx1ZSBhcyBDb2lucykucGVkcm9zIDwgU3Rha2VQYXlsb2FkLk1JTl9WQUxVRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IHZhbHVlIGJlbG93IG1pbmltdW0gc3Rha2U6ICR7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0LnZhbHVlIGFzIENvaW5zKS53aXRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPCAke1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29pbnMuZnJvbU5hbm93aXRzKEJpZ0ludChTdGFrZVBheWxvYWQuTUlOX1ZBTFVFKSkud2l0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ICRXSVRgXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHB1YktleSA9IFB1YmxpY0tleS5yZWNvdmVyRnJvbShcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXV0aG9yaXphdGlvbi5zdWJzdHJpbmcoNDApLFxyXG4gICAgICAgICAgICAgICAgICAgIFB1YmxpY0tleUhhc2guZnJvbUJlY2gzMih0YXJnZXQud2l0aGRyYXdlcikudG9CeXRlczMyKClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGlmIChwdWJLZXkuaGFzaCgpLnRvSGV4U3RyaW5nKCkgIT09IHRhcmdldC5hdXRob3JpemF0aW9uLnN1YnN0cmluZygwLCA0MCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBhdXRob3JpemF0aW9uIGNvZGUgbm90IHZhbGlkIGZvciB3aXRoZHJhd2VyICR7dGFyZ2V0LndpdGhkcmF3ZXJ9LmBcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0IGFzIFN0YWtlRGVwb3NpdFBhcmFtc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldD86IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModGFyZ2V0KS5maWx0ZXIoKFtrZXksXSkgPT4gW1xyXG4gICAgICAgICAgICAgICAgICAgICdhdXRob3JpemF0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgICAnZmVlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAnd2l0aGRyYXdlcicsXHJcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKGtleSkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIF9lc3RpbWF0ZU5ldHdvcmtGZWVzKHByb3ZpZGVyOiBJSnNvblJwY1Byb3ZpZGVyLCBwcmlvcml0eSA9IFRyYW5zYWN0aW9uUHJpb3JpdHkuTWVkaXVtKTogUHJvbWlzZTxiaWdpbnQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX3ByaW9yaXRpZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5fcHJpb3JpdGllcyA9IGF3YWl0IHByb3ZpZGVyLnByaW9yaXRpZXMoKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gQmlnSW50KE1hdGguZmxvb3IoXHJcbiAgICAgICAgICAgIC8vIHRvZG86IHJlcGxhY2UgYHZ0dF9gIGZvciBgc3RfYFxyXG4gICAgICAgICAgICB0aGlzLl9wcmlvcml0aWVzW2B2dHRfJHtwcmlvcml0eX1gXS5wcmlvcml0eSAqIChcclxuICAgICAgICAgICAgICAgIHRoaXMuY292ZXJlZCA/IHRoaXMud2VpZ2h0IDogdGhpcy53ZWlnaHRcclxuICAgICAgICAgICAgICAgICAgICAvLyBlc3RpbWF0ZSBvbmUgbW9yZSBpbnB1dCBhcyB0byBjb3ZlciBmb3IgbmV0d29yayBmZWVzXHJcbiAgICAgICAgICAgICAgICAgICAgKyBUWF9XRUlHSFRfSU5QVVRfU0laRSBcclxuICAgICAgICAgICAgICAgICAgICAvLyBlc3RpbWF0ZSB3ZWlnaHQgb2Ygb25lIHNpbmdsZSBvdXRwdXQgaW4gY2FzZSB0aGVyZSB3YXMgY2hhbmdlIHRvIHBheSBiYWNrXHJcbiAgICAgICAgICAgICAgICAgICAgKyBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
|