@bitgo/sdk-coin-flrp 1.6.1 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/src/lib/ExportInCTxBuilder.d.ts +5 -13
  2. package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -1
  3. package/dist/src/lib/ExportInCTxBuilder.js +24 -64
  4. package/dist/src/lib/ExportInPTxBuilder.d.ts +8 -26
  5. package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -1
  6. package/dist/src/lib/ExportInPTxBuilder.js +84 -181
  7. package/dist/src/lib/ImportInCTxBuilder.d.ts +7 -20
  8. package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -1
  9. package/dist/src/lib/ImportInCTxBuilder.js +80 -167
  10. package/dist/src/lib/ImportInPTxBuilder.d.ts +28 -13
  11. package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -1
  12. package/dist/src/lib/ImportInPTxBuilder.js +136 -105
  13. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +0 -6
  14. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
  15. package/dist/src/lib/atomicInCTransactionBuilder.js +1 -14
  16. package/dist/src/lib/atomicTransactionBuilder.d.ts +50 -24
  17. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  18. package/dist/src/lib/atomicTransactionBuilder.js +127 -187
  19. package/dist/src/lib/iface.d.ts +31 -0
  20. package/dist/src/lib/iface.d.ts.map +1 -1
  21. package/dist/src/lib/iface.js +9 -2
  22. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +0 -2
  23. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/permissionlessValidatorTxBuilder.js +1 -7
  25. package/dist/src/lib/transaction.d.ts +10 -6
  26. package/dist/src/lib/transaction.d.ts.map +1 -1
  27. package/dist/src/lib/transaction.js +10 -13
  28. package/dist/src/lib/transactionBuilder.d.ts +24 -16
  29. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  30. package/dist/src/lib/transactionBuilder.js +46 -28
  31. package/dist/src/lib/utils.d.ts +31 -2
  32. package/dist/src/lib/utils.d.ts.map +1 -1
  33. package/dist/src/lib/utils.js +71 -1
  34. package/dist/test/resources/account.d.ts +30 -0
  35. package/dist/test/resources/account.d.ts.map +1 -1
  36. package/dist/test/resources/account.js +27 -2
  37. package/dist/test/resources/transactionData/exportInC.d.ts +30 -0
  38. package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -1
  39. package/dist/test/resources/transactionData/exportInC.js +32 -13
  40. package/dist/test/resources/transactionData/exportInP.d.ts +39 -48
  41. package/dist/test/resources/transactionData/exportInP.d.ts.map +1 -1
  42. package/dist/test/resources/transactionData/exportInP.js +70 -109
  43. package/dist/test/resources/transactionData/importInC.d.ts +39 -10
  44. package/dist/test/resources/transactionData/importInC.d.ts.map +1 -1
  45. package/dist/test/resources/transactionData/importInC.js +101 -25
  46. package/dist/test/resources/transactionData/importInP.d.ts +46 -15
  47. package/dist/test/resources/transactionData/importInP.d.ts.map +1 -1
  48. package/dist/test/resources/transactionData/importInP.js +65 -39
  49. package/dist/test/unit/flrp.js +15 -12
  50. package/dist/test/unit/lib/exportInCTxBuilder.js +32 -31
  51. package/dist/test/unit/lib/exportInPTxBuilder.js +112 -246
  52. package/dist/test/unit/lib/importInCTxBuilder.js +157 -353
  53. package/dist/test/unit/lib/importInPTxBuilder.js +227 -222
  54. package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -1
  55. package/dist/test/unit/lib/signFlowTestSuit.js +1 -1
  56. package/dist/test/unit/lib/signatureIndex.d.ts +13 -0
  57. package/dist/test/unit/lib/signatureIndex.d.ts.map +1 -0
  58. package/dist/test/unit/lib/signatureIndex.js +591 -0
  59. package/dist/test/unit/lib/transactionBuilderFactory.js +2 -2
  60. package/dist/test/unit/lib/utils.js +94 -32
  61. package/dist/tsconfig.tsbuildinfo +1 -1
  62. package/package.json +8 -7
@@ -12,23 +12,42 @@ const iface_1 = require("./iface");
12
12
  class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
13
13
  constructor(_coinConfig) {
14
14
  super(_coinConfig);
15
- // For Import INTO P-chain:
16
- // - external chain (source) is C-chain
17
- // - blockchain ID (destination) is P-chain
18
15
  this._externalChainId = utils_1.default.cb58Decode(this.transaction._network.cChainBlockchainID);
19
- // P-chain blockchain ID (from network config - typically all zeros for primary network)
20
16
  this.transaction._blockchainID = Buffer.from(utils_1.default.cb58Decode(this.transaction._network.blockchainID)).toString('hex');
21
17
  }
22
18
  get transactionType() {
23
19
  return sdk_core_1.TransactionType.Import;
24
20
  }
21
+ /**
22
+ * @param {string | string[]} senderPubKey - C-chain address(es) with C- prefix
23
+ * @throws {BuildTransactionError} if any address is not a C-chain address
24
+ */
25
+ fromPubKey(senderPubKey) {
26
+ const pubKeys = Array.isArray(senderPubKey) ? senderPubKey : [senderPubKey];
27
+ const invalidAddress = pubKeys.find((addr) => !addr.startsWith('C-'));
28
+ if (invalidAddress) {
29
+ throw new sdk_core_1.BuildTransactionError(`Invalid fromAddress: expected C-chain address (C-...), got ${invalidAddress}`);
30
+ }
31
+ this.transaction._fromAddresses = pubKeys.map((addr) => utils_1.default.parseAddress(addr));
32
+ return this;
33
+ }
34
+ /**
35
+ * @param {string[]} addresses - Array of P-chain addresses (bech32 format with P- prefix)
36
+ * @throws {BuildTransactionError} if any address is not a P-chain address
37
+ */
38
+ to(addresses) {
39
+ const invalidAddress = addresses.find((addr) => !addr.startsWith('P-'));
40
+ if (invalidAddress) {
41
+ throw new sdk_core_1.BuildTransactionError(`Invalid toAddress: expected P-chain address (P-...), got ${invalidAddress}`);
42
+ }
43
+ this.transaction._to = addresses.map((addr) => utils_1.default.parseAddress(addr));
44
+ return this;
45
+ }
25
46
  initBuilder(tx, rawBytes, parsedCredentials) {
26
47
  const importTx = tx;
27
48
  if (!this.verifyTxType(importTx._type)) {
28
49
  throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
29
50
  }
30
- // The regular change output is the tx output in Import tx.
31
- // It's expected to have only one output with the addresses of the sender.
32
51
  const outputs = importTx.baseTx.outputs;
33
52
  if (outputs.length !== 1) {
34
53
  throw new sdk_core_1.BuildTransactionError('Transaction can have one external output');
@@ -40,38 +59,31 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
40
59
  }
41
60
  const transferOutput = output.output;
42
61
  const outputOwners = transferOutput.outputOwners;
43
- // Set locktime from output
44
62
  this.transaction._locktime = outputOwners.locktime.value();
45
- // Set threshold from output
46
63
  this.transaction._threshold = outputOwners.threshold.value();
47
- // Convert output addresses to buffers and set as fromAddresses
48
64
  this.transaction._fromAddresses = outputOwners.addrs.map((addr) => Buffer.from(addr.toBytes()));
49
- // Set external chain ID from the source chain
50
65
  this._externalChainId = Buffer.from(importTx.sourceChain.toBytes());
51
- // Recover UTXOs from imported inputs
52
- this.transaction._utxos = this.recoverUtxos(importTx.ins);
53
- // Calculate and set fee from input/output difference
66
+ this.transaction._utxos = this.recoverUtxos(importTx.ins, outputOwners.addrs);
54
67
  const totalInputAmount = importTx.ins.reduce((sum, input) => sum + input.amount(), BigInt(0));
55
68
  const outputAmount = transferOutput.amount();
56
69
  const fee = totalInputAmount - outputAmount;
57
70
  this.transaction._fee.fee = fee.toString();
58
- // Use credentials passed from TransactionBuilderFactory (properly extracted using codec)
59
71
  const credentials = parsedCredentials || [];
60
72
  const hasCredentials = credentials.length > 0;
61
- // If there are credentials, store the original bytes to preserve exact format
62
73
  if (rawBytes && hasCredentials) {
63
74
  this.transaction._rawSignedBytes = rawBytes;
64
75
  }
65
- // Create proper UnsignedTx wrapper with credentials
66
- // Match avaxp behavior: dynamic ordering based on addressesIndex from UTXO
67
- // Use centralized methods for credential and AddressMap creation
76
+ this.computeAddressesIndexFromParsed();
68
77
  const txCredentials = credentials.length > 0
69
78
  ? credentials
70
- : this.transaction._utxos.map((utxo) => this.createCredentialForUtxo(utxo, this.transaction._threshold));
71
- // Create AddressMaps based on signature slot order (matching credential order), not sorted addresses
72
- // This matches the approach used in credentials: addressesIndex determines signature order
73
- // AddressMaps should map addresses to signature slots in the same order as credentials
74
- const addressMaps = this.transaction._utxos.map((utxo) => this.createAddressMapForUtxo(utxo, this.transaction._threshold));
79
+ : this.transaction._utxos.map((utxo) => {
80
+ const utxoThreshold = utxo.threshold || this.transaction._threshold;
81
+ return this.createCredentialForUtxo(utxo, utxoThreshold);
82
+ });
83
+ const addressMaps = this.transaction._utxos.map((utxo) => {
84
+ const utxoThreshold = utxo.threshold || this.transaction._threshold;
85
+ return this.createAddressMapForUtxo(utxo, utxoThreshold);
86
+ });
75
87
  const unsignedTx = new flarejs_1.UnsignedTx(importTx, [], new flarejs_1.utils.AddressMaps(addressMaps), txCredentials);
76
88
  this.transaction.setTransaction(unsignedTx);
77
89
  return this;
@@ -83,110 +95,129 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
83
95
  return ImportInPTxBuilder.verifyTxType(txnType);
84
96
  }
85
97
  /**
86
- * Build the import transaction for P-chain
98
+ * Build the import transaction for P-chain (importing FROM C-chain)
87
99
  * @protected
88
100
  */
89
- buildFlareTransaction() {
90
- // if tx has credentials, tx shouldn't change
101
+ async buildFlareTransaction() {
91
102
  if (this.transaction.hasCredentials)
92
103
  return;
93
- const { inputs, credentials, totalAmount } = this.createImportInputs();
94
- // Calculate fee from transaction fee settings
95
- const fee = BigInt(this.transaction.fee.fee);
96
- // Validate that totalAmount is sufficient to cover the fee (matching AVAX validation)
97
- // This ensures we don't create transactions with insufficient funds
98
- if (totalAmount < fee) {
99
- throw new sdk_core_1.BuildTransactionError(`Utxo outputs get ${totalAmount.toString()} and ${fee.toString()} is required`);
100
- }
101
- const outputAmount = totalAmount - fee;
102
- // Create the output for P-chain (TransferableOutput with TransferOutput)
103
- const assetIdBytes = new Uint8Array(Buffer.from(this.transaction._assetId, 'hex'));
104
- // Create OutputOwners with the P-chain addresses (sorted by byte value as per AVAX protocol)
105
- const sortedAddresses = [...this.transaction._fromAddresses].sort((a, b) => Buffer.compare(a, b));
106
- const outputOwners = new flarejs_1.OutputOwners(new flarejs_1.BigIntPr(this.transaction._locktime), new flarejs_1.Int(this.transaction._threshold), sortedAddresses.map((addr) => new flarejs_1.Address(addr)));
107
- const transferOutput = new flarejs_1.TransferOutput(new flarejs_1.BigIntPr(outputAmount), outputOwners);
108
- const output = new flarejs_1.TransferableOutput(new flarejs_1.Id(assetIdBytes), transferOutput);
109
- // Create the BaseTx for the P-chain import transaction
110
- const baseTx = new flarejs_1.avaxSerial.BaseTx(new flarejs_1.Int(this.transaction._networkID), new flarejs_1.Id(Buffer.from(this.transaction._blockchainID, 'hex')), [output], // outputs
111
- [], // inputs (empty for import - inputs come from importedInputs)
112
- new flarejs_1.Bytes(new Uint8Array(0)) // empty memo
113
- );
114
- // Create the P-chain import transaction using pvmSerial.ImportTx
115
- const importTx = new flarejs_1.pvmSerial.ImportTx(baseTx, new flarejs_1.Id(this._externalChainId), // sourceChain (C-chain)
116
- inputs // importedInputs (ins)
117
- );
118
- // Create AddressMaps based on signature slot order (matching credential order), not sorted addresses
119
- // This matches the approach used in credentials: addressesIndex determines signature order
120
- // AddressMaps should map addresses to signature slots in the same order as credentials
121
- // Use centralized method for AddressMap creation
122
- const addressMaps = credentials.map((credential, credIdx) => this.createAddressMapForUtxo(this.transaction._utxos[credIdx], this.transaction._threshold));
123
- // Create unsigned transaction
124
- const unsignedTx = new flarejs_1.UnsignedTx(importTx, [], // Empty UTXOs array
125
- new flarejs_1.utils.AddressMaps(addressMaps), credentials);
126
- this.transaction.setTransaction(unsignedTx);
127
- }
128
- /**
129
- * Create inputs from UTXOs for P-chain import
130
- * @returns inputs, credentials, and total amount
131
- */
132
- createImportInputs() {
133
- const sender = this.transaction._fromAddresses.slice();
134
- if (this.recoverSigner) {
135
- // switch first and last signer
136
- const tmp = sender.pop();
137
- sender.push(sender[0]);
138
- if (tmp) {
139
- sender[0] = tmp;
140
- }
104
+ if (!this.transaction._utxos || this.transaction._utxos.length === 0) {
105
+ throw new sdk_core_1.BuildTransactionError('UTXOs are required');
141
106
  }
142
- let totalAmount = BigInt(0);
143
- const inputs = [];
144
- const credentials = [];
145
- this.transaction._utxos.forEach((utxo) => {
146
- const amount = BigInt(utxo.amount);
147
- totalAmount += amount;
148
- // Create signature indices for threshold
149
- const sigIndices = [];
150
- for (let i = 0; i < this.transaction._threshold; i++) {
151
- sigIndices.push(i);
152
- }
153
- // Use fromNative to create TransferableInput
154
- // fromNative expects cb58-encoded strings for txId and assetId
155
- const txIdCb58 = utxo.txid; // Already cb58 encoded
156
- const assetIdCb58 = utils_1.default.cb58Encode(Buffer.from(this.transaction._assetId, 'hex'));
157
- const transferableInput = flarejs_1.TransferableInput.fromNative(txIdCb58, Number(utxo.outputidx), assetIdCb58, amount, sigIndices);
158
- inputs.push(transferableInput);
159
- // Create credential with empty signatures for slot identification
160
- // Match avaxp behavior: dynamic ordering based on addressesIndex from UTXO
161
- // Use centralized method for credential creation
162
- credentials.push(this.createCredentialForUtxo(utxo, this.transaction._threshold));
107
+ if (!this.transaction._feeState) {
108
+ throw new sdk_core_1.BuildTransactionError('Fee state is required');
109
+ }
110
+ if (!this.transaction._context) {
111
+ throw new sdk_core_1.BuildTransactionError('context is required');
112
+ }
113
+ if (!this.transaction._fromAddresses || this.transaction._fromAddresses.length === 0) {
114
+ throw new sdk_core_1.BuildTransactionError('fromAddresses are required');
115
+ }
116
+ if (!this.transaction._to || this.transaction._to.length === 0) {
117
+ throw new sdk_core_1.BuildTransactionError('toAddresses are required');
118
+ }
119
+ if (!this.transaction._threshold) {
120
+ throw new sdk_core_1.BuildTransactionError('threshold is required');
121
+ }
122
+ if (this.transaction._locktime === undefined) {
123
+ throw new sdk_core_1.BuildTransactionError('locktime is required');
124
+ }
125
+ this.computeAddressesIndex();
126
+ this.validateUtxoAddresses();
127
+ const assetId = utils_1.default.cb58Encode(Buffer.from(this.transaction._assetId, 'hex'));
128
+ const nativeUtxos = utils_1.default.decodedToUtxos(this.transaction._utxos, assetId);
129
+ const totalUtxoAmount = nativeUtxos.reduce((sum, utxo) => {
130
+ const output = utxo.output;
131
+ return sum + output.amount();
132
+ }, BigInt(0));
133
+ if (totalUtxoAmount === BigInt(0)) {
134
+ throw new sdk_core_1.BuildTransactionError('UTXOs have zero total balance');
135
+ }
136
+ const toAddresses = this.transaction._to.map((addr) => Buffer.from(addr));
137
+ const fromAddresses = this.transaction._fromAddresses.map((addr) => Buffer.from(addr));
138
+ const invalidToAddress = toAddresses.find((addr) => addr.length !== 20);
139
+ if (invalidToAddress) {
140
+ throw new sdk_core_1.BuildTransactionError(`Invalid toAddress length: expected 20 bytes, got ${invalidToAddress.length}`);
141
+ }
142
+ const invalidFromAddress = fromAddresses.find((addr) => addr.length !== 20);
143
+ if (invalidFromAddress) {
144
+ throw new sdk_core_1.BuildTransactionError(`Invalid fromAddress length: expected 20 bytes, got ${invalidFromAddress.length}`);
145
+ }
146
+ const importTx = flarejs_1.pvm.e.newImportTx({
147
+ feeState: this.transaction._feeState,
148
+ fromAddressesBytes: fromAddresses,
149
+ sourceChainId: this.transaction._network.cChainBlockchainID,
150
+ toAddressesBytes: toAddresses,
151
+ utxos: nativeUtxos,
152
+ threshold: this.transaction._threshold,
153
+ locktime: this.transaction._locktime,
154
+ }, this.transaction._context);
155
+ const flareUnsignedTx = importTx;
156
+ const innerTx = flareUnsignedTx.getTx();
157
+ const utxosWithIndex = innerTx.ins.map((input, idx) => {
158
+ const originalUtxo = this.transaction._utxos[idx];
159
+ return {
160
+ ...originalUtxo,
161
+ addressesIndex: originalUtxo.addressesIndex,
162
+ addresses: originalUtxo.addresses,
163
+ threshold: originalUtxo.threshold || this.transaction._threshold,
164
+ };
163
165
  });
164
- return {
165
- inputs,
166
- credentials,
167
- totalAmount,
168
- };
166
+ this.transaction._utxos = utxosWithIndex;
167
+ const txCredentials = utxosWithIndex.map((utxo) => this.createCredentialForUtxo(utxo, utxo.threshold));
168
+ const addressMaps = utxosWithIndex.map((utxo) => this.createAddressMapForUtxo(utxo, utxo.threshold));
169
+ const fixedUnsignedTx = new flarejs_1.UnsignedTx(innerTx, [], new flarejs_1.utils.AddressMaps(addressMaps), txCredentials);
170
+ this.transaction.setTransaction(fixedUnsignedTx);
169
171
  }
170
172
  /**
171
- * Recover UTXOs from imported inputs
173
+ * Recover UTXOs from imported inputs.
174
+ * Uses output addresses as proxy for UTXO addresses since they should be the same
175
+ * addresses controlling the multisig (just potentially in different on-chain order).
176
+ *
172
177
  * @param importedInputs Array of transferable inputs
178
+ * @param outputAddrs Output owner addresses to use as proxy for UTXO addresses
173
179
  * @returns Array of decoded UTXO objects
174
180
  */
175
- recoverUtxos(importedInputs) {
181
+ recoverUtxos(importedInputs, outputAddrs) {
182
+ const proxyAddresses = outputAddrs
183
+ ? outputAddrs.map((addr) => utils_1.default.addressToString(this.transaction._network.hrp, this.transaction._network.alias, Buffer.from(addr.toBytes())))
184
+ : [];
176
185
  return importedInputs.map((input) => {
177
186
  const utxoId = input.utxoID;
178
187
  const transferInput = input.input;
188
+ const sigIndicies = transferInput.sigIndicies();
179
189
  const utxo = {
180
190
  outputID: iface_1.SECP256K1_Transfer_Output,
181
191
  amount: transferInput.amount().toString(),
182
192
  txid: utils_1.default.cb58Encode(Buffer.from(utxoId.txID.toBytes())),
183
193
  outputidx: utxoId.outputIdx.value().toString(),
184
- threshold: this.transaction._threshold,
185
- addresses: this.transaction._fromAddresses.map((addr) => utils_1.default.addressToString(this.transaction._network.hrp, this.transaction._network.alias, Buffer.from(addr))),
194
+ threshold: sigIndicies.length || this.transaction._threshold,
195
+ addresses: proxyAddresses,
196
+ addressesIndex: sigIndicies,
186
197
  };
187
198
  return utxo;
188
199
  });
189
200
  }
201
+ /**
202
+ * Compute proper addressesIndex from parsed transaction's sigIndicies.
203
+ * Following AVAX P approach: addressesIndex[senderIdx] = position of sender in UTXO addresses.
204
+ *
205
+ * For parsed transactions:
206
+ * - sigIndicies tells us which UTXO positions need to sign for each slot
207
+ * - We use output addresses as proxy for UTXO addresses
208
+ * - We compute addressesIndex as sender -> utxo position mapping
209
+ */
210
+ computeAddressesIndexFromParsed() {
211
+ const sender = this.transaction._fromAddresses;
212
+ if (!sender || sender.length === 0)
213
+ return;
214
+ this.transaction._utxos.forEach((utxo) => {
215
+ if (utxo.addresses && utxo.addresses.length > 0) {
216
+ const utxoAddresses = utxo.addresses.map((a) => utils_1.default.parseAddress(a));
217
+ utxo.addressesIndex = sender.map((senderAddr) => utxoAddresses.findIndex((utxoAddr) => Buffer.compare(Buffer.from(utxoAddr), Buffer.from(senderAddr)) === 0));
218
+ }
219
+ });
220
+ }
190
221
  }
191
222
  exports.ImportInPTxBuilder = ImportInPTxBuilder;
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsOENBQXVGO0FBQ3ZGLHlFQUFzRTtBQUN0RSxtREFnQitCO0FBQy9CLG9EQUE0QjtBQUM1QixtQ0FBOEY7QUFFOUYsTUFBYSxrQkFBbUIsU0FBUSxtREFBd0I7SUFDOUQsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkIsMkJBQTJCO1FBQzNCLHVDQUF1QztRQUN2QywyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN2Rix3RkFBd0Y7UUFDeEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUM3RyxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQU0sRUFBRSxRQUFpQixFQUFFLGlCQUFnQztRQUNyRSxNQUFNLFFBQVEsR0FBRyxFQUF3QixDQUFDO1FBRTFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELDJEQUEyRDtRQUMzRCwwRUFBMEU7UUFDMUUsTUFBTSxPQUFPLEdBQUcsUUFBUSxD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QUFJLEVBQUUsRUFBRSxDQUN0RCxlQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUN6RzthQUNGLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBNVBELGdEQTRQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIE5vdFN1cHBvcnRlZCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vYXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIHB2bVNlcmlhbCxcbiAgYXZheFNlcmlhbCxcbiAgVW5zaWduZWRUeCxcbiAgSW50LFxuICBJZCxcbiAgVHJhbnNmZXJhYmxlSW5wdXQsXG4gIFRyYW5zZmVyYWJsZU91dHB1dCxcbiAgVHJhbnNmZXJPdXRwdXQsXG4gIFRyYW5zZmVySW5wdXQsXG4gIE91dHB1dE93bmVycyxcbiAgdXRpbHMgYXMgRmxhcmVVdGlscyxcbiAgQWRkcmVzcyxcbiAgQmlnSW50UHIsXG4gIENyZWRlbnRpYWwsXG4gIEJ5dGVzLFxufSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIEZsYXJlVHJhbnNhY3Rpb25UeXBlLCBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuXG5leHBvcnQgY2xhc3MgSW1wb3J0SW5QVHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIC8vIEZvciBJbXBvcnQgSU5UTyBQLWNoYWluOlxuICAgIC8vIC0gZXh0ZXJuYWwgY2hhaW4gKHNvdXJjZSkgaXMgQy1jaGFpblxuICAgIC8vIC0gYmxvY2tjaGFpbiBJRCAoZGVzdGluYXRpb24pIGlzIFAtY2hhaW5cbiAgICB0aGlzLl9leHRlcm5hbENoYWluSWQgPSB1dGlscy5jYjU4RGVjb2RlKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuY0NoYWluQmxvY2tjaGFpbklEKTtcbiAgICAvLyBQLWNoYWluIGJsb2NrY2hhaW4gSUQgKGZyb20gbmV0d29yayBjb25maWcgLSB0eXBpY2FsbHkgYWxsIHplcm9zIGZvciBwcmltYXJ5IG5ldHdvcmspXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklEID0gQnVmZmVyLmZyb20odXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmJsb2NrY2hhaW5JRCkpLnRvU3RyaW5nKFxuICAgICAgJ2hleCdcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkltcG9ydDtcbiAgfVxuXG4gIGluaXRCdWlsZGVyKHR4OiBUeCwgcmF3Qnl0ZXM/OiBCdWZmZXIsIHBhcnNlZENyZWRlbnRpYWxzPzogQ3JlZGVudGlhbFtdKTogdGhpcyB7XG4gICAgY29uc3QgaW1wb3J0VHggPSB0eCBhcyBwdm1TZXJpYWwuSW1wb3J0VHg7XG5cbiAgICBpZiAoIXRoaXMudmVyaWZ5VHhUeXBlKGltcG9ydFR4Ll90eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnVHJhbnNhY3Rpb24gY2Fubm90IGJlIHBhcnNlZCBvciBoYXMgYW4gdW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gdHlwZScpO1xuICAgIH1cblxuICAgIC8vIFRoZSByZWd1bGFyIGNoYW5nZSBvdXRwdXQgaXMgdGhlIHR4IG91dHB1dCBpbiBJbXBvcnQgdHguXG4gICAgLy8gSXQncyBleHBlY3RlZCB0byBoYXZlIG9ubHkgb25lIG91dHB1dCB3aXRoIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHNlbmRlci5cbiAgICBjb25zdCBvdXRwdXRzID0gaW1wb3J0VHguYmFzZVR4Lm91dHB1dHM7XG4gICAgaWYgKG91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjYW4gaGF2ZSBvbmUgZXh0ZXJuYWwgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXTtcbiAgICBjb25zdCBhc3NldElkID0gb3V0cHV0LmFzc2V0SWQudG9CeXRlcygpO1xuICAgIGlmIChCdWZmZXIuY29tcGFyZShhc3NldElkLCBCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkLCAnaGV4JykpICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBc3NldCBJRCBvZiB0aGUgb3V0cHV0IGRvZXMgbm90IG1hdGNoIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZmVyT3V0cHV0ID0gb3V0cHV0Lm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICBjb25zdCBvdXRwdXRPd25lcnMgPSB0cmFuc2Zlck91dHB1dC5vdXRwdXRPd25lcnM7XG5cbiAgICAvLyBTZXQgbG9ja3RpbWUgZnJvbSBvdXRwdXRcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSA9IG91dHB1dE93bmVycy5sb2NrdGltZS52YWx1ZSgpO1xuXG4gICAgLy8gU2V0IHRocmVzaG9sZCBmcm9tIG91dHB1dFxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCA9IG91dHB1dE93bmVycy50aHJlc2hvbGQudmFsdWUoKTtcblxuICAgIC8vIENvbnZlcnQgb3V0cHV0IGFkZHJlc3NlcyB0byBidWZmZXJzIGFuZCBzZXQgYXMgZnJvbUFkZHJlc3Nlc1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBvdXRwdXRPd25lcnMuYWRkcnMubWFwKChhZGRyKSA9PiBCdWZmZXIuZnJvbShhZGRyLnRvQnl0ZXMoKSkpO1xuXG4gICAgLy8gU2V0IGV4dGVybmFsIGNoYWluIElEIGZyb20gdGhlIHNvdXJjZSBjaGFpblxuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IEJ1ZmZlci5mcm9tKGltcG9ydFR4LnNvdXJjZUNoYWluLnRvQnl0ZXMoKSk7XG5cbiAgICAvLyBSZWNvdmVyIFVUWE9zIGZyb20gaW1wb3J0ZWQgaW5wdXRzXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSB0aGlzLnJlY292ZXJVdHhvcyhpbXBvcnRUeC5pbnMpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGFuZCBzZXQgZmVlIGZyb20gaW5wdXQvb3V0cHV0IGRpZmZlcmVuY2VcbiAgICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gaW1wb3J0VHguaW5zLnJlZHVjZSgoc3VtLCBpbnB1dCkgPT4gc3VtICsgaW5wdXQuYW1vdW50KCksIEJpZ0ludCgwKSk7XG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdHJhbnNmZXJPdXRwdXQuYW1vdW50KCk7XG4gICAgY29uc3QgZmVlID0gdG90YWxJbnB1dEFtb3VudCAtIG91dHB1dEFtb3VudDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlID0gZmVlLnRvU3RyaW5nKCk7XG5cbiAgICAvLyBVc2UgY3JlZGVudGlhbHMgcGFzc2VkIGZyb20gVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSAocHJvcGVybHkgZXh0cmFjdGVkIHVzaW5nIGNvZGVjKVxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gcGFyc2VkQ3JlZGVudGlhbHMgfHwgW107XG4gICAgY29uc3QgaGFzQ3JlZGVudGlhbHMgPSBjcmVkZW50aWFscy5sZW5ndGggPiAwO1xuXG4gICAgLy8gSWYgdGhlcmUgYXJlIGNyZWRlbnRpYWxzLCBzdG9yZSB0aGUgb3JpZ2luYWwgYnl0ZXMgdG8gcHJlc2VydmUgZXhhY3QgZm9ybWF0XG4gICAgaWYgKHJhd0J5dGVzICYmIGhhc0NyZWRlbnRpYWxzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9yYXdTaWduZWRCeXRlcyA9IHJhd0J5dGVzO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBwcm9wZXIgVW5zaWduZWRUeCB3cmFwcGVyIHdpdGggY3JlZGVudGlhbHNcbiAgICAvLyBNYXRjaCBhdmF4cCBiZWhhdmlvcjogZHluYW1pYyBvcmRlcmluZyBiYXNlZCBvbiBhZGRyZXNzZXNJbmRleCBmcm9tIFVUWE9cbiAgICAvLyBVc2UgY2VudHJhbGl6ZWQgbWV0aG9kcyBmb3IgY3JlZGVudGlhbCBhbmQgQWRkcmVzc01hcCBjcmVhdGlvblxuICAgIGNvbnN0IHR4Q3JlZGVudGlhbHMgPVxuICAgICAgY3JlZGVudGlhbHMubGVuZ3RoID4gMFxuICAgICAgICA/IGNyZWRlbnRpYWxzXG4gICAgICAgIDogdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MubWFwKCh1dHhvKSA9PiB0aGlzLmNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG8sIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCkpO1xuXG4gICAgLy8gQ3JlYXRlIEFkZHJlc3NNYXBzIGJhc2VkIG9uIHNpZ25hdHVyZSBzbG90IG9yZGVyIChtYXRjaGluZyBjcmVkZW50aWFsIG9yZGVyKSwgbm90IHNvcnRlZCBhZGRyZXNzZXNcbiAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGFwcHJvYWNoIHVzZWQgaW4gY3JlZGVudGlhbHM6IGFkZHJlc3Nlc0luZGV4IGRldGVybWluZXMgc2lnbmF0dXJlIG9yZGVyXG4gICAgLy8gQWRkcmVzc01hcHMgc2hvdWxkIG1hcCBhZGRyZXNzZXMgdG8gc2lnbmF0dXJlIHNsb3RzIGluIHRoZSBzYW1lIG9yZGVyIGFzIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgYWRkcmVzc01hcHMgPSB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5tYXAoKHV0eG8pID0+XG4gICAgICB0aGlzLmNyZWF0ZUFkZHJlc3NNYXBGb3JVdHhvKHV0eG8sIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZClcbiAgICApO1xuXG4gICAgY29uc3QgdW5zaWduZWRUeCA9IG5ldyBVbnNpZ25lZFR4KGltcG9ydFR4LCBbXSwgbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLCB0eENyZWRlbnRpYWxzKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odW5zaWduZWRUeCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eG5UeXBlID09PSBGbGFyZVRyYW5zYWN0aW9uVHlwZS5Qdm1JbXBvcnRUeDtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSW1wb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eG5UeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgaW1wb3J0IHRyYW5zYWN0aW9uIGZvciBQLWNoYWluXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEZsYXJlVHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gaWYgdHggaGFzIGNyZWRlbnRpYWxzLCB0eCBzaG91bGRuJ3QgY2hhbmdlXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaGFzQ3JlZGVudGlhbHMpIHJldHVybjtcblxuICAgIGNvbnN0IHsgaW5wdXRzLCBjcmVkZW50aWFscywgdG90YWxBbW91bnQgfSA9IHRoaXMuY3JlYXRlSW1wb3J0SW5wdXRzKCk7XG5cbiAgICAvLyBDYWxjdWxhdGUgZmVlIGZyb20gdHJhbnNhY3Rpb24gZmVlIHNldHRpbmdzXG4gICAgY29uc3QgZmVlID0gQmlnSW50KHRoaXMudHJhbnNhY3Rpb24uZmVlLmZlZSk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGF0IHRvdGFsQW1vdW50IGlzIHN1ZmZpY2llbnQgdG8gY292ZXIgdGhlIGZlZSAobWF0Y2hpbmcgQVZBWCB2YWxpZGF0aW9uKVxuICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBkb24ndCBjcmVhdGUgdHJhbnNhY3Rpb25zIHdpdGggaW5zdWZmaWNpZW50IGZ1bmRzXG4gICAgaWYgKHRvdGFsQW1vdW50IDwgZmVlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBVdHhvIG91dHB1dHMgZ2V0ICR7dG90YWxBbW91bnQudG9TdHJpbmcoKX0gYW5kICR7ZmVlLnRvU3RyaW5nKCl9IGlzIHJlcXVpcmVkYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gdG90YWxBbW91bnQgLSBmZWU7XG5cbiAgICAvLyBDcmVhdGUgdGhlIG91dHB1dCBmb3IgUC1jaGFpbiAoVHJhbnNmZXJhYmxlT3V0cHV0IHdpdGggVHJhbnNmZXJPdXRwdXQpXG4gICAgY29uc3QgYXNzZXRJZEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcblxuICAgIC8vIENyZWF0ZSBPdXRwdXRPd25lcnMgd2l0aCB0aGUgUC1jaGFpbiBhZGRyZXNzZXMgKHNvcnRlZCBieSBieXRlIHZhbHVlIGFzIHBlciBBVkFYIHByb3RvY29sKVxuICAgIGNvbnN0IHNvcnRlZEFkZHJlc3NlcyA9IFsuLi50aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzXS5zb3J0KChhLCBiKSA9PiBCdWZmZXIuY29tcGFyZShhLCBiKSk7XG4gICAgY29uc3Qgb3V0cHV0T3duZXJzID0gbmV3IE91dHB1dE93bmVycyhcbiAgICAgIG5ldyBCaWdJbnRQcih0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSksXG4gICAgICBuZXcgSW50KHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCksXG4gICAgICBzb3J0ZWRBZGRyZXNzZXMubWFwKChhZGRyKSA9PiBuZXcgQWRkcmVzcyhhZGRyKSlcbiAgICApO1xuXG4gICAgY29uc3QgdHJhbnNmZXJPdXRwdXQgPSBuZXcgVHJhbnNmZXJPdXRwdXQobmV3IEJpZ0ludFByKG91dHB1dEFtb3VudCksIG91dHB1dE93bmVycyk7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFRyYW5zZmVyYWJsZU91dHB1dChuZXcgSWQoYXNzZXRJZEJ5dGVzKSwgdHJhbnNmZXJPdXRwdXQpO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBCYXNlVHggZm9yIHRoZSBQLWNoYWluIGltcG9ydCB0cmFuc2FjdGlvblxuICAgIGNvbnN0IGJhc2VUeCA9IG5ldyBhdmF4U2VyaWFsLkJhc2VUeChcbiAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lEKSxcbiAgICAgIG5ldyBJZChCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQsICdoZXgnKSksXG4gICAgICBbb3V0cHV0XSwgLy8gb3V0cHV0c1xuICAgICAgW10sIC8vIGlucHV0cyAoZW1wdHkgZm9yIGltcG9ydCAtIGlucHV0cyBjb21lIGZyb20gaW1wb3J0ZWRJbnB1dHMpXG4gICAgICBuZXcgQnl0ZXMobmV3IFVpbnQ4QXJyYXkoMCkpIC8vIGVtcHR5IG1lbW9cbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBQLWNoYWluIGltcG9ydCB0cmFuc2FjdGlvbiB1c2luZyBwdm1TZXJpYWwuSW1wb3J0VHhcbiAgICBjb25zdCBpbXBvcnRUeCA9IG5ldyBwdm1TZXJpYWwuSW1wb3J0VHgoXG4gICAgICBiYXNlVHgsXG4gICAgICBuZXcgSWQodGhpcy5fZXh0ZXJuYWxDaGFpbklkKSwgLy8gc291cmNlQ2hhaW4gKEMtY2hhaW4pXG4gICAgICBpbnB1dHMgLy8gaW1wb3J0ZWRJbnB1dHMgKGlucylcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIEFkZHJlc3NNYXBzIGJhc2VkIG9uIHNpZ25hdHVyZSBzbG90IG9yZGVyIChtYXRjaGluZyBjcmVkZW50aWFsIG9yZGVyKSwgbm90IHNvcnRlZCBhZGRyZXNzZXNcbiAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIGFwcHJvYWNoIHVzZWQgaW4gY3JlZGVudGlhbHM6IGFkZHJlc3Nlc0luZGV4IGRldGVybWluZXMgc2lnbmF0dXJlIG9yZGVyXG4gICAgLy8gQWRkcmVzc01hcHMgc2hvdWxkIG1hcCBhZGRyZXNzZXMgdG8gc2lnbmF0dXJlIHNsb3RzIGluIHRoZSBzYW1lIG9yZGVyIGFzIGNyZWRlbnRpYWxzXG4gICAgLy8gVXNlIGNlbnRyYWxpemVkIG1ldGhvZCBmb3IgQWRkcmVzc01hcCBjcmVhdGlvblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gY3JlZGVudGlhbHMubWFwKChjcmVkZW50aWFsLCBjcmVkSWR4KSA9PlxuICAgICAgdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh0aGlzLnRyYW5zYWN0aW9uLl91dHhvc1tjcmVkSWR4XSwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKVxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoXG4gICAgICBpbXBvcnRUeCxcbiAgICAgIFtdLCAvLyBFbXB0eSBVVFhPcyBhcnJheVxuICAgICAgbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLFxuICAgICAgY3JlZGVudGlhbHNcbiAgICApO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih1bnNpZ25lZFR4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgaW5wdXRzIGZyb20gVVRYT3MgZm9yIFAtY2hhaW4gaW1wb3J0XG4gICAqIEByZXR1cm5zIGlucHV0cywgY3JlZGVudGlhbHMsIGFuZCB0b3RhbCBhbW91bnRcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVJbXBvcnRJbnB1dHMoKToge1xuICAgIGlucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXTtcbiAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICAgIHRvdGFsQW1vdW50OiBiaWdpbnQ7XG4gIH0ge1xuICAgIGNvbnN0IHNlbmRlciA9IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMuc2xpY2UoKTtcbiAgICBpZiAodGhpcy5yZWNvdmVyU2lnbmVyKSB7XG4gICAgICAvLyBzd2l0Y2ggZmlyc3QgYW5kIGxhc3Qgc2lnbmVyXG4gICAgICBjb25zdCB0bXAgPSBzZW5kZXIucG9wKCk7XG4gICAgICBzZW5kZXIucHVzaChzZW5kZXJbMF0pO1xuICAgICAgaWYgKHRtcCkge1xuICAgICAgICBzZW5kZXJbMF0gPSB0bXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsQW1vdW50ID0gQmlnSW50KDApO1xuICAgIGNvbnN0IGlucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSA9IFtdO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10gPSBbXTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmZvckVhY2goKHV0eG86IERlY29kZWRVdHhvT2JqKSA9PiB7XG4gICAgICBjb25zdCBhbW91bnQgPSBCaWdJbnQodXR4by5hbW91bnQpO1xuICAgICAgdG90YWxBbW91bnQgKz0gYW1vdW50O1xuXG4gICAgICAvLyBDcmVhdGUgc2lnbmF0dXJlIGluZGljZXMgZm9yIHRocmVzaG9sZFxuICAgICAgY29uc3Qgc2lnSW5kaWNlczogbnVtYmVyW10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkOyBpKyspIHtcbiAgICAgICAgc2lnSW5kaWNlcy5wdXNoKGkpO1xuICAgICAgfVxuXG4gICAgICAvLyBVc2UgZnJvbU5hdGl2ZSB0byBjcmVhdGUgVHJhbnNmZXJhYmxlSW5wdXRcbiAgICAgIC8vIGZyb21OYXRpdmUgZXhwZWN0cyBjYjU4LWVuY29kZWQgc3RyaW5ncyBmb3IgdHhJZCBhbmQgYXNzZXRJZFxuICAgICAgY29uc3QgdHhJZENiNTggPSB1dHhvLnR4aWQ7IC8vIEFscmVhZHkgY2I1OCBlbmNvZGVkXG4gICAgICBjb25zdCBhc3NldElkQ2I1OCA9IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcblxuICAgICAgY29uc3QgdHJhbnNmZXJhYmxlSW5wdXQgPSBUcmFuc2ZlcmFibGVJbnB1dC5mcm9tTmF0aXZlKFxuICAgICAgICB0eElkQ2I1OCxcbiAgICAgICAgTnVtYmVyKHV0eG8ub3V0cHV0aWR4KSxcbiAgICAgICAgYXNzZXRJZENiNTgsXG4gICAgICAgIGFtb3VudCxcbiAgICAgICAgc2lnSW5kaWNlc1xuICAgICAgKTtcblxuICAgICAgaW5wdXRzLnB1c2godHJhbnNmZXJhYmxlSW5wdXQpO1xuXG4gICAgICAvLyBDcmVhdGUgY3JlZGVudGlhbCB3aXRoIGVtcHR5IHNpZ25hdHVyZXMgZm9yIHNsb3QgaWRlbnRpZmljYXRpb25cbiAgICAgIC8vIE1hdGNoIGF2YXhwIGJlaGF2aW9yOiBkeW5hbWljIG9yZGVyaW5nIGJhc2VkIG9uIGFkZHJlc3Nlc0luZGV4IGZyb20gVVRYT1xuICAgICAgLy8gVXNlIGNlbnRyYWxpemVkIG1ldGhvZCBmb3IgY3JlZGVudGlhbCBjcmVhdGlvblxuICAgICAgY3JlZGVudGlhbHMucHVzaCh0aGlzLmNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG8sIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0cyxcbiAgICAgIGNyZWRlbnRpYWxzLFxuICAgICAgdG90YWxBbW91bnQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIFVUWE9zIGZyb20gaW1wb3J0ZWQgaW5wdXRzXG4gICAqIEBwYXJhbSBpbXBvcnRlZElucHV0cyBBcnJheSBvZiB0cmFuc2ZlcmFibGUgaW5wdXRzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGRlY29kZWQgVVRYTyBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIHJlY292ZXJVdHhvcyhpbXBvcnRlZElucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSk6IERlY29kZWRVdHhvT2JqW10ge1xuICAgIHJldHVybiBpbXBvcnRlZElucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCB1dHhvSWQgPSBpbnB1dC51dHhvSUQ7XG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgIGNvbnN0IHV0eG86IERlY29kZWRVdHhvT2JqID0ge1xuICAgICAgICBvdXRwdXRJRDogU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCxcbiAgICAgICAgYW1vdW50OiB0cmFuc2ZlcklucHV0LmFtb3VudCgpLnRvU3RyaW5nKCksXG4gICAgICAgIHR4aWQ6IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odXR4b0lkLnR4SUQudG9CeXRlcygpKSksXG4gICAgICAgIG91dHB1dGlkeDogdXR4b0lkLm91dHB1dElkeC52YWx1ZSgpLnRvU3RyaW5nKCksXG4gICAgICAgIHRocmVzaG9sZDogdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkLFxuICAgICAgICBhZGRyZXNzZXM6IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubWFwKChhZGRyKSA9PlxuICAgICAgICAgIHV0aWxzLmFkZHJlc3NUb1N0cmluZyh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmhycCwgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5hbGlhcywgQnVmZmVyLmZyb20oYWRkcikpXG4gICAgICAgICksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHV0eG87XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsOENBQXVGO0FBQ3ZGLHlFQUFzRTtBQUN0RSxtREFTK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLG1EQUF3QjtJQUM5RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0csS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxZQUErQjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksZ0NBQXFCLENB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SSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDNUcsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTNRRCxnREEyUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBOb3RTdXBwb3J0ZWQsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0b21pY1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBwdm1TZXJpYWwsXG4gIFVuc2lnbmVkVHgsXG4gIFRyYW5zZmVyYWJsZUlucHV0LFxuICBUcmFuc2Zlck91dHB1dCxcbiAgVHJhbnNmZXJJbnB1dCxcbiAgdXRpbHMgYXMgRmxhcmVVdGlscyxcbiAgQ3JlZGVudGlhbCxcbiAgcHZtLFxufSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIEZsYXJlVHJhbnNhY3Rpb25UeXBlLCBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuXG5leHBvcnQgY2xhc3MgSW1wb3J0SW5QVHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IHV0aWxzLmNiNThEZWNvZGUodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5jQ2hhaW5CbG9ja2NoYWluSUQpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCA9IEJ1ZmZlci5mcm9tKHV0aWxzLmNiNThEZWNvZGUodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ibG9ja2NoYWluSUQpKS50b1N0cmluZyhcbiAgICAgICdoZXgnXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gc2VuZGVyUHViS2V5IC0gQy1jaGFpbiBhZGRyZXNzKGVzKSB3aXRoIEMtIHByZWZpeFxuICAgKiBAdGhyb3dzIHtCdWlsZFRyYW5zYWN0aW9uRXJyb3J9IGlmIGFueSBhZGRyZXNzIGlzIG5vdCBhIEMtY2hhaW4gYWRkcmVzc1xuICAgKi9cbiAgZnJvbVB1YktleShzZW5kZXJQdWJLZXk6IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgY29uc3QgcHViS2V5cyA9IEFycmF5LmlzQXJyYXkoc2VuZGVyUHViS2V5KSA/IHNlbmRlclB1YktleSA6IFtzZW5kZXJQdWJLZXldO1xuICAgIGNvbnN0IGludmFsaWRBZGRyZXNzID0gcHViS2V5cy5maW5kKChhZGRyKSA9PiAhYWRkci5zdGFydHNXaXRoKCdDLScpKTtcbiAgICBpZiAoaW52YWxpZEFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgZnJvbUFkZHJlc3M6IGV4cGVjdGVkIEMtY2hhaW4gYWRkcmVzcyAoQy0uLi4pLCBnb3QgJHtpbnZhbGlkQWRkcmVzc31gKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyA9IHB1YktleXMubWFwKChhZGRyKSA9PiB1dGlscy5wYXJzZUFkZHJlc3MoYWRkcikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFkZHJlc3NlcyAtIEFycmF5IG9mIFAtY2hhaW4gYWRkcmVzc2VzIChiZWNoMzIgZm9ybWF0IHdpdGggUC0gcHJlZml4KVxuICAgKiBAdGhyb3dzIHtCdWlsZFRyYW5zYWN0aW9uRXJyb3J9IGlmIGFueSBhZGRyZXNzIGlzIG5vdCBhIFAtY2hhaW4gYWRkcmVzc1xuICAgKi9cbiAgdG8oYWRkcmVzc2VzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IGludmFsaWRBZGRyZXNzID0gYWRkcmVzc2VzLmZpbmQoKGFkZHIpID0+ICFhZGRyLnN0YXJ0c1dpdGgoJ1AtJykpO1xuICAgIGlmIChpbnZhbGlkQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCB0b0FkZHJlc3M6IGV4cGVjdGVkIFAtY2hhaW4gYWRkcmVzcyAoUC0uLi4pLCBnb3QgJHtpbnZhbGlkQWRkcmVzc31gKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdG8gPSBhZGRyZXNzZXMubWFwKChhZGRyKSA9PiB1dGlscy5wYXJzZUFkZHJlc3MoYWRkcikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFR4LCByYXdCeXRlcz86IEJ1ZmZlciwgcGFyc2VkQ3JlZGVudGlhbHM/OiBDcmVkZW50aWFsW10pOiB0aGlzIHtcbiAgICBjb25zdCBpbXBvcnRUeCA9IHR4IGFzIHB2bVNlcmlhbC5JbXBvcnRUeDtcblxuICAgIGlmICghdGhpcy52ZXJpZnlUeFR5cGUoaW1wb3J0VHguX3R5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0cyA9IGltcG9ydFR4LmJhc2VUeC5vdXRwdXRzO1xuICAgIGlmIChvdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY2FuIGhhdmUgb25lIGV4dGVybmFsIG91dHB1dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbMF07XG4gICAgY29uc3QgYXNzZXRJZCA9IG91dHB1dC5hc3NldElkLnRvQnl0ZXMoKTtcbiAgICBpZiAoQnVmZmVyLmNvbXBhcmUoYXNzZXRJZCwgQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgQXNzZXQgSUQgb2YgdGhlIG91dHB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zlck91dHB1dCA9IG91dHB1dC5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgY29uc3Qgb3V0cHV0T3duZXJzID0gdHJhbnNmZXJPdXRwdXQub3V0cHV0T3duZXJzO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gb3V0cHV0T3duZXJzLmxvY2t0aW1lLnZhbHVlKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gb3V0cHV0T3duZXJzLnRocmVzaG9sZC52YWx1ZSgpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBvdXRwdXRPd25lcnMuYWRkcnMubWFwKChhZGRyKSA9PiBCdWZmZXIuZnJvbShhZGRyLnRvQnl0ZXMoKSkpO1xuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IEJ1ZmZlci5mcm9tKGltcG9ydFR4LnNvdXJjZUNoYWluLnRvQnl0ZXMoKSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcyA9IHRoaXMucmVjb3ZlclV0eG9zKGltcG9ydFR4Lmlucywgb3V0cHV0T3duZXJzLmFkZHJzKTtcblxuICAgIGNvbnN0IHRvdGFsSW5wdXRBbW91bnQgPSBpbXBvcnRUeC5pbnMucmVkdWNlKChzdW0sIGlucHV0KSA9PiBzdW0gKyBpbnB1dC5hbW91bnQoKSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSB0cmFuc2Zlck91dHB1dC5hbW91bnQoKTtcbiAgICBjb25zdCBmZWUgPSB0b3RhbElucHV0QW1vdW50IC0gb3V0cHV0QW1vdW50O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUgPSBmZWUudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gcGFyc2VkQ3JlZGVudGlhbHMgfHwgW107XG4gICAgY29uc3QgaGFzQ3JlZGVudGlhbHMgPSBjcmVkZW50aWFscy5sZW5ndGggPiAwO1xuXG4gICAgaWYgKHJhd0J5dGVzICYmIGhhc0NyZWRlbnRpYWxzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9yYXdTaWduZWRCeXRlcyA9IHJhd0J5dGVzO1xuICAgIH1cblxuICAgIHRoaXMuY29tcHV0ZUFkZHJlc3Nlc0luZGV4RnJvbVBhcnNlZCgpO1xuXG4gICAgY29uc3QgdHhDcmVkZW50aWFscyA9XG4gICAgICBjcmVkZW50aWFscy5sZW5ndGggPiAwXG4gICAgICAgID8gY3JlZGVudGlhbHNcbiAgICAgICAgOiB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5tYXAoKHV0eG8pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHV0eG9UaHJlc2hvbGQgPSB1dHhvLnRocmVzaG9sZCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvLCB1dHhvVGhyZXNob2xkKTtcbiAgICAgICAgICB9KTtcblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MubWFwKCh1dHhvKSA9PiB7XG4gICAgICBjb25zdCB1dHhvVGhyZXNob2xkID0gdXR4by50aHJlc2hvbGQgfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkO1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQWRkcmVzc01hcEZvclV0eG8odXR4bywgdXR4b1RocmVzaG9sZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoaW1wb3J0VHgsIFtdLCBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyksIHR4Q3JlZGVudGlhbHMpO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih1bnNpZ25lZFR4KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN0YXRpYyB2ZXJpZnlUeFR5cGUodHhuVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR4blR5cGUgPT09IEZsYXJlVHJhbnNhY3Rpb25UeXBlLlB2bUltcG9ydFR4O1xuICB9XG5cbiAgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBJbXBvcnRJblBUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4blR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBpbXBvcnQgdHJhbnNhY3Rpb24gZm9yIFAtY2hhaW4gKGltcG9ydGluZyBGUk9NIEMtY2hhaW4pXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEZsYXJlVHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaGFzQ3JlZGVudGlhbHMpIHJldHVybjtcbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX3V0eG9zIHx8IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVVRYT3MgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fZmVlU3RhdGUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ZlZSBzdGF0ZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2NvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2NvbnRleHQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzIHx8IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdmcm9tQWRkcmVzc2VzIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX3RvIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RvLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcigndG9BZGRyZXNzZXMgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0aHJlc2hvbGQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2xvY2t0aW1lIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wdXRlQWRkcmVzc2VzSW5kZXgoKTtcblxuICAgIHRoaXMudmFsaWRhdGVVdHhvQWRkcmVzc2VzKCk7XG5cbiAgICBjb25zdCBhc3NldElkID0gdXRpbHMuY2I1OEVuY29kZShCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkLCAnaGV4JykpO1xuICAgIGNvbnN0IG5hdGl2ZVV0eG9zID0gdXRpbHMuZGVjb2RlZFRvVXR4b3ModGhpcy50cmFuc2FjdGlvbi5fdXR4b3MsIGFzc2V0SWQpO1xuXG4gICAgY29uc3QgdG90YWxVdHhvQW1vdW50ID0gbmF0aXZlVXR4b3MucmVkdWNlKChzdW0sIHV0eG8pID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHV0eG8ub3V0cHV0IGFzIFRyYW5zZmVyT3V0cHV0O1xuICAgICAgcmV0dXJuIHN1bSArIG91dHB1dC5hbW91bnQoKTtcbiAgICB9LCBCaWdJbnQoMCkpO1xuXG4gICAgaWYgKHRvdGFsVXR4b0Ftb3VudCA9PT0gQmlnSW50KDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVVFhPcyBoYXZlIHplcm8gdG90YWwgYmFsYW5jZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHRvQWRkcmVzc2VzID0gdGhpcy50cmFuc2FjdGlvbi5fdG8ubWFwKChhZGRyKSA9PiBCdWZmZXIuZnJvbShhZGRyKSk7XG4gICAgY29uc3QgZnJvbUFkZHJlc3NlcyA9IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubWFwKChhZGRyKSA9PiBCdWZmZXIuZnJvbShhZGRyKSk7XG5cbiAgICBjb25zdCBpbnZhbGlkVG9BZGRyZXNzID0gdG9BZGRyZXNzZXMuZmluZCgoYWRkcikgPT4gYWRkci5sZW5ndGggIT09IDIwKTtcbiAgICBpZiAoaW52YWxpZFRvQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCB0b0FkZHJlc3MgbGVuZ3RoOiBleHBlY3RlZCAyMCBieXRlcywgZ290ICR7aW52YWxpZFRvQWRkcmVzcy5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZEZyb21BZGRyZXNzID0gZnJvbUFkZHJlc3Nlcy5maW5kKChhZGRyKSA9PiBhZGRyLmxlbmd0aCAhPT0gMjApO1xuICAgIGlmIChpbnZhbGlkRnJvbUFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZyb21BZGRyZXNzIGxlbmd0aDogZXhwZWN0ZWQgMjAgYnl0ZXMsIGdvdCAke2ludmFsaWRGcm9tQWRkcmVzcy5sZW5ndGh9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBvcnRUeCA9IHB2bS5lLm5ld0ltcG9ydFR4KFxuICAgICAge1xuICAgICAgICBmZWVTdGF0ZTogdGhpcy50cmFuc2FjdGlvbi5fZmVlU3RhdGUsXG4gICAgICAgIGZyb21BZGRyZXNzZXNCeXRlczogZnJvbUFkZHJlc3NlcyxcbiAgICAgICAgc291cmNlQ2hhaW5JZDogdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5jQ2hhaW5CbG9ja2NoYWluSUQsXG4gICAgICAgIHRvQWRkcmVzc2VzQnl0ZXM6IHRvQWRkcmVzc2VzLFxuICAgICAgICB1dHhvczogbmF0aXZlVXR4b3MsXG4gICAgICAgIHRocmVzaG9sZDogdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkLFxuICAgICAgICBsb2NrdGltZTogdGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUsXG4gICAgICB9LFxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fY29udGV4dFxuICAgICk7XG5cbiAgICBjb25zdCBmbGFyZVVuc2lnbmVkVHggPSBpbXBvcnRUeCBhcyBVbnNpZ25lZFR4O1xuICAgIGNvbnN0IGlubmVyVHggPSBmbGFyZVVuc2lnbmVkVHguZ2V0VHgoKSBhcyBwdm1TZXJpYWwuSW1wb3J0VHg7XG5cbiAgICBjb25zdCB1dHhvc1dpdGhJbmRleCA9IGlubmVyVHguaW5zLm1hcCgoaW5wdXQsIGlkeCkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luYWxVdHhvID0gdGhpcy50cmFuc2FjdGlvbi5fdXR4b3NbaWR4XTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9yaWdpbmFsVXR4byxcbiAgICAgICAgYWRkcmVzc2VzSW5kZXg6IG9yaWdpbmFsVXR4by5hZGRyZXNzZXNJbmRleCxcbiAgICAgICAgYWRkcmVzc2VzOiBvcmlnaW5hbFV0eG8uYWRkcmVzc2VzLFxuICAgICAgICB0aHJlc2hvbGQ6IG9yaWdpbmFsVXR4by50aHJlc2hvbGQgfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gdXR4b3NXaXRoSW5kZXg7XG5cbiAgICBjb25zdCB0eENyZWRlbnRpYWxzID0gdXR4b3NXaXRoSW5kZXgubWFwKCh1dHhvKSA9PiB0aGlzLmNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG8sIHV0eG8udGhyZXNob2xkKSk7XG5cbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IHV0eG9zV2l0aEluZGV4Lm1hcCgodXR4bykgPT4gdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh1dHhvLCB1dHhvLnRocmVzaG9sZCkpO1xuXG4gICAgY29uc3QgZml4ZWRVbnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoaW5uZXJUeCwgW10sIG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXBzKGFkZHJlc3NNYXBzKSwgdHhDcmVkZW50aWFscyk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKGZpeGVkVW5zaWduZWRUeCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBVVFhPcyBmcm9tIGltcG9ydGVkIGlucHV0cy5cbiAgICogVXNlcyBvdXRwdXQgYWRkcmVzc2VzIGFzIHByb3h5IGZvciBVVFhPIGFkZHJlc3NlcyBzaW5jZSB0aGV5IHNob3VsZCBiZSB0aGUgc2FtZVxuICAgKiBhZGRyZXNzZXMgY29udHJvbGxpbmcgdGhlIG11bHRpc2lnIChqdXN0IHBvdGVudGlhbGx5IGluIGRpZmZlcmVudCBvbi1jaGFpbiBvcmRlcikuXG4gICAqXG4gICAqIEBwYXJhbSBpbXBvcnRlZElucHV0cyBBcnJheSBvZiB0cmFuc2ZlcmFibGUgaW5wdXRzXG4gICAqIEBwYXJhbSBvdXRwdXRBZGRycyBPdXRwdXQgb3duZXIgYWRkcmVzc2VzIHRvIHVzZSBhcyBwcm94eSBmb3IgVVRYTyBhZGRyZXNzZXNcbiAgICogQHJldHVybnMgQXJyYXkgb2YgZGVjb2RlZCBVVFhPIG9iamVjdHNcbiAgICovXG4gIHByaXZhdGUgcmVjb3ZlclV0eG9zKFxuICAgIGltcG9ydGVkSW5wdXRzOiBUcmFuc2ZlcmFibGVJbnB1dFtdLFxuICAgIG91dHB1dEFkZHJzPzogeyB0b0J5dGVzKCk6IFVpbnQ4QXJyYXkgfVtdXG4gICk6IERlY29kZWRVdHhvT2JqW10ge1xuICAgIGNvbnN0IHByb3h5QWRkcmVzc2VzID0gb3V0cHV0QWRkcnNcbiAgICAgID8gb3V0cHV0QWRkcnMubWFwKChhZGRyKSA9PlxuICAgICAgICAgIHV0aWxzLmFkZHJlc3NUb1N0cmluZyhcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuaHJwLFxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5hbGlhcyxcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGFkZHIudG9CeXRlcygpKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBbXTtcblxuICAgIHJldHVybiBpbXBvcnRlZElucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCB1dHhvSWQgPSBpbnB1dC51dHhvSUQ7XG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgIGNvbnN0IHNpZ0luZGljaWVzID0gdHJhbnNmZXJJbnB1dC5zaWdJbmRpY2llcygpO1xuXG4gICAgICBjb25zdCB1dHhvOiBEZWNvZGVkVXR4b09iaiA9IHtcbiAgICAgICAgb3V0cHV0SUQ6IFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsXG4gICAgICAgIGFtb3VudDogdHJhbnNmZXJJbnB1dC5hbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICB0eGlkOiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHV0eG9JZC50eElELnRvQnl0ZXMoKSkpLFxuICAgICAgICBvdXRwdXRpZHg6IHV0eG9JZC5vdXRwdXRJZHgudmFsdWUoKS50b1N0cmluZygpLFxuICAgICAgICB0aHJlc2hvbGQ6IHNpZ0luZGljaWVzLmxlbmd0aCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQsXG4gICAgICAgIGFkZHJlc3NlczogcHJveHlBZGRyZXNzZXMsXG4gICAgICAgIGFkZHJlc3Nlc0luZGV4OiBzaWdJbmRpY2llcyxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdXR4bztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHByb3BlciBhZGRyZXNzZXNJbmRleCBmcm9tIHBhcnNlZCB0cmFuc2FjdGlvbidzIHNpZ0luZGljaWVzLlxuICAgKiBGb2xsb3dpbmcgQVZBWCBQIGFwcHJvYWNoOiBhZGRyZXNzZXNJbmRleFtzZW5kZXJJZHhdID0gcG9zaXRpb24gb2Ygc2VuZGVyIGluIFVUWE8gYWRkcmVzc2VzLlxuICAgKlxuICAgKiBGb3IgcGFyc2VkIHRyYW5zYWN0aW9uczpcbiAgICogLSBzaWdJbmRpY2llcyB0ZWxscyB1cyB3aGljaCBVVFhPIHBvc2l0aW9ucyBuZWVkIHRvIHNpZ24gZm9yIGVhY2ggc2xvdFxuICAgKiAtIFdlIHVzZSBvdXRwdXQgYWRkcmVzc2VzIGFzIHByb3h5IGZvciBVVFhPIGFkZHJlc3Nlc1xuICAgKiAtIFdlIGNvbXB1dGUgYWRkcmVzc2VzSW5kZXggYXMgc2VuZGVyIC0+IHV0eG8gcG9zaXRpb24gbWFwcGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBjb21wdXRlQWRkcmVzc2VzSW5kZXhGcm9tUGFyc2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbmRlciA9IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXM7XG4gICAgaWYgKCFzZW5kZXIgfHwgc2VuZGVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MuZm9yRWFjaCgodXR4bykgPT4ge1xuICAgICAgaWYgKHV0eG8uYWRkcmVzc2VzICYmIHV0eG8uYWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdXR4b0FkZHJlc3NlcyA9IHV0eG8uYWRkcmVzc2VzLm1hcCgoYSkgPT4gdXRpbHMucGFyc2VBZGRyZXNzKGEpKTtcbiAgICAgICAgdXR4by5hZGRyZXNzZXNJbmRleCA9IHNlbmRlci5tYXAoKHNlbmRlckFkZHIpID0+XG4gICAgICAgICAgdXR4b0FkZHJlc3Nlcy5maW5kSW5kZXgoKHV0eG9BZGRyKSA9PiBCdWZmZXIuY29tcGFyZShCdWZmZXIuZnJvbSh1dHhvQWRkciksIEJ1ZmZlci5mcm9tKHNlbmRlckFkZHIpKSA9PT0gMClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -4,12 +4,6 @@ import { UnsignedTx } from '@flarenetwork/flarejs';
4
4
  import { Transaction } from './transaction';
5
5
  export declare abstract class AtomicInCTransactionBuilder extends AtomicTransactionBuilder {
6
6
  constructor(_coinConfig: Readonly<CoinConfig>);
7
- /**
8
- * C-Chain base fee with decimal places converted from 18 to 9.
9
- *
10
- * @param {string | number} baseFee
11
- */
12
- feeRate(baseFee: string | number): this;
13
7
  /** @inheritdoc */
14
8
  fromImplementation(rawTransaction: string): Transaction;
15
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"atomicInCTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/atomicInCTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAa,UAAU,EAA2C,MAAM,uBAAuB,CAAC;AAEvG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,8BAAsB,2BAA4B,SAAQ,wBAAwB;gBACpE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAU7C;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOvC,kBAAkB;IAClB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAYvD;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM9B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;CASlC"}
1
+ {"version":3,"file":"atomicInCTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/atomicInCTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAa,UAAU,EAA2C,MAAM,uBAAuB,CAAC;AAEvG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,8BAAsB,2BAA4B,SAAQ,wBAAwB;gBACpE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQ7C,kBAAkB;IAClB,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAYvD;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM9B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;CASlC"}
@@ -11,22 +11,9 @@ const utils_1 = __importDefault(require("./utils"));
11
11
  class AtomicInCTransactionBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
12
12
  constructor(_coinConfig) {
13
13
  super(_coinConfig);
14
- // external chain id is P
15
14
  this._externalChainId = utils_1.default.cb58Decode(this.transaction._network.blockchainID);
16
- // chain id is C
17
15
  this.transaction._blockchainID = Buffer.from(utils_1.default.cb58Decode(this.transaction._network.cChainBlockchainID)).toString('hex');
18
16
  }
19
- /**
20
- * C-Chain base fee with decimal places converted from 18 to 9.
21
- *
22
- * @param {string | number} baseFee
23
- */
24
- feeRate(baseFee) {
25
- const fee = BigInt(baseFee);
26
- this.validateFee(fee);
27
- this.transaction._fee.feeRate = Number(fee);
28
- return this;
29
- }
30
17
  /** @inheritdoc */
31
18
  fromImplementation(rawTransaction) {
32
19
  const txBytes = new Uint8Array(Buffer.from(rawTransaction, 'hex'));
@@ -63,4 +50,4 @@ class AtomicInCTransactionBuilder extends atomicTransactionBuilder_1.AtomicTrans
63
50
  }
64
51
  }
65
52
  exports.AtomicInCTransactionBuilder = AtomicInCTransactionBuilder;
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hdG9taWNJbkNUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEseUVBQXNFO0FBRXRFLDhDQUF3RDtBQUN4RCxtREFBdUc7QUFDdkcsb0RBQTRCO0FBRzVCLE1BQXNCLDJCQUE0QixTQUFRLG1EQUF3QjtJQUNoRixZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQix5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakYsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzFDLGVBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FDL0QsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsT0FBd0I7UUFDOUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsY0FBc0I7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssR0FBRyxtQkFBUyxDQUFDLGFBQWEsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFELE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxtQkFBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTFELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxlQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLGlCQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakgsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQkFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxlQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsR0FBVztRQUNyQixJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksZ0NBQXFCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEVBQWM7UUFDeEIsc0NBQXNDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUE3REQsa0VBNkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBldm1TZXJpYWwsIFVuc2lnbmVkVHgsIHV0aWxzIGFzIEZsYXJlVXRpbHMsIGF2bVNlcmlhbCwgQWRkcmVzcyB9IGZyb20gJ0BmbGFyZW5ldHdvcmsvZmxhcmVqcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIC8vIGV4dGVybmFsIGNoYWluIGlkIGlzIFBcbiAgICB0aGlzLl9leHRlcm5hbENoYWluSWQgPSB1dGlscy5jYjU4RGVjb2RlKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYmxvY2tjaGFpbklEKTtcbiAgICAvLyBjaGFpbiBpZCBpcyBDXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklEID0gQnVmZmVyLmZyb20oXG4gICAgICB1dGlscy5jYjU4RGVjb2RlKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuY0NoYWluQmxvY2tjaGFpbklEKVxuICAgICkudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEMtQ2hhaW4gYmFzZSBmZWUgd2l0aCBkZWNpbWFsIHBsYWNlcyBjb252ZXJ0ZWQgZnJvbSAxOCB0byA5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gYmFzZUZlZVxuICAgKi9cbiAgZmVlUmF0ZShiYXNlRmVlOiBzdHJpbmcgfCBudW1iZXIpOiB0aGlzIHtcbiAgICBjb25zdCBmZWUgPSBCaWdJbnQoYmFzZUZlZSk7XG4gICAgdGhpcy52YWxpZGF0ZUZlZShmZWUpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWVSYXRlID0gTnVtYmVyKGZlZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHhCeXRlcyA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHJhd1RyYW5zYWN0aW9uLCAnaGV4JykpO1xuICAgIGNvbnN0IGNvZGVjID0gYXZtU2VyaWFsLmdldEFWTU1hbmFnZXIoKS5nZXREZWZhdWx0Q29kZWMoKTtcbiAgICBjb25zdCBbdHhdID0gZXZtU2VyaWFsLkltcG9ydFR4LmZyb21CeXRlcyh0eEJ5dGVzLCBjb2RlYyk7XG5cbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubWFwKChhKSA9PiBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwKFtbbmV3IEFkZHJlc3MoYSksIDBdXSkpO1xuXG4gICAgY29uc3QgdW5zaWduZWRUeCA9IG5ldyBVbnNpZ25lZFR4KHR4LCBbXSwgbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLCBbXSk7XG4gICAgdGhpcy5pbml0QnVpbGRlcih1bnNpZ25lZFR4KTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGF0IGZlZSBpcyBncmVhdGVyIHRoYW4gMC5cbiAgICogQHBhcmFtIHtiaWdpbnR9IGZlZVxuICAgKi9cbiAgdmFsaWRhdGVGZWUoZmVlOiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAoZmVlIDw9IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRmVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmaWVsZHMgdXNpbmcgdGhlIGRlY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1Vuc2lnbmVkVHh9IHR4IHRoZSB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIGl0c2VsZlxuICAgKi9cbiAgaW5pdEJ1aWxkZXIodHg6IFVuc2lnbmVkVHgpOiB0aGlzIHtcbiAgICAvLyBWYWxpZGF0ZSBuZXR3b3JrIGFuZCBibG9ja2NoYWluIElEc1xuICAgIGNvbnN0IGJhc2VUeCA9IHR4LmdldFR4KCk7XG4gICAgaWYgKGJhc2VUeC5nZXRCbG9ja2NoYWluSWQoKSAhPT0gdGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklEKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Jsb2NrY2hhaW4gSUQgbWlzbWF0Y2gnKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih0eCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbiJdfQ==
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hdG9taWNJbkNUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEseUVBQXNFO0FBRXRFLDhDQUF3RDtBQUN4RCxtREFBdUc7QUFDdkcsb0RBQTRCO0FBRzVCLE1BQXNCLDJCQUE0QixTQUFRLG1EQUF3QjtJQUNoRixZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUMxQyxlQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQy9ELENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsY0FBc0I7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssR0FBRyxtQkFBUyxDQUFDLGFBQWEsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFELE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxtQkFBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTFELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxlQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLGlCQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakgsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQkFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxlQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsR0FBVztRQUNyQixJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksZ0NBQXFCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEVBQWM7UUFDeEIsc0NBQXNDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUEvQ0Qsa0VBK0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBldm1TZXJpYWwsIFVuc2lnbmVkVHgsIHV0aWxzIGFzIEZsYXJlVXRpbHMsIGF2bVNlcmlhbCwgQWRkcmVzcyB9IGZyb20gJ0BmbGFyZW5ldHdvcmsvZmxhcmVqcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IHV0aWxzLmNiNThEZWNvZGUodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ibG9ja2NoYWluSUQpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCA9IEJ1ZmZlci5mcm9tKFxuICAgICAgdXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmNDaGFpbkJsb2NrY2hhaW5JRClcbiAgICApLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBmcm9tSW1wbGVtZW50YXRpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20ocmF3VHJhbnNhY3Rpb24sICdoZXgnKSk7XG4gICAgY29uc3QgY29kZWMgPSBhdm1TZXJpYWwuZ2V0QVZNTWFuYWdlcigpLmdldERlZmF1bHRDb2RlYygpO1xuICAgIGNvbnN0IFt0eF0gPSBldm1TZXJpYWwuSW1wb3J0VHguZnJvbUJ5dGVzKHR4Qnl0ZXMsIGNvZGVjKTtcblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGEpID0+IG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXAoW1tuZXcgQWRkcmVzcyhhKSwgMF1dKSk7XG5cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgodHgsIFtdLCBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyksIFtdKTtcbiAgICB0aGlzLmluaXRCdWlsZGVyKHVuc2lnbmVkVHgpO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgZmVlIGlzIGdyZWF0ZXIgdGhhbiAwLlxuICAgKiBAcGFyYW0ge2JpZ2ludH0gZmVlXG4gICAqL1xuICB2YWxpZGF0ZUZlZShmZWU6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChmZWUgPD0gQmlnSW50KDApKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdGZWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBidWlsZGVyIGZpZWxkcyB1c2luZyB0aGUgZGVjb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSB7VW5zaWduZWRUeH0gdHggdGhlIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMgaXRzZWxmXG4gICAqL1xuICBpbml0QnVpbGRlcih0eDogVW5zaWduZWRUeCk6IHRoaXMge1xuICAgIC8vIFZhbGlkYXRlIG5ldHdvcmsgYW5kIGJsb2NrY2hhaW4gSURzXG4gICAgY29uc3QgYmFzZVR4ID0gdHguZ2V0VHgoKTtcbiAgICBpZiAoYmFzZVR4LmdldEJsb2NrY2hhaW5JZCgpICE9PSB0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYmxvY2tjaGFpbiBJRCBtaXNtYXRjaCcpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKHR4KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuIl19
@@ -2,33 +2,19 @@ import { BaseCoin as CoinConfig } from '@bitgo/statics';
2
2
  import { TransactionType } from '@bitgo/sdk-core';
3
3
  import { TransactionBuilder } from './transactionBuilder';
4
4
  import { Transaction } from './transaction';
5
- import { TransferableInput, Credential, utils as FlareUtils } from '@flarenetwork/flarejs';
5
+ import { Credential, utils as FlareUtils } from '@flarenetwork/flarejs';
6
6
  import { DecodedUtxoObj } from './iface';
7
+ import { FlrpFeeState } from '@bitgo/public-types';
7
8
  export declare abstract class AtomicTransactionBuilder extends TransactionBuilder {
8
9
  protected _externalChainId: Buffer;
9
10
  protected recoverSigner: boolean;
10
11
  constructor(_coinConfig: Readonly<CoinConfig>);
11
- /**
12
- * Create inputs and outputs from UTXOs
13
- * @param {bigint} amount Amount to transfer
14
- * @return {
15
- * inputs: TransferableInput[];
16
- * outputs: TransferableInput[];
17
- * credentials: Credential[];
18
- * }
19
- * @protected
20
- */
21
- protected createInputOutput(amount: bigint): {
22
- inputs: TransferableInput[];
23
- outputs: TransferableInput[];
24
- credentials: Credential[];
25
- };
26
12
  /** @inheritdoc */
27
13
  protected buildImplementation(): Promise<Transaction>;
28
14
  /**
29
15
  * Builds the Flare transaction. Transaction field is changed.
30
16
  */
31
- protected abstract buildFlareTransaction(): void;
17
+ protected abstract buildFlareTransaction(): void | Promise<void>;
32
18
  protected abstract get transactionType(): TransactionType;
33
19
  /**
34
20
  * Fee is fix for AVM atomic tx.
@@ -57,20 +43,60 @@ export declare abstract class AtomicTransactionBuilder extends TransactionBuilde
57
43
  */
58
44
  fee(feeValue: string | bigint): this;
59
45
  /**
60
- * Create credential with dynamic ordering based on addressesIndex from UTXO
61
- * Matches avaxp behavior: signature order depends on UTXO address positions
46
+ * Set the fee state for dynamic fee calculation (P-chain transactions)
47
+ *
48
+ * @param {FlrpFeeState} state - the fee state from the network
49
+ */
50
+ feeState(state: FlrpFeeState): this;
51
+ /**
52
+ * Set the amount for the transaction
53
+ *
54
+ * @param {bigint | string} value - the amount to transfer
55
+ */
56
+ amount(value: bigint | string): this;
57
+ /**
58
+ * Compute addressesIndex for UTXOs following AVAX P approach.
59
+ * addressesIndex[senderIdx] = position of sender[senderIdx] in UTXO's address list
60
+ *
61
+ * Example:
62
+ * A = user key, B = hsm key, C = backup key
63
+ * sender (bitgoAddresses) = [ A, B, C ]
64
+ * utxo.addresses (IMS addresses) = [ B, C, A ]
65
+ * addressesIndex = [ 2, 0, 1 ]
66
+ * (sender[0]=A is at position 2 in UTXO, sender[1]=B is at position 0, etc.)
67
+ *
68
+ * @protected
69
+ */
70
+ protected computeAddressesIndex(): void;
71
+ /**
72
+ * Validate UTXOs have consistent addresses.
73
+ * Note: UTXO threshold can differ from transaction threshold - each UTXO has its own
74
+ * signature requirement based on how it was created (e.g., change outputs may have threshold=1).
75
+ * @protected
76
+ */
77
+ protected validateUtxoAddresses(): void;
78
+ /**
79
+ * Create credential with dynamic ordering based on addressesIndex from UTXO.
80
+ * Matches AVAX P behavior: signature order depends on UTXO address positions.
81
+ *
82
+ * addressesIndex[senderIdx] = utxoPosition tells us where each sender is in the UTXO.
83
+ * We create signature slots ordered by utxoPosition (smaller position = earlier slot).
84
+ *
62
85
  * @param utxo - The UTXO to create credential for
63
- * @param threshold - Number of signatures required
86
+ * @param threshold - Number of signatures required for this specific UTXO
64
87
  * @returns Credential with empty signatures ordered based on UTXO positions
65
88
  * @protected
66
89
  */
67
90
  protected createCredentialForUtxo(utxo: DecodedUtxoObj, threshold: number): Credential;
68
91
  /**
69
- * Create AddressMap based on signature slot order (matching credential order), not sorted addresses
70
- * This matches the approach used in credentials: addressesIndex determines signature order
71
- * AddressMaps should map addresses to signature slots in the same order as credentials
92
+ * Create AddressMap based on addressesIndex following AVAX P approach.
93
+ * Maps each sender address to its signature slot based on UTXO position ordering.
94
+ *
95
+ * addressesIndex[senderIdx] = utxoPosition
96
+ * Signature slots are ordered by utxoPosition (smaller = earlier slot).
97
+ *
72
98
  * @param utxo - The UTXO to create AddressMap for
73
- * @param threshold - Number of signatures required
99
+ * @param threshold - Number of signatures required for this specific UTXO
74
100
  * @returns AddressMap that maps addresses to signature slots based on UTXO order
75
101
  * @protected
76
102
  */
@@ -1 +1 @@
1
- {"version":3,"file":"atomicTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/atomicTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,iBAAiB,EAIjB,UAAU,EAEV,KAAK,IAAI,UAAU,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAUzC,8BAAsB,wBAAyB,SAAQ,kBAAkB;IACvE,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,aAAa,UAAS;gBAEpB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C;;;;;;;;;OASG;IACH,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;QAC3C,MAAM,EAAE,iBAAiB,EAAE,CAAC;QAC5B,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAC7B,WAAW,EAAE,UAAU,EAAE,CAAC;KAC3B;IAqJD,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAY3D;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,qBAAqB,IAAI,IAAI;IAEhD,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D;;;;;OAKG;IACH,SAAS,KAAK,QAAQ,IAAI,MAAM,CAE/B;IAED;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAI1D;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAO/C;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMpC;;;;;;;OAOG;IACH,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU;IAyCtF;;;;;;;;OAQG;IACH,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,UAAU;CAmClG"}
1
+ {"version":3,"file":"atomicTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/atomicTransactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAyB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAW,KAAK,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,8BAAsB,wBAAyB,SAAQ,kBAAkB;IACvE,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,aAAa,UAAS;gBAEpB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAM7C,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAW3D;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,qBAAqB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEhE,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAE1D;;;;;OAKG;IACH,SAAS,KAAK,QAAQ,IAAI,MAAM,CAE/B;IAED;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAI1D;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAO/C;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMpC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKnC;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOpC;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAiBvC;;;;;OAKG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAcvC;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU;IA0CtF;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,UAAU;CAoClG"}