@bitgo/sdk-coin-flrp 1.7.2 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/flrp.d.ts +8 -0
- package/dist/src/flrp.d.ts.map +1 -1
- package/dist/src/flrp.js +43 -1
- package/dist/src/lib/ExportInPTxBuilder.d.ts +14 -1
- package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ExportInPTxBuilder.js +62 -20
- package/dist/src/lib/ImportInCTxBuilder.d.ts +0 -1
- package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ImportInCTxBuilder.js +23 -17
- package/dist/src/lib/ImportInPTxBuilder.d.ts +0 -10
- package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -1
- package/dist/src/lib/ImportInPTxBuilder.js +22 -30
- package/dist/src/lib/atomicTransactionBuilder.d.ts +29 -27
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +89 -58
- package/dist/src/lib/iface.d.ts +12 -2
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +4 -2
- package/dist/src/lib/permissionlessDelegatorTxBuilder.d.ts +108 -0
- package/dist/src/lib/permissionlessDelegatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/permissionlessDelegatorTxBuilder.js +268 -0
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +42 -11
- package/dist/src/lib/transactionBuilderFactory.d.ts +6 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +14 -1
- package/dist/src/lib/utils.d.ts +31 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +65 -3
- package/dist/test/resources/account.d.ts +21 -0
- package/dist/test/resources/account.d.ts.map +1 -1
- package/dist/test/resources/account.js +23 -2
- package/dist/test/resources/transactionData/delegatorTx.d.ts +83 -0
- package/dist/test/resources/transactionData/delegatorTx.d.ts.map +1 -0
- package/dist/test/resources/transactionData/delegatorTx.js +77 -0
- package/dist/test/resources/transactionData/exportInP.d.ts.map +1 -1
- package/dist/test/resources/transactionData/exportInP.js +5 -6
- package/dist/test/resources/transactionData/importInC.js +5 -5
- package/dist/test/resources/transactionData/importInP.js +5 -5
- package/dist/test/unit/flrp.js +74 -3
- package/dist/test/unit/lib/exportInPTxBuilder.js +144 -34
- package/dist/test/unit/lib/importInCTxBuilder.js +51 -74
- package/dist/test/unit/lib/importInPTxBuilder.js +48 -182
- package/dist/test/unit/lib/permissionlessDelegatorTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/permissionlessDelegatorTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/permissionlessDelegatorTxBuilder.js +235 -0
- package/dist/test/unit/lib/utils.js +92 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
- package/dist/test/unit/lib/signatureIndex.d.ts +0 -13
- package/dist/test/unit/lib/signatureIndex.d.ts.map +0 -1
- package/dist/test/unit/lib/signatureIndex.js +0 -843
|
@@ -55,18 +55,31 @@ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransact
|
|
|
55
55
|
this.transaction._fee = {
|
|
56
56
|
fee: fee.toString(),
|
|
57
57
|
};
|
|
58
|
-
this.
|
|
58
|
+
this.computeAddressesIndex(true);
|
|
59
|
+
// Create addressMaps using sigIndices from parsed transaction for consistency
|
|
59
60
|
const addressMaps = this.transaction._utxos.map((utxo) => {
|
|
60
61
|
const utxoThreshold = utxo.threshold || this.transaction._threshold;
|
|
62
|
+
const sigIndices = utxo.addressesIndex ?? [];
|
|
63
|
+
if (sigIndices.length >= utxoThreshold && sigIndices.every((idx) => idx >= 0)) {
|
|
64
|
+
return this.createAddressMapForUtxo(utxo, utxoThreshold, sigIndices);
|
|
65
|
+
}
|
|
61
66
|
return this.createAddressMapForUtxo(utxo, utxoThreshold);
|
|
62
67
|
});
|
|
63
68
|
const flareAddressMaps = new flarejs_1.utils.AddressMaps(addressMaps);
|
|
69
|
+
// Use parsed credentials if available, otherwise create new ones based on sigIndices
|
|
64
70
|
let txCredentials;
|
|
65
71
|
if (credentials.length > 0) {
|
|
66
72
|
txCredentials = credentials;
|
|
67
73
|
}
|
|
68
74
|
else {
|
|
69
|
-
txCredentials = this.transaction._utxos.map((utxo) =>
|
|
75
|
+
txCredentials = this.transaction._utxos.map((utxo) => {
|
|
76
|
+
const utxoThreshold = utxo.threshold || this.transaction._threshold;
|
|
77
|
+
const sigIndices = utxo.addressesIndex ?? [];
|
|
78
|
+
if (sigIndices.length >= utxoThreshold && sigIndices.every((idx) => idx >= 0)) {
|
|
79
|
+
return this.createCredentialForUtxo(utxo, utxoThreshold, sigIndices);
|
|
80
|
+
}
|
|
81
|
+
return this.createCredentialForUtxo(utxo, utxoThreshold);
|
|
82
|
+
});
|
|
70
83
|
}
|
|
71
84
|
const unsignedTx = new flarejs_1.UnsignedTx(baseTx, [], flareAddressMaps, txCredentials);
|
|
72
85
|
this.transaction.setTransaction(unsignedTx);
|
|
@@ -119,7 +132,8 @@ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransact
|
|
|
119
132
|
if (totalUtxoAmount <= actualFeeNFlr) {
|
|
120
133
|
throw new sdk_core_1.BuildTransactionError(`Insufficient UTXO balance: have ${totalUtxoAmount.toString()} nFLR, need more than ${actualFeeNFlr.toString()} nFLR to cover import fee`);
|
|
121
134
|
}
|
|
122
|
-
const
|
|
135
|
+
const signingAddresses = this.getSigningAddresses();
|
|
136
|
+
const importTx = flarejs_1.evm.newImportTx(this.transaction._context, this.transaction._to[0], signingAddresses, nativeUtxos, sourceChain, actualFeeNFlr);
|
|
123
137
|
const flareUnsignedTx = importTx;
|
|
124
138
|
const innerTx = flareUnsignedTx.getTx();
|
|
125
139
|
const utxosWithIndex = innerTx.importedInputs.map((input) => {
|
|
@@ -129,16 +143,19 @@ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransact
|
|
|
129
143
|
if (!originalUtxo) {
|
|
130
144
|
throw new sdk_core_1.BuildTransactionError(`Could not find matching UTXO for input ${inputTxid}:${inputOutputIdx}`);
|
|
131
145
|
}
|
|
146
|
+
const transferInput = input.input;
|
|
147
|
+
const actualSigIndices = transferInput.sigIndicies();
|
|
132
148
|
return {
|
|
133
149
|
...originalUtxo,
|
|
134
150
|
addressesIndex: originalUtxo.addressesIndex,
|
|
135
151
|
addresses: originalUtxo.addresses,
|
|
136
152
|
threshold: originalUtxo.threshold || this.transaction._threshold,
|
|
153
|
+
actualSigIndices,
|
|
137
154
|
};
|
|
138
155
|
});
|
|
139
156
|
this.transaction._utxos = utxosWithIndex;
|
|
140
|
-
const txCredentials = utxosWithIndex.map((utxo) => this.createCredentialForUtxo(utxo, utxo.threshold));
|
|
141
|
-
const addressMaps = utxosWithIndex.map((utxo) => this.createAddressMapForUtxo(utxo, utxo.threshold));
|
|
157
|
+
const txCredentials = utxosWithIndex.map((utxo) => this.createCredentialForUtxo(utxo, utxo.threshold, utxo.actualSigIndices));
|
|
158
|
+
const addressMaps = utxosWithIndex.map((utxo) => this.createAddressMapForUtxo(utxo, utxo.threshold, utxo.actualSigIndices));
|
|
142
159
|
const fixedUnsignedTx = new flarejs_1.UnsignedTx(innerTx, [], new flarejs_1.utils.AddressMaps(addressMaps), txCredentials);
|
|
143
160
|
this.transaction.setTransaction(fixedUnsignedTx);
|
|
144
161
|
}
|
|
@@ -170,17 +187,6 @@ class ImportInCTxBuilder extends atomicInCTransactionBuilder_1.AtomicInCTransact
|
|
|
170
187
|
};
|
|
171
188
|
});
|
|
172
189
|
}
|
|
173
|
-
computeAddressesIndexFromParsed() {
|
|
174
|
-
const sender = this.transaction._fromAddresses;
|
|
175
|
-
if (!sender || sender.length === 0)
|
|
176
|
-
return;
|
|
177
|
-
this.transaction._utxos.forEach((utxo) => {
|
|
178
|
-
if (utxo.addresses && utxo.addresses.length > 0) {
|
|
179
|
-
const utxoAddresses = utxo.addresses.map((a) => utils_1.default.parseAddress(a));
|
|
180
|
-
utxo.addressesIndex = sender.map((senderAddr) => utxoAddresses.findIndex((utxoAddr) => Buffer.compare(Buffer.from(utxoAddr), Buffer.from(senderAddr)) === 0));
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
190
|
}
|
|
185
191
|
exports.ImportInCTxBuilder = ImportInCTxBuilder;
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsOENBQXVGO0FBQ3ZGLCtFQUE0RTtBQUM1RSxtREFTK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLHlEQUEyQjtJQUNqRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEVBQUUsQ0FBQyxRQUFnQjtRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDLGVBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQU0sRUFBRSxRQUFpQixFQUFFLGlCQUFnQztRQUNyRSxNQUFNLE1BQU0sR0FBRyxFQUF3QixDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUIsSUFBSSxNQUFNLENB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SUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxlQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQzlDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzVHLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF0T0QsZ0RBc09DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgTm90U3VwcG9ydGVkLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hdG9taWNJbkNUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHtcbiAgZXZtU2VyaWFsLFxuICBVbnNpZ25lZFR4LFxuICBDcmVkZW50aWFsLFxuICBUcmFuc2ZlcmFibGVJbnB1dCxcbiAgVHJhbnNmZXJJbnB1dCxcbiAgVHJhbnNmZXJPdXRwdXQsXG4gIHV0aWxzIGFzIEZsYXJlVXRpbHMsXG4gIGV2bSxcbn0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IERlY29kZWRVdHhvT2JqLCBGbGFyZVRyYW5zYWN0aW9uVHlwZSwgU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCwgVHggfSBmcm9tICcuL2lmYWNlJztcblxuZXhwb3J0IGNsYXNzIEltcG9ydEluQ1R4QnVpbGRlciBleHRlbmRzIEF0b21pY0luQ1RyYW5zYWN0aW9uQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDLWNoYWluIGFkZHJlc3Mgd2hvIGlzIHRhcmdldCBvZiB0aGUgaW1wb3J0LlxuICAgKiBBZGRyZXNzIGZvcm1hdCBpcyBldGggbGlrZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY0FkZHJlc3NcbiAgICovXG4gIHRvKGNBZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90byA9IFt1dGlscy5wYXJzZUFkZHJlc3MoY0FkZHJlc3MpXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQ7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHgsIHJhd0J5dGVzPzogQnVmZmVyLCBwYXJzZWRDcmVkZW50aWFscz86IENyZWRlbnRpYWxbXSk6IHRoaXMge1xuICAgIGNvbnN0IGJhc2VUeCA9IHR4IGFzIGV2bVNlcmlhbC5JbXBvcnRUeDtcbiAgICBpZiAoIXRoaXMudmVyaWZ5VHhUeXBlKGJhc2VUeC5fdHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zYWN0aW9uIGNhbm5vdCBiZSBwYXJzZWQgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRzID0gYmFzZVR4Lk91dHM7XG4gICAgaWYgKG91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjYW4gaGF2ZSBvbmUgb3V0cHV0Jyk7XG4gICAgfVxuICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbMF07XG5cbiAgICBpZiAoQnVmZmVyLmZyb20ob3V0cHV0LmFzc2V0SWQudG9CeXRlcygpKS50b1N0cmluZygnaGV4JykgIT09IHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXNzZXRJRCBhcmUgbm90IGVxdWFscycpO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90byA9IFtCdWZmZXIuZnJvbShvdXRwdXQuYWRkcmVzcy50b0J5dGVzKCkpXTtcblxuICAgIGNvbnN0IGlucHV0cyA9IGJhc2VUeC5pbXBvcnRlZElucHV0cztcblxuICAgIGNvbnN0IGZpcnN0SW5wdXQgPSBpbnB1dHNbMF07XG4gICAgY29uc3QgaW5wdXRUaHJlc2hvbGQgPSBmaXJzdElucHV0LnNpZ0luZGljaWVzKCkubGVuZ3RoIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZDtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQgPSBpbnB1dFRocmVzaG9sZDtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gdGhpcy5yZWNvdmVyVXR4b3MoaW5wdXRzKTtcblxuICAgIGNvbnN0IHRvdGFsSW5wdXRBbW91bnQgPSBpbnB1dHMucmVkdWNlKCh0LCBpKSA9PiB0ICsgaS5hbW91bnQoKSwgQmlnSW50KDApKTtcbiAgICBjb25zdCB0b3RhbE91dHB1dEFtb3VudCA9IG91dHB1dC5hbW91bnQudmFsdWUoKTtcblxuICAgIGNvbnN0IGZlZSA9IHRvdGFsSW5wdXRBbW91bnQgLSB0b3RhbE91dHB1dEFtb3VudDtcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gcGFyc2VkQ3JlZGVudGlhbHMgfHwgW107XG4gICAgY29uc3QgaGFzQ3JlZGVudGlhbHMgPSBjcmVkZW50aWFscy5sZW5ndGggPiAwO1xuXG4gICAgaWYgKGhhc0NyZWRlbnRpYWxzICYmIHJhd0J5dGVzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9yYXdTaWduZWRCeXRlcyA9IHJhd0J5dGVzO1xuICAgIH1cblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZSA9IHtcbiAgICAgIGZlZTogZmVlLnRvU3RyaW5nKCksXG4gICAgfTtcblxuICAgIHRoaXMuY29tcHV0ZUFkZHJlc3Nlc0luZGV4RnJvbVBhcnNlZCgpO1xuXG4gICAgY29uc3QgYWRkcmVzc01hcHMgPSB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5tYXAoKHV0eG8pID0+IHtcbiAgICAgIGNvbnN0IHV0eG9UaHJlc2hvbGQgPSB1dHhvLnRocmVzaG9sZCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh1dHhvLCB1dHhvVGhyZXNob2xkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZsYXJlQWRkcmVzc01hcHMgPSBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyk7XG5cbiAgICBsZXQgdHhDcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICAgIGlmIChjcmVkZW50aWFscy5sZW5ndGggPiAwKSB7XG4gICAgICB0eENyZWRlbnRpYWxzID0gY3JlZGVudGlhbHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR4Q3JlZGVudGlhbHMgPSB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5tYXAoKHV0eG8pID0+XG4gICAgICAgIHRoaXMuY3JlYXRlQ3JlZGVudGlhbEZvclV0eG8odXR4bywgdXR4by50aHJlc2hvbGQgfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoYmFzZVR4LCBbXSwgZmxhcmVBZGRyZXNzTWFwcywgdHhDcmVkZW50aWFscyk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKHVuc2lnbmVkVHgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHhuVHlwZSA9PT0gRmxhcmVUcmFuc2FjdGlvblR5cGUuRXZtSW1wb3J0VHg7XG4gIH1cblxuICB2ZXJpZnlUeFR5cGUodHhuVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEltcG9ydEluQ1R4QnVpbGRlci52ZXJpZnlUeFR5cGUodHhuVHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGltcG9ydCBpbiBDLWNoYWluIHRyYW5zYWN0aW9uXG4gICAqIEZvbGxvd2luZyBBVkFYIFAgYXBwcm9hY2ggZm9yIFVUWE8gaGFuZGxpbmcgYW5kIHNpZ25hdHVyZSBzbG90IGFzc2lnbm1lbnQuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEZsYXJlVHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaGFzQ3JlZGVudGlhbHMpIHJldHVybjtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5fdG8ubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0byBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2ZlZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2NvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2NvbnRleHQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzIHx8IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdmcm9tQWRkcmVzc2VzIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX3V0eG9zIHx8IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVVRYT3MgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0aHJlc2hvbGQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXB1dGVBZGRyZXNzZXNJbmRleCgpO1xuXG4gICAgdGhpcy52YWxpZGF0ZVV0eG9BZGRyZXNzZXMoKTtcblxuICAgIGNvbnN0IGFjdHVhbEZlZU5GbHIgPSBCaWdJbnQodGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZSk7XG4gICAgY29uc3Qgc291cmNlQ2hhaW4gPSAnUCc7XG5cbiAgICAvLyBDb252ZXJ0IGRlY29kZWQgVVRYT3MgdG8gbmF0aXZlIEZsYXJlSlMgVXR4byBvYmplY3RzXG4gICAgY29uc3QgYXNzZXRJZCA9IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcbiAgICBjb25zdCBuYXRpdmVVdHhvcyA9IHV0aWxzLmRlY29kZWRUb1V0eG9zKHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLCBhc3NldElkKTtcblxuICAgIC8vIFZhbGlkYXRlIFVUWE8gYmFsYW5jZSBpcyBzdWZmaWNpZW50IHRvIGNvdmVyIHRoZSBpbXBvcnQgZmVlXG4gICAgY29uc3QgdG90YWxVdHhvQW1vdW50ID0gbmF0aXZlVXR4b3MucmVkdWNlKChzdW0sIHV0eG8pID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHV0eG8ub3V0cHV0IGFzIFRyYW5zZmVyT3V0cHV0O1xuICAgICAgcmV0dXJuIHN1bSArIG91dHB1dC5hbW91bnQoKTtcbiAgICB9LCBCaWdJbnQoMCkpO1xuXG4gICAgaWYgKHRvdGFsVXR4b0Ftb3VudCA8PSBhY3R1YWxGZWVORmxyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgSW5zdWZmaWNpZW50IFVUWE8gYmFsYW5jZTogaGF2ZSAke3RvdGFsVXR4b0Ftb3VudC50b1N0cmluZygpfSBuRkxSLCBuZWVkIG1vcmUgdGhhbiAke2FjdHVhbEZlZU5GbHIudG9TdHJpbmcoKX0gbkZMUiB0byBjb3ZlciBpbXBvcnQgZmVlYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaW1wb3J0VHggPSBldm0ubmV3SW1wb3J0VHgoXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9jb250ZXh0LFxuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fdG9bMF0sXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLm1hcCgoYWRkcikgPT4gQnVmZmVyLmZyb20oYWRkcikpLFxuICAgICAgbmF0aXZlVXR4b3MsXG4gICAgICBzb3VyY2VDaGFpbixcbiAgICAgIGFjdHVhbEZlZU5GbHJcbiAgICApO1xuXG4gICAgY29uc3QgZmxhcmVVbnNpZ25lZFR4ID0gaW1wb3J0VHggYXMgVW5zaWduZWRUeDtcbiAgICBjb25zdCBpbm5lclR4ID0gZmxhcmVVbnNpZ25lZFR4LmdldFR4KCkgYXMgZXZtU2VyaWFsLkltcG9ydFR4O1xuXG4gICAgY29uc3QgdXR4b3NXaXRoSW5kZXggPSBpbm5lclR4LmltcG9ydGVkSW5wdXRzLm1hcCgoaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0VHhpZCA9IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20oaW5wdXQudXR4b0lELnR4SUQudG9CeXRlcygpKSk7XG4gICAgICBjb25zdCBpbnB1dE91dHB1dElkeCA9IGlucHV0LnV0eG9JRC5vdXRwdXRJZHgudmFsdWUoKS50b1N0cmluZygpO1xuXG4gICAgICBjb25zdCBvcmlnaW5hbFV0eG8gPSB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5maW5kKFxuICAgICAgICAodXR4bykgPT4gdXR4by50eGlkID09PSBpbnB1dFR4aWQgJiYgdXR4by5vdXRwdXRpZHggPT09IGlucHV0T3V0cHV0SWR4XG4gICAgICApO1xuXG4gICAgICBpZiAoIW9yaWdpbmFsVXR4bykge1xuICAgICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBDb3VsZCBub3QgZmluZCBtYXRjaGluZyBVVFhPIGZvciBpbnB1dCAke2lucHV0VHhpZH06JHtpbnB1dE91dHB1dElkeH1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3JpZ2luYWxVdHhvLFxuICAgICAgICBhZGRyZXNzZXNJbmRleDogb3JpZ2luYWxVdHhvLmFkZHJlc3Nlc0luZGV4LFxuICAgICAgICBhZGRyZXNzZXM6IG9yaWdpbmFsVXR4by5hZGRyZXNzZXMsXG4gICAgICAgIHRocmVzaG9sZDogb3JpZ2luYWxVdHhvLnRocmVzaG9sZCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgPSB1dHhvc1dpdGhJbmRleDtcblxuICAgIGNvbnN0IHR4Q3JlZGVudGlhbHMgPSB1dHhvc1dpdGhJbmRleC5tYXAoKHV0eG8pID0+IHRoaXMuY3JlYXRlQ3JlZGVudGlhbEZvclV0eG8odXR4bywgdXR4by50aHJlc2hvbGQpKTtcblxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gdXR4b3NXaXRoSW5kZXgubWFwKCh1dHhvKSA9PiB0aGlzLmNyZWF0ZUFkZHJlc3NNYXBGb3JVdHhvKHV0eG8sIHV0eG8udGhyZXNob2xkKSk7XG5cbiAgICBjb25zdCBmaXhlZFVuc2lnbmVkVHggPSBuZXcgVW5zaWduZWRUeChpbm5lclR4LCBbXSwgbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLCB0eENyZWRlbnRpYWxzKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24oZml4ZWRVbnNpZ25lZFR4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIFVUWE9zIGZyb20gaW1wb3J0ZWQgaW5wdXRzLlxuICAgKiBVc2VzIGZyb21BZGRyZXNzZXMgYXMgcHJveHkgZm9yIFVUWE8gYWRkcmVzc2VzIHNpbmNlIHRoZXkgc2hvdWxkIGJlIHRoZSBzYW1lXG4gICAqIGFkZHJlc3NlcyBjb250cm9sbGluZyB0aGUgbXVsdGlzaWcuXG4gICAqXG4gICAqIEBwYXJhbSBpbXBvcnRlZElucHV0cyBBcnJheSBvZiB0cmFuc2ZlcmFibGUgaW5wdXRzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGRlY29kZWQgVVRYTyBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIHJlY292ZXJVdHhvcyhpbXBvcnRlZElucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSk6IERlY29kZWRVdHhvT2JqW10ge1xuICAgIGNvbnN0IHByb3h5QWRkcmVzc2VzID1cbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgJiYgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+XG4gICAgICAgICAgICB1dGlscy5hZGRyZXNzVG9TdHJpbmcodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ocnAsICdQJywgQnVmZmVyLmZyb20oYWRkcikpXG4gICAgICAgICAgKVxuICAgICAgICA6IFtdO1xuXG4gICAgcmV0dXJuIGltcG9ydGVkSW5wdXRzLm1hcCgoaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IHR4aWQgPSBpbnB1dC51dHhvSUQudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IG91dHB1dGlkeCA9IGlucHV0LnV0eG9JRC5vdXRwdXRJZHgudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHRyYW5zZmVySW5wdXQgPSBpbnB1dC5pbnB1dCBhcyBUcmFuc2ZlcklucHV0O1xuICAgICAgY29uc3Qgc2lnSW5kaWNpZXMgPSB0cmFuc2ZlcklucHV0LnNpZ0luZGljaWVzKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dElEOiBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LFxuICAgICAgICBhbW91bnQ6IGlucHV0LmFtb3VudCgpLnRvU3RyaW5nKCksXG4gICAgICAgIHR4aWQ6IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odHhpZCwgJ2hleCcpKSxcbiAgICAgICAgb3V0cHV0aWR4OiBvdXRwdXRpZHgsXG4gICAgICAgIHRocmVzaG9sZDogc2lnSW5kaWNpZXMubGVuZ3RoIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCxcbiAgICAgICAgYWRkcmVzc2VzOiBwcm94eUFkZHJlc3NlcyxcbiAgICAgICAgYWRkcmVzc2VzSW5kZXg6IHNpZ0luZGljaWVzLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUFkZHJlc3Nlc0luZGV4RnJvbVBhcnNlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZW5kZXIgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzO1xuICAgIGlmICghc2VuZGVyIHx8IHNlbmRlci5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmZvckVhY2goKHV0eG8pID0+IHtcbiAgICAgIGlmICh1dHhvLmFkZHJlc3NlcyAmJiB1dHhvLmFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHV0eG9BZGRyZXNzZXMgPSB1dHhvLmFkZHJlc3Nlcy5tYXAoKGEpID0+IHV0aWxzLnBhcnNlQWRkcmVzcyhhKSk7XG4gICAgICAgIHV0eG8uYWRkcmVzc2VzSW5kZXggPSBzZW5kZXIubWFwKChzZW5kZXJBZGRyKSA9PlxuICAgICAgICAgIHV0eG9BZGRyZXNzZXMuZmluZEluZGV4KCh1dHhvQWRkcikgPT4gQnVmZmVyLmNvbXBhcmUoQnVmZmVyLmZyb20odXR4b0FkZHIpLCBCdWZmZXIuZnJvbShzZW5kZXJBZGRyKSkgPT09IDApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsOENBQXVGO0FBQ3ZGLCtFQUE0RTtBQUM1RSxtREFTK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLHlEQUEyQjtJQUNqRSxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEVBQUUsQ0FBQyxRQUFnQjtRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDLGVBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQU0sRUFBRSxRQUFpQixFQUFFLGlCQUFnQztRQUNyRSxNQUFNLE1BQU0sR0FBRyxFQUF3QixDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSx1QkFBWSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDaEcsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDNUIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUIsSUFBSSxNQUFNLENB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S0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQXNCLENBQUM7WUFDbkQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRWhELE9BQU87Z0JBQ0wsUUFBUSxFQUFFLGlDQUF5QjtnQkFDbkMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pDLElBQUksRUFBRSxlQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNoRCxTQUFTLEVBQUUsU0FBUztnQkFDcEIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVO2dCQUM1RCxTQUFTLEVBQUUsY0FBYztnQkFDekIsY0FBYyxFQUFFLFdBQVc7YUFDNUIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBOU9ELGdEQThPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIE5vdFN1cHBvcnRlZCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEF0b21pY0luQ1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vYXRvbWljSW5DVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIGV2bVNlcmlhbCxcbiAgVW5zaWduZWRUeCxcbiAgQ3JlZGVudGlhbCxcbiAgVHJhbnNmZXJhYmxlSW5wdXQsXG4gIFRyYW5zZmVySW5wdXQsXG4gIFRyYW5zZmVyT3V0cHV0LFxuICB1dGlscyBhcyBGbGFyZVV0aWxzLFxuICBldm0sXG59IGZyb20gJ0BmbGFyZW5ldHdvcmsvZmxhcmVqcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEZWNvZGVkVXR4b09iaiwgRmxhcmVUcmFuc2FjdGlvblR5cGUsIFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBJbXBvcnRJbkNUeEJ1aWxkZXIgZXh0ZW5kcyBBdG9taWNJbkNUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQy1jaGFpbiBhZGRyZXNzIHdobyBpcyB0YXJnZXQgb2YgdGhlIGltcG9ydC5cbiAgICogQWRkcmVzcyBmb3JtYXQgaXMgZXRoIGxpa2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNBZGRyZXNzXG4gICAqL1xuICB0byhjQWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdG8gPSBbdXRpbHMucGFyc2VBZGRyZXNzKGNBZGRyZXNzKV07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuSW1wb3J0O1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFR4LCByYXdCeXRlcz86IEJ1ZmZlciwgcGFyc2VkQ3JlZGVudGlhbHM/OiBDcmVkZW50aWFsW10pOiB0aGlzIHtcbiAgICBjb25zdCBiYXNlVHggPSB0eCBhcyBldm1TZXJpYWwuSW1wb3J0VHg7XG4gICAgaWYgKCF0aGlzLnZlcmlmeVR4VHlwZShiYXNlVHguX3R5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0cyA9IGJhc2VUeC5PdXRzO1xuICAgIGlmIChvdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY2FuIGhhdmUgb25lIG91dHB1dCcpO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzWzBdO1xuXG4gICAgaWYgKEJ1ZmZlci5mcm9tKG91dHB1dC5hc3NldElkLnRvQnl0ZXMoKSkudG9TdHJpbmcoJ2hleCcpICE9PSB0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fzc2V0SUQgYXJlIG5vdCBlcXVhbHMnKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdG8gPSBbQnVmZmVyLmZyb20ob3V0cHV0LmFkZHJlc3MudG9CeXRlcygpKV07XG5cbiAgICBjb25zdCBpbnB1dHMgPSBiYXNlVHguaW1wb3J0ZWRJbnB1dHM7XG5cbiAgICBjb25zdCBmaXJzdElucHV0ID0gaW5wdXRzWzBdO1xuICAgIGNvbnN0IGlucHV0VGhyZXNob2xkID0gZmlyc3RJbnB1dC5zaWdJbmRpY2llcygpLmxlbmd0aCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gaW5wdXRUaHJlc2hvbGQ7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcyA9IHRoaXMucmVjb3ZlclV0eG9zKGlucHV0cyk7XG5cbiAgICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gaW5wdXRzLnJlZHVjZSgodCwgaSkgPT4gdCArIGkuYW1vdW50KCksIEJpZ0ludCgwKSk7XG4gICAgY29uc3QgdG90YWxPdXRwdXRBbW91bnQgPSBvdXRwdXQuYW1vdW50LnZhbHVlKCk7XG5cbiAgICBjb25zdCBmZWUgPSB0b3RhbElucHV0QW1vdW50IC0gdG90YWxPdXRwdXRBbW91bnQ7XG5cbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHBhcnNlZENyZWRlbnRpYWxzIHx8IFtdO1xuICAgIGNvbnN0IGhhc0NyZWRlbnRpYWxzID0gY3JlZGVudGlhbHMubGVuZ3RoID4gMDtcblxuICAgIGlmIChoYXNDcmVkZW50aWFscyAmJiByYXdCeXRlcykge1xuICAgICAgdGhpcy50cmFuc2FjdGlvbi5fcmF3U2lnbmVkQnl0ZXMgPSByYXdCeXRlcztcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUgPSB7XG4gICAgICBmZWU6IGZlZS50b1N0cmluZygpLFxuICAgIH07XG5cbiAgICB0aGlzLmNvbXB1dGVBZGRyZXNzZXNJbmRleCh0cnVlKTtcblxuICAgIC8vIENyZWF0ZSBhZGRyZXNzTWFwcyB1c2luZyBzaWdJbmRpY2VzIGZyb20gcGFyc2VkIHRyYW5zYWN0aW9uIGZvciBjb25zaXN0ZW5jeVxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MubWFwKCh1dHhvKSA9PiB7XG4gICAgICBjb25zdCB1dHhvVGhyZXNob2xkID0gdXR4by50aHJlc2hvbGQgfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkO1xuICAgICAgY29uc3Qgc2lnSW5kaWNlcyA9IHV0eG8uYWRkcmVzc2VzSW5kZXggPz8gW107XG4gICAgICBpZiAoc2lnSW5kaWNlcy5sZW5ndGggPj0gdXR4b1RocmVzaG9sZCAmJiBzaWdJbmRpY2VzLmV2ZXJ5KChpZHgpID0+IGlkeCA+PSAwKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh1dHhvLCB1dHhvVGhyZXNob2xkLCBzaWdJbmRpY2VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUFkZHJlc3NNYXBGb3JVdHhvKHV0eG8sIHV0eG9UaHJlc2hvbGQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZmxhcmVBZGRyZXNzTWFwcyA9IG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXBzKGFkZHJlc3NNYXBzKTtcblxuICAgIC8vIFVzZSBwYXJzZWQgY3JlZGVudGlhbHMgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgY3JlYXRlIG5ldyBvbmVzIGJhc2VkIG9uIHNpZ0luZGljZXNcbiAgICBsZXQgdHhDcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICAgIGlmIChjcmVkZW50aWFscy5sZW5ndGggPiAwKSB7XG4gICAgICB0eENyZWRlbnRpYWxzID0gY3JlZGVudGlhbHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR4Q3JlZGVudGlhbHMgPSB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5tYXAoKHV0eG8pID0+IHtcbiAgICAgICAgY29uc3QgdXR4b1RocmVzaG9sZCA9IHV0eG8udGhyZXNob2xkIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZDtcbiAgICAgICAgY29uc3Qgc2lnSW5kaWNlcyA9IHV0eG8uYWRkcmVzc2VzSW5kZXggPz8gW107XG4gICAgICAgIGlmIChzaWdJbmRpY2VzLmxlbmd0aCA+PSB1dHhvVGhyZXNob2xkICYmIHNpZ0luZGljZXMuZXZlcnkoKGlkeCkgPT4gaWR4ID49IDApKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3JlZGVudGlhbEZvclV0eG8odXR4bywgdXR4b1RocmVzaG9sZCwgc2lnSW5kaWNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3JlZGVudGlhbEZvclV0eG8odXR4bywgdXR4b1RocmVzaG9sZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCB1bnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoYmFzZVR4LCBbXSwgZmxhcmVBZGRyZXNzTWFwcywgdHhDcmVkZW50aWFscyk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKHVuc2lnbmVkVHgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHhuVHlwZSA9PT0gRmxhcmVUcmFuc2FjdGlvblR5cGUuRXZtSW1wb3J0VHg7XG4gIH1cblxuICB2ZXJpZnlUeFR5cGUodHhuVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEltcG9ydEluQ1R4QnVpbGRlci52ZXJpZnlUeFR5cGUodHhuVHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGltcG9ydCBpbiBDLWNoYWluIHRyYW5zYWN0aW9uXG4gICAqIEZvbGxvd2luZyBBVkFYIFAgYXBwcm9hY2ggZm9yIFVUWE8gaGFuZGxpbmcgYW5kIHNpZ25hdHVyZSBzbG90IGFzc2lnbm1lbnQuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEZsYXJlVHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaGFzQ3JlZGVudGlhbHMpIHJldHVybjtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5fdG8ubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0byBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2ZlZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2NvbnRleHQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2NvbnRleHQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzIHx8IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdmcm9tQWRkcmVzc2VzIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX3V0eG9zIHx8IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVVRYT3MgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0aHJlc2hvbGQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXB1dGVBZGRyZXNzZXNJbmRleCgpO1xuXG4gICAgdGhpcy52YWxpZGF0ZVV0eG9BZGRyZXNzZXMoKTtcblxuICAgIGNvbnN0IGFjdHVhbEZlZU5GbHIgPSBCaWdJbnQodGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZSk7XG4gICAgY29uc3Qgc291cmNlQ2hhaW4gPSAnUCc7XG5cbiAgICAvLyBDb252ZXJ0IGRlY29kZWQgVVRYT3MgdG8gbmF0aXZlIEZsYXJlSlMgVXR4byBvYmplY3RzXG4gICAgY29uc3QgYXNzZXRJZCA9IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcbiAgICBjb25zdCBuYXRpdmVVdHhvcyA9IHV0aWxzLmRlY29kZWRUb1V0eG9zKHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLCBhc3NldElkKTtcblxuICAgIC8vIFZhbGlkYXRlIFVUWE8gYmFsYW5jZSBpcyBzdWZmaWNpZW50IHRvIGNvdmVyIHRoZSBpbXBvcnQgZmVlXG4gICAgY29uc3QgdG90YWxVdHhvQW1vdW50ID0gbmF0aXZlVXR4b3MucmVkdWNlKChzdW0sIHV0eG8pID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHV0eG8ub3V0cHV0IGFzIFRyYW5zZmVyT3V0cHV0O1xuICAgICAgcmV0dXJuIHN1bSArIG91dHB1dC5hbW91bnQoKTtcbiAgICB9LCBCaWdJbnQoMCkpO1xuXG4gICAgaWYgKHRvdGFsVXR4b0Ftb3VudCA8PSBhY3R1YWxGZWVORmxyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICBgSW5zdWZmaWNpZW50IFVUWE8gYmFsYW5jZTogaGF2ZSAke3RvdGFsVXR4b0Ftb3VudC50b1N0cmluZygpfSBuRkxSLCBuZWVkIG1vcmUgdGhhbiAke2FjdHVhbEZlZU5GbHIudG9TdHJpbmcoKX0gbkZMUiB0byBjb3ZlciBpbXBvcnQgZmVlYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduaW5nQWRkcmVzc2VzID0gdGhpcy5nZXRTaWduaW5nQWRkcmVzc2VzKCk7XG5cbiAgICBjb25zdCBpbXBvcnRUeCA9IGV2bS5uZXdJbXBvcnRUeChcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX2NvbnRleHQsXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl90b1swXSxcbiAgICAgIHNpZ25pbmdBZGRyZXNzZXMsXG4gICAgICBuYXRpdmVVdHhvcyxcbiAgICAgIHNvdXJjZUNoYWluLFxuICAgICAgYWN0dWFsRmVlTkZsclxuICAgICk7XG5cbiAgICBjb25zdCBmbGFyZVVuc2lnbmVkVHggPSBpbXBvcnRUeCBhcyBVbnNpZ25lZFR4O1xuICAgIGNvbnN0IGlubmVyVHggPSBmbGFyZVVuc2lnbmVkVHguZ2V0VHgoKSBhcyBldm1TZXJpYWwuSW1wb3J0VHg7XG5cbiAgICBjb25zdCB1dHhvc1dpdGhJbmRleCA9IGlubmVyVHguaW1wb3J0ZWRJbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXRUeGlkID0gdXRpbHMuY2I1OEVuY29kZShCdWZmZXIuZnJvbShpbnB1dC51dHhvSUQudHhJRC50b0J5dGVzKCkpKTtcbiAgICAgIGNvbnN0IGlucHV0T3V0cHV0SWR4ID0gaW5wdXQudXR4b0lELm91dHB1dElkeC52YWx1ZSgpLnRvU3RyaW5nKCk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVXR4byA9IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmZpbmQoXG4gICAgICAgICh1dHhvKSA9PiB1dHhvLnR4aWQgPT09IGlucHV0VHhpZCAmJiB1dHhvLm91dHB1dGlkeCA9PT0gaW5wdXRPdXRwdXRJZHhcbiAgICAgICk7XG5cbiAgICAgIGlmICghb3JpZ2luYWxVdHhvKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYENvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIFVUWE8gZm9yIGlucHV0ICR7aW5wdXRUeGlkfToke2lucHV0T3V0cHV0SWR4fWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgIGNvbnN0IGFjdHVhbFNpZ0luZGljZXMgPSB0cmFuc2ZlcklucHV0LnNpZ0luZGljaWVzKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9yaWdpbmFsVXR4byxcbiAgICAgICAgYWRkcmVzc2VzSW5kZXg6IG9yaWdpbmFsVXR4by5hZGRyZXNzZXNJbmRleCxcbiAgICAgICAgYWRkcmVzc2VzOiBvcmlnaW5hbFV0eG8uYWRkcmVzc2VzLFxuICAgICAgICB0aHJlc2hvbGQ6IG9yaWdpbmFsVXR4by50aHJlc2hvbGQgfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkLFxuICAgICAgICBhY3R1YWxTaWdJbmRpY2VzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gdXR4b3NXaXRoSW5kZXg7XG5cbiAgICBjb25zdCB0eENyZWRlbnRpYWxzID0gdXR4b3NXaXRoSW5kZXgubWFwKCh1dHhvKSA9PlxuICAgICAgdGhpcy5jcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvLCB1dHhvLnRocmVzaG9sZCwgdXR4by5hY3R1YWxTaWdJbmRpY2VzKVxuICAgICk7XG5cbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IHV0eG9zV2l0aEluZGV4Lm1hcCgodXR4bykgPT5cbiAgICAgIHRoaXMuY3JlYXRlQWRkcmVzc01hcEZvclV0eG8odXR4bywgdXR4by50aHJlc2hvbGQsIHV0eG8uYWN0dWFsU2lnSW5kaWNlcylcbiAgICApO1xuXG4gICAgY29uc3QgZml4ZWRVbnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoaW5uZXJUeCwgW10sIG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXBzKGFkZHJlc3NNYXBzKSwgdHhDcmVkZW50aWFscyk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKGZpeGVkVW5zaWduZWRUeCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBVVFhPcyBmcm9tIGltcG9ydGVkIGlucHV0cy5cbiAgICogVXNlcyBmcm9tQWRkcmVzc2VzIGFzIHByb3h5IGZvciBVVFhPIGFkZHJlc3NlcyBzaW5jZSB0aGV5IHNob3VsZCBiZSB0aGUgc2FtZVxuICAgKiBhZGRyZXNzZXMgY29udHJvbGxpbmcgdGhlIG11bHRpc2lnLlxuICAgKlxuICAgKiBAcGFyYW0gaW1wb3J0ZWRJbnB1dHMgQXJyYXkgb2YgdHJhbnNmZXJhYmxlIGlucHV0c1xuICAgKiBAcmV0dXJucyBBcnJheSBvZiBkZWNvZGVkIFVUWE8gb2JqZWN0c1xuICAgKi9cbiAgcHJpdmF0ZSByZWNvdmVyVXR4b3MoaW1wb3J0ZWRJbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W10pOiBEZWNvZGVkVXR4b09ialtdIHtcbiAgICBjb25zdCBwcm94eUFkZHJlc3NlcyA9XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzICYmIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMubWFwKChhZGRyKSA9PlxuICAgICAgICAgICAgdXRpbHMuYWRkcmVzc1RvU3RyaW5nKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuaHJwLCAnUCcsIEJ1ZmZlci5mcm9tKGFkZHIpKVxuICAgICAgICAgIClcbiAgICAgICAgOiBbXTtcblxuICAgIHJldHVybiBpbXBvcnRlZElucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCB0eGlkID0gaW5wdXQudXR4b0lELnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBvdXRwdXRpZHggPSBpbnB1dC51dHhvSUQub3V0cHV0SWR4LnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgIGNvbnN0IHNpZ0luZGljaWVzID0gdHJhbnNmZXJJbnB1dC5zaWdJbmRpY2llcygpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRwdXRJRDogU0VDUDI1NksxX1RyYW5zZmVyX091dHB1dCxcbiAgICAgICAgYW1vdW50OiBpbnB1dC5hbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICB0eGlkOiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHR4aWQsICdoZXgnKSksXG4gICAgICAgIG91dHB1dGlkeDogb3V0cHV0aWR4LFxuICAgICAgICB0aHJlc2hvbGQ6IHNpZ0luZGljaWVzLmxlbmd0aCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQsXG4gICAgICAgIGFkZHJlc3NlczogcHJveHlBZGRyZXNzZXMsXG4gICAgICAgIGFkZHJlc3Nlc0luZGV4OiBzaWdJbmRpY2llcyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -34,15 +34,5 @@ export declare class ImportInPTxBuilder extends AtomicTransactionBuilder {
|
|
|
34
34
|
* @returns Array of decoded UTXO objects
|
|
35
35
|
*/
|
|
36
36
|
private recoverUtxos;
|
|
37
|
-
/**
|
|
38
|
-
* Compute proper addressesIndex from parsed transaction's sigIndicies.
|
|
39
|
-
* Following AVAX P approach: addressesIndex[senderIdx] = position of sender in UTXO addresses.
|
|
40
|
-
*
|
|
41
|
-
* For parsed transactions:
|
|
42
|
-
* - sigIndicies tells us which UTXO positions need to sign for each slot
|
|
43
|
-
* - We use output addresses as proxy for UTXO addresses
|
|
44
|
-
* - We compute addressesIndex as sender -> utxo position mapping
|
|
45
|
-
*/
|
|
46
|
-
private computeAddressesIndexFromParsed;
|
|
47
37
|
}
|
|
48
38
|
//# sourceMappingURL=ImportInPTxBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImportInPTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/ImportInPTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAuC,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAOL,UAAU,EAEX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAmE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE9F,qBAAa,kBAAmB,SAAQ,wBAAwB;gBAClD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQ7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;OAGG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAUjD;;;OAGG;IACH,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAS7B,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"ImportInPTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/ImportInPTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAuC,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAOL,UAAU,EAEX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAmE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE9F,qBAAa,kBAAmB,SAAQ,wBAAwB;gBAClD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQ7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED;;;OAGG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAUjD;;;OAGG;IACH,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAS7B,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI;IAyE9E,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAItC;;;OAGG;cACa,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwGtD;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;CA+BrB"}
|
|
@@ -73,15 +73,28 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
73
73
|
if (rawBytes && hasCredentials) {
|
|
74
74
|
this.transaction._rawSignedBytes = rawBytes;
|
|
75
75
|
}
|
|
76
|
-
this.
|
|
76
|
+
this.computeAddressesIndex(true);
|
|
77
|
+
// Use parsed credentials if available, otherwise create new ones based on sigIndices
|
|
78
|
+
// The sigIndices from the parsed transaction (stored in addressesIndex) determine
|
|
79
|
+
// the correct credential ordering for on-chain verification
|
|
77
80
|
const txCredentials = credentials.length > 0
|
|
78
81
|
? credentials
|
|
79
82
|
: this.transaction._utxos.map((utxo) => {
|
|
80
83
|
const utxoThreshold = utxo.threshold || this.transaction._threshold;
|
|
84
|
+
const sigIndices = utxo.addressesIndex ?? [];
|
|
85
|
+
// Use sigIndices-based method if we have valid sigIndices from parsed transaction
|
|
86
|
+
if (sigIndices.length >= utxoThreshold && sigIndices.every((idx) => idx >= 0)) {
|
|
87
|
+
return this.createCredentialForUtxo(utxo, utxoThreshold, sigIndices);
|
|
88
|
+
}
|
|
81
89
|
return this.createCredentialForUtxo(utxo, utxoThreshold);
|
|
82
90
|
});
|
|
91
|
+
// Create addressMaps using sigIndices from parsed transaction for consistency
|
|
83
92
|
const addressMaps = this.transaction._utxos.map((utxo) => {
|
|
84
93
|
const utxoThreshold = utxo.threshold || this.transaction._threshold;
|
|
94
|
+
const sigIndices = utxo.addressesIndex ?? [];
|
|
95
|
+
if (sigIndices.length >= utxoThreshold && sigIndices.every((idx) => idx >= 0)) {
|
|
96
|
+
return this.createAddressMapForUtxo(utxo, utxoThreshold, sigIndices);
|
|
97
|
+
}
|
|
85
98
|
return this.createAddressMapForUtxo(utxo, utxoThreshold);
|
|
86
99
|
});
|
|
87
100
|
const unsignedTx = new flarejs_1.UnsignedTx(importTx, [], new flarejs_1.utils.AddressMaps(addressMaps), txCredentials);
|
|
@@ -134,18 +147,14 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
134
147
|
throw new sdk_core_1.BuildTransactionError('UTXOs have zero total balance');
|
|
135
148
|
}
|
|
136
149
|
const toAddresses = this.transaction._to.map((addr) => Buffer.from(addr));
|
|
137
|
-
const fromAddresses = this.transaction._fromAddresses.map((addr) => Buffer.from(addr));
|
|
138
150
|
const invalidToAddress = toAddresses.find((addr) => addr.length !== 20);
|
|
139
151
|
if (invalidToAddress) {
|
|
140
152
|
throw new sdk_core_1.BuildTransactionError(`Invalid toAddress length: expected 20 bytes, got ${invalidToAddress.length}`);
|
|
141
153
|
}
|
|
142
|
-
const
|
|
143
|
-
if (invalidFromAddress) {
|
|
144
|
-
throw new sdk_core_1.BuildTransactionError(`Invalid fromAddress length: expected 20 bytes, got ${invalidFromAddress.length}`);
|
|
145
|
-
}
|
|
154
|
+
const signingAddresses = this.getSigningAddresses();
|
|
146
155
|
const importTx = flarejs_1.pvm.e.newImportTx({
|
|
147
156
|
feeState: this.transaction._feeState,
|
|
148
|
-
fromAddressesBytes:
|
|
157
|
+
fromAddressesBytes: signingAddresses,
|
|
149
158
|
sourceChainId: this.transaction._network.cChainBlockchainID,
|
|
150
159
|
toAddressesBytes: toAddresses,
|
|
151
160
|
utxos: nativeUtxos,
|
|
@@ -161,16 +170,19 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
161
170
|
if (!originalUtxo) {
|
|
162
171
|
throw new sdk_core_1.BuildTransactionError(`Could not find matching UTXO for input ${inputTxid}:${inputOutputIdx}`);
|
|
163
172
|
}
|
|
173
|
+
const transferInput = input.input;
|
|
174
|
+
const actualSigIndices = transferInput.sigIndicies();
|
|
164
175
|
return {
|
|
165
176
|
...originalUtxo,
|
|
166
177
|
addressesIndex: originalUtxo.addressesIndex,
|
|
167
178
|
addresses: originalUtxo.addresses,
|
|
168
179
|
threshold: originalUtxo.threshold || this.transaction._threshold,
|
|
180
|
+
actualSigIndices,
|
|
169
181
|
};
|
|
170
182
|
});
|
|
171
183
|
this.transaction._utxos = utxosWithIndex;
|
|
172
|
-
const txCredentials = utxosWithIndex.map((utxo) => this.createCredentialForUtxo(utxo, utxo.threshold));
|
|
173
|
-
const addressMaps = utxosWithIndex.map((utxo) => this.createAddressMapForUtxo(utxo, utxo.threshold));
|
|
184
|
+
const txCredentials = utxosWithIndex.map((utxo) => this.createCredentialForUtxo(utxo, utxo.threshold, utxo.actualSigIndices));
|
|
185
|
+
const addressMaps = utxosWithIndex.map((utxo) => this.createAddressMapForUtxo(utxo, utxo.threshold, utxo.actualSigIndices));
|
|
174
186
|
const fixedUnsignedTx = new flarejs_1.UnsignedTx(innerTx, [], new flarejs_1.utils.AddressMaps(addressMaps), txCredentials);
|
|
175
187
|
this.transaction.setTransaction(fixedUnsignedTx);
|
|
176
188
|
}
|
|
@@ -203,26 +215,6 @@ class ImportInPTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBui
|
|
|
203
215
|
return utxo;
|
|
204
216
|
});
|
|
205
217
|
}
|
|
206
|
-
/**
|
|
207
|
-
* Compute proper addressesIndex from parsed transaction's sigIndicies.
|
|
208
|
-
* Following AVAX P approach: addressesIndex[senderIdx] = position of sender in UTXO addresses.
|
|
209
|
-
*
|
|
210
|
-
* For parsed transactions:
|
|
211
|
-
* - sigIndicies tells us which UTXO positions need to sign for each slot
|
|
212
|
-
* - We use output addresses as proxy for UTXO addresses
|
|
213
|
-
* - We compute addressesIndex as sender -> utxo position mapping
|
|
214
|
-
*/
|
|
215
|
-
computeAddressesIndexFromParsed() {
|
|
216
|
-
const sender = this.transaction._fromAddresses;
|
|
217
|
-
if (!sender || sender.length === 0)
|
|
218
|
-
return;
|
|
219
|
-
this.transaction._utxos.forEach((utxo) => {
|
|
220
|
-
if (utxo.addresses && utxo.addresses.length > 0) {
|
|
221
|
-
const utxoAddresses = utxo.addresses.map((a) => utils_1.default.parseAddress(a));
|
|
222
|
-
utxo.addressesIndex = sender.map((senderAddr) => utxoAddresses.findIndex((utxoAddr) => Buffer.compare(Buffer.from(utxoAddr), Buffer.from(senderAddr)) === 0));
|
|
223
|
-
}
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
218
|
}
|
|
227
219
|
exports.ImportInPTxBuilder = ImportInPTxBuilder;
|
|
228
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsOENBQXVGO0FBQ3ZGLHlFQUFzRTtBQUN0RSxtREFTK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLG1EQUF3QjtJQUM5RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0csS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxZQUErQjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksZ0NBQXFCLENB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LENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdkMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUM5QyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUM1RyxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBclJELGdEQXFSQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIE5vdFN1cHBvcnRlZCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vYXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7XG4gIHB2bVNlcmlhbCxcbiAgVW5zaWduZWRUeCxcbiAgVHJhbnNmZXJhYmxlSW5wdXQsXG4gIFRyYW5zZmVyT3V0cHV0LFxuICBUcmFuc2ZlcklucHV0LFxuICB1dGlscyBhcyBGbGFyZVV0aWxzLFxuICBDcmVkZW50aWFsLFxuICBwdm0sXG59IGZyb20gJ0BmbGFyZW5ldHdvcmsvZmxhcmVqcyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBEZWNvZGVkVXR4b09iaiwgRmxhcmVUcmFuc2FjdGlvblR5cGUsIFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBJbXBvcnRJblBUeEJ1aWxkZXIgZXh0ZW5kcyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fZXh0ZXJuYWxDaGFpbklkID0gdXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmNDaGFpbkJsb2NrY2hhaW5JRCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklEID0gQnVmZmVyLmZyb20odXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmJsb2NrY2hhaW5JRCkpLnRvU3RyaW5nKFxuICAgICAgJ2hleCdcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvblR5cGUoKTogVHJhbnNhY3Rpb25UeXBlIHtcbiAgICByZXR1cm4gVHJhbnNhY3Rpb25UeXBlLkltcG9ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBzZW5kZXJQdWJLZXkgLSBDLWNoYWluIGFkZHJlc3MoZXMpIHdpdGggQy0gcHJlZml4XG4gICAqIEB0aHJvd3Mge0J1aWxkVHJhbnNhY3Rpb25FcnJvcn0gaWYgYW55IGFkZHJlc3MgaXMgbm90IGEgQy1jaGFpbiBhZGRyZXNzXG4gICAqL1xuICBmcm9tUHViS2V5KHNlbmRlclB1YktleTogc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzIHtcbiAgICBjb25zdCBwdWJLZXlzID0gQXJyYXkuaXNBcnJheShzZW5kZXJQdWJLZXkpID8gc2VuZGVyUHViS2V5IDogW3NlbmRlclB1YktleV07XG4gICAgY29uc3QgaW52YWxpZEFkZHJlc3MgPSBwdWJLZXlzLmZpbmQoKGFkZHIpID0+ICFhZGRyLnN0YXJ0c1dpdGgoJ0MtJykpO1xuICAgIGlmIChpbnZhbGlkQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCBmcm9tQWRkcmVzczogZXhwZWN0ZWQgQy1jaGFpbiBhZGRyZXNzIChDLS4uLiksIGdvdCAke2ludmFsaWRBZGRyZXNzfWApO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzID0gcHViS2V5cy5tYXAoKGFkZHIpID0+IHV0aWxzLnBhcnNlQWRkcmVzcyhhZGRyKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYWRkcmVzc2VzIC0gQXJyYXkgb2YgUC1jaGFpbiBhZGRyZXNzZXMgKGJlY2gzMiBmb3JtYXQgd2l0aCBQLSBwcmVmaXgpXG4gICAqIEB0aHJvd3Mge0J1aWxkVHJhbnNhY3Rpb25FcnJvcn0gaWYgYW55IGFkZHJlc3MgaXMgbm90IGEgUC1jaGFpbiBhZGRyZXNzXG4gICAqL1xuICB0byhhZGRyZXNzZXM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgY29uc3QgaW52YWxpZEFkZHJlc3MgPSBhZGRyZXNzZXMuZmluZCgoYWRkcikgPT4gIWFkZHIuc3RhcnRzV2l0aCgnUC0nKSk7XG4gICAgaWYgKGludmFsaWRBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHRvQWRkcmVzczogZXhwZWN0ZWQgUC1jaGFpbiBhZGRyZXNzIChQLS4uLiksIGdvdCAke2ludmFsaWRBZGRyZXNzfWApO1xuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90byA9IGFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IHV0aWxzLnBhcnNlQWRkcmVzcyhhZGRyKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHgsIHJhd0J5dGVzPzogQnVmZmVyLCBwYXJzZWRDcmVkZW50aWFscz86IENyZWRlbnRpYWxbXSk6IHRoaXMge1xuICAgIGNvbnN0IGltcG9ydFR4ID0gdHggYXMgcHZtU2VyaWFsLkltcG9ydFR4O1xuXG4gICAgaWYgKCF0aGlzLnZlcmlmeVR4VHlwZShpbXBvcnRUeC5fdHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWQoJ1RyYW5zYWN0aW9uIGNhbm5vdCBiZSBwYXJzZWQgb3IgaGFzIGFuIHVuc3VwcG9ydGVkIHRyYW5zYWN0aW9uIHR5cGUnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRzID0gaW1wb3J0VHguYmFzZVR4Lm91dHB1dHM7XG4gICAgaWYgKG91dHB1dHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBjYW4gaGF2ZSBvbmUgZXh0ZXJuYWwgb3V0cHV0Jyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0c1swXTtcbiAgICBjb25zdCBhc3NldElkID0gb3V0cHV0LmFzc2V0SWQudG9CeXRlcygpO1xuICAgIGlmIChCdWZmZXIuY29tcGFyZShhc3NldElkLCBCdWZmZXIuZnJvbSh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkLCAnaGV4JykpICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBc3NldCBJRCBvZiB0aGUgb3V0cHV0IGRvZXMgbm90IG1hdGNoIHRoZSB0cmFuc2FjdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZmVyT3V0cHV0ID0gb3V0cHV0Lm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICBjb25zdCBvdXRwdXRPd25lcnMgPSB0cmFuc2Zlck91dHB1dC5vdXRwdXRPd25lcnM7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUgPSBvdXRwdXRPd25lcnMubG9ja3RpbWUudmFsdWUoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQgPSBvdXRwdXRPd25lcnMudGhyZXNob2xkLnZhbHVlKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyA9IG91dHB1dE93bmVycy5hZGRycy5tYXAoKGFkZHIpID0+IEJ1ZmZlci5mcm9tKGFkZHIudG9CeXRlcygpKSk7XG4gICAgdGhpcy5fZXh0ZXJuYWxDaGFpbklkID0gQnVmZmVyLmZyb20oaW1wb3J0VHguc291cmNlQ2hhaW4udG9CeXRlcygpKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gdGhpcy5yZWNvdmVyVXR4b3MoaW1wb3J0VHguaW5zLCBvdXRwdXRPd25lcnMuYWRkcnMpO1xuXG4gICAgY29uc3QgdG90YWxJbnB1dEFtb3VudCA9IGltcG9ydFR4Lmlucy5yZWR1Y2UoKHN1bSwgaW5wdXQpID0+IHN1bSArIGlucHV0LmFtb3VudCgpLCBCaWdJbnQoMCkpO1xuICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IHRyYW5zZmVyT3V0cHV0LmFtb3VudCgpO1xuICAgIGNvbnN0IGZlZSA9IHRvdGFsSW5wdXRBbW91bnQgLSBvdXRwdXRBbW91bnQ7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZSA9IGZlZS50b1N0cmluZygpO1xuXG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSBwYXJzZWRDcmVkZW50aWFscyB8fCBbXTtcbiAgICBjb25zdCBoYXNDcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAocmF3Qnl0ZXMgJiYgaGFzQ3JlZGVudGlhbHMpIHtcbiAgICAgIHRoaXMudHJhbnNhY3Rpb24uX3Jhd1NpZ25lZEJ5dGVzID0gcmF3Qnl0ZXM7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wdXRlQWRkcmVzc2VzSW5kZXhGcm9tUGFyc2VkKCk7XG5cbiAgICBjb25zdCB0eENyZWRlbnRpYWxzID1cbiAgICAgIGNyZWRlbnRpYWxzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBjcmVkZW50aWFsc1xuICAgICAgICA6IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLm1hcCgodXR4bykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXR4b1RocmVzaG9sZCA9IHV0eG8udGhyZXNob2xkIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNyZWRlbnRpYWxGb3JVdHhvKHV0eG8sIHV0eG9UaHJlc2hvbGQpO1xuICAgICAgICAgIH0pO1xuXG4gICAgY29uc3QgYWRkcmVzc01hcHMgPSB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5tYXAoKHV0eG8pID0+IHtcbiAgICAgIGNvbnN0IHV0eG9UaHJlc2hvbGQgPSB1dHhvLnRocmVzaG9sZCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQ7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh1dHhvLCB1dHhvVGhyZXNob2xkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHVuc2lnbmVkVHggPSBuZXcgVW5zaWduZWRUeChpbXBvcnRUeCwgW10sIG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXBzKGFkZHJlc3NNYXBzKSwgdHhDcmVkZW50aWFscyk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKHVuc2lnbmVkVHgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHhuVHlwZSA9PT0gRmxhcmVUcmFuc2FjdGlvblR5cGUuUHZtSW1wb3J0VHg7XG4gIH1cblxuICB2ZXJpZnlUeFR5cGUodHhuVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEltcG9ydEluUFR4QnVpbGRlci52ZXJpZnlUeFR5cGUodHhuVHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIGltcG9ydCB0cmFuc2FjdGlvbiBmb3IgUC1jaGFpbiAoaW1wb3J0aW5nIEZST00gQy1jaGFpbilcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5oYXNDcmVkZW50aWFscykgcmV0dXJuO1xuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MgfHwgdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVVFhPcyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl9mZWVTdGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRmVlIHN0YXRlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fY29udGV4dCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignY29udGV4dCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgfHwgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ2Zyb21BZGRyZXNzZXMgYXJlIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fdG8gfHwgdGhpcy50cmFuc2FjdGlvbi5fdG8ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCd0b0FkZHJlc3NlcyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3RocmVzaG9sZCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignbG9ja3RpbWUgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXB1dGVBZGRyZXNzZXNJbmRleCgpO1xuXG4gICAgdGhpcy52YWxpZGF0ZVV0eG9BZGRyZXNzZXMoKTtcblxuICAgIGNvbnN0IGFzc2V0SWQgPSB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQsICdoZXgnKSk7XG4gICAgY29uc3QgbmF0aXZlVXR4b3MgPSB1dGlscy5kZWNvZGVkVG9VdHhvcyh0aGlzLnRyYW5zYWN0aW9uLl91dHhvcywgYXNzZXRJZCk7XG5cbiAgICBjb25zdCB0b3RhbFV0eG9BbW91bnQgPSBuYXRpdmVVdHhvcy5yZWR1Y2UoKHN1bSwgdXR4bykgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdXR4by5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgICByZXR1cm4gc3VtICsgb3V0cHV0LmFtb3VudCgpO1xuICAgIH0sIEJpZ0ludCgwKSk7XG5cbiAgICBpZiAodG90YWxVdHhvQW1vdW50ID09PSBCaWdJbnQoMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1VUWE9zIGhhdmUgemVybyB0b3RhbCBiYWxhbmNlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9BZGRyZXNzZXMgPSB0aGlzLnRyYW5zYWN0aW9uLl90by5tYXAoKGFkZHIpID0+IEJ1ZmZlci5mcm9tKGFkZHIpKTtcbiAgICBjb25zdCBmcm9tQWRkcmVzc2VzID0gdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3Nlcy5tYXAoKGFkZHIpID0+IEJ1ZmZlci5mcm9tKGFkZHIpKTtcblxuICAgIGNvbnN0IGludmFsaWRUb0FkZHJlc3MgPSB0b0FkZHJlc3Nlcy5maW5kKChhZGRyKSA9PiBhZGRyLmxlbmd0aCAhPT0gMjApO1xuICAgIGlmIChpbnZhbGlkVG9BZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHRvQWRkcmVzcyBsZW5ndGg6IGV4cGVjdGVkIDIwIGJ5dGVzLCBnb3QgJHtpbnZhbGlkVG9BZGRyZXNzLmxlbmd0aH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnZhbGlkRnJvbUFkZHJlc3MgPSBmcm9tQWRkcmVzc2VzLmZpbmQoKGFkZHIpID0+IGFkZHIubGVuZ3RoICE9PSAyMCk7XG4gICAgaWYgKGludmFsaWRGcm9tQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihcbiAgICAgICAgYEludmFsaWQgZnJvbUFkZHJlc3MgbGVuZ3RoOiBleHBlY3RlZCAyMCBieXRlcywgZ290ICR7aW52YWxpZEZyb21BZGRyZXNzLmxlbmd0aH1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGltcG9ydFR4ID0gcHZtLmUubmV3SW1wb3J0VHgoXG4gICAgICB7XG4gICAgICAgIGZlZVN0YXRlOiB0aGlzLnRyYW5zYWN0aW9uLl9mZWVTdGF0ZSxcbiAgICAgICAgZnJvbUFkZHJlc3Nlc0J5dGVzOiBmcm9tQWRkcmVzc2VzLFxuICAgICAgICBzb3VyY2VDaGFpbklkOiB0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmNDaGFpbkJsb2NrY2hhaW5JRCxcbiAgICAgICAgdG9BZGRyZXNzZXNCeXRlczogdG9BZGRyZXNzZXMsXG4gICAgICAgIHV0eG9zOiBuYXRpdmVVdHhvcyxcbiAgICAgICAgdGhyZXNob2xkOiB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQsXG4gICAgICAgIGxvY2t0aW1lOiB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSxcbiAgICAgIH0sXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9jb250ZXh0XG4gICAgKTtcblxuICAgIGNvbnN0IGZsYXJlVW5zaWduZWRUeCA9IGltcG9ydFR4IGFzIFVuc2lnbmVkVHg7XG4gICAgY29uc3QgaW5uZXJUeCA9IGZsYXJlVW5zaWduZWRUeC5nZXRUeCgpIGFzIHB2bVNlcmlhbC5JbXBvcnRUeDtcblxuICAgIGNvbnN0IHV0eG9zV2l0aEluZGV4ID0gaW5uZXJUeC5pbnMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXRUeGlkID0gdXRpbHMuY2I1OEVuY29kZShCdWZmZXIuZnJvbShpbnB1dC51dHhvSUQudHhJRC50b0J5dGVzKCkpKTtcbiAgICAgIGNvbnN0IGlucHV0T3V0cHV0SWR4ID0gaW5wdXQudXR4b0lELm91dHB1dElkeC52YWx1ZSgpLnRvU3RyaW5nKCk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVXR4byA9IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmZpbmQoXG4gICAgICAgICh1dHhvKSA9PiB1dHhvLnR4aWQgPT09IGlucHV0VHhpZCAmJiB1dHhvLm91dHB1dGlkeCA9PT0gaW5wdXRPdXRwdXRJZHhcbiAgICAgICk7XG5cbiAgICAgIGlmICghb3JpZ2luYWxVdHhvKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYENvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIFVUWE8gZm9yIGlucHV0ICR7aW5wdXRUeGlkfToke2lucHV0T3V0cHV0SWR4fWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vcmlnaW5hbFV0eG8sXG4gICAgICAgIGFkZHJlc3Nlc0luZGV4OiBvcmlnaW5hbFV0eG8uYWRkcmVzc2VzSW5kZXgsXG4gICAgICAgIGFkZHJlc3Nlczogb3JpZ2luYWxVdHhvLmFkZHJlc3NlcyxcbiAgICAgICAgdGhyZXNob2xkOiBvcmlnaW5hbFV0eG8udGhyZXNob2xkIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcyA9IHV0eG9zV2l0aEluZGV4O1xuXG4gICAgY29uc3QgdHhDcmVkZW50aWFscyA9IHV0eG9zV2l0aEluZGV4Lm1hcCgodXR4bykgPT4gdGhpcy5jcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvLCB1dHhvLnRocmVzaG9sZCkpO1xuXG4gICAgY29uc3QgYWRkcmVzc01hcHMgPSB1dHhvc1dpdGhJbmRleC5tYXAoKHV0eG8pID0+IHRoaXMuY3JlYXRlQWRkcmVzc01hcEZvclV0eG8odXR4bywgdXR4by50aHJlc2hvbGQpKTtcblxuICAgIGNvbnN0IGZpeGVkVW5zaWduZWRUeCA9IG5ldyBVbnNpZ25lZFR4KGlubmVyVHgsIFtdLCBuZXcgRmxhcmVVdGlscy5BZGRyZXNzTWFwcyhhZGRyZXNzTWFwcyksIHR4Q3JlZGVudGlhbHMpO1xuXG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbihmaXhlZFVuc2lnbmVkVHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY292ZXIgVVRYT3MgZnJvbSBpbXBvcnRlZCBpbnB1dHMuXG4gICAqIFVzZXMgb3V0cHV0IGFkZHJlc3NlcyBhcyBwcm94eSBmb3IgVVRYTyBhZGRyZXNzZXMgc2luY2UgdGhleSBzaG91bGQgYmUgdGhlIHNhbWVcbiAgICogYWRkcmVzc2VzIGNvbnRyb2xsaW5nIHRoZSBtdWx0aXNpZyAoanVzdCBwb3RlbnRpYWxseSBpbiBkaWZmZXJlbnQgb24tY2hhaW4gb3JkZXIpLlxuICAgKlxuICAgKiBAcGFyYW0gaW1wb3J0ZWRJbnB1dHMgQXJyYXkgb2YgdHJhbnNmZXJhYmxlIGlucHV0c1xuICAgKiBAcGFyYW0gb3V0cHV0QWRkcnMgT3V0cHV0IG93bmVyIGFkZHJlc3NlcyB0byB1c2UgYXMgcHJveHkgZm9yIFVUWE8gYWRkcmVzc2VzXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGRlY29kZWQgVVRYTyBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIHJlY292ZXJVdHhvcyhcbiAgICBpbXBvcnRlZElucHV0czogVHJhbnNmZXJhYmxlSW5wdXRbXSxcbiAgICBvdXRwdXRBZGRycz86IHsgdG9CeXRlcygpOiBVaW50OEFycmF5IH1bXVxuICApOiBEZWNvZGVkVXR4b09ialtdIHtcbiAgICBjb25zdCBwcm94eUFkZHJlc3NlcyA9IG91dHB1dEFkZHJzXG4gICAgICA/IG91dHB1dEFkZHJzLm1hcCgoYWRkcikgPT5cbiAgICAgICAgICB1dGlscy5hZGRyZXNzVG9TdHJpbmcoXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmhycCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuYWxpYXMsXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShhZGRyLnRvQnl0ZXMoKSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogW107XG5cbiAgICByZXR1cm4gaW1wb3J0ZWRJbnB1dHMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdXR4b0lkID0gaW5wdXQudXR4b0lEO1xuICAgICAgY29uc3QgdHJhbnNmZXJJbnB1dCA9IGlucHV0LmlucHV0IGFzIFRyYW5zZmVySW5wdXQ7XG4gICAgICBjb25zdCBzaWdJbmRpY2llcyA9IHRyYW5zZmVySW5wdXQuc2lnSW5kaWNpZXMoKTtcblxuICAgICAgY29uc3QgdXR4bzogRGVjb2RlZFV0eG9PYmogPSB7XG4gICAgICAgIG91dHB1dElEOiBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LFxuICAgICAgICBhbW91bnQ6IHRyYW5zZmVySW5wdXQuYW1vdW50KCkudG9TdHJpbmcoKSxcbiAgICAgICAgdHhpZDogdXRpbHMuY2I1OEVuY29kZShCdWZmZXIuZnJvbSh1dHhvSWQudHhJRC50b0J5dGVzKCkpKSxcbiAgICAgICAgb3V0cHV0aWR4OiB1dHhvSWQub3V0cHV0SWR4LnZhbHVlKCkudG9TdHJpbmcoKSxcbiAgICAgICAgdGhyZXNob2xkOiBzaWdJbmRpY2llcy5sZW5ndGggfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkLFxuICAgICAgICBhZGRyZXNzZXM6IHByb3h5QWRkcmVzc2VzLFxuICAgICAgICBhZGRyZXNzZXNJbmRleDogc2lnSW5kaWNpZXMsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHV0eG87XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSBwcm9wZXIgYWRkcmVzc2VzSW5kZXggZnJvbSBwYXJzZWQgdHJhbnNhY3Rpb24ncyBzaWdJbmRpY2llcy5cbiAgICogRm9sbG93aW5nIEFWQVggUCBhcHByb2FjaDogYWRkcmVzc2VzSW5kZXhbc2VuZGVySWR4XSA9IHBvc2l0aW9uIG9mIHNlbmRlciBpbiBVVFhPIGFkZHJlc3Nlcy5cbiAgICpcbiAgICogRm9yIHBhcnNlZCB0cmFuc2FjdGlvbnM6XG4gICAqIC0gc2lnSW5kaWNpZXMgdGVsbHMgdXMgd2hpY2ggVVRYTyBwb3NpdGlvbnMgbmVlZCB0byBzaWduIGZvciBlYWNoIHNsb3RcbiAgICogLSBXZSB1c2Ugb3V0cHV0IGFkZHJlc3NlcyBhcyBwcm94eSBmb3IgVVRYTyBhZGRyZXNzZXNcbiAgICogLSBXZSBjb21wdXRlIGFkZHJlc3Nlc0luZGV4IGFzIHNlbmRlciAtPiB1dHhvIHBvc2l0aW9uIG1hcHBpbmdcbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZUFkZHJlc3Nlc0luZGV4RnJvbVBhcnNlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZW5kZXIgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzO1xuICAgIGlmICghc2VuZGVyIHx8IHNlbmRlci5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmZvckVhY2goKHV0eG8pID0+IHtcbiAgICAgIGlmICh1dHhvLmFkZHJlc3NlcyAmJiB1dHhvLmFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHV0eG9BZGRyZXNzZXMgPSB1dHhvLmFkZHJlc3Nlcy5tYXAoKGEpID0+IHV0aWxzLnBhcnNlQWRkcmVzcyhhKSk7XG4gICAgICAgIHV0eG8uYWRkcmVzc2VzSW5kZXggPSBzZW5kZXIubWFwKChzZW5kZXJBZGRyKSA9PlxuICAgICAgICAgIHV0eG9BZGRyZXNzZXMuZmluZEluZGV4KCh1dHhvQWRkcikgPT4gQnVmZmVyLmNvbXBhcmUoQnVmZmVyLmZyb20odXR4b0FkZHIpLCBCdWZmZXIuZnJvbShzZW5kZXJBZGRyKSkgPT09IDApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9JbXBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsOENBQXVGO0FBQ3ZGLHlFQUFzRTtBQUN0RSxtREFTK0I7QUFDL0Isb0RBQTRCO0FBQzVCLG1DQUE4RjtBQUU5RixNQUFhLGtCQUFtQixTQUFRLG1EQUF3QjtJQUM5RCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDN0csS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBYyxlQUFlO1FBQzNCLE9BQU8sMEJBQWUsQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVUsQ0FBQyxZQUErQjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksZ0NBQXFCLENB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QU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDMUQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFO2dCQUM5QyxTQUFTLEVBQUUsV0FBVyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVU7Z0JBQzVELFNBQVMsRUFBRSxjQUFjO2dCQUN6QixjQUFjLEVBQUUsV0FBVzthQUM1QixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTdRRCxnREE2UUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBOb3RTdXBwb3J0ZWQsIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2F0b21pY1RyYW5zYWN0aW9uQnVpbGRlcic7XG5pbXBvcnQge1xuICBwdm1TZXJpYWwsXG4gIFVuc2lnbmVkVHgsXG4gIFRyYW5zZmVyYWJsZUlucHV0LFxuICBUcmFuc2Zlck91dHB1dCxcbiAgVHJhbnNmZXJJbnB1dCxcbiAgdXRpbHMgYXMgRmxhcmVVdGlscyxcbiAgQ3JlZGVudGlhbCxcbiAgcHZtLFxufSBmcm9tICdAZmxhcmVuZXR3b3JrL2ZsYXJlanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgRGVjb2RlZFV0eG9PYmosIEZsYXJlVHJhbnNhY3Rpb25UeXBlLCBTRUNQMjU2SzFfVHJhbnNmZXJfT3V0cHV0LCBUeCB9IGZyb20gJy4vaWZhY2UnO1xuXG5leHBvcnQgY2xhc3MgSW1wb3J0SW5QVHhCdWlsZGVyIGV4dGVuZHMgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoX2NvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoX2NvaW5Db25maWcpO1xuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IHV0aWxzLmNiNThEZWNvZGUodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5jQ2hhaW5CbG9ja2NoYWluSUQpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCA9IEJ1ZmZlci5mcm9tKHV0aWxzLmNiNThEZWNvZGUodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ibG9ja2NoYWluSUQpKS50b1N0cmluZyhcbiAgICAgICdoZXgnXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gc2VuZGVyUHViS2V5IC0gQy1jaGFpbiBhZGRyZXNzKGVzKSB3aXRoIEMtIHByZWZpeFxuICAgKiBAdGhyb3dzIHtCdWlsZFRyYW5zYWN0aW9uRXJyb3J9IGlmIGFueSBhZGRyZXNzIGlzIG5vdCBhIEMtY2hhaW4gYWRkcmVzc1xuICAgKi9cbiAgZnJvbVB1YktleShzZW5kZXJQdWJLZXk6IHN0cmluZyB8IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgY29uc3QgcHViS2V5cyA9IEFycmF5LmlzQXJyYXkoc2VuZGVyUHViS2V5KSA/IHNlbmRlclB1YktleSA6IFtzZW5kZXJQdWJLZXldO1xuICAgIGNvbnN0IGludmFsaWRBZGRyZXNzID0gcHViS2V5cy5maW5kKChhZGRyKSA9PiAhYWRkci5zdGFydHNXaXRoKCdDLScpKTtcbiAgICBpZiAoaW52YWxpZEFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgZnJvbUFkZHJlc3M6IGV4cGVjdGVkIEMtY2hhaW4gYWRkcmVzcyAoQy0uLi4pLCBnb3QgJHtpbnZhbGlkQWRkcmVzc31gKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyA9IHB1YktleXMubWFwKChhZGRyKSA9PiB1dGlscy5wYXJzZUFkZHJlc3MoYWRkcikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFkZHJlc3NlcyAtIEFycmF5IG9mIFAtY2hhaW4gYWRkcmVzc2VzIChiZWNoMzIgZm9ybWF0IHdpdGggUC0gcHJlZml4KVxuICAgKiBAdGhyb3dzIHtCdWlsZFRyYW5zYWN0aW9uRXJyb3J9IGlmIGFueSBhZGRyZXNzIGlzIG5vdCBhIFAtY2hhaW4gYWRkcmVzc1xuICAgKi9cbiAgdG8oYWRkcmVzc2VzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgIGNvbnN0IGludmFsaWRBZGRyZXNzID0gYWRkcmVzc2VzLmZpbmQoKGFkZHIpID0+ICFhZGRyLnN0YXJ0c1dpdGgoJ1AtJykpO1xuICAgIGlmIChpbnZhbGlkQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCB0b0FkZHJlc3M6IGV4cGVjdGVkIFAtY2hhaW4gYWRkcmVzcyAoUC0uLi4pLCBnb3QgJHtpbnZhbGlkQWRkcmVzc31gKTtcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdG8gPSBhZGRyZXNzZXMubWFwKChhZGRyKSA9PiB1dGlscy5wYXJzZUFkZHJlc3MoYWRkcikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFR4LCByYXdCeXRlcz86IEJ1ZmZlciwgcGFyc2VkQ3JlZGVudGlhbHM/OiBDcmVkZW50aWFsW10pOiB0aGlzIHtcbiAgICBjb25zdCBpbXBvcnRUeCA9IHR4IGFzIHB2bVNlcmlhbC5JbXBvcnRUeDtcblxuICAgIGlmICghdGhpcy52ZXJpZnlUeFR5cGUoaW1wb3J0VHguX3R5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0cyA9IGltcG9ydFR4LmJhc2VUeC5vdXRwdXRzO1xuICAgIGlmIChvdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY2FuIGhhdmUgb25lIGV4dGVybmFsIG91dHB1dCcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbMF07XG4gICAgY29uc3QgYXNzZXRJZCA9IG91dHB1dC5hc3NldElkLnRvQnl0ZXMoKTtcbiAgICBpZiAoQnVmZmVyLmNvbXBhcmUoYXNzZXRJZCwgQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKSAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgQXNzZXQgSUQgb2YgdGhlIG91dHB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zlck91dHB1dCA9IG91dHB1dC5vdXRwdXQgYXMgVHJhbnNmZXJPdXRwdXQ7XG4gICAgY29uc3Qgb3V0cHV0T3duZXJzID0gdHJhbnNmZXJPdXRwdXQub3V0cHV0T3duZXJzO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gb3V0cHV0T3duZXJzLmxvY2t0aW1lLnZhbHVlKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gb3V0cHV0T3duZXJzLnRocmVzaG9sZC52YWx1ZSgpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBvdXRwdXRPd25lcnMuYWRkcnMubWFwKChhZGRyKSA9PiBCdWZmZXIuZnJvbShhZGRyLnRvQnl0ZXMoKSkpO1xuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IEJ1ZmZlci5mcm9tKGltcG9ydFR4LnNvdXJjZUNoYWluLnRvQnl0ZXMoKSk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcyA9IHRoaXMucmVjb3ZlclV0eG9zKGltcG9ydFR4Lmlucywgb3V0cHV0T3duZXJzLmFkZHJzKTtcblxuICAgIGNvbnN0IHRvdGFsSW5wdXRBbW91bnQgPSBpbXBvcnRUeC5pbnMucmVkdWNlKChzdW0sIGlucHV0KSA9PiBzdW0gKyBpbnB1dC5hbW91bnQoKSwgQmlnSW50KDApKTtcbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSB0cmFuc2Zlck91dHB1dC5hbW91bnQoKTtcbiAgICBjb25zdCBmZWUgPSB0b3RhbElucHV0QW1vdW50IC0gb3V0cHV0QW1vdW50O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUgPSBmZWUudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gcGFyc2VkQ3JlZGVudGlhbHMgfHwgW107XG4gICAgY29uc3QgaGFzQ3JlZGVudGlhbHMgPSBjcmVkZW50aWFscy5sZW5ndGggPiAwO1xuXG4gICAgaWYgKHJhd0J5dGVzICYmIGhhc0NyZWRlbnRpYWxzKSB7XG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9yYXdTaWduZWRCeXRlcyA9IHJhd0J5dGVzO1xuICAgIH1cblxuICAgIHRoaXMuY29tcHV0ZUFkZHJlc3Nlc0luZGV4KHRydWUpO1xuXG4gICAgLy8gVXNlIHBhcnNlZCBjcmVkZW50aWFscyBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBjcmVhdGUgbmV3IG9uZXMgYmFzZWQgb24gc2lnSW5kaWNlc1xuICAgIC8vIFRoZSBzaWdJbmRpY2VzIGZyb20gdGhlIHBhcnNlZCB0cmFuc2FjdGlvbiAoc3RvcmVkIGluIGFkZHJlc3Nlc0luZGV4KSBkZXRlcm1pbmVcbiAgICAvLyB0aGUgY29ycmVjdCBjcmVkZW50aWFsIG9yZGVyaW5nIGZvciBvbi1jaGFpbiB2ZXJpZmljYXRpb25cbiAgICBjb25zdCB0eENyZWRlbnRpYWxzID1cbiAgICAgIGNyZWRlbnRpYWxzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBjcmVkZW50aWFsc1xuICAgICAgICA6IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLm1hcCgodXR4bykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXR4b1RocmVzaG9sZCA9IHV0eG8udGhyZXNob2xkIHx8IHRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZDtcbiAgICAgICAgICAgIGNvbnN0IHNpZ0luZGljZXMgPSB1dHhvLmFkZHJlc3Nlc0luZGV4ID8/IFtdO1xuICAgICAgICAgICAgLy8gVXNlIHNpZ0luZGljZXMtYmFzZWQgbWV0aG9kIGlmIHdlIGhhdmUgdmFsaWQgc2lnSW5kaWNlcyBmcm9tIHBhcnNlZCB0cmFuc2FjdGlvblxuICAgICAgICAgICAgaWYgKHNpZ0luZGljZXMubGVuZ3RoID49IHV0eG9UaHJlc2hvbGQgJiYgc2lnSW5kaWNlcy5ldmVyeSgoaWR4KSA9PiBpZHggPj0gMCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ3JlZGVudGlhbEZvclV0eG8odXR4bywgdXR4b1RocmVzaG9sZCwgc2lnSW5kaWNlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvLCB1dHhvVGhyZXNob2xkKTtcbiAgICAgICAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBhZGRyZXNzTWFwcyB1c2luZyBzaWdJbmRpY2VzIGZyb20gcGFyc2VkIHRyYW5zYWN0aW9uIGZvciBjb25zaXN0ZW5jeVxuICAgIGNvbnN0IGFkZHJlc3NNYXBzID0gdGhpcy50cmFuc2FjdGlvbi5fdXR4b3MubWFwKCh1dHhvKSA9PiB7XG4gICAgICBjb25zdCB1dHhvVGhyZXNob2xkID0gdXR4by50aHJlc2hvbGQgfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkO1xuICAgICAgY29uc3Qgc2lnSW5kaWNlcyA9IHV0eG8uYWRkcmVzc2VzSW5kZXggPz8gW107XG4gICAgICBpZiAoc2lnSW5kaWNlcy5sZW5ndGggPj0gdXR4b1RocmVzaG9sZCAmJiBzaWdJbmRpY2VzLmV2ZXJ5KChpZHgpID0+IGlkeCA+PSAwKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVBZGRyZXNzTWFwRm9yVXR4byh1dHhvLCB1dHhvVGhyZXNob2xkLCBzaWdJbmRpY2VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUFkZHJlc3NNYXBGb3JVdHhvKHV0eG8sIHV0eG9UaHJlc2hvbGQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdW5zaWduZWRUeCA9IG5ldyBVbnNpZ25lZFR4KGltcG9ydFR4LCBbXSwgbmV3IEZsYXJlVXRpbHMuQWRkcmVzc01hcHMoYWRkcmVzc01hcHMpLCB0eENyZWRlbnRpYWxzKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odW5zaWduZWRUeCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKHR4blR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eG5UeXBlID09PSBGbGFyZVRyYW5zYWN0aW9uVHlwZS5Qdm1JbXBvcnRUeDtcbiAgfVxuXG4gIHZlcmlmeVR4VHlwZSh0eG5UeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gSW1wb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eG5UeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgaW1wb3J0IHRyYW5zYWN0aW9uIGZvciBQLWNoYWluIChpbXBvcnRpbmcgRlJPTSBDLWNoYWluKVxuICAgKiBAcHJvdGVjdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgYnVpbGRGbGFyZVRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmhhc0NyZWRlbnRpYWxzKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl91dHhvcyB8fCB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ1VUWE9zIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX2ZlZVN0YXRlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdGZWUgc3RhdGUgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl9jb250ZXh0KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdjb250ZXh0IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fZnJvbUFkZHJlc3NlcyB8fCB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignZnJvbUFkZHJlc3NlcyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnRyYW5zYWN0aW9uLl90byB8fCB0aGlzLnRyYW5zYWN0aW9uLl90by5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ3RvQWRkcmVzc2VzIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudHJhbnNhY3Rpb24uX3RocmVzaG9sZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcigndGhyZXNob2xkIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdsb2NrdGltZSBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIHRoaXMuY29tcHV0ZUFkZHJlc3Nlc0luZGV4KCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlVXR4b0FkZHJlc3NlcygpO1xuXG4gICAgY29uc3QgYXNzZXRJZCA9IHV0aWxzLmNiNThFbmNvZGUoQnVmZmVyLmZyb20odGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCwgJ2hleCcpKTtcbiAgICBjb25zdCBuYXRpdmVVdHhvcyA9IHV0aWxzLmRlY29kZWRUb1V0eG9zKHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLCBhc3NldElkKTtcblxuICAgIGNvbnN0IHRvdGFsVXR4b0Ftb3VudCA9IG5hdGl2ZVV0eG9zLnJlZHVjZSgoc3VtLCB1dHhvKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB1dHhvLm91dHB1dCBhcyBUcmFuc2Zlck91dHB1dDtcbiAgICAgIHJldHVybiBzdW0gKyBvdXRwdXQuYW1vdW50KCk7XG4gICAgfSwgQmlnSW50KDApKTtcblxuICAgIGlmICh0b3RhbFV0eG9BbW91bnQgPT09IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVVRYT3MgaGF2ZSB6ZXJvIHRvdGFsIGJhbGFuY2UnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b0FkZHJlc3NlcyA9IHRoaXMudHJhbnNhY3Rpb24uX3RvLm1hcCgoYWRkcikgPT4gQnVmZmVyLmZyb20oYWRkcikpO1xuXG4gICAgY29uc3QgaW52YWxpZFRvQWRkcmVzcyA9IHRvQWRkcmVzc2VzLmZpbmQoKGFkZHIpID0+IGFkZHIubGVuZ3RoICE9PSAyMCk7XG4gICAgaWYgKGludmFsaWRUb0FkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdG9BZGRyZXNzIGxlbmd0aDogZXhwZWN0ZWQgMjAgYnl0ZXMsIGdvdCAke2ludmFsaWRUb0FkZHJlc3MubGVuZ3RofWApO1xuICAgIH1cblxuICAgIGNvbnN0IHNpZ25pbmdBZGRyZXNzZXMgPSB0aGlzLmdldFNpZ25pbmdBZGRyZXNzZXMoKTtcblxuICAgIGNvbnN0IGltcG9ydFR4ID0gcHZtLmUubmV3SW1wb3J0VHgoXG4gICAgICB7XG4gICAgICAgIGZlZVN0YXRlOiB0aGlzLnRyYW5zYWN0aW9uLl9mZWVTdGF0ZSxcbiAgICAgICAgZnJvbUFkZHJlc3Nlc0J5dGVzOiBzaWduaW5nQWRkcmVzc2VzLFxuICAgICAgICBzb3VyY2VDaGFpbklkOiB0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmNDaGFpbkJsb2NrY2hhaW5JRCxcbiAgICAgICAgdG9BZGRyZXNzZXNCeXRlczogdG9BZGRyZXNzZXMsXG4gICAgICAgIHV0eG9zOiBuYXRpdmVVdHhvcyxcbiAgICAgICAgdGhyZXNob2xkOiB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQsXG4gICAgICAgIGxvY2t0aW1lOiB0aGlzLnRyYW5zYWN0aW9uLl9sb2NrdGltZSxcbiAgICAgIH0sXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uLl9jb250ZXh0XG4gICAgKTtcblxuICAgIGNvbnN0IGZsYXJlVW5zaWduZWRUeCA9IGltcG9ydFR4IGFzIFVuc2lnbmVkVHg7XG4gICAgY29uc3QgaW5uZXJUeCA9IGZsYXJlVW5zaWduZWRUeC5nZXRUeCgpIGFzIHB2bVNlcmlhbC5JbXBvcnRUeDtcblxuICAgIGNvbnN0IHV0eG9zV2l0aEluZGV4ID0gaW5uZXJUeC5pbnMubWFwKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXRUeGlkID0gdXRpbHMuY2I1OEVuY29kZShCdWZmZXIuZnJvbShpbnB1dC51dHhvSUQudHhJRC50b0J5dGVzKCkpKTtcbiAgICAgIGNvbnN0IGlucHV0T3V0cHV0SWR4ID0gaW5wdXQudXR4b0lELm91dHB1dElkeC52YWx1ZSgpLnRvU3RyaW5nKCk7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsVXR4byA9IHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zLmZpbmQoXG4gICAgICAgICh1dHhvKSA9PiB1dHhvLnR4aWQgPT09IGlucHV0VHhpZCAmJiB1dHhvLm91dHB1dGlkeCA9PT0gaW5wdXRPdXRwdXRJZHhcbiAgICAgICk7XG5cbiAgICAgIGlmICghb3JpZ2luYWxVdHhvKSB7XG4gICAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYENvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIFVUWE8gZm9yIGlucHV0ICR7aW5wdXRUeGlkfToke2lucHV0T3V0cHV0SWR4fWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgIGNvbnN0IGFjdHVhbFNpZ0luZGljZXMgPSB0cmFuc2ZlcklucHV0LnNpZ0luZGljaWVzKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9yaWdpbmFsVXR4byxcbiAgICAgICAgYWRkcmVzc2VzSW5kZXg6IG9yaWdpbmFsVXR4by5hZGRyZXNzZXNJbmRleCxcbiAgICAgICAgYWRkcmVzc2VzOiBvcmlnaW5hbFV0eG8uYWRkcmVzc2VzLFxuICAgICAgICB0aHJlc2hvbGQ6IG9yaWdpbmFsVXR4by50aHJlc2hvbGQgfHwgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkLFxuICAgICAgICBhY3R1YWxTaWdJbmRpY2VzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gdXR4b3NXaXRoSW5kZXg7XG5cbiAgICBjb25zdCB0eENyZWRlbnRpYWxzID0gdXR4b3NXaXRoSW5kZXgubWFwKCh1dHhvKSA9PlxuICAgICAgdGhpcy5jcmVhdGVDcmVkZW50aWFsRm9yVXR4byh1dHhvLCB1dHhvLnRocmVzaG9sZCwgdXR4by5hY3R1YWxTaWdJbmRpY2VzKVxuICAgICk7XG5cbiAgICBjb25zdCBhZGRyZXNzTWFwcyA9IHV0eG9zV2l0aEluZGV4Lm1hcCgodXR4bykgPT5cbiAgICAgIHRoaXMuY3JlYXRlQWRkcmVzc01hcEZvclV0eG8odXR4bywgdXR4by50aHJlc2hvbGQsIHV0eG8uYWN0dWFsU2lnSW5kaWNlcylcbiAgICApO1xuXG4gICAgY29uc3QgZml4ZWRVbnNpZ25lZFR4ID0gbmV3IFVuc2lnbmVkVHgoaW5uZXJUeCwgW10sIG5ldyBGbGFyZVV0aWxzLkFkZHJlc3NNYXBzKGFkZHJlc3NNYXBzKSwgdHhDcmVkZW50aWFscyk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLnNldFRyYW5zYWN0aW9uKGZpeGVkVW5zaWduZWRUeCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBVVFhPcyBmcm9tIGltcG9ydGVkIGlucHV0cy5cbiAgICogVXNlcyBvdXRwdXQgYWRkcmVzc2VzIGFzIHByb3h5IGZvciBVVFhPIGFkZHJlc3NlcyBzaW5jZSB0aGV5IHNob3VsZCBiZSB0aGUgc2FtZVxuICAgKiBhZGRyZXNzZXMgY29udHJvbGxpbmcgdGhlIG11bHRpc2lnIChqdXN0IHBvdGVudGlhbGx5IGluIGRpZmZlcmVudCBvbi1jaGFpbiBvcmRlcikuXG4gICAqXG4gICAqIEBwYXJhbSBpbXBvcnRlZElucHV0cyBBcnJheSBvZiB0cmFuc2ZlcmFibGUgaW5wdXRzXG4gICAqIEBwYXJhbSBvdXRwdXRBZGRycyBPdXRwdXQgb3duZXIgYWRkcmVzc2VzIHRvIHVzZSBhcyBwcm94eSBmb3IgVVRYTyBhZGRyZXNzZXNcbiAgICogQHJldHVybnMgQXJyYXkgb2YgZGVjb2RlZCBVVFhPIG9iamVjdHNcbiAgICovXG4gIHByaXZhdGUgcmVjb3ZlclV0eG9zKFxuICAgIGltcG9ydGVkSW5wdXRzOiBUcmFuc2ZlcmFibGVJbnB1dFtdLFxuICAgIG91dHB1dEFkZHJzPzogeyB0b0J5dGVzKCk6IFVpbnQ4QXJyYXkgfVtdXG4gICk6IERlY29kZWRVdHhvT2JqW10ge1xuICAgIGNvbnN0IHByb3h5QWRkcmVzc2VzID0gb3V0cHV0QWRkcnNcbiAgICAgID8gb3V0cHV0QWRkcnMubWFwKChhZGRyKSA9PlxuICAgICAgICAgIHV0aWxzLmFkZHJlc3NUb1N0cmluZyhcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuaHJwLFxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5hbGlhcyxcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGFkZHIudG9CeXRlcygpKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBbXTtcblxuICAgIHJldHVybiBpbXBvcnRlZElucHV0cy5tYXAoKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCB1dHhvSWQgPSBpbnB1dC51dHhvSUQ7XG4gICAgICBjb25zdCB0cmFuc2ZlcklucHV0ID0gaW5wdXQuaW5wdXQgYXMgVHJhbnNmZXJJbnB1dDtcbiAgICAgIGNvbnN0IHNpZ0luZGljaWVzID0gdHJhbnNmZXJJbnB1dC5zaWdJbmRpY2llcygpO1xuXG4gICAgICBjb25zdCB1dHhvOiBEZWNvZGVkVXR4b09iaiA9IHtcbiAgICAgICAgb3V0cHV0SUQ6IFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQsXG4gICAgICAgIGFtb3VudDogdHJhbnNmZXJJbnB1dC5hbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICB0eGlkOiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlci5mcm9tKHV0eG9JZC50eElELnRvQnl0ZXMoKSkpLFxuICAgICAgICBvdXRwdXRpZHg6IHV0eG9JZC5vdXRwdXRJZHgudmFsdWUoKS50b1N0cmluZygpLFxuICAgICAgICB0aHJlc2hvbGQ6IHNpZ0luZGljaWVzLmxlbmd0aCB8fCB0aGlzLnRyYW5zYWN0aW9uLl90aHJlc2hvbGQsXG4gICAgICAgIGFkZHJlc3NlczogcHJveHlBZGRyZXNzZXMsXG4gICAgICAgIGFkZHJlc3Nlc0luZGV4OiBzaWdJbmRpY2llcyxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdXR4bztcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -55,51 +55,53 @@ export declare abstract class AtomicTransactionBuilder extends TransactionBuilde
|
|
|
55
55
|
*/
|
|
56
56
|
amount(value: bigint | string): this;
|
|
57
57
|
/**
|
|
58
|
-
*
|
|
59
|
-
* addressesIndex[senderIdx] = position of sender[senderIdx] in UTXO's address list
|
|
58
|
+
* Get the 2 signing addresses for FlareJS transaction building.
|
|
60
59
|
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
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.)
|
|
60
|
+
* FlareJS's matchOwners() selects signers in sorted UTXO address order,
|
|
61
|
+
* not based on which keys should actually sign. By passing only 2 addresses,
|
|
62
|
+
* we ensure the correct signers are selected.
|
|
67
63
|
*
|
|
64
|
+
* This mirrors AVAXP's approach in createInputOutput() where:
|
|
65
|
+
* - For non-recovery: use user (index 0) and bitgo (index 1)
|
|
66
|
+
* - For recovery: use bitgo (index 1) and recovery (index 2)
|
|
67
|
+
*
|
|
68
|
+
* @returns Array of 2 signing address buffers
|
|
68
69
|
* @protected
|
|
69
70
|
*/
|
|
70
|
-
protected
|
|
71
|
+
protected getSigningAddresses(): Buffer[];
|
|
72
|
+
/**
|
|
73
|
+
* Compute addressesIndex for UTXOs.
|
|
74
|
+
* addressesIndex[senderIdx] = position of sender[senderIdx] in UTXO's sorted address list.
|
|
75
|
+
*
|
|
76
|
+
* UTXO addresses are sorted lexicographically by byte value to match on-chain storage order.
|
|
77
|
+
* @param forceRecompute - If true, recompute even if addressesIndex already exists
|
|
78
|
+
* @protected
|
|
79
|
+
*/
|
|
80
|
+
protected computeAddressesIndex(forceRecompute?: boolean): void;
|
|
71
81
|
/**
|
|
72
82
|
* 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
83
|
* @protected
|
|
76
84
|
*/
|
|
77
85
|
protected validateUtxoAddresses(): void;
|
|
78
86
|
/**
|
|
79
|
-
* Create credential
|
|
80
|
-
*
|
|
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).
|
|
87
|
+
* Create credential for a UTXO following AVAX P approach.
|
|
88
|
+
* Embed user/recovery address, leave BitGo slot empty.
|
|
89
|
+
* Signing order is guaranteed: user signs first (address match), BitGo signs second (empty slot).
|
|
84
90
|
*
|
|
85
91
|
* @param utxo - The UTXO to create credential for
|
|
86
|
-
* @param threshold - Number of signatures required
|
|
87
|
-
* @
|
|
92
|
+
* @param threshold - Number of signatures required
|
|
93
|
+
* @param sigIndices - Optional sigIndices from FlareJS (if not provided, derived from addressesIndex)
|
|
88
94
|
* @protected
|
|
89
95
|
*/
|
|
90
|
-
protected createCredentialForUtxo(utxo: DecodedUtxoObj, threshold: number): Credential;
|
|
96
|
+
protected createCredentialForUtxo(utxo: DecodedUtxoObj, threshold: number, sigIndices?: number[]): Credential;
|
|
91
97
|
/**
|
|
92
|
-
* Create AddressMap
|
|
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).
|
|
98
|
+
* Create AddressMap for a UTXO following AVAX P approach.
|
|
97
99
|
*
|
|
98
100
|
* @param utxo - The UTXO to create AddressMap for
|
|
99
|
-
* @param threshold - Number of signatures required
|
|
100
|
-
* @
|
|
101
|
+
* @param threshold - Number of signatures required
|
|
102
|
+
* @param sigIndices - Optional sigIndices from FlareJS (if not provided, derived from addressesIndex)
|
|
101
103
|
* @protected
|
|
102
104
|
*/
|
|
103
|
-
protected createAddressMapForUtxo(utxo: DecodedUtxoObj, threshold: number): FlareUtils.AddressMap;
|
|
105
|
+
protected createAddressMapForUtxo(utxo: DecodedUtxoObj, threshold: number, sigIndices?: number[]): FlareUtils.AddressMap;
|
|
104
106
|
}
|
|
105
107
|
//# sourceMappingURL=atomicTransactionBuilder.d.ts.map
|
|
@@ -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,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;
|
|
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;IAwBpC;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,mBAAmB,IAAI,MAAM,EAAE;IAuBzC;;;;;;;OAOG;IACH,SAAS,CAAC,qBAAqB,CAAC,cAAc,UAAQ,GAAG,IAAI;IAqB7D;;;OAGG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAWvC;;;;;;;;;OASG;IACH,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,UAAU;IAsC7G;;;;;;;OAOG;IACH,SAAS,CAAC,uBAAuB,CAC/B,IAAI,EAAE,cAAc,EACpB,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,EAAE,GACpB,UAAU,CAAC,UAAU;CAsCzB"}
|