@bitgo-beta/sdk-coin-flrp 1.0.1-beta.266 → 1.0.1-beta.267

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 (120) hide show
  1. package/dist/src/flrp.d.ts +6 -75
  2. package/dist/src/flrp.d.ts.map +1 -1
  3. package/dist/src/flrp.js +13 -298
  4. package/dist/src/index.d.ts +0 -1
  5. package/dist/src/index.d.ts.map +1 -1
  6. package/dist/src/index.js +1 -2
  7. package/dist/src/lib/ExportInCTxBuilder.d.ts +50 -0
  8. package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -0
  9. package/dist/src/lib/ExportInCTxBuilder.js +163 -0
  10. package/dist/src/lib/ExportInPTxBuilder.d.ts +36 -0
  11. package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/ExportInPTxBuilder.js +128 -0
  13. package/dist/src/lib/ImportInCTxBuilder.d.ts +47 -0
  14. package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/ImportInCTxBuilder.js +213 -0
  16. package/dist/src/lib/ImportInPTxBuilder.d.ts +23 -0
  17. package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -0
  18. package/dist/src/lib/ImportInPTxBuilder.js +101 -0
  19. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +18 -16
  20. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
  21. package/dist/src/lib/atomicInCTransactionBuilder.js +38 -36
  22. package/dist/src/lib/atomicTransactionBuilder.d.ts +34 -84
  23. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/atomicTransactionBuilder.js +119 -288
  25. package/dist/src/lib/iface.d.ts +50 -51
  26. package/dist/src/lib/iface.d.ts.map +1 -1
  27. package/dist/src/lib/iface.js +22 -10
  28. package/dist/src/lib/index.d.ts +2 -3
  29. package/dist/src/lib/index.d.ts.map +1 -1
  30. package/dist/src/lib/index.js +5 -6
  31. package/dist/src/lib/keyPair.d.ts +1 -1
  32. package/dist/src/lib/keyPair.d.ts.map +1 -1
  33. package/dist/src/lib/keyPair.js +9 -5
  34. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +32 -67
  35. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
  36. package/dist/src/lib/permissionlessValidatorTxBuilder.js +91 -205
  37. package/dist/src/lib/transaction.d.ts +8 -74
  38. package/dist/src/lib/transaction.d.ts.map +1 -1
  39. package/dist/src/lib/transaction.js +61 -210
  40. package/dist/src/lib/transactionBuilder.d.ts +56 -34
  41. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  42. package/dist/src/lib/transactionBuilder.js +112 -69
  43. package/dist/src/lib/transactionBuilderFactory.d.ts +27 -30
  44. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  45. package/dist/src/lib/transactionBuilderFactory.js +69 -75
  46. package/dist/src/lib/utils.d.ts +58 -157
  47. package/dist/src/lib/utils.d.ts.map +1 -1
  48. package/dist/src/lib/utils.js +134 -399
  49. package/dist/test/resources/transactionData/exportInC.d.ts +20 -0
  50. package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -0
  51. package/dist/test/resources/transactionData/exportInC.js +30 -0
  52. package/dist/test/unit/lib/exportInCTxBuilder.js +92 -513
  53. package/dist/tsconfig.tsbuildinfo +1 -1
  54. package/package.json +9 -11
  55. package/dist/src/iface.d.ts +0 -25
  56. package/dist/src/iface.d.ts.map +0 -1
  57. package/dist/src/iface.js +0 -3
  58. package/dist/src/lib/constants.d.ts +0 -170
  59. package/dist/src/lib/constants.d.ts.map +0 -1
  60. package/dist/src/lib/constants.js +0 -227
  61. package/dist/src/lib/delegatorTxBuilder.d.ts +0 -58
  62. package/dist/src/lib/delegatorTxBuilder.d.ts.map +0 -1
  63. package/dist/src/lib/delegatorTxBuilder.js +0 -224
  64. package/dist/src/lib/errors.d.ts +0 -8
  65. package/dist/src/lib/errors.d.ts.map +0 -1
  66. package/dist/src/lib/errors.js +0 -19
  67. package/dist/src/lib/exportInCTxBuilder.d.ts +0 -77
  68. package/dist/src/lib/exportInCTxBuilder.d.ts.map +0 -1
  69. package/dist/src/lib/exportInCTxBuilder.js +0 -199
  70. package/dist/src/lib/exportInPTxBuilder.d.ts +0 -30
  71. package/dist/src/lib/exportInPTxBuilder.d.ts.map +0 -1
  72. package/dist/src/lib/exportInPTxBuilder.js +0 -120
  73. package/dist/src/lib/importInCTxBuilder.d.ts +0 -67
  74. package/dist/src/lib/importInCTxBuilder.d.ts.map +0 -1
  75. package/dist/src/lib/importInCTxBuilder.js +0 -403
  76. package/dist/src/lib/importInPTxBuilder.d.ts +0 -73
  77. package/dist/src/lib/importInPTxBuilder.d.ts.map +0 -1
  78. package/dist/src/lib/importInPTxBuilder.js +0 -464
  79. package/dist/src/lib/types.d.ts +0 -78
  80. package/dist/src/lib/types.d.ts.map +0 -1
  81. package/dist/src/lib/types.js +0 -5
  82. package/dist/src/lib/validatorTxBuilder.d.ts +0 -40
  83. package/dist/src/lib/validatorTxBuilder.d.ts.map +0 -1
  84. package/dist/src/lib/validatorTxBuilder.js +0 -180
  85. package/dist/test/unit/delegatorTxBuilder.test.d.ts +0 -2
  86. package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +0 -1
  87. package/dist/test/unit/delegatorTxBuilder.test.js +0 -233
  88. package/dist/test/unit/flrp.d.ts +0 -2
  89. package/dist/test/unit/flrp.d.ts.map +0 -1
  90. package/dist/test/unit/flrp.js +0 -118
  91. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts +0 -2
  92. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts.map +0 -1
  93. package/dist/test/unit/lib/atomicTransactionBuilder.js +0 -222
  94. package/dist/test/unit/lib/exportInPTxBuilder.d.ts +0 -2
  95. package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +0 -1
  96. package/dist/test/unit/lib/exportInPTxBuilder.js +0 -377
  97. package/dist/test/unit/lib/importInCTxBuilder.d.ts +0 -2
  98. package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +0 -1
  99. package/dist/test/unit/lib/importInCTxBuilder.js +0 -258
  100. package/dist/test/unit/lib/importInPTxBuilder.d.ts +0 -2
  101. package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +0 -1
  102. package/dist/test/unit/lib/importInPTxBuilder.js +0 -501
  103. package/dist/test/unit/lib/transaction.d.ts +0 -2
  104. package/dist/test/unit/lib/transaction.d.ts.map +0 -1
  105. package/dist/test/unit/lib/transaction.js +0 -460
  106. package/dist/test/unit/lib/utils.d.ts +0 -2
  107. package/dist/test/unit/lib/utils.d.ts.map +0 -1
  108. package/dist/test/unit/lib/utils.js +0 -365
  109. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +0 -2
  110. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +0 -1
  111. package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +0 -271
  112. package/dist/test/unit/smoke.d.ts +0 -2
  113. package/dist/test/unit/smoke.d.ts.map +0 -1
  114. package/dist/test/unit/smoke.js +0 -23
  115. package/dist/test/unit/transactionBuilder.test.d.ts +0 -2
  116. package/dist/test/unit/transactionBuilder.test.d.ts.map +0 -1
  117. package/dist/test/unit/transactionBuilder.test.js +0 -114
  118. package/dist/test/unit/validatorTxBuilder.test.d.ts +0 -2
  119. package/dist/test/unit/validatorTxBuilder.test.d.ts.map +0 -1
  120. package/dist/test/unit/validatorTxBuilder.test.js +0 -293
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ImportInCTxBuilder = void 0;
7
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const atomicInCTransactionBuilder_1 = require("./atomicInCTransactionBuilder");
9
+ const flarejs_1 = require("@flarenetwork/flarejs");
10
+ const utils_1 = __importDefault(require("./utils"));
11
+ const iface_1 = require("./iface");
12
+ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransactionBuilder {
13
+ constructor(_coinConfig) {
14
+ super(_coinConfig);
15
+ }
16
+ /**
17
+ * C-chain address who is target of the import.
18
+ * Address format is eth like
19
+ * @param {string} cAddress
20
+ */
21
+ to(cAddress) {
22
+ this.transaction._to = [utils_1.default.parseAddress(cAddress)];
23
+ return this;
24
+ }
25
+ get transactionType() {
26
+ return sdk_core_1.TransactionType.Import;
27
+ }
28
+ initBuilder(tx) {
29
+ const baseTx = tx;
30
+ if (!this.verifyTxType(baseTx._type)) {
31
+ throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
32
+ }
33
+ // The outputs is a single C-Chain address result.
34
+ // It's expected to have only one output to the destination C-Chain address.
35
+ const outputs = baseTx.Outs;
36
+ if (outputs.length !== 1) {
37
+ throw new sdk_core_1.BuildTransactionError('Transaction can have one output');
38
+ }
39
+ const output = outputs[0];
40
+ const assetIdStr = Buffer.from(this.transaction._assetId).toString('hex');
41
+ if (Buffer.from(output.assetId.toBytes()).toString('hex') !== assetIdStr) {
42
+ throw new Error('AssetID are not equals');
43
+ }
44
+ this.transaction._to = [Buffer.from(output.address.toBytes())];
45
+ const inputs = baseTx.importedInputs;
46
+ this.transaction._utxos = this.recoverUtxos(inputs);
47
+ // Calculate total input and output amounts
48
+ const totalInputAmount = inputs.reduce((t, i) => t + i.amount(), BigInt(0));
49
+ const totalOutputAmount = output.amount.value();
50
+ // Calculate fee based on input/output difference
51
+ const fee = totalInputAmount - totalOutputAmount;
52
+ const feeSize = this.calculateFeeSize(baseTx);
53
+ const feeRate = Number(fee) / feeSize;
54
+ this.transaction._fee = {
55
+ fee: fee.toString(),
56
+ feeRate: feeRate,
57
+ size: feeSize,
58
+ };
59
+ this.transaction.setTransaction(tx);
60
+ return this;
61
+ }
62
+ static verifyTxType(txnType) {
63
+ return txnType === iface_1.FlareTransactionType.PvmImportTx;
64
+ }
65
+ verifyTxType(txnType) {
66
+ return ImportInCTxBuilder.verifyTxType(txnType);
67
+ }
68
+ /**
69
+ * Build the import in C-chain transaction
70
+ * @protected
71
+ */
72
+ buildFlareTransaction() {
73
+ // if tx has credentials, tx shouldn't change
74
+ if (this.transaction.hasCredentials)
75
+ return;
76
+ if (this.transaction._to.length !== 1) {
77
+ throw new Error('to is required');
78
+ }
79
+ if (!this.transaction._fee.feeRate) {
80
+ throw new Error('fee rate is required');
81
+ }
82
+ const { inputs, amount, credentials } = this.createInputs();
83
+ // Calculate fee
84
+ const feeRate = BigInt(this.transaction._fee.feeRate);
85
+ const feeSize = this.calculateFeeSize();
86
+ const fee = feeRate * BigInt(feeSize);
87
+ this.transaction._fee.fee = fee.toString();
88
+ this.transaction._fee.size = feeSize;
89
+ // Create output with required interface implementation
90
+ const output = {
91
+ _type: flarejs_1.TypeSymbols.BaseTx,
92
+ address: new flarejs_1.Address(this.transaction._to[0]),
93
+ amount: new flarejs_1.BigIntPr(amount - fee),
94
+ assetId: new flarejs_1.Id(new Uint8Array(Buffer.from(this.transaction._assetId, 'hex'))),
95
+ toBytes: () => new Uint8Array(),
96
+ };
97
+ // Create the import transaction
98
+ const importTx = new flarejs_1.evmSerial.ImportTx(new flarejs_1.Int(this.transaction._networkID), new flarejs_1.Id(new Uint8Array(Buffer.from(this.transaction._blockchainID, 'hex'))), new flarejs_1.Id(new Uint8Array(this._externalChainId)), inputs, [output]);
99
+ // Create unsigned transaction
100
+ const addressMap = new flarejs_1.utils.AddressMap([[new flarejs_1.Address(this.transaction._fromAddresses[0]), 0]]);
101
+ const addressMaps = new flarejs_1.utils.AddressMaps([addressMap]);
102
+ const unsignedTx = new flarejs_1.UnsignedTx(importTx, [], // Empty UTXOs array, will be filled during processing
103
+ addressMaps, credentials);
104
+ this.transaction.setTransaction(unsignedTx);
105
+ }
106
+ /**
107
+ * Create inputs from UTXOs
108
+ * @return {
109
+ * inputs: TransferableInput[];
110
+ * credentials: Credential[];
111
+ * amount: bigint;
112
+ * }
113
+ */
114
+ createInputs() {
115
+ const sender = this.transaction._fromAddresses.slice();
116
+ if (this.recoverSigner) {
117
+ // switch first and last signer
118
+ const tmp = sender.pop();
119
+ sender.push(sender[0]);
120
+ if (tmp) {
121
+ sender[0] = tmp;
122
+ }
123
+ }
124
+ let totalAmount = BigInt(0);
125
+ const inputs = [];
126
+ const credentials = [];
127
+ this.transaction._utxos.forEach((utxo) => {
128
+ const amount = BigInt(utxo.amount);
129
+ totalAmount += amount;
130
+ // Create input with proper interface implementation
131
+ const input = {
132
+ _type: flarejs_1.TypeSymbols.Input,
133
+ amount: () => amount,
134
+ sigIndices: sender.map((_, i) => i),
135
+ toBytes: () => new Uint8Array(),
136
+ };
137
+ // Create TransferableInput with proper UTXOID implementation
138
+ const txId = new flarejs_1.Id(new Uint8Array(Buffer.from(utxo.txid, 'hex')));
139
+ const outputIdxInt = new flarejs_1.Int(Number(utxo.outputidx));
140
+ const outputIdxBytes = new Uint8Array(Buffer.alloc(4));
141
+ new DataView(outputIdxBytes.buffer).setInt32(0, Number(utxo.outputidx), true);
142
+ const outputIdxId = new flarejs_1.Id(outputIdxBytes);
143
+ // Create asset with complete Amounter interface
144
+ const assetIdBytes = new Uint8Array(Buffer.from(this.transaction._assetId, 'hex'));
145
+ const assetId = {
146
+ _type: flarejs_1.TypeSymbols.BaseTx,
147
+ amount: () => amount,
148
+ toBytes: () => assetIdBytes,
149
+ toString: () => Buffer.from(assetIdBytes).toString('hex'),
150
+ };
151
+ // Create TransferableInput with UTXOID using Int for outputIdx
152
+ const transferableInput = new flarejs_1.TransferableInput({
153
+ _type: flarejs_1.TypeSymbols.UTXOID,
154
+ txID: txId,
155
+ outputIdx: outputIdxInt,
156
+ ID: () => utxo.txid,
157
+ toBytes: () => new Uint8Array(),
158
+ }, outputIdxId, // Use Id type for TransferableInput constructor
159
+ assetId // Use asset with complete Amounter interface
160
+ );
161
+ // Set input properties
162
+ Object.assign(transferableInput, { input });
163
+ inputs.push(transferableInput);
164
+ // Create empty credential for each input
165
+ const emptySignatures = sender.map(() => utils_1.default.createNewSig(''));
166
+ const credential = new flarejs_1.Credential(emptySignatures);
167
+ credentials.push(credential);
168
+ });
169
+ return {
170
+ inputs,
171
+ credentials,
172
+ amount: totalAmount,
173
+ };
174
+ }
175
+ /**
176
+ * Calculate the fee size for the transaction
177
+ */
178
+ calculateFeeSize(tx) {
179
+ // If tx is provided, calculate based on actual transaction size
180
+ if (tx) {
181
+ const codec = flarejs_1.avmSerial.getAVMManager().getDefaultCodec();
182
+ return tx.toBytes(codec).length;
183
+ }
184
+ // Otherwise estimate based on typical import transaction size
185
+ const baseSize = 256; // Base transaction size
186
+ const inputSize = 128; // Size per input
187
+ const outputSize = 64; // Size per output
188
+ const numInputs = this.transaction._utxos.length;
189
+ const numOutputs = 1; // Import tx always has 1 output
190
+ return baseSize + inputSize * numInputs + outputSize * numOutputs;
191
+ }
192
+ /**
193
+ * Recover UTXOs from imported inputs
194
+ * @param importedInputs Array of transferable inputs
195
+ * @returns Array of decoded UTXO objects
196
+ */
197
+ recoverUtxos(importedInputs) {
198
+ return importedInputs.map((input) => {
199
+ const txid = input.utxoID.toString();
200
+ const outputidx = input.utxoID.outputIdx.toString();
201
+ return {
202
+ outputID: iface_1.SECP256K1_Transfer_Output,
203
+ amount: input.amount().toString(),
204
+ txid: utils_1.default.cb58Encode(Buffer.from(txid, 'hex')),
205
+ outputidx: outputidx,
206
+ threshold: this.transaction._threshold,
207
+ addresses: this.transaction._fromAddresses.map((addr) => utils_1.default.addressToString(this.transaction._network.hrp, this.transaction._network.alias, Buffer.from(addr))),
208
+ };
209
+ });
210
+ }
211
+ }
212
+ exports.ImportInCTxBuilder = ImportInCTxBuilder;
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQTRGO0FBQzVGLCtFQUE0RTtBQUM1RSxtREFZK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLHlEQUEyQjtJQUNqRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEVBQUUsQ0FBQyxRQUFnQjtRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDLGVBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQU07UUFDaEIsTUFBTSxNQUFNLEdBQUcsRUFBd0IsQ0FBQztRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksdUJBQVksQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFFRCxrREFBa0Q7UUFDbEQsNEVBQTRFO1FBQzVFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUIsTUFBTSxVQUFV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Q0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3RELGVBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3pHO2FBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBM1BELGdEQTJQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgTm90U3VwcG9ydGVkLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBBdG9taWNJbkNUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0b21pY0luQ1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBldm1TZXJpYWwsXG4gIFVuc2lnbmVkVHgsXG4gIENyZWRlbnRpYWwsXG4gIEJpZ0ludFByLFxuICBJbnQsXG4gIElkLFxuICBUcmFuc2ZlcmFibGVJbnB1dCxcbiAgVHlwZVN5bWJvbHMsXG4gIEFkZHJlc3MsXG4gIHV0aWxzIGFzIEZsYXJlVXRpbHMsXG4gIGF2bVNlcmlhbCxcbn0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IERlY29kZWRVdHhvT2JqLCBGbGFyZVRyYW5zYWN0aW9uVHlwZSwgU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCwgVHggfSBmcm9tICcuL2lmYWNlJztcblxuZXhwb3J0IGNsYXNzIEltcG9ydEluQ1R4QnVpbGRlciBleHRlbmRzIEF0b21pY0luQ1RyYW5zYWN0aW9uQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDLWNoYWluIGFkZHJlc3Mgd2hvIGlzIHRhcmdldCBvZiB0aGUgaW1wb3J0LlxuICAgKiBBZGRyZXNzIGZvcm1hdCBpcyBldGggbGlrZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY0FkZHJlc3NcbiAgICovXG4gIHRvKGNBZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90byA9IFt1dGlscy5wYXJzZUFkZHJlc3MoY0FkZHJlc3MpXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQ7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHgpOiB0aGlzIHtcbiAgICBjb25zdCBiYXNlVHggPSB0eCBhcyBldm1TZXJpYWwuSW1wb3J0VHg7XG4gICAgaWYgKCF0aGlzLnZlcmlmeVR4VHlwZShiYXNlVHguX3R5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIG91dHB1dHMgaXMgYSBzaW5nbGUgQy1DaGFpbiBhZGRyZXNzIHJlc3VsdC5cbiAgICAvLyBJdCdzIGV4cGVjdGVkIHRvIGhhdmUgb25seSBvbmUgb3V0cHV0IHRvIHRoZSBkZXN0aW5hdGlvbiBDLUNoYWluIGFkZHJlc3MuXG4gICAgY29uc3Qgb3V0cHV0cyA9IGJhc2VUeC5PdXRzO1xuICAgIGlmIChvdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY2FuIGhhdmUgb25lIG91dHB1dCcpO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzWzBdO1xuXG4gICAgY29uc3QgYXNzZXRJZFN0ciA9IEJ1ZmZlci5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBpZiAoQnVmZmVyLmZyb20ob3V0cHV0LmFzc2V0SWQudG9CeXRlcygpKS50b1N0cmluZygnaGV4JykgIT09IGFzc2V0SWRTdHIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXNzZXRJRCBhcmUgbm90IGVxdWFscycpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90byA9IFtCdWZmZXIuZnJvbShvdXRwdXQuYWRkcmVzcy50b0J5dGVzKCkpXTtcblxuICAgIGNvbnN0IGlucHV0cyA9IGJhc2VUeC5pbXBvcnRlZElucHV0cztcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcyA9IHRoaXMucmVjb3ZlclV0eG9zKGlucHV0cyk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdG90YWwgaW5wdXQgYW5kIG91dHB1dCBhbW91bnRzXG4gICAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IGlucHV0cy5yZWR1Y2UoKHQsIGkpID0+IHQgKyBpLmFtb3VudCgpLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IHRvdGFsT3V0cHV0QW1vdW50ID0gb3V0cHV0LmFtb3VudC52YWx1ZSgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGZlZSBiYXNlZCBvbiBpbnB1dC9vdXRwdXQgZGlmZmVyZW5jZVxuICAgIGNvbnN0IGZlZSA9IHRvdGFsSW5wdXRBbW91bnQgLSB0b3RhbE91dHB1dEFtb3VudDtcbiAgICBjb25zdCBmZWVTaXplID0gdGhpcy5jYWxjdWxhdGVGZWVTaXplKGJhc2VUeCk7XG4gICAgY29uc3QgZmVlUmF0ZSA9IE51bWJlcihmZWUpIC8gZmVlU2l6ZTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZSA9IHtcbiAgICAgIGZlZTogZmVlLnRvU3RyaW5nKCksXG4gICAgICBmZWVSYXRlOiBmZWVSYXRlLFxuICAgICAgc2l6ZTogZmVlU2l6ZSxcbiAgICB9O1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih0eCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eG5UeXBlID09PSBGbGFyZVRyYW5zYWN0aW9uVHlwZS5Qdm1JbXBvcnRUeDtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSW1wb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eG5UeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgaW1wb3J0IGluIEMtY2hhaW4gdHJhbnNhY3Rpb25cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpOiB2b2lkIHtcbiAgICAvLyBpZiB0eCBoYXMgY3JlZGVudGlhbHMsIHR4IHNob3VsZG4ndCBjaGFuZ2VcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5oYXNDcmVkZW50aWFscykgcmV0dXJuO1xuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLl90by5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndG8gaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlUmF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmZWUgcmF0ZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgaW5wdXRzLCBhbW91bnQsIGNyZWRlbnRpYWxzIH0gPSB0aGlzLmNyZWF0ZUlucHV0cygpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGZlZVxuICAgIGNvbnN0IGZlZVJhdGUgPSBCaWdJbnQodGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZVJhdGUpO1xuICAgIGNvbnN0IGZlZVNpemUgPSB0aGlzLmNhbGN1bGF0ZUZlZVNpemUoKTtcbiAgICBjb25zdCBmZWUgPSBmZWVSYXRlICogQmlnSW50KGZlZVNpemUpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUgPSBmZWUudG9TdHJpbmcoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUuc2l6ZSA9IGZlZVNpemU7XG5cbiAgICAvLyBDcmVhdGUgb3V0cHV0IHdpdGggcmVxdWlyZWQgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gICAgY29uc3Qgb3V0cHV0ID0ge1xuICAgICAgX3R5cGU6IFR5cGVTeW1ib2xzLkJhc2VUeCxcbiAgICAgIGFkZHJlc3M6IG5ldyBBZGRyZXNzKHRoaXMudHJhbnNhY3Rpb24uX3RvWzBdKSxcbiAgICAgIGFtb3VudDogbmV3IEJpZ0ludFByKGFtb3VudCAtIGZlZSksXG4gICAgICBhc3NldElkOiBuZXcgSWQobmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKSksXG4gICAgICB0b0J5dGVzOiAoKSA9PiBuZXcgVWludDhBcnJheSgpLFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgdGhlIGltcG9ydCB0cmFuc2FjdGlvblxuICAgIGNvbnN0IGltcG9ydFR4ID0gbmV3IGV2bVNlcmlhbC5JbXBvcnRUeChcbiAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lEKSxcbiAgICAgIG5ldyBJZChuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQsICdoZXgnKSkpLFxuICAgICAgbmV3IElkKG5ldyBVaW50OEFycmF5KHRoaXMuX2V4dGVybmFsQ2hhaW5JZCkpLFxuICAgICAgaW5wdXRzLFxuICAgICAgW291dHB1dF1cbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIHVuc2lnbmVkIHRyYW5zYWN0aW9uXG4gICAgY29uc3QgYWRkcmVzc01hcCA9IG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXAoW1tuZXcgQWRkcmVzcyh0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzWzBdKSwgMF1dKTtcbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXBzKFthZGRyZXNzTWFwXSk7XG5cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoXG4gICAgICBpbXBvcnRUeCxcbiAgICAgIFtdLCAvLyBFbXB0eSBVVFhPcyBhcnJheSwgd2lsbCBiZSBmaWxsZWQgZHVyaW5nIHByb2Nlc3NpbmdcbiAgICAgIGFkZHJlc3NNYXBzLFxuICAgICAgY3JlZGVudGlhbHNcbiAgICApO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbih1bnNpZ25lZFR4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgaW5wdXRzIGZyb20gVVRYT3NcbiAgICogQHJldHVybiB7XG4gICAqICAgICBpbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W107XG4gICAqICAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICAgKiAgICAgYW1vdW50OiBiaWdpbnQ7XG4gICAqIH1cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVJbnB1dHMoKToge1xuICAgIGlucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXTtcbiAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICAgIGFtb3VudDogYmlnaW50O1xuICB9IHtcbiAgICBjb25zdCBzZW5kZXIgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLnNsaWNlKCk7XG4gICAgaWYgKHRoaXMucmVjb3ZlclNpZ25lcikge1xuICAgICAgLy8gc3dpdGNoIGZpcnN0IGFuZCBsYXN0IHNpZ25lclxuICAgICAgY29uc3QgdG1wID0gc2VuZGVyLnBvcCgpO1xuICAgICAgc2VuZGVyLnB1c2goc2VuZGVyWzBdKTtcbiAgICAgIGlmICh0bXApIHtcbiAgICAgICAgc2VuZGVyWzBdID0gdG1wO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB0b3RhbEFtb3VudCA9IEJpZ0ludCgwKTtcbiAgICBjb25zdCBpbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W10gPSBbXTtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdID0gW107XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5mb3JFYWNoKCh1dHhvKSA9PiB7XG4gICAgICBjb25zdCBhbW91bnQgPSBCaWdJbnQodXR4by5hbW91bnQpO1xuICAgICAgdG90YWxBbW91bnQgKz0gYW1vdW50O1xuXG4gICAgICAvLyBDcmVhdGUgaW5wdXQgd2l0aCBwcm9wZXIgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCBpbnB1dCA9IHtcbiAgICAgICAgX3R5cGU6IFR5cGVTeW1ib2xzLklucHV0LFxuICAgICAgICBhbW91bnQ6ICgpID0+IGFtb3VudCxcbiAgICAgICAgc2lnSW5kaWNlczogc2VuZGVyLm1hcCgoXywgaSkgPT4gaSksXG4gICAgICAgIHRvQnl0ZXM6ICgpID0+IG5ldyBVaW50OEFycmF5KCksXG4gICAgICB9O1xuXG4gICAgICAvLyBDcmVhdGUgVHJhbnNmZXJhYmxlSW5wdXQgd2l0aCBwcm9wZXIgVVRYT0lEIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCB0eElkID0gbmV3IElkKG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKHV0eG8udHhpZCwgJ2hleCcpKSk7XG4gICAgICBjb25zdCBvdXRwdXRJZHhJbnQgPSBuZXcgSW50KE51bWJlcih1dHhvLm91dHB1dGlkeCkpO1xuICAgICAgY29uc3Qgb3V0cHV0SWR4Qnl0ZXMgPSBuZXcgVWludDhBcnJheShCdWZmZXIuYWxsb2MoNCkpO1xuICAgICAgbmV3IERhdGFWaWV3KG91dHB1dElkeEJ5dGVzLmJ1ZmZlcikuc2V0SW50MzIoMCwgTnVtYmVyKHV0eG8ub3V0cHV0aWR4KSwgdHJ1ZSk7XG4gICAgICBjb25zdCBvdXRwdXRJZHhJZCA9IG5ldyBJZChvdXRwdXRJZHhCeXRlcyk7XG5cbiAgICAgIC8vIENyZWF0ZSBhc3NldCB3aXRoIGNvbXBsZXRlIEFtb3VudGVyIGludGVyZmFjZVxuICAgICAgY29uc3QgYXNzZXRJZEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcbiAgICAgIGNvbnN0IGFzc2V0SWQgPSB7XG4gICAgICAgIF90eXBlOiBUeXBlU3ltYm9scy5CYXNlVHgsXG4gICAgICAgIGFtb3VudDogKCkgPT4gYW1vdW50LFxuICAgICAgICB0b0J5dGVzOiAoKSA9PiBhc3NldElkQnl0ZXMsXG4gICAgICAgIHRvU3RyaW5nOiAoKSA9PiBCdWZmZXIuZnJvbShhc3NldElkQnl0ZXMpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH07XG5cbiAgICAgIC8vIENyZWF0ZSBUcmFuc2ZlcmFibGVJbnB1dCB3aXRoIFVUWE9JRCB1c2luZyBJbnQgZm9yIG91dHB1dElkeFxuICAgICAgY29uc3QgdHJhbnNmZXJhYmxlSW5wdXQgPSBuZXcgVHJhbnNmZXJhYmxlSW5wdXQoXG4gICAgICAgIHtcbiAgICAgICAgICBfdHlwZTogVHlwZVN5bWJvbHMuVVRYT0lELFxuICAgICAgICAgIHR4SUQ6IHR4SWQsXG4gICAgICAgICAgb3V0cHV0SWR4OiBvdXRwdXRJZHhJbnQsXG4gICAgICAgICAgSUQ6ICgpID0+IHV0eG8udHhpZCxcbiAgICAgICAgICB0b0J5dGVzOiAoKSA9PiBuZXcgVWludDhBcnJheSgpLFxuICAgICAgICB9LFxuICAgICAgICBvdXRwdXRJZHhJZCwgLy8gVXNlIElkIHR5cGUgZm9yIFRyYW5zZmVyYWJsZUlucHV0IGNvbnN0cnVjdG9yXG4gICAgICAgIGFzc2V0SWQgLy8gVXNlIGFzc2V0IHdpdGggY29tcGxldGUgQW1vdW50ZXIgaW50ZXJmYWNlXG4gICAgICApO1xuXG4gICAgICAvLyBTZXQgaW5wdXQgcHJvcGVydGllc1xuICAgICAgT2JqZWN0LmFzc2lnbih0cmFuc2ZlcmFibGVJbnB1dCwgeyBpbnB1dCB9KTtcbiAgICAgIGlucHV0cy5wdXNoKHRyYW5zZmVyYWJsZUlucHV0KTtcblxuICAgICAgLy8gQ3JlYXRlIGVtcHR5IGNyZWRlbnRpYWwgZm9yIGVhY2ggaW5wdXRcbiAgICAgIGNvbnN0IGVtcHR5U2lnbmF0dXJlcyA9IHNlbmRlci5tYXAoKCkgPT4gdXRpbHMuY3JlYXRlTmV3U2lnKCcnKSk7XG4gICAgICBjb25zdCBjcmVkZW50aWFsID0gbmV3IENyZWRlbnRpYWwoZW1wdHlTaWduYXR1cmVzKTtcbiAgICAgIGNyZWRlbnRpYWxzLnB1c2goY3JlZGVudGlhbCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXRzLFxuICAgICAgY3JlZGVudGlhbHMsXG4gICAgICBhbW91bnQ6IHRvdGFsQW1vdW50LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBmZWUgc2l6ZSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZUZlZVNpemUodHg/OiBldm1TZXJpYWwuSW1wb3J0VHgpOiBudW1iZXIge1xuICAgIC8vIElmIHR4IGlzIHByb3ZpZGVkLCBjYWxjdWxhdGUgYmFzZWQgb24gYWN0dWFsIHRyYW5zYWN0aW9uIHNpemVcbiAgICBpZiAodHgpIHtcbiAgICAgIGNvbnN0IGNvZGVjID0gYXZtU2VyaWFsLmdldEFWTU1hbmFnZXIoKS5nZXREZWZhdWx0Q29kZWMoKTtcbiAgICAgIHJldHVybiB0eC50b0J5dGVzKGNvZGVjKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIGVzdGltYXRlIGJhc2VkIG9uIHR5cGljYWwgaW1wb3J0IHRyYW5zYWN0aW9uIHNpemVcbiAgICBjb25zdCBiYXNlU2l6ZSA9IDI1NjsgLy8gQmFzZSB0cmFuc2FjdGlvbiBzaXplXG4gICAgY29uc3QgaW5wdXRTaXplID0gMTI4OyAvLyBTaXplIHBlciBpbnB1dFxuICAgIGNvbnN0IG91dHB1dFNpemUgPSA2NDsgLy8gU2l6ZSBwZXIgb3V0cHV0XG4gICAgY29uc3QgbnVtSW5wdXRzID0gdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MubGVuZ3RoO1xuICAgIGNvbnN0IG51bU91dHB1dHMgPSAxOyAvLyBJbXBvcnQgdHggYWx3YXlzIGhhcyAxIG91dHB1dFxuXG4gICAgcmV0dXJuIGJhc2VTaXplICsgaW5wdXRTaXplICogbnVtSW5wdXRzICsgb3V0cHV0U2l6ZSAqIG51bU91dHB1dHM7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBVVFhPcyBmcm9tIGltcG9ydGVkIGlucHV0c1xuICAgKiBAcGFyYW0gaW1wb3J0ZWRJbnB1dHMgQXJyYXkgb2YgdHJhbnNmZXJhYmxlIGlucHV0c1xuICAgKiBAcmV0dXJucyBBcnJheSBvZiBkZWNvZGVkIFVUWE8gb2JqZWN0c1xuICAgKi9cbiAgcHJpdmF0ZSByZWNvdmVyVXR4b3MoaW1wb3J0ZWRJbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W10pOiBEZWNvZGVkVXR4b09ialtdIHtcbiAgICByZXR1cm4gaW1wb3J0ZWRJbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdHhpZCA9IGlucHV0LnV0eG9JRC50b1N0cmluZygpO1xuICAgICAgY29uc3Qgb3V0cHV0aWR4ID0gaW5wdXQudXR4b0lELm91dHB1dElkeC50b1N0cmluZygpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXRJRDogU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCxcbiAgICAgICAgYW1vdW50OiBpbnB1dC5hbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICB0eGlkOiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHR4aWQsICdoZXgnKSksXG4gICAgICAgIG91dHB1dGlkeDogb3V0cHV0aWR4LFxuICAgICAgICB0aHJlc2hvbGQ6IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCxcbiAgICAgICAgYWRkcmVzc2VzOiB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLm1hcCgoYWRkcikgPT5cbiAgICAgICAgICB1dGlscy5hZGRyZXNzVG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ocnAsIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYWxpYXMsIEJ1ZmZlci5mcm9tKGFkZHIpKVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,23 @@
1
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
2
+ import { TransactionType } from '@bitgo-beta/sdk-core';
3
+ import { AtomicTransactionBuilder } from './atomicTransactionBuilder';
4
+ import { Tx } from './iface';
5
+ export declare class ImportInPTxBuilder extends AtomicTransactionBuilder {
6
+ constructor(_coinConfig: Readonly<CoinConfig>);
7
+ protected get transactionType(): TransactionType;
8
+ initBuilder(tx: Tx): this;
9
+ static verifyTxType(txnType: string): boolean;
10
+ verifyTxType(txnType: string): boolean;
11
+ /**
12
+ * Build the import transaction
13
+ * @protected
14
+ */
15
+ protected buildFlareTransaction(): void;
16
+ /**
17
+ * Recover UTXOs from imported inputs
18
+ * @param importedInputs Array of transferable inputs
19
+ * @returns Array of decoded UTXO objects
20
+ */
21
+ private recoverUtxos;
22
+ }
23
+ //# sourceMappingURL=ImportInPTxBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImportInPTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/ImportInPTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAuC,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAYtE,OAAO,EAAmE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE9F,qBAAa,kBAAmB,SAAQ,wBAAwB;gBAClD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAU7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IAsCzB,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAItC;;;OAGG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAqCvC;;;;OAIG;IACH,OAAO,CAAC,YAAY;CAiBrB"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ImportInPTxBuilder = void 0;
7
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const atomicTransactionBuilder_1 = require("./atomicTransactionBuilder");
9
+ const flarejs_1 = require("@flarenetwork/flarejs");
10
+ const utils_1 = __importDefault(require("./utils"));
11
+ const iface_1 = require("./iface");
12
+ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
13
+ constructor(_coinConfig) {
14
+ super(_coinConfig);
15
+ // external chain id is P
16
+ this._externalChainId = utils_1.default.cb58Decode(this.transaction._network.blockchainID);
17
+ // chain id is C
18
+ this.transaction._blockchainID = Buffer.from(utils_1.default.cb58Decode(this.transaction._network.cChainBlockchainID)).toString('hex');
19
+ }
20
+ get transactionType() {
21
+ return sdk_core_1.TransactionType.Import;
22
+ }
23
+ initBuilder(tx) {
24
+ const baseTx = tx;
25
+ if (!this.verifyTxType(baseTx._type)) {
26
+ throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
27
+ }
28
+ // The regular change output is the tx output in Import tx.
29
+ // createInputOutput results in a single item array.
30
+ // It's expected to have only one output with the addresses of the sender.
31
+ const outputs = baseTx.Outs;
32
+ if (outputs.length !== 1) {
33
+ throw new sdk_core_1.BuildTransactionError('Transaction can have one external output');
34
+ }
35
+ const output = outputs[0];
36
+ const assetId = output.assetId.toBytes();
37
+ if (Buffer.compare(assetId, Buffer.from(this.transaction._assetId)) !== 0) {
38
+ throw new Error('The Asset ID of the output does not match the transaction');
39
+ }
40
+ // Set locktime to 0 since it's not used in EVM outputs
41
+ this.transaction._locktime = BigInt(0);
42
+ // Set threshold to 1 since EVM outputs only have one address
43
+ this.transaction._threshold = 1;
44
+ // Convert output address to buffer and set as fromAddress
45
+ this.transaction._fromAddresses = [Buffer.from(output.address.toBytes())];
46
+ // Set external chain ID from the source chain
47
+ this._externalChainId = Buffer.from(baseTx.sourceChain.toString());
48
+ // Recover UTXOs from imported inputs
49
+ this.transaction._utxos = this.recoverUtxos(baseTx.importedInputs);
50
+ return this;
51
+ }
52
+ static verifyTxType(txnType) {
53
+ return txnType === iface_1.FlareTransactionType.PvmImportTx;
54
+ }
55
+ verifyTxType(txnType) {
56
+ return ImportInPTxBuilder.verifyTxType(txnType);
57
+ }
58
+ /**
59
+ * Build the import transaction
60
+ * @protected
61
+ */
62
+ buildFlareTransaction() {
63
+ // if tx has credentials, tx shouldn't change
64
+ if (this.transaction.hasCredentials)
65
+ return;
66
+ const { inputs, credentials } = this.createInputOutput(BigInt(this.transaction.fee.fee));
67
+ // Convert TransferableInput to evmSerial.Output
68
+ const evmOutputs = inputs.map((input) => {
69
+ return new flarejs_1.evmSerial.Output(new flarejs_1.Address(this.transaction._fromAddresses[0]), new flarejs_1.BigIntPr(input.input.amount()), new flarejs_1.Id(input.assetId.toBytes()));
70
+ });
71
+ // Create the import transaction
72
+ const importTx = new flarejs_1.evmSerial.ImportTx(new flarejs_1.Int(this.transaction._networkID), flarejs_1.Id.fromString(this.transaction._blockchainID.toString()), flarejs_1.Id.fromString(this._externalChainId.toString()), inputs, evmOutputs);
73
+ const addressMaps = this.transaction._fromAddresses.map((a) => new flarejs_1.utils.AddressMap([[new flarejs_1.Address(a), 0]]));
74
+ // Create unsigned transaction
75
+ const unsignedTx = new flarejs_1.UnsignedTx(importTx, [], // Empty UTXOs array, will be filled during processing
76
+ new flarejs_1.utils.AddressMaps(addressMaps), credentials);
77
+ this.transaction.setTransaction(unsignedTx);
78
+ }
79
+ /**
80
+ * Recover UTXOs from imported inputs
81
+ * @param importedInputs Array of transferable inputs
82
+ * @returns Array of decoded UTXO objects
83
+ */
84
+ recoverUtxos(importedInputs) {
85
+ return importedInputs.map((input) => {
86
+ const utxoId = input.utxoID;
87
+ const transferInput = input.input;
88
+ const utxo = {
89
+ outputID: iface_1.SECP256K1_Transfer_Output,
90
+ amount: transferInput.amount.toString(),
91
+ txid: utils_1.default.cb58Encode(Buffer.from(utxoId.ID.toString())),
92
+ outputidx: utxoId.outputIdx.toBytes().toString(),
93
+ threshold: this.transaction._threshold,
94
+ addresses: this.transaction._fromAddresses.map((addr) => utils_1.default.addressToString(this.transaction._network.hrp, this.transaction._network.alias, Buffer.from(addr))),
95
+ };
96
+ return utxo;
97
+ });
98
+ }
99
+ }
100
+ exports.ImportInPTxBuilder = ImportInPTxBuilder;
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQTRGO0FBQzVGLHlFQUFzRTtBQUN0RSxtREFTK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLG1EQUF3QjtJQUM5RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQix5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakYsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzFDLGVBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FDL0QsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBTTtRQUNoQixNQUFNLE1BQU0sR0FBRyxFQUF3QixDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELDJEQUEyRDtRQUMzRCxvREFBb0Q7UUFDcEQsMEVBQTBFO1FBQzFFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxPQUFPLENBQUMs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RUFBRSxDQUN0RCxlQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUN6RzthQUNGLENBQUM7WUFDRixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBNUhELGdEQTRIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgTm90U3VwcG9ydGVkLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0b21pY1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBldm1TZXJpYWwsXG4gIFVuc2lnbmVkVHgsXG4gIEludCxcbiAgSWQsXG4gIFRyYW5zZmVyYWJsZUlucHV0LFxuICB1dGlscyBhcyBGbGFyZVV0aWxzLFxuICBBZGRyZXNzLFxuICBCaWdJbnRQcixcbn0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IERlY29kZWRVdHhvT2JqLCBGbGFyZVRyYW5zYWN0aW9uVHlwZSwgU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCwgVHggfSBmcm9tICcuL2lmYWNlJztcblxuZXhwb3J0IGNsYXNzIEltcG9ydEluUFR4QnVpbGRlciBleHRlbmRzIEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICAvLyBleHRlcm5hbCBjaGFpbiBpZCBpcyBQXG4gICAgdGhpcy5fZXh0ZXJuYWxDaGFpbklkID0gdXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmJsb2NrY2hhaW5JRCk7XG4gICAgLy8gY2hhaW4gaWQgaXMgQ1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCA9IEJ1ZmZlci5mcm9tKFxuICAgICAgdXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmNDaGFpbkJsb2NrY2hhaW5JRClcbiAgICApLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQ7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHgpOiB0aGlzIHtcbiAgICBjb25zdCBiYXNlVHggPSB0eCBhcyBldm1TZXJpYWwuSW1wb3J0VHg7XG4gICAgaWYgKCF0aGlzLnZlcmlmeVR4VHlwZShiYXNlVHguX3R5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHJlZ3VsYXIgY2hhbmdlIG91dHB1dCBpcyB0aGUgdHggb3V0cHV0IGluIEltcG9ydCB0eC5cbiAgICAvLyBjcmVhdGVJbnB1dE91dHB1dCByZXN1bHRzIGluIGEgc2luZ2xlIGl0ZW0gYXJyYXkuXG4gICAgLy8gSXQncyBleHBlY3RlZCB0byBoYXZlIG9ubHkgb25lIG91dHB1dCB3aXRoIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHNlbmRlci5cbiAgICBjb25zdCBvdXRwdXRzID0gYmFzZVR4Lk91dHM7XG4gICAgaWYgKG91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjYW4gaGF2ZSBvbmUgZXh0ZXJuYWwgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXTtcbiAgICBjb25zdCBhc3NldElkID0gb3V0cHV0LmFzc2V0SWQudG9CeXRlcygpO1xuICAgIGlmIChCdWZmZXIuY29tcGFyZShhc3NldElkLCBCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkKSkgIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIEFzc2V0IElEIG9mIHRoZSBvdXRwdXQgZG9lcyBub3QgbWF0Y2ggdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGxvY2t0aW1lIHRvIDAgc2luY2UgaXQncyBub3QgdXNlZCBpbiBFVk0gb3V0cHV0c1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gQmlnSW50KDApO1xuXG4gICAgLy8gU2V0IHRocmVzaG9sZCB0byAxIHNpbmNlIEVWTSBvdXRwdXRzIG9ubHkgaGF2ZSBvbmUgYWRkcmVzc1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCA9IDE7XG5cbiAgICAvLyBDb252ZXJ0IG91dHB1dCBhZGRyZXNzIHRvIGJ1ZmZlciBhbmQgc2V0IGFzIGZyb21BZGRyZXNzXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyA9IFtCdWZmZXIuZnJvbShvdXRwdXQuYWRkcmVzcy50b0J5dGVzKCkpXTtcblxuICAgIC8vIFNldCBleHRlcm5hbCBjaGFpbiBJRCBmcm9tIHRoZSBzb3VyY2UgY2hhaW5cbiAgICB0aGlzLl9leHRlcm5hbENoYWluSWQgPSBCdWZmZXIuZnJvbShiYXNlVHguc291cmNlQ2hhaW4udG9TdHJpbmcoKSk7XG5cbiAgICAvLyBSZWNvdmVyIFVUWE9zIGZyb20gaW1wb3J0ZWQgaW5wdXRzXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSB0aGlzLnJlY292ZXJVdHhvcyhiYXNlVHguaW1wb3J0ZWRJbnB1dHMpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eG5UeXBlID09PSBGbGFyZVRyYW5zYWN0aW9uVHlwZS5Qdm1JbXBvcnRUeDtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSW1wb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eG5UeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgaW1wb3J0IHRyYW5zYWN0aW9uXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEZsYXJlVHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gaWYgdHggaGFzIGNyZWRlbnRpYWxzLCB0eCBzaG91bGRuJ3QgY2hhbmdlXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaGFzQ3JlZGVudGlhbHMpIHJldHVybjtcblxuICAgIGNvbnN0IHsgaW5wdXRzLCBjcmVkZW50aWFscyB9ID0gdGhpcy5jcmVhdGVJbnB1dE91dHB1dChCaWdJbnQodGhpcy50cmFuc2FjdGlvbi5mZWUuZmVlKSk7XG5cbiAgICAvLyBDb252ZXJ0IFRyYW5zZmVyYWJsZUlucHV0IHRvIGV2bVNlcmlhbC5PdXRwdXRcbiAgICBjb25zdCBldm1PdXRwdXRzID0gaW5wdXRzLm1hcCgoaW5wdXQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgZXZtU2VyaWFsLk91dHB1dChcbiAgICAgICAgbmV3IEFkZHJlc3ModGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlc1swXSksXG4gICAgICAgIG5ldyBCaWdJbnRQcihpbnB1dC5pbnB1dC5hbW91bnQoKSksXG4gICAgICAgIG5ldyBJZChpbnB1dC5hc3NldElkLnRvQnl0ZXMoKSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGltcG9ydCB0cmFuc2FjdGlvblxuICAgIGNvbnN0IGltcG9ydFR4ID0gbmV3IGV2bVNlcmlhbC5JbXBvcnRUeChcbiAgICAgIG5ldyBJbnQodGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lEKSxcbiAgICAgIElkLmZyb21TdHJpbmcodGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklELnRvU3RyaW5nKCkpLFxuICAgICAgSWQuZnJvbVN0cmluZyh0aGlzLl9leHRlcm5hbENoYWluSWQudG9TdHJpbmcoKSksXG4gICAgICBpbnB1dHMsXG4gICAgICBldm1PdXRwdXRzXG4gICAgKTtcblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGEpID0+IG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXAoW1tuZXcgQWRkcmVzcyhhKSwgMF1dKSk7XG5cbiAgICAvLyBDcmVhdGUgdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoXG4gICAgICBpbXBvcnRUeCxcbiAgICAgIFtdLCAvLyBFbXB0eSBVVFhPcyBhcnJheSwgd2lsbCBiZSBmaWxsZWQgZHVyaW5nIHByb2Nlc3NpbmdcbiAgICAgIG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXBzKGFkZHJlc3NNYXBzKSxcbiAgICAgIGNyZWRlbnRpYWxzXG4gICAgKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odW5zaWduZWRUeCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBVVFhPcyBmcm9tIGltcG9ydGVkIGlucHV0c1xuICAgKiBAcGFyYW0gaW1wb3J0ZWRJbnB1dHMgQXJyYXkgb2YgdHJhbnNmZXJhYmxlIGlucHV0c1xuICAgKiBAcmV0dXJucyBBcnJheSBvZiBkZWNvZGVkIFVUWE8gb2JqZWN0c1xuICAgKi9cbiAgcHJpdmF0ZSByZWNvdmVyVXR4b3MoaW1wb3J0ZWRJbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W10pOiBEZWNvZGVkVXR4b09ialtdIHtcbiAgICByZXR1cm4gaW1wb3J0ZWRJbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdXR4b0lkID0gaW5wdXQudXR4b0lEO1xuICAgICAgY29uc3QgdHJhbnNmZXJJbnB1dCA9IGlucHV0LmlucHV0O1xuICAgICAgY29uc3QgdXR4bzogRGVjb2RlZFV0eG9PYmogPSB7XG4gICAgICAgIG91dHB1dElEOiBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LFxuICAgICAgICBhbW91bnQ6IHRyYW5zZmVySW5wdXQuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIHR4aWQ6IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odXR4b0lkLklELnRvU3RyaW5nKCkpKSxcbiAgICAgICAgb3V0cHV0aWR4OiB1dHhvSWQub3V0cHV0SWR4LnRvQnl0ZXMoKS50b1N0cmluZygpLFxuICAgICAgICB0aHJlc2hvbGQ6IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCxcbiAgICAgICAgYWRkcmVzc2VzOiB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLm1hcCgoYWRkcikgPT5cbiAgICAgICAgICB1dGlscy5hZGRyZXNzVG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ocnAsIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYWxpYXMsIEJ1ZmZlci5mcm9tKGFkZHIpKVxuICAgICAgICApLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB1dHhvO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,26 +1,28 @@
1
1
  import { AtomicTransactionBuilder } from './atomicTransactionBuilder';
2
2
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
- /**
4
- * Flare P->C atomic import/export style builder (C-chain context). This adapts the AVAXP logic
5
- * removing direct Avalanche SDK dependencies. Network / chain ids are expected to be provided
6
- * in the transaction._network object by a higher-level factory once Flare network constants
7
- * are finalized. For now we CB58-decode placeholders if present and default to zero buffers.
8
- */
3
+ import { UnsignedTx } from '@flarenetwork/flarejs';
4
+ import { Transaction } from './transaction';
9
5
  export declare abstract class AtomicInCTransactionBuilder extends AtomicTransactionBuilder {
10
- protected fixedFee: bigint;
11
6
  constructor(_coinConfig: Readonly<CoinConfig>);
12
7
  /**
13
- * Set base fee (already scaled to Flare C-chain native decimals). Accept bigint | number | string.
8
+ * C-Chain base fee with decimal places converted from 18 to 9.
9
+ *
10
+ * @param {string | number} baseFee
14
11
  */
15
- feeRate(baseFee: bigint | number | string): this;
12
+ feeRate(baseFee: string | number): this;
13
+ /** @inheritdoc */
14
+ fromImplementation(rawTransaction: string): Transaction;
16
15
  /**
17
- * Recreate builder state from raw tx (hex). Flare C-chain support TBD; for now validate & stash.
16
+ * Check that fee is greater than 0.
17
+ * @param {bigint} fee
18
18
  */
19
- protected fromImplementation(rawTransaction: string): {
20
- _tx?: unknown;
21
- };
22
- private validateFee;
23
- private initializeChainIds;
24
- private setFeeRate;
19
+ validateFee(fee: bigint): void;
20
+ /**
21
+ * Initialize the transaction builder fields using the decoded transaction data
22
+ *
23
+ * @param {UnsignedTx} tx the transaction data
24
+ * @returns itself
25
+ */
26
+ initBuilder(tx: UnsignedTx): this;
25
27
  }
26
28
  //# sourceMappingURL=atomicInCTransactionBuilder.d.ts.map
@@ -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,qBAAqB,CAAC;AAe7D;;;;;GAKG;AACH,8BAAsB,2BAA4B,SAAQ,wBAAwB;IAEhF,SAAS,CAAC,QAAQ,SAAM;gBACZ,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAOhD;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE;IASvE,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,UAAU;CAKnB"}
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,qBAAqB,CAAC;AAE7D,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"}
@@ -5,60 +5,62 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.AtomicInCTransactionBuilder = void 0;
7
7
  const atomicTransactionBuilder_1 = require("./atomicTransactionBuilder");
8
- const utils_1 = __importDefault(require("./utils"));
9
8
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
10
- /**
11
- * Flare P->C atomic import/export style builder (C-chain context). This adapts the AVAXP logic
12
- * removing direct Avalanche SDK dependencies. Network / chain ids are expected to be provided
13
- * in the transaction._network object by a higher-level factory once Flare network constants
14
- * are finalized. For now we CB58-decode placeholders if present and default to zero buffers.
15
- */
9
+ const flarejs_1 = require("@flarenetwork/flarejs");
10
+ const utils_1 = __importDefault(require("./utils"));
16
11
  class AtomicInCTransactionBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
17
12
  constructor(_coinConfig) {
18
13
  super(_coinConfig);
19
- // Placeholder fixed fee (can be overridden by subclasses or network config)
20
- this.fixedFee = 0n;
21
- this.initializeChainIds();
14
+ // external chain id is P
15
+ this._externalChainId = utils_1.default.cb58Decode(this.transaction._network.blockchainID);
16
+ // chain id is C
17
+ this.transaction._blockchainID = Buffer.from(utils_1.default.cb58Decode(this.transaction._network.cChainBlockchainID)).toString('hex');
22
18
  }
23
19
  /**
24
- * Set base fee (already scaled to Flare C-chain native decimals). Accept bigint | number | string.
20
+ * C-Chain base fee with decimal places converted from 18 to 9.
21
+ *
22
+ * @param {string | number} baseFee
25
23
  */
26
24
  feeRate(baseFee) {
27
- const n = typeof baseFee === 'bigint' ? baseFee : BigInt(baseFee);
28
- this.validateFee(n);
29
- this.setFeeRate(n);
25
+ const fee = BigInt(baseFee);
26
+ this.validateFee(fee);
27
+ this.transaction._fee.feeRate = Number(fee);
30
28
  return this;
31
29
  }
32
- /**
33
- * Recreate builder state from raw tx (hex). Flare C-chain support TBD; for now validate & stash.
34
- */
30
+ /** @inheritdoc */
35
31
  fromImplementation(rawTransaction) {
36
- // If utils has validateRawTransaction use it; otherwise basic check
37
- if (utils_1.default.validateRawTransaction) {
38
- utils_1.default.validateRawTransaction(rawTransaction);
39
- }
40
- this.transaction.setTransaction(rawTransaction);
32
+ const txBytes = new Uint8Array(Buffer.from(rawTransaction, 'hex'));
33
+ const codec = flarejs_1.avmSerial.getAVMManager().getDefaultCodec();
34
+ const [tx] = flarejs_1.evmSerial.ImportTx.fromBytes(txBytes, codec);
35
+ const addressMaps = this.transaction._fromAddresses.map((a) => new flarejs_1.utils.AddressMap([[new flarejs_1.Address(a), 0]]));
36
+ const unsignedTx = new flarejs_1.UnsignedTx(tx, [], new flarejs_1.utils.AddressMaps(addressMaps), []);
37
+ this.initBuilder(unsignedTx);
41
38
  return this.transaction;
42
39
  }
40
+ /**
41
+ * Check that fee is greater than 0.
42
+ * @param {bigint} fee
43
+ */
43
44
  validateFee(fee) {
44
- if (fee <= 0n) {
45
+ if (fee <= BigInt(0)) {
45
46
  throw new sdk_core_1.BuildTransactionError('Fee must be greater than 0');
46
47
  }
47
48
  }
48
- initializeChainIds() {
49
- const meta = this.transaction._network;
50
- if (meta?.blockchainID) {
51
- this._externalChainId = utils_1.default.cb58Decode(meta.blockchainID);
52
- }
53
- if (meta?.cChainBlockchainID) {
54
- this.transaction._blockchainID = utils_1.default.cb58Decode(meta.cChainBlockchainID);
49
+ /**
50
+ * Initialize the transaction builder fields using the decoded transaction data
51
+ *
52
+ * @param {UnsignedTx} tx the transaction data
53
+ * @returns itself
54
+ */
55
+ initBuilder(tx) {
56
+ // Validate network and blockchain IDs
57
+ const baseTx = tx.getTx();
58
+ if (baseTx.getBlockchainId() !== this.transaction._blockchainID) {
59
+ throw new Error('blockchain ID mismatch');
55
60
  }
56
- }
57
- setFeeRate(n) {
58
- const currentContainer = this.transaction;
59
- const current = currentContainer._fee || { fee: '0' };
60
- currentContainer._fee = { ...current, feeRate: n.toString() };
61
+ this.transaction.setTransaction(tx);
62
+ return this;
61
63
  }
62
64
  }
63
65
  exports.AtomicInCTransactionBuilder = AtomicInCTransactionBuilder;
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hdG9taWNJbkNUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEseUVBQXNFO0FBRXRFLG9EQUE0QjtBQUM1QixtREFBNkQ7QUFhN0Q7Ozs7O0dBS0c7QUFDSCxNQUFzQiwyQkFBNEIsU0FBUSxtREFBd0I7SUFHaEYsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFIckIsNEVBQTRFO1FBQ2xFLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFHdEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLE9BQWlDO1FBQ3ZDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ08sa0JBQWtCLENBQUMsY0FBc0I7UUFDakQsb0VBQW9FO1FBQ3BFLElBQUssZUFBcUUsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2pHLGVBQW9FLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0csQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRU8sV0FBVyxDQUFDLEdBQVc7UUFDN0IsSUFBSSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksZ0NBQXFCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQWlDLENBQUM7UUFDaEUsSUFBSSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxJQUFJLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLGVBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0UsQ0FBQztJQUNILENBQUM7SUFFTyxVQUFVLENBQUMsQ0FBUztRQUMxQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUE0QyxDQUFDO1FBQzNFLE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUN0RCxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7SUFDaEUsQ0FBQztDQUNGO0FBbkRELGtFQW1EQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vYXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW50ZXJmYWNlIEZsYXJlQ2hhaW5OZXR3b3JrTWV0YSB7XG4gIGJsb2NrY2hhaW5JRD86IHN0cmluZzsgLy8gUC1jaGFpbiBpZCAoZXh0ZXJuYWwpXG4gIGNDaGFpbkJsb2NrY2hhaW5JRD86IHN0cmluZzsgLy8gQy1jaGFpbiBpZCAobG9jYWwpXG4gIFtrOiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgRmVlU2hhcGUge1xuICBmZWU/OiBzdHJpbmc7IC8vIGxlZ2FjeVxuICBmZWVSYXRlPzogc3RyaW5nOyAvLyBwZXIgdW5pdCByYXRlXG59XG5cbi8qKlxuICogRmxhcmUgUC0+QyBhdG9taWMgaW1wb3J0L2V4cG9ydCBzdHlsZSBidWlsZGVyIChDLWNoYWluIGNvbnRleHQpLiBUaGlzIGFkYXB0cyB0aGUgQVZBWFAgbG9naWNcbiAqIHJlbW92aW5nIGRpcmVjdCBBdmFsYW5jaGUgU0RLIGRlcGVuZGVuY2llcy4gTmV0d29yayAvIGNoYWluIGlkcyBhcmUgZXhwZWN0ZWQgdG8gYmUgcHJvdmlkZWRcbiAqIGluIHRoZSB0cmFuc2FjdGlvbi5fbmV0d29yayBvYmplY3QgYnkgYSBoaWdoZXItbGV2ZWwgZmFjdG9yeSBvbmNlIEZsYXJlIG5ldHdvcmsgY29uc3RhbnRzXG4gKiBhcmUgZmluYWxpemVkLiBGb3Igbm93IHdlIENCNTgtZGVjb2RlIHBsYWNlaG9sZGVycyBpZiBwcmVzZW50IGFuZCBkZWZhdWx0IHRvIHplcm8gYnVmZmVycy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF0b21pY0luQ1RyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB7XG4gIC8vIFBsYWNlaG9sZGVyIGZpeGVkIGZlZSAoY2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyBvciBuZXR3b3JrIGNvbmZpZylcbiAgcHJvdGVjdGVkIGZpeGVkRmVlID0gMG47XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLmluaXRpYWxpemVDaGFpbklkcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBiYXNlIGZlZSAoYWxyZWFkeSBzY2FsZWQgdG8gRmxhcmUgQy1jaGFpbiBuYXRpdmUgZGVjaW1hbHMpLiBBY2NlcHQgYmlnaW50IHwgbnVtYmVyIHwgc3RyaW5nLlxuICAgKi9cbiAgZmVlUmF0ZShiYXNlRmVlOiBiaWdpbnQgfCBudW1iZXIgfCBzdHJpbmcpOiB0aGlzIHtcbiAgICBjb25zdCBuID0gdHlwZW9mIGJhc2VGZWUgPT09ICdiaWdpbnQnID8gYmFzZUZlZSA6IEJpZ0ludChiYXNlRmVlKTtcbiAgICB0aGlzLnZhbGlkYXRlRmVlKG4pO1xuICAgIHRoaXMuc2V0RmVlUmF0ZShuKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNyZWF0ZSBidWlsZGVyIHN0YXRlIGZyb20gcmF3IHR4IChoZXgpLiBGbGFyZSBDLWNoYWluIHN1cHBvcnQgVEJEOyBmb3Igbm93IHZhbGlkYXRlICYgc3Rhc2guXG4gICAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB7IF90eD86IHVua25vd24gfSB7XG4gICAgLy8gSWYgdXRpbHMgaGFzIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24gdXNlIGl0OyBvdGhlcndpc2UgYmFzaWMgY2hlY2tcbiAgICBpZiAoKHV0aWxzIGFzIHVua25vd24gYXMgeyB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uPzogKHI6IHN0cmluZykgPT4gdm9pZCB9KS52YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKSB7XG4gICAgICAodXRpbHMgYXMgdW5rbm93biBhcyB7IHZhbGlkYXRlUmF3VHJhbnNhY3Rpb246IChyOiBzdHJpbmcpID0+IHZvaWQgfSkudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIHJldHVybiB0aGlzLnRyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUZlZShmZWU6IGJpZ2ludCk6IHZvaWQge1xuICAgIGlmIChmZWUgPD0gMG4pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ZlZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ2hhaW5JZHMoKTogdm9pZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsgYXMgRmxhcmVDaGFpbk5ldHdvcmtNZXRhO1xuICAgIGlmIChtZXRhPy5ibG9ja2NoYWluSUQpIHtcbiAgICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IHV0aWxzLmNiNThEZWNvZGUobWV0YS5ibG9ja2NoYWluSUQpO1xuICAgIH1cbiAgICBpZiAobWV0YT8uY0NoYWluQmxvY2tjaGFpbklEKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQgPSB1dGlscy5jYjU4RGVjb2RlKG1ldGEuY0NoYWluQmxvY2tjaGFpbklEKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZlZVJhdGUobjogYmlnaW50KTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudENvbnRhaW5lciA9IHRoaXMudHJhbnNhY3Rpb24gYXMgdW5rbm93biBhcyB7IF9mZWU6IEZlZVNoYXBlIH07XG4gICAgY29uc3QgY3VycmVudCA9IGN1cnJlbnRDb250YWluZXIuX2ZlZSB8fCB7IGZlZTogJzAnIH07XG4gICAgY3VycmVudENvbnRhaW5lci5fZmVlID0geyAuLi5jdXJyZW50LCBmZWVSYXRlOiBuLnRvU3RyaW5nKCkgfTtcbiAgfVxufVxuIl19
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9hdG9taWNJbkNUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEseUVBQXNFO0FBRXRFLG1EQUE2RDtBQUM3RCxtREFBdUc7QUFDdkcsb0RBQTRCO0FBRzVCLE1BQXNCLDJCQUE0QixTQUFRLG1EQUF3QjtJQUNoRixZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQix5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakYsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQzFDLGVBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FDL0QsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsT0FBd0I7UUFDOUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsa0JBQWtCLENBQUMsY0FBc0I7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLEtBQUssR0FBRyxtQkFBUyxDQUFDLGFBQWEsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFELE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxtQkFBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTFELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxlQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLGlCQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakgsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQkFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxlQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsR0FBVztRQUNyQixJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksZ0NBQXFCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEVBQWM7UUFDeEIsc0NBQXNDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUE3REQsa0VBNkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZXZtU2VyaWFsLCBVbnNpZ25lZFR4LCB1dGlscyBhcyBGbGFyZVV0aWxzLCBhdm1TZXJpYWwsIEFkZHJlc3MgfSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF0b21pY0luQ1RyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICAvLyBleHRlcm5hbCBjaGFpbiBpZCBpcyBQXG4gICAgdGhpcy5fZXh0ZXJuYWxDaGFpbklkID0gdXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmJsb2NrY2hhaW5JRCk7XG4gICAgLy8gY2hhaW4gaWQgaXMgQ1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCA9IEJ1ZmZlci5mcm9tKFxuICAgICAgdXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmNDaGFpbkJsb2NrY2hhaW5JRClcbiAgICApLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDLUNoYWluIGJhc2UgZmVlIHdpdGggZGVjaW1hbCBwbGFjZXMgY29udmVydGVkIGZyb20gMTggdG8gOS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IGJhc2VGZWVcbiAgICovXG4gIGZlZVJhdGUoYmFzZUZlZTogc3RyaW5nIHwgbnVtYmVyKTogdGhpcyB7XG4gICAgY29uc3QgZmVlID0gQmlnSW50KGJhc2VGZWUpO1xuICAgIHRoaXMudmFsaWRhdGVGZWUoZmVlKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUuZmVlUmF0ZSA9IE51bWJlcihmZWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4Qnl0ZXMgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShyYXdUcmFuc2FjdGlvbiwgJ2hleCcpKTtcbiAgICBjb25zdCBjb2RlYyA9IGF2bVNlcmlhbC5nZXRBVk1NYW5hZ2VyKCkuZ2V0RGVmYXVsdENvZGVjKCk7XG4gICAgY29uc3QgW3R4XSA9IGV2bVNlcmlhbC5JbXBvcnRUeC5mcm9tQnl0ZXModHhCeXRlcywgY29kZWMpO1xuXG4gICAgY29uc3QgYWRkcmVzc01hcHMgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLm1hcCgoYSkgPT4gbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcChbW25ldyBBZGRyZXNzKGEpLCAwXV0pKTtcblxuICAgIGNvbnN0IHVuc2lnbmVkVHggPSBuZXcgVW5zaWduZWRUeCh0eCwgW10sIG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXBzKGFkZHJlc3NNYXBzKSwgW10pO1xuICAgIHRoaXMuaW5pdEJ1aWxkZXIodW5zaWduZWRUeCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhhdCBmZWUgaXMgZ3JlYXRlciB0aGFuIDAuXG4gICAqIEBwYXJhbSB7YmlnaW50fSBmZWVcbiAgICovXG4gIHZhbGlkYXRlRmVlKGZlZTogYmlnaW50KTogdm9pZCB7XG4gICAgaWYgKGZlZSA8PSBCaWdJbnQoMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ZlZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHRyYW5zYWN0aW9uIGJ1aWxkZXIgZmllbGRzIHVzaW5nIHRoZSBkZWNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHtVbnNpZ25lZFR4fSB0eCB0aGUgdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBAcmV0dXJucyBpdHNlbGZcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBVbnNpZ25lZFR4KTogdGhpcyB7XG4gICAgLy8gVmFsaWRhdGUgbmV0d29yayBhbmQgYmxvY2tjaGFpbiBJRHNcbiAgICBjb25zdCBiYXNlVHggPSB0eC5nZXRUeCgpO1xuICAgIGlmIChiYXNlVHguZ2V0QmxvY2tjaGFpbklkKCkgIT09IHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdibG9ja2NoYWluIElEIG1pc21hdGNoJyk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odHgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG4iXX0=