@fuel-ts/account 0.100.2 → 0.100.4
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/account.d.ts +71 -3
- package/dist/account.d.ts.map +1 -1
- package/dist/index.global.js +1587 -289
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +2133 -920
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2041 -831
- package/dist/index.mjs.map +1 -1
- package/dist/predicate/predicate.d.ts +9 -4
- package/dist/predicate/predicate.d.ts.map +1 -1
- package/dist/providers/__generated__/operations.d.ts +1183 -87
- package/dist/providers/__generated__/operations.d.ts.map +1 -1
- package/dist/providers/assemble-tx-helpers.d.ts +39 -0
- package/dist/providers/assemble-tx-helpers.d.ts.map +1 -0
- package/dist/providers/fuel-graphql-subscriber.d.ts +28 -0
- package/dist/providers/fuel-graphql-subscriber.d.ts.map +1 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/provider.d.ts +80 -6
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/providers/resource.d.ts +4 -1
- package/dist/providers/resource.d.ts.map +1 -1
- package/dist/providers/transaction-request/helpers.d.ts +3 -3
- package/dist/providers/transaction-request/helpers.d.ts.map +1 -1
- package/dist/providers/transaction-request/input.d.ts +2 -0
- package/dist/providers/transaction-request/input.d.ts.map +1 -1
- package/dist/providers/transaction-request/output.d.ts +6 -0
- package/dist/providers/transaction-request/output.d.ts.map +1 -1
- package/dist/providers/transaction-request/script-transaction-request.d.ts +11 -0
- package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
- package/dist/providers/transaction-response/getAllDecodedLogs.d.ts +30 -0
- package/dist/providers/transaction-response/getAllDecodedLogs.d.ts.map +1 -0
- package/dist/providers/transaction-response/getDecodedLogs.d.ts +20 -1
- package/dist/providers/transaction-response/getDecodedLogs.d.ts.map +1 -1
- package/dist/providers/transaction-response/index.d.ts +1 -0
- package/dist/providers/transaction-response/index.d.ts.map +1 -1
- package/dist/providers/transaction-response/transaction-response.d.ts +41 -12
- package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +12 -1
- package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
- package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
- package/dist/providers/transaction-summary/status.d.ts +16 -2
- package/dist/providers/transaction-summary/status.d.ts.map +1 -1
- package/dist/providers/transaction-summary/types.d.ts +85 -4
- package/dist/providers/transaction-summary/types.d.ts.map +1 -1
- package/dist/providers/utils/extract-tx-error.d.ts +4 -3
- package/dist/providers/utils/extract-tx-error.d.ts.map +1 -1
- package/dist/providers/utils/handle-gql-error-message.d.ts.map +1 -1
- package/dist/providers/utils/index.d.ts +1 -0
- package/dist/providers/utils/index.d.ts.map +1 -1
- package/dist/providers/utils/parse-graphql-response.d.ts +12 -0
- package/dist/providers/utils/parse-graphql-response.d.ts.map +1 -0
- package/dist/providers/utils/serialization.d.ts +9 -0
- package/dist/providers/utils/serialization.d.ts.map +1 -1
- package/dist/test-utils/launchNode.d.ts.map +1 -1
- package/dist/test-utils/setup-test-provider-and-wallets.d.ts.map +1 -1
- package/dist/test-utils.global.js +1540 -268
- package/dist/test-utils.global.js.map +1 -1
- package/dist/test-utils.js +2008 -837
- package/dist/test-utils.js.map +1 -1
- package/dist/test-utils.mjs +1931 -754
- package/dist/test-utils.mjs.map +1 -1
- package/dist/utils/deployScriptOrPredicate.d.ts.map +1 -1
- package/dist/utils/split-coins-into-batches.d.ts +3 -0
- package/dist/utils/split-coins-into-batches.d.ts.map +1 -0
- package/package.json +15 -15
- package/dist/providers/utils/helpers.d.ts +0 -14
- package/dist/providers/utils/helpers.d.ts.map +0 -1
package/dist/index.global.js
CHANGED
@@ -7970,9 +7970,9 @@
|
|
7970
7970
|
}
|
7971
7971
|
});
|
7972
7972
|
|
7973
|
-
// ../../node_modules/.pnpm/@fuels+vm-asm@0.
|
7973
|
+
// ../../node_modules/.pnpm/@fuels+vm-asm@0.60.2/node_modules/@fuels/vm-asm/dist/node/index.cjs
|
7974
7974
|
var require_node = __commonJS({
|
7975
|
-
"../../node_modules/.pnpm/@fuels+vm-asm@0.
|
7975
|
+
"../../node_modules/.pnpm/@fuels+vm-asm@0.60.2/node_modules/@fuels/vm-asm/dist/node/index.cjs"(exports) {
|
7976
7976
|
"use strict";
|
7977
7977
|
var wasm$1;
|
7978
7978
|
var cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) : { decode: /* @__PURE__ */ __name(() => {
|
@@ -8711,7 +8711,12 @@
|
|
8711
8711
|
* r" Get memory address of base asset ID
|
8712
8712
|
*/
|
8713
8713
|
BaseAssetId: 6,
|
8714
|
-
"6": "BaseAssetId"
|
8714
|
+
"6": "BaseAssetId",
|
8715
|
+
/**
|
8716
|
+
* r" Get gas price for block
|
8717
|
+
*/
|
8718
|
+
GetGasPrice: 7,
|
8719
|
+
"7": "GetGasPrice"
|
8715
8720
|
});
|
8716
8721
|
var GTFArgs2 = Object.freeze({
|
8717
8722
|
/**
|
@@ -9043,7 +9048,82 @@
|
|
9043
9048
|
* r" Set `$rA` to `tx.policies[count_ones(0b11111 & tx.policyTypes) - 1].expiration`
|
9044
9049
|
*/
|
9045
9050
|
PolicyExpiration: 1285,
|
9046
|
-
"1285": "PolicyExpiration"
|
9051
|
+
"1285": "PolicyExpiration",
|
9052
|
+
/**
|
9053
|
+
* r" Set `$rA` to `Memory address of tx.root`
|
9054
|
+
*/
|
9055
|
+
UploadRoot: 1536,
|
9056
|
+
"1536": "UploadRoot",
|
9057
|
+
/**
|
9058
|
+
* r" Set `$rA` to `tx.witnessIndex`
|
9059
|
+
*/
|
9060
|
+
UploadWitnessIndex: 1537,
|
9061
|
+
"1537": "UploadWitnessIndex",
|
9062
|
+
/**
|
9063
|
+
* r" Set `$rA` to `tx.subsectionIndex`
|
9064
|
+
*/
|
9065
|
+
UploadSubsectionIndex: 1538,
|
9066
|
+
"1538": "UploadSubsectionIndex",
|
9067
|
+
/**
|
9068
|
+
* r" Set `$rA` to `tx.subsectionsNumber`
|
9069
|
+
*/
|
9070
|
+
UploadSubsectionsCount: 1539,
|
9071
|
+
"1539": "UploadSubsectionsCount",
|
9072
|
+
/**
|
9073
|
+
* r" Set `$rA` to `tx.proofSetCount`
|
9074
|
+
*/
|
9075
|
+
UploadProofSetCount: 1540,
|
9076
|
+
"1540": "UploadProofSetCount",
|
9077
|
+
/**
|
9078
|
+
* r" Set `$rA` to `Memory address of tx.proofSet[$rB]`
|
9079
|
+
*/
|
9080
|
+
UploadProofSetAtIndex: 1541,
|
9081
|
+
"1541": "UploadProofSetAtIndex",
|
9082
|
+
/**
|
9083
|
+
* r" Set `$rA` to `Memory address of tx.id`
|
9084
|
+
*/
|
9085
|
+
BlobId: 1792,
|
9086
|
+
"1792": "BlobId",
|
9087
|
+
/**
|
9088
|
+
* r" Set `$rA` to `tx.witnessIndex`
|
9089
|
+
*/
|
9090
|
+
BlobWitnessIndex: 1793,
|
9091
|
+
"1793": "BlobWitnessIndex",
|
9092
|
+
/**
|
9093
|
+
* r" Set `$rA` to `Memory address of tx.purpose`
|
9094
|
+
*/
|
9095
|
+
UpgradePurpose: 2048,
|
9096
|
+
"2048": "UpgradePurpose",
|
9097
|
+
/**
|
9098
|
+
* r" Set `$rA` to `tx.inputsCount`
|
9099
|
+
*/
|
9100
|
+
TxInputsCount: 2304,
|
9101
|
+
"2304": "TxInputsCount",
|
9102
|
+
/**
|
9103
|
+
* r" Set `$rA` to `tx.outputsCount`
|
9104
|
+
*/
|
9105
|
+
TxOutputsCount: 2305,
|
9106
|
+
"2305": "TxOutputsCount",
|
9107
|
+
/**
|
9108
|
+
* r" Set `$rA` to `tx.witnessesCount`
|
9109
|
+
*/
|
9110
|
+
TxWitnessesCount: 2306,
|
9111
|
+
"2306": "TxWitnessesCount",
|
9112
|
+
/**
|
9113
|
+
* r" Set `$rA` to `Memory address of tx.inputs[$rB]`
|
9114
|
+
*/
|
9115
|
+
TxInputAtIndex: 2307,
|
9116
|
+
"2307": "TxInputAtIndex",
|
9117
|
+
/**
|
9118
|
+
* r" Set `$rA` to `Memory address of t.outputs[$rB]`
|
9119
|
+
*/
|
9120
|
+
TxOutputAtIndex: 2308,
|
9121
|
+
"2308": "TxOutputAtIndex",
|
9122
|
+
/**
|
9123
|
+
* r" Set `$rA` to `Memory address of tx.witnesses[$rB]`
|
9124
|
+
*/
|
9125
|
+
TxWitnessAtIndex: 2309,
|
9126
|
+
"2309": "TxWitnessAtIndex"
|
9047
9127
|
});
|
9048
9128
|
var MathOp = Object.freeze({
|
9049
9129
|
/**
|
@@ -9399,7 +9479,27 @@
|
|
9399
9479
|
* r" Given input contract does not exist.
|
9400
9480
|
*/
|
9401
9481
|
InputContractDoesNotExist: 60,
|
9402
|
-
"60": "InputContractDoesNotExist"
|
9482
|
+
"60": "InputContractDoesNotExist",
|
9483
|
+
/**
|
9484
|
+
* r" Storage slot in Create not found
|
9485
|
+
*/
|
9486
|
+
StorageSlotsNotFound: 61,
|
9487
|
+
"61": "StorageSlotsNotFound",
|
9488
|
+
/**
|
9489
|
+
* r" Proof in Upload not found
|
9490
|
+
*/
|
9491
|
+
ProofInUploadNotFound: 62,
|
9492
|
+
"62": "ProofInUploadNotFound",
|
9493
|
+
/**
|
9494
|
+
* r" Invalid purpose type in Upgrade
|
9495
|
+
*/
|
9496
|
+
InvalidUpgradePurposeType: 63,
|
9497
|
+
"63": "InvalidUpgradePurposeType",
|
9498
|
+
/**
|
9499
|
+
* r" Cannot get gas price in predicate
|
9500
|
+
*/
|
9501
|
+
CanNotGetGasPriceInPredicate: 64,
|
9502
|
+
"64": "CanNotGetGasPriceInPredicate"
|
9403
9503
|
});
|
9404
9504
|
var ADDFinalization = typeof FinalizationRegistry === "undefined" ? { register: /* @__PURE__ */ __name(() => {
|
9405
9505
|
}, "register"), unregister: /* @__PURE__ */ __name(() => {
|
@@ -16917,11 +17017,11 @@
|
|
16917
17017
|
}
|
16918
17018
|
__name(_loadWasmModule, "_loadWasmModule");
|
16919
17019
|
function wasm(imports) {
|
16920
|
-
return _loadWasmModule(1, null, "AGFzbQEAAAABOgpgA39/fwF/YAF/AX9gBH9/f38Bf2ACf38AYAJ/fwF/YAABf2AFf39/f38Bf2ABfwBgA39/fwBgAAACGAEDd2JnEF9fd2JpbmRnZW5fdGhyb3cAAwOBAv8BAQEDAwMDAwMBAQMDAQEBAwMBAQEEAQMDAwEBAwEBAQQCAQMCAgICAgIDAwMEBAQEBAQEBAEBAQMDAAICBAQEBAQEBAQEBAABAQgDAwQBAQEBAQEBAgcDAQAAAQEDBwcBAwEDAgIBAQEAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBBQEBAQEEAAQBBgICAwMAAgAHAQgEAQQBCQMBAQcBBQUFBQUFBQUFBQUFBQUFBQUFBQMGBgICBAIGBgAACAAEBQMBABEGCQF/AUGAgMAACwe9Td0FBm1lbW9yeQIAFl9fd2JnX2NvbXBhcmVhcmdzX2ZyZWUAEBpfX3diZ19nZXRfY29tcGFyZWFyZ3NfbW9kZQBIGl9fd2JnX3NldF9jb21wYXJlYXJnc19tb2RlADgiX193YmdfZ2V0X2NvbXBhcmVhcmdzX2luZGlyZWN0X3JocwBJIl9fd2JnX3NldF9jb21wYXJlYXJnc19pbmRpcmVjdF9yaHMASxJjb21wYXJlYXJnc190b19pbW0AWBRjb21wYXJlYXJnc19mcm9tX2ltbQAfFV9fd2JnX2dldF9tYXRoYXJnc19vcABIFV9fd2JnX3NldF9tYXRoYXJnc19vcAA5El9fd2JnX211bGFyZ3NfZnJlZQARHl9fd2JnX2dldF9tdWxhcmdzX2luZGlyZWN0X3JocwBIHl9fd2JnX3NldF9tdWxhcmdzX2luZGlyZWN0X3JocwBMEl9fd2JnX2RpdmFyZ3NfZnJlZQAjHl9fd2JnX2dldF9kaXZhcmdzX2luZGlyZWN0X3JocwC7AR5fX3diZ19zZXRfZGl2YXJnc19pbmRpcmVjdF9yaHMAYxtfX3diZ19wYW5pY2luc3RydWN0aW9uX2ZyZWUAFyFwYW5pY2luc3RydWN0aW9uX2Vycm9yX3R5cGVzY3JpcHQATRdwYW5pY2luc3RydWN0aW9uX3JlYXNvbgBbHHBhbmljaW5zdHJ1Y3Rpb25faW5zdHJ1Y3Rpb24AXAxnbV9mcm9tX2FyZ3MA1wENZ3RmX2Zyb21fYXJncwDPAQdnbV9hcmdzAIoBCGd0Zl9hcmdzAGkOd2RjbV9mcm9tX2FyZ3MAOw53ZG9wX2Zyb21fYXJncwA7DndkbWxfZnJvbV9hcmdzADwOd2Rkdl9mcm9tX2FyZ3MAywEJd2RjbV9hcmdzACQJd3FjbV9hcmdzACUJd2RvcF9hcmdzACYJd3FvcF9hcmdzACcJd2RtbF9hcmdzACgJd3FtbF9hcmdzACkJd2Rkdl9hcmdzAGQJd3Fkdl9hcmdzAGUQX193YmdfaW1tMDZfZnJlZQAqEF9fd2JnX2ltbTEyX2ZyZWUAKxBfX3diZ19pbW0xOF9mcmVlACwOX193YmdfYWRkX2ZyZWUAGA9fX3diZ19ub29wX2ZyZWUABxJhZGRfbmV3X3R5cGVzY3JpcHQAWQZhZGRfcmEANQZhZGRfcmIAEgZhZGRfcmMAGgNhZGQAxwEDYW5kAIwBA2RpdgCNAQJlcQCOAQNleHAAjwECZ3QAkAECbHQAkQEEbWxvZwCSAQRtcm9vAJMBBG1vZF8AlAEFbW92ZV8APQNtdWwAlQEDbm90AD4Cb3IAlgEDc2xsAJcBA3NybACYAQNzdWIAmQEDeG9yAJoBBG1sZHYAagNyZXQAvAEEcmV0ZAA/E2Fsb2NfbmV3X3R5cGVzY3JpcHQAYAdhbG9jX3JhACIEYWxvYwC9AQNtY2wAQANtY3AAmwEDbWVxAGsTYmhzaF9uZXdfdHlwZXNjcmlwdAAgBGJoc2gALQRiaGVpAL4BBGJ1cm4AQQRjYWxsAGwDY2NwAG0EY3JvbwBCBGNzaXoAQwJjYgC/AQNsZGMAbgNsb2cAbwRsb2dkAHAEbWludABEBHJ2cnQAwAEEc2N3cQCcAQNzcncAnQEEc3J3cQBxA3N3dwCeAQRzd3dxAHICdHIAnwEDdHJvAHMEZWNrMQCgAQRlY3IxAKEBBGVkMTkAdARrMjU2AKIBBHMyNTYAowEEdGltZQBFE25vb3BfbmV3X3R5cGVzY3JpcHQAwQEEbm9vcADfAQRmbGFnAMIBA2JhbACkAQNqbXAAwwEDam5lAKUBA3NtbwB1E2FkZGlfbmV3X3R5cGVzY3JpcHQAWgphZGRpX2ltbTEyAAkEYWRkaQCmAQRhbmRpAKcBBGRpdmkAqAEEZXhwaQCpAQRtb2RpAKoBBG11bGkAqwEDb3JpAKwBBHNsbGkArQEEc3JsaQCuAQRzdWJpAK8BBHhvcmkAsAEEam5laQCxAQJsYgCyAQJsdwCzAQJzYgC0AQJzdwC1AQRtY3BpALYBEmd0Zl9uZXdfdHlwZXNjcmlwdADRAQNndGYAtwEEbWNsaQAuEWdtX25ld190eXBlc2NyaXB0AEYIZ21faW1tMTgADQJnbQAvBG1vdmkAMARqbnppADEEam1wZgAyE2ptcGJfbmV3X3R5cGVzY3JpcHQAFQRqbXBiADMEam56ZgC4AQRqbnpiALkBBGpuZWYAdgpqbmViX2ltbTA2ADYEam5lYgB3AmppAE4TY2ZlaV9uZXdfdHlwZXNjcmlwdAA3CmNmZWlfaW1tMjQACgRjZmVpAE8EY2ZzaQBQA2NmZQDEAQNjZnMAxQEEcHNobABRBHBzaGgAUgRwb3BsAFMEcG9waABUE3dkY21fbmV3X3R5cGVzY3JpcHQAzAEEd2RjbQB4BHdxY20AeQR3ZG9wAHoEd3FvcAB7BHdkbWwAfAR3cW1sAH0Ed2RkdgB+BHdxZHYAfwR3ZG1kAIABBHdxbWQAgQEEd2RhbQCCAQR3cWFtAIMBBHdkbW0AhAEEd3FtbQCFAQRlY2FsAIYBBGJzaXoANBNibGRkX25ld190eXBlc2NyaXB0AFUHYmxkZF9yZAA2BGJsZGQAhwEEZWNvcACIAQRlcGFyAIkBFl9fd2JnX2luc3RydWN0aW9uX2ZyZWUADBRpbnN0cnVjdGlvbl90b19ieXRlcwAGEGluc3RydWN0aW9uX3NpemUA8QERcmVnaWRfbmV3X2NoZWNrZWQAugEJcmVnaWRfYmFsAOABCnJlZ2lkX2NnYXMA4QEJcmVnaWRfZXJyAOIBCnJlZ2lkX2ZsYWcA4wEIcmVnaWRfZnAA5AEKcmVnaWRfZ2dhcwDlAQhyZWdpZF9ocADmAQhyZWdpZF9pcwDnAQhyZWdpZF9vZgDoAQlyZWdpZF9vbmUA6QEIcmVnaWRfcGMA6gEJcmVnaWRfcmV0AOsBCnJlZ2lkX3JldGwA7AEIcmVnaWRfc3AA7QEJcmVnaWRfc3BwAO4BDnJlZ2lkX3dyaXRhYmxlAO8BCnJlZ2lkX3plcm8A8AEUcmVnaWRfbmV3X3R5cGVzY3JpcHQA2wELcmVnaWRfdG9fdTgA3AESYW5kX25ld190eXBlc2NyaXB0AFkSZGl2X25ld190eXBlc2NyaXB0AFkRZXFfbmV3X3R5cGVzY3JpcHQAWRJleHBfbmV3X3R5cGVzY3JpcHQAWRFndF9uZXdfdHlwZXNjcmlwdABZEWx0X25ld190eXBlc2NyaXB0AFkTbWxvZ19uZXdfdHlwZXNjcmlwdABZE21yb29fbmV3X3R5cGVzY3JpcHQAWRJtb2RfbmV3X3R5cGVzY3JpcHQAWRJtdWxfbmV3X3R5cGVzY3JpcHQAWRFvcl9uZXdfdHlwZXNjcmlwdABZEnNsbF9uZXdfdHlwZXNjcmlwdABZEnNybF9uZXdfdHlwZXNjcmlwdABZEnN1Yl9uZXdfdHlwZXNjcmlwdABZEnhvcl9uZXdfdHlwZXNjcmlwdABZEm1jcF9uZXdfdHlwZXNjcmlwdABZE3Njd3FfbmV3X3R5cGVzY3JpcHQAWRJzcndfbmV3X3R5cGVzY3JpcHQAWRJzd3dfbmV3X3R5cGVzY3JpcHQAWRF0cl9uZXdfdHlwZXNjcmlwdABZE2VjazFfbmV3X3R5cGVzY3JpcHQAWRNlY3IxX25ld190eXBlc2NyaXB0AFkTazI1Nl9uZXdfdHlwZXNjcmlwdABZE3MyNTZfbmV3X3R5cGVzY3JpcHQAWRJiYWxfbmV3X3R5cGVzY3JpcHQAWRJqbmVfbmV3X3R5cGVzY3JpcHQAWRNhbmRpX25ld190eXBlc2NyaXB0AFoTZGl2aV9uZXdfdHlwZXNjcmlwdABaE2V4cGlfbmV3X3R5cGVzY3JpcHQAWhNtb2RpX25ld190eXBlc2NyaXB0AFoTbXVsaV9uZXdfdHlwZXNjcmlwdABaEm9yaV9uZXdfdHlwZXNjcmlwdABaE3NsbGlfbmV3X3R5cGVzY3JpcHQAWhNzcmxpX25ld190eXBlc2NyaXB0AFoTc3ViaV9uZXdfdHlwZXNjcmlwdABaE3hvcmlfbmV3X3R5cGVzY3JpcHQAWhNqbmVpX25ld190eXBlc2NyaXB0AFoRbGJfbmV3X3R5cGVzY3JpcHQAWhFsd19uZXdfdHlwZXNjcmlwdABaEXNiX25ld190eXBlc2NyaXB0AFoRc3dfbmV3X3R5cGVzY3JpcHQAWhNtY3BpX25ld190eXBlc2NyaXB0AFoTam56Zl9uZXdfdHlwZXNjcmlwdABaE2puemJfbmV3X3R5cGVzY3JpcHQAWhFqaV9uZXdfdHlwZXNjcmlwdAA3E2Nmc2lfbmV3X3R5cGVzY3JpcHQANxNwc2hsX25ld190eXBlc2NyaXB0ADcTcHNoaF9uZXdfdHlwZXNjcmlwdAA3E3BvcGxfbmV3X3R5cGVzY3JpcHQANxNwb3BoX25ld190eXBlc2NyaXB0ADcTbW92aV9uZXdfdHlwZXNjcmlwdAAVE21jbGlfbmV3X3R5cGVzY3JpcHQAFRNqbnppX25ld190eXBlc2NyaXB0ABUTam1wZl9uZXdfdHlwZXNjcmlwdAAVEm5vdF9uZXdfdHlwZXNjcmlwdAAgE3JldGRfbmV3X3R5cGVzY3JpcHQAIBNtb3ZlX25ld190eXBlc2NyaXB0ACASbWNsX25ld190eXBlc2NyaXB0ACATYnVybl9uZXdfdHlwZXNjcmlwdAAgE2Nyb29fbmV3X3R5cGVzY3JpcHQAIBNjc2l6X25ld190eXBlc2NyaXB0ACATbWludF9uZXdfdHlwZXNjcmlwdAAgE3RpbWVfbmV3X3R5cGVzY3JpcHQAIBNic2l6X25ld190eXBlc2NyaXB0ACAGcmV0X3JhACIHYmhlaV9yYQAiBWNiX3JhACIHcnZydF9yYQAiB2ZsYWdfcmEAIgZqbXBfcmEAIghqaV9pbW0yNAAKCmNmc2lfaW1tMjQACgZjZmVfcmEAIgZjZnNfcmEAIgpwc2hsX2ltbTI0AAoKcHNoaF9pbW0yNAAKCnBvcGxfaW1tMjQACgpwb3BoX2ltbTI0AAoTbWxkdl9uZXdfdHlwZXNjcmlwdABVEm1lcV9uZXdfdHlwZXNjcmlwdABVEmNjcF9uZXdfdHlwZXNjcmlwdABVEmxvZ19uZXdfdHlwZXNjcmlwdABVE2xvZ2RfbmV3X3R5cGVzY3JpcHQAVRNzcndxX25ld190eXBlc2NyaXB0AFUTc3d3cV9uZXdfdHlwZXNjcmlwdABVEnRyb19uZXdfdHlwZXNjcmlwdABVE2VkMTlfbmV3X3R5cGVzY3JpcHQAVRJzbW9fbmV3X3R5cGVzY3JpcHQAVRJsZGNfbmV3X3R5cGVzY3JpcHQAVRNqbmVmX25ld190eXBlc2NyaXB0AFUTd2RtZF9uZXdfdHlwZXNjcmlwdABVE3dxbWRfbmV3X3R5cGVzY3JpcHQAVRN3ZGFtX25ld190eXBlc2NyaXB0AFUTd3FhbV9uZXdfdHlwZXNjcmlwdABVE3dkbW1fbmV3X3R5cGVzY3JpcHQAVRN3cW1tX25ld190eXBlc2NyaXB0AFUTZWNhbF9uZXdfdHlwZXNjcmlwdABVE2NhbGxfbmV3X3R5cGVzY3JpcHQAVRNlY29wX25ld190eXBlc2NyaXB0AFUTZXBhcl9uZXdfdHlwZXNjcmlwdABVE19fd2JnX21hdGhhcmdzX2ZyZWUAEB9fX3diZ19zZXRfbWF0aGFyZ3NfaW5kaXJlY3RfcmhzAEseX193Ymdfc2V0X211bGFyZ3NfaW5kaXJlY3RfbGhzAEsfX193YmdfZ2V0X21hdGhhcmdzX2luZGlyZWN0X3JocwBJHl9fd2JnX2dldF9tdWxhcmdzX2luZGlyZWN0X2xocwBJEnJldF9uZXdfdHlwZXNjcmlwdABgE2JoZWlfbmV3X3R5cGVzY3JpcHQAYBFjYl9uZXdfdHlwZXNjcmlwdABgE3J2cnRfbmV3X3R5cGVzY3JpcHQAYBNmbGFnX25ld190eXBlc2NyaXB0AGASam1wX25ld190eXBlc2NyaXB0AGASY2ZlX25ld190eXBlc2NyaXB0AGASY2ZzX25ld190eXBlc2NyaXB0AGAPX193Ymdfam1wZl9mcmVlABgPX193Ymdfc3ViaV9mcmVlABgNX193YmdfamlfZnJlZQAYD19fd2JnX2VjYWxfZnJlZQAYD19fd2JnX3BvcGxfZnJlZQAYDl9fd2JnX2xkY19mcmVlABgPX193Ymdfd2RtbF9mcmVlABgNX193YmdfbHdfZnJlZQAYD19fd2JnX3dxbWxfZnJlZQAYD19fd2JnX2V4cGlfZnJlZQAYD19fd2JnX2puZWZfZnJlZQAYDl9fd2JnX3Nyd19mcmVlABgPX193YmdfYmxkZF9mcmVlABgOX193YmdfbWNwX2ZyZWUAGA9fX3diZ193ZG9wX2ZyZWUAGA9fX3diZ190aW1lX2ZyZWUAGA9fX3diZ19zcndxX2ZyZWUAGA5fX3diZ19jZmVfZnJlZQAYDV9fd2JnX2x0X2ZyZWUAGA9fX3diZ19ydnJ0X2ZyZWUAGA9fX3diZ19kaXZpX2ZyZWUAGA9fX3diZ19tbGR2X2ZyZWUAGA1fX3diZ19sYl9mcmVlABgNX193YmdfY2JfZnJlZQAYDl9fd2JnX2xvZ19mcmVlABgOX193YmdfbWNsX2ZyZWUAGA9fX3diZ193cW1tX2ZyZWUAGA9fX3diZ19zd3dxX2ZyZWUAGA9fX3diZ19idXJuX2ZyZWUAGA5fX3diZ194b3JfZnJlZQAYDl9fd2JnX2V4cF9mcmVlABgPX193Ymdfd3FvcF9mcmVlABgPX193YmdfczI1Nl9mcmVlABgPX193Ymdfd2RhbV9mcmVlABgPX193Ymdfam5lYl9mcmVlABgPX193YmdfbW92aV9mcmVlABgOX193Ymdfam1wX2ZyZWUAGA5fX3diZ19zbW9fZnJlZQAYD19fd2JnX2Joc2hfZnJlZQAYD19fd2JnX211bGlfZnJlZQAYD19fd2JnX21vZGlfZnJlZQAYDl9fd2JnX3Ryb19mcmVlABgPX193Ymdfc2N3cV9mcmVlABgPX193Ymdfd3FjbV9mcmVlABgPX193Ymdfd3FtZF9mcmVlABgPX193YmdfZWNyMV9mcmVlABgNX193Ymdfc3dfZnJlZQAYD19fd2JnX2xvZ2RfZnJlZQAYD19fd2JnX21pbnRfZnJlZQAYD19fd2JnX3dkbWRfZnJlZQAYD19fd2JnX3hvcmlfZnJlZQAYD19fd2JnX2FuZGlfZnJlZQAYD19fd2JnX3NybGlfZnJlZQAYD19fd2JnX2NhbGxfZnJlZQAYD19fd2JnX21vdmVfZnJlZQAYDV9fd2JnX2VxX2ZyZWUAGA9fX3diZ19qbmVpX2ZyZWUAGA9fX3diZ19lZDE5X2ZyZWUAGA9fX3diZ19wc2hoX2ZyZWUAGA5fX3diZ19zbGxfZnJlZQAYD19fd2JnX2FkZGlfZnJlZQAYD19fd2JnX2puemJfZnJlZQAYDl9fd2JnX3N3d19mcmVlABgOX193YmdfY2NwX2ZyZWUAGA9fX3diZ19qbXBiX2ZyZWUAGA9fX3diZ19tbG9nX2ZyZWUAGA9fX3diZ19tY3BpX2ZyZWUAGA1fX3diZ19ndF9mcmVlABgPX193YmdfYnNpel9mcmVlABgPX193Ymdfam56aV9mcmVlABgOX193Ymdfc3ViX2ZyZWUAGA5fX3diZ19kaXZfZnJlZQAYDl9fd2JnX2puZV9mcmVlABgOX193YmdfcmV0X2ZyZWUAGA9fX3diZ19lY29wX2ZyZWUAGA9fX3diZ19yZXRkX2ZyZWUAGA1fX3diZ19vcl9mcmVlABgPX193YmdfY2ZzaV9mcmVlABgPX193YmdfcG9waF9mcmVlABgOX193YmdfYmFsX2ZyZWUAGA9fX3diZ193ZGR2X2ZyZWUAGA9fX3diZ19tcm9vX2ZyZWUAGA9fX3diZ19rMjU2X2ZyZWUAGA1fX3diZ190cl9mcmVlABgOX193YmdfY2ZzX2ZyZWUAGA9fX3diZ193cWFtX2ZyZWUAGA1fX3diZ19zYl9mcmVlABgOX193YmdfZ3RmX2ZyZWUAGA9fX3diZ19qbnpmX2ZyZWUAGA9fX3diZ19mbGFnX2ZyZWUAGA5fX3diZ19tZXFfZnJlZQAYD19fd2JnX2VwYXJfZnJlZQAYD19fd2JnX21jbGlfZnJlZQAYD19fd2JnX3dkY21fZnJlZQAYD19fd2JnX2NmZWlfZnJlZQAYD19fd2JnX2Fsb2NfZnJlZQAYDV9fd2JnX2dtX2ZyZWUAGA9fX3diZ193cWR2X2ZyZWUAGA5fX3diZ19zcmxfZnJlZQAYDl9fd2JnX25vdF9mcmVlABgPX193YmdfY3Npel9mcmVlABgOX193YmdfbW9kX2ZyZWUAGA9fX3diZ193ZG1tX2ZyZWUAGA9fX3diZ19zbGxpX2ZyZWUAGA9fX3diZ19iaGVpX2ZyZWUAGA9fX3diZ19lY2sxX2ZyZWUAGA9fX3diZ19wc2hsX2ZyZWUAGA9fX3diZ19jcm9vX2ZyZWUAGA5fX3diZ19tdWxfZnJlZQAYDl9fd2JnX2FuZF9mcmVlABgOX193Ymdfb3JpX2ZyZWUAGBN3cWR2X25ld190eXBlc2NyaXB0AMwBE3dxbWxfbmV3X3R5cGVzY3JpcHQAzAETd2RtbF9uZXdfdHlwZXNjcmlwdADMARN3cW9wX25ld190eXBlc2NyaXB0AMwBE3dkb3BfbmV3X3R5cGVzY3JpcHQAzAETd3FjbV9uZXdfdHlwZXNjcmlwdADMARN3ZGR2X25ld190eXBlc2NyaXB0AMwBDndxY21fZnJvbV9hcmdzADsKd3Fkdl9pbW0wNgA2CndxbWxfaW1tMDYANgp3ZG1sX2ltbTA2ADYKd3FvcF9pbW0wNgA2Cndkb3BfaW1tMDYANgp3cWNtX2ltbTA2ADYKd2Rkdl9pbW0wNgA2CndkY21faW1tMDYANgpqbmVmX2ltbTA2ADYJbGRjX2ltbTA2ADYOd3Fkdl9mcm9tX2FyZ3MAywEOd3FvcF9mcm9tX2FyZ3MAOwVnbV9yYQA1BWd0X3JjABoFZ3RfcmIAEgVndF9yYQA1BWxiX3JiABIFbGJfcmEANQVsdF9yYwAaBWx0X3JiABIFbHRfcmEANQhsd19pbW0xMgAJBWx3X3JiABIFbHdfcmEANQVvcl9yYwAaBW9yX3JiABIFb3JfcmEANQhzYl9pbW0xMgAJBXNiX3JiABIFc2JfcmEANQhzd19pbW0xMgAJBXN3X3JiABIFc3dfcmEANQV0cl9yYwAaBXRyX3JiABIFdHJfcmEANQVlcV9yYwAaBWVxX3JiABIFZXFfcmEANQZhbmRfcmMAGgZhbmRfcmIAEgZhbmRfcmEANQZiYWxfcmMAGgZiYWxfcmIAEgZiYWxfcmEANQZjY3BfcmMAGgZjY3BfcmIAEgZjY3BfcmEANQZkaXZfcmMAGgZkaXZfcmIAEgZkaXZfcmEANQZleHBfcmMAGgZleHBfcmIAEgZleHBfcmEANQhsYl9pbW0xMgAJBmd0Zl9yYgASBmd0Zl9yYQA1BmpuZV9yYwAaBmpuZV9yYgASBmpuZV9yYQA1BmxkY19yYwAaBmxkY19yYgASBmxkY19yYQA1BmxvZ19yZAA2BmxvZ19yYwAaBmxvZ19yYgASBmxvZ19yYQA1Bm1jbF9yYgASBm1jbF9yYQA1Bm1jcF9yYwAaBm1jcF9yYgASBm1jcF9yYQA1Bm1lcV9yZAA2Bm1lcV9yYwAaBm1lcV9yYgASBm1lcV9yYQA1Bm1vZF9yYwAaBm1vZF9yYgASBm1vZF9yYQA1Bm11bF9yYwAaBm11bF9yYgASBm11bF9yYQA1Bm5vdF9yYgASBm5vdF9yYQA1CW9yaV9pbW0xMgAJBm9yaV9yYgASBm9yaV9yYQA1BnNsbF9yYwAaBnNsbF9yYgASBnNsbF9yYQA1BnNtb19yZAA2BnNtb19yYwAaBnNtb19yYgASBnNtb19yYQA1BnNybF9yYwAaBnNybF9yYgASBnNybF9yYQA1BnNyd19yYwAaBnNyd19yYgASBnNyd19yYQA1BnN1Yl9yYwAaBnN1Yl9yYgASBnN1Yl9yYQA1BnN3d19yYwAaBnN3d19yYgASBnN3d19yYQA1BnRyb19yZAA2BnRyb19yYwAaBnRyb19yYgASBnRyb19yYQA1Bnhvcl9yYwAaBnhvcl9yYgASBnhvcl9yYQA1CWd0Zl9pbW0xMgAJB2FkZGlfcmIAEgdhZGRpX3JhADUKYW5kaV9pbW0xMgAJB2FuZGlfcmIAEgdhbmRpX3JhADUHYmhzaF9yYgASB2Joc2hfcmEANQZjY3BfcmQANgdibGRkX3JjABoHYmxkZF9yYgASB2JsZGRfcmEANQdic2l6X3JiABIHYnNpel9yYQA1B2J1cm5fcmIAEgdidXJuX3JhADUHY2FsbF9yZAA2B2NhbGxfcmMAGgdjYWxsX3JiABIHY2FsbF9yYQA1B2Nyb29fcmIAEgdjcm9vX3JhADUHY3Npel9yYgASB2NzaXpfcmEANQpkaXZpX2ltbTEyAAkHZGl2aV9yYgASB2RpdmlfcmEANQdlY2FsX3JkADYHZWNhbF9yYwAaB2VjYWxfcmIAEgdlY2FsX3JhADUHZWNrMV9yYwAaB2VjazFfcmIAEgdlY2sxX3JhADUHZWNvcF9yZAA2B2Vjb3BfcmMAGgdlY29wX3JiABIHZWNvcF9yYQA1B2VjcjFfcmMAGgdlY3IxX3JiABIHZWNyMV9yYQA1B2VkMTlfcmQANgdlZDE5X3JjABoHZWQxOV9yYgASB2VkMTlfcmEANQdlcGFyX3JkADYHZXBhcl9yYwAaB2VwYXJfcmIAEgdlcGFyX3JhADUKZXhwaV9pbW0xMgAJB2V4cGlfcmIAEgdleHBpX3JhADUKam1wYl9pbW0xOAANB2ptcGJfcmEANQpqbXBmX2ltbTE4AA0Ham1wZl9yYQA1B2puZWJfcmMAGgdqbmViX3JiABIHam5lYl9yYQA1B2puZWZfcmMAGgdqbmVmX3JiABIHam5lZl9yYQA1CmpuZWlfaW1tMTIACQdqbmVpX3JiABIHam5laV9yYQA1CmpuemJfaW1tMTIACQdqbnpiX3JiABIHam56Yl9yYQA1CmpuemZfaW1tMTIACQdqbnpmX3JiABIHam56Zl9yYQA1CmpuemlfaW1tMTgADQdqbnppX3JhADUHazI1Nl9yYwAaB2syNTZfcmIAEgdrMjU2X3JhADUHbG9nZF9yZAA2B2xvZ2RfcmMAGgdsb2dkX3JiABIHbG9nZF9yYQA1Cm1jbGlfaW1tMTgADQdtY2xpX3JhADUKbWNwaV9pbW0xMgAJB21jcGlfcmIAEgdtY3BpX3JhADUHbWludF9yYgASB21pbnRfcmEANQdtbGR2X3JkADYHbWxkdl9yYwAaB21sZHZfcmIAEgdtbGR2X3JhADUHbWxvZ19yYwAaB21sb2dfcmIAEgdtbG9nX3JhADUKbW9kaV9pbW0xMgAJB21vZGlfcmIAEgdtb2RpX3JhADUHbW92ZV9yYgASB21vdmVfcmEANQptb3ZpX2ltbTE4AA0HbW92aV9yYQA1B21yb29fcmMAGgdtcm9vX3JiABIHbXJvb19yYQA1Cm11bGlfaW1tMTIACQdtdWxpX3JiABIHbXVsaV9yYQA1B3JldGRfcmIAEgdyZXRkX3JhADUHczI1Nl9yYwAaB3MyNTZfcmIAEgdzMjU2X3JhADUHc2N3cV9yYwAaB3Njd3FfcmIAEgdzY3dxX3JhADUKc2xsaV9pbW0xMgAJB3NsbGlfcmIAEgdzbGxpX3JhADUKc3JsaV9pbW0xMgAJB3NybGlfcmIAEgdzcmxpX3JhADUHc3J3cV9yZAA2B3Nyd3FfcmMAGgdzcndxX3JiABIHc3J3cV9yYQA1CnN1YmlfaW1tMTIACQdzdWJpX3JiABIHc3ViaV9yYQA1B3N3d3FfcmQANgdzd3dxX3JjABoHc3d3cV9yYgASB3N3d3FfcmEANQd0aW1lX3JiABIHdGltZV9yYQA1B3dkYW1fcmQANgd3ZGFtX3JjABoHd2RhbV9yYgASB3dkYW1fcmEANQd3ZGNtX3JjABoHd2RjbV9yYgASB3dkY21fcmEANQd3ZGR2X3JjABoHd2Rkdl9yYgASB3dkZHZfcmEANQd3ZG1kX3JkADYHd2RtZF9yYwAaB3dkbWRfcmIAEgd3ZG1kX3JhADUHd2RtbF9yYwAaB3dkbWxfcmIAEgd3ZG1sX3JhADUHd2RtbV9yZAA2B3dkbW1fcmMAGgd3ZG1tX3JiABIHd2RtbV9yYQA1B3dkb3BfcmMAGgd3ZG9wX3JiABIHd2RvcF9yYQA1B3dxYW1fcmQANgd3cWFtX3Jj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AAssAQF/QRBBBBDIASIBQoGAgIAQNwIAIAEgAK1C////B4NCIIY3AgggAUEIagskACAAENIBIAAoAgAEQBDZAQALIABBADYCACAAIAFBAEc6AAQLKAAgAxAWIQMgABDJASABEMkBIAIQyQEgAxDQAUEIdEHkAHIQ0wEQZwsoACADEBYhAyAAEMkBIAEQyQEgAhDJASADENABQQh0QeUAchDTARBnCyAAIABBAWsiAEEFTQRAIABBAWoPC0HggsAAQRkQ2gEACykBAX9BEEEEEMgBIgEgADYCDCABQQA2AgggAUKBgICAEDcCACABQQhqCykBAX9BEEEEEMgBIgEgADoADCABQQA2AgggAUKBgICAEDcCACABQQhqCyIAIAIQAiECIAAQyQEgARDJASACEEdBCHRBygByENMBEGcLDwAgACABIAIgA0ESEPMBCw8AIAAgASACIANBGBDzAQsPACAAIAEgAiADQRwQ8wELDwAgACABIAIgA0EdEPMBCw8AIAAgASACIANBIRD0AQsPACAAIAEgAiADQSIQ8wELDwAgACABIAIgA0EjEPMBCw8AIAAgASACIANBKBDzAQsPACAAIAEgAiADQSoQ8wELDwAgACABIAIgA0EsEPMBCw8AIAAgASACIANBLxDzAQsPACAAIAEgAiADQTgQ8wELEAAgACABIAIgA0HTABD0AQsQACAAIAEgAiADQdQAEPQBCxAAIAAgASACIANB3gAQ9AELEAAgACABIAIgA0HfABD0AQsQACAAIAEgAiADQeAAEPQBCxAAIAAgASACIANB4QAQ9AELEAAgACABIAIgA0HiABD0AQsQACAAIAEgAiADQeMAEPQBCxAAIAAgASACIANB5AAQ9AELEAAgACABIAIgA0HlABD0AQsQACAAIAEgAiADQeYAEPMBCxAAIAAgASACIANB5wAQ8wELEAAgACABIAIgA0HoABDzAQsQACAAIAEgAiADQekAEPMBCxAAIAAgASACIANB6gAQ8wELEAAgACABIAIgA0HrABDzAQsQACAAIAEgAiADQewAEPMBCxAAIAAgASACIANB7gAQ8wELEAAgACABIAIgA0HvABDzAQsQACAAIAEgAiADQfAAEPMBCx4AIAEQZiEBIAAQyQEgARDGAUEIdEHMAHIQ0wEQZwsZACAAIAEgAkEgQQAgBBtBEEEAIAMbchAhCw0AIAAgASACQQEQ9QELDQAgACABIAJBAhD1AQsNACAAIAEgAkEDEPUBCw0AIAAgASACQQQQ9QELDQAgACABIAJBBRD1AQsNACAAIAEgAkEGEPUBCw0AIAAgASACQQcQ9QELDQAgACABIAJBCBD1AQsNACAAIAEgAkEJEPUBCw0AIAAgASACQQsQ9QELDQAgACABIAJBDRD1AQsNACAAIAEgAkEOEPUBCw0AIAAgASACQQ8Q9QELDQAgACABIAJBEBD1AQsNACAAIAEgAkEREPUBCw0AIAAgASACQRcQ9QELDQAgACABIAJBJhD1AQsNACAAIAEgAkEnEPUBCw0AIAAgASACQSkQ9QELDQAgACABIAJBKxD1AQsNACAAIAEgAkEtEPUBCw0AIAAgASACQS4Q9QELDQAgACABIAJBMBD1AQsNACAAIAEgAkExEPUBCw0AIAAgASACQTUQ9QELDQAgACABIAJBNxD1AQsNACAAIAEgAkE5EPYBCw0AIAAgASACQToQ9gELDQAgACABIAJBOxD2AQsNACAAIAEgAkE8EPYBCw0AIAAgASACQT0Q9gELDQAgACABIAJBPhD2AQsNACAAIAEgAkE/EPYBCw4AIAAgASACQcAAEPYBCw4AIAAgASACQcEAEPYBCw4AIAAgASACQcIAEPYBCw4AIAAgASACQcMAEPYBCw4AIAAgASACQcQAEPYBCw4AIAAgASACQcUAEPYBCw4AIAAgASACQcYAEPYBCw4AIAAgASACQccAEPYBCw4AIAAgASACQcgAEPYBCw4AIAAgASACQckAEPYBCw4AIAAgASACQcoAEPYBCw4AIAAgASACQdEAEPYBCw4AIAAgASACQdIAEPYBCxcBAX8gAEH/AXFBP00EfyAAEGgFQQALCxsAIAAQ0gEgACgCAEF/RgRAENkBAAsgAC0ABAsJACAAQRMQ9wELCQAgAEEVEPcBCwkAIABBGhD3AQsJACAAQSAQ9wELCQAgAEElEPcBCyIBAX9BEEEEEMgBIgBCADcCCCAAQoGAgIAQNwIAIABBCGoLCQAgAEE0EPcBCwkAIABBNhD3AQsKACAAQdgAEPcBCwoAIABB2QAQ9wELFwAgAUEQdEGAgPwDcSAAQQJ0QfwBcXILGwAgABDJASABEMkBIAIQyQEQOkEIdBDTARBnCxIAIAEgABDVASIABEAgAA8LAAt1AQF/IABB/wFxQcAATwRAIwBBEGsiASQAIAFBIjYCDCABQYCAwAA2AggjAEEgayIAJAAgAEEBNgIEIABB/IbAADYCACAAQgE3AgwgACABQQhqrUKAgICAwACENwMYIAAgAEEYajYCCCAAQbiAwAAQVwALIAALFAAgACABIAJBIEEAIAMbIARyECELFwAgABAbIAEQGyACEBsgAxAWENABEGILFgAgABAbIAEQGyACEBsgAxAbECEQYgsTACAAIAAoAgBBAWs2AgAgARBeCxMAIAAgACgCAEEBazYCACABEF8LEgAgABAbIAEQGyACEAIQRxBiCxEAIAAgASACQSBBACADGxAhCxIAIAAQGyABEBsgAhAdEEcQYgsTACAABEAPC0HcisAAQRsQ2gEACxQBAX9BBEEBEMgBIgEgADYAACABCw0AIAEEQCAAIAEQGQsLgQMBBX9BmY/AAC0AABoCfyAAQQlPBEACQEHN/3tBECAAIABBEE0bIgBrIAFNDQAgAEEQIAFBC2pBeHEgAUELSRsiBGpBDGoQASICRQ0AIAJBCGshAQJAIABBAWsiAyACcUUEQCABIQAMAQsgAkEEayIFKAIAIgZBeHEgAiADakEAIABrcUEIayICIABBACACIAFrQRBNG2oiACABayICayEDIAZBA3EEQCAAIAMgACgCBEEBcXJBAnI2AgQgACADaiIDIAMoAgRBAXI2AgQgBSACIAUoAgBBAXFyQQJyNgIAIAEgAmoiAyADKAIEQQFyNgIEIAEgAhADDAELIAEoAgAhASAAIAM2AgQgACABIAJqNgIACwJAIAAoAgQiAUEDcUUNACABQXhxIgIgBEEQak0NACAAIAQgAUEBcXJBAnI2AgQgACAEaiIBIAIgBGsiBEEDcjYCBCAAIAJqIgIgAigCBEEBcjYCBCABIAQQAwsgAEEIaiEDCyADDAELIAEQAQsLDQAgABDeAUEKdkE/cQsPACAAEBsgARBmEMYBEGILCwAgACMAaiQAIwALDgBB94rAAEHPABDaAQALCQAgACABEAAACwkAIABBP3EQaAsKACAAEBtB/wFxCwgAIABBBBAZCwcAIABBCHQLCQBBMxDTARBnCwYAQQsQaAsGAEEKEGgLBgBBCBBoCwYAQQ8QaAsGAEEGEGgLBgBBCRBoCwYAQQcQ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", imports);
|
17020
|
+
return _loadWasmModule(1, null, "AGFzbQEAAAABRwxgA39/fwF/YAF/AX9gBH9/f38Bf2ACf38Bf2ACf38AYAABf2ABfwBgBX9/f39/AX9gA39/fwBgAn5/AX9gBH9/f38AYAAAAhgBA3diZxBfX3diaW5kZ2VuX3Rocm93AAQDigKIAgEDCQEEBAQEBAEEAQQEAQMKAQEEAQQBAQEDAQQEAQEEAQEEAgEBBAICAgICAgQEBAMDAwMDAwMDAgEBBAQABAICAwAAAwMDAwMDAwMDAwABAQQEBAEBAQEBAQECAQYBAQEEBgYBAQEEBAICAQUAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEDAAEHAgIGBAQAAgAGCAMBAwELAwMDBAEBBAYBBQQFBQUFBQUFBQUFBQUFBQUFBQUEBwcCAgMCBwcAAAgAAwQFAXABCAgFAwEAEQYJAX8BQYCAwAALB8FN3QUGbWVtb3J5AgAWX193YmdfY29tcGFyZWFyZ3NfZnJlZQAUGl9fd2JnX2dldF9jb21wYXJlYXJnc19tb2RlAFAaX193Ymdfc2V0X2NvbXBhcmVhcmdzX21vZGUAPCJfX3diZ19nZXRfY29tcGFyZWFyZ3NfaW5kaXJlY3RfcmhzAFEiX193Ymdfc2V0X2NvbXBhcmVhcmdzX2luZGlyZWN0X3JocwBTEmNvbXBhcmVhcmdzX3RvX2ltbQBfFGNvbXBhcmVhcmdzX2Zyb21faW1tABUVX193YmdfZ2V0X21hdGhhcmdzX29wAFAVX193Ymdfc2V0X21hdGhhcmdzX29wAD0SX193YmdfbXVsYXJnc19mcmVlABYeX193YmdfZ2V0X211bGFyZ3NfaW5kaXJlY3RfcmhzAFAeX193Ymdfc2V0X211bGFyZ3NfaW5kaXJlY3RfcmhzAFQSX193YmdfZGl2YXJnc19mcmVlACceX193YmdfZ2V0X2RpdmFyZ3NfaW5kaXJlY3RfcmhzAMABHl9fd2JnX3NldF9kaXZhcmdzX2luZGlyZWN0X3JocwBpG19fd2JnX3BhbmljaW5zdHJ1Y3Rpb25fZnJlZQAcIXBhbmljaW5zdHJ1Y3Rpb25fZXJyb3JfdHlwZXNjcmlwdABCF3BhbmljaW5zdHJ1Y3Rpb25fcmVhc29uAGAccGFuaWNpbnN0cnVjdGlvbl9pbnN0cnVjdGlvbgBhDGdtX2Zyb21fYXJncwDbAQ1ndGZfZnJvbV9hcmdzANQBB2dtX2FyZ3MAjwEIZ3RmX2FyZ3MAbg53ZGNtX2Zyb21fYXJncwBADndkb3BfZnJvbV9hcmdzAEAOd2RtbF9mcm9tX2FyZ3MAQQ53ZGR2X2Zyb21fYXJncwDPAQl3ZGNtX2FyZ3MAKAl3cWNtX2FyZ3MAKQl3ZG9wX2FyZ3MAKgl3cW9wX2FyZ3MAKwl3ZG1sX2FyZ3MALAl3cW1sX2FyZ3MALQl3ZGR2X2FyZ3MAagl3cWR2X2FyZ3MAaxBfX3diZ19pbW0wNl9mcmVlAC4QX193YmdfaW1tMTJfZnJlZQAvEF9fd2JnX2ltbTE4X2ZyZWUAMA5fX3diZ19hZGRfZnJlZQAdD19fd2JnX25vb3BfZnJlZQAJEmFkZF9uZXdfdHlwZXNjcmlwdABDBmFkZF9yYQA6BmFkZF9yYgAXBmFkZF9yYwAeA2FkZADMAQNhbmQAkQEDZGl2AJIBAmVxAJMBA2V4cACUAQJndACVAQJsdACWAQRtbG9nAJcBBG1yb28AmAEEbW9kXwCZAQVtb3ZlXwBFA211bACaAQNub3QARgJvcgCbAQNzbGwAnAEDc3JsAJ0BA3N1YgCeAQN4b3IAnwEEbWxkdgBvA3JldADBAQRyZXRkAEcTYWxvY19uZXdfdHlwZXNjcmlwdABdB2Fsb2NfcmEAJQRhbG9jAMIBA21jbABIA21jcACgAQNtZXEAcBNiaHNoX25ld190eXBlc2NyaXB0ABoEYmhzaAAxBGJoZWkAwwEEYnVybgBJBGNhbGwAcQNjY3AAcgRjcm9vAEoEY3NpegBLAmNiAMQBA2xkYwBzA2xvZwB0BGxvZ2QAdQRtaW50AEwEcnZydADFAQRzY3dxAKEBA3NydwCiAQRzcndxAHYDc3d3AKMBBHN3d3EAdwJ0cgCkAQN0cm8AeARlY2sxAKUBBGVjcjEApgEEZWQxOQB5BGsyNTYApwEEczI1NgCoAQR0aW1lAE0Tbm9vcF9uZXdfdHlwZXNjcmlwdABtBG5vb3AA5wEEZmxhZwDGAQNiYWwAqQEDam1wAMcBA2puZQCqAQNzbW8AehNhZGRpX25ld190eXBlc2NyaXB0AEQKYWRkaV9pbW0xMgAKBGFkZGkAqwEEYW5kaQCsAQRkaXZpAK0BBGV4cGkArgEEbW9kaQCvAQRtdWxpALABA29yaQCxAQRzbGxpALIBBHNybGkAswEEc3ViaQC0AQR4b3JpALUBBGpuZWkAtgECbGIAtwECbHcAuAECc2IAuQECc3cAugEEbWNwaQC7ARJndGZfbmV3X3R5cGVzY3JpcHQA1gEDZ3RmALwBBG1jbGkAMhFnbV9uZXdfdHlwZXNjcmlwdABOCGdtX2ltbTE4AA8CZ20AMwRtb3ZpADQEam56aQA1BGptcGYANhNqbXBiX25ld190eXBlc2NyaXB0ABAEam1wYgA3BGpuemYAvQEEam56YgC+AQRqbmVmAHsKam5lYl9pbW0wNgA7BGpuZWIAfAJqaQBVE2NmZWlfbmV3X3R5cGVzY3JpcHQAJgpjZmVpX2ltbTI0AAwEY2ZlaQBWBGNmc2kAVwNjZmUAyAEDY2ZzAMkBBHBzaGwAWARwc2hoAFkEcG9wbABaBHBvcGgAWxN3ZGNtX25ld190eXBlc2NyaXB0ANABBHdkY20AfQR3cWNtAH4Ed2RvcAB/BHdxb3AAgAEEd2RtbACBAQR3cW1sAIIBBHdkZHYAgwEEd3FkdgCEAQR3ZG1kAIUBBHdxbWQAhgEEd2RhbQCHAQR3cWFtAIgBBHdkbW0AiQEEd3FtbQCKAQRlY2FsAIsBBGJzaXoAOBNibGRkX25ld190eXBlc2NyaXB0ADkHYmxkZF9yZAA7BGJsZGQAjAEEZWNvcACNAQRlcGFyAI4BFl9fd2JnX2luc3RydWN0aW9uX2ZyZWUADhRpbnN0cnVjdGlvbl90b19ieXRlcwAIEGluc3RydWN0aW9uX3NpemUA+gERcmVnaWRfbmV3X2NoZWNrZWQAvwEJcmVnaWRfYmFsAOkBCnJlZ2lkX2NnYXMA6gEJcmVnaWRfZXJyAOsBCnJlZ2lkX2ZsYWcA7AEIcmVnaWRfZnAA7QEKcmVnaWRfZ2dhcwDuAQhyZWdpZF9ocADvAQhyZWdpZF9pcwDwAQhyZWdpZF9vZgDxAQlyZWdpZF9vbmUA8gEIcmVnaWRfcGMA8wEJcmVnaWRfcmV0APQBCnJlZ2lkX3JldGwA9QEIcmVnaWRfc3AA9gEJcmVnaWRfc3BwAPcBDnJlZ2lkX3dyaXRhYmxlAPgBCnJlZ2lkX3plcm8A+QEUcmVnaWRfbmV3X3R5cGVzY3JpcHQA4gELcmVnaWRfdG9fdTgA4wESYW5kX25ld190eXBlc2NyaXB0AEMSZGl2X25ld190eXBlc2NyaXB0AEMRZXFfbmV3X3R5cGVzY3JpcHQAQxJleHBfbmV3X3R5cGVzY3JpcHQAQxFndF9uZXdfdHlwZXNjcmlwdABDEWx0X25ld190eXBlc2NyaXB0AEMTbWxvZ19uZXdfdHlwZXNjcmlwdABDE21yb29fbmV3X3R5cGVzY3JpcHQAQxJtb2RfbmV3X3R5cGVzY3JpcHQAQxJtdWxfbmV3X3R5cGVzY3JpcHQAQxFvcl9uZXdfdHlwZXNjcmlwdABDEnNsbF9uZXdfdHlwZXNjcmlwdABDEnNybF9uZXdfdHlwZXNjcmlwdABDEnN1Yl9uZXdfdHlwZXNjcmlwdABDEnhvcl9uZXdfdHlwZXNjcmlwdABDEm1jcF9uZXdfdHlwZXNjcmlwdABDE3Njd3FfbmV3X3R5cGVzY3JpcHQAQxJzcndfbmV3X3R5cGVzY3JpcHQAQxJzd3dfbmV3X3R5cGVzY3JpcHQAQxF0cl9uZXdfdHlwZXNjcmlwdABDE2VjazFfbmV3X3R5cGVzY3JpcHQAQxNlY3IxX25ld190eXBlc2NyaXB0AEMTazI1Nl9uZXdfdHlwZXNjcmlwdABDE3MyNTZfbmV3X3R5cGVzY3JpcHQAQxJiYWxfbmV3X3R5cGVzY3JpcHQAQxJqbmVfbmV3X3R5cGVzY3JpcHQAQxNhbmRpX25ld190eXBlc2NyaXB0AEQTZGl2aV9uZXdfdHlwZXNjcmlwdABEE2V4cGlfbmV3X3R5cGVzY3JpcHQARBNtb2RpX25ld190eXBlc2NyaXB0AEQTbXVsaV9uZXdfdHlwZXNjcmlwdABEEm9yaV9uZXdfdHlwZXNjcmlwdABEE3NsbGlfbmV3X3R5cGVzY3JpcHQARBNzcmxpX25ld190eXBlc2NyaXB0AEQTc3ViaV9uZXdfdHlwZXNjcmlwdABEE3hvcmlfbmV3X3R5cGVzY3JpcHQARBNqbmVpX25ld190eXBlc2NyaXB0AEQRbGJfbmV3X3R5cGVzY3JpcHQARBFsd19uZXdfdHlwZXNjcmlwdABEEXNiX25ld190eXBlc2NyaXB0AEQRc3dfbmV3X3R5cGVzY3JpcHQARBNtY3BpX25ld190eXBlc2NyaXB0AEQTam56Zl9uZXdfdHlwZXNjcmlwdABEE2puemJfbmV3X3R5cGVzY3JpcHQARBFqaV9uZXdfdHlwZXNjcmlwdAAmE2Nmc2lfbmV3X3R5cGVzY3JpcHQAJhNwc2hsX25ld190eXBlc2NyaXB0ACYTcHNoaF9uZXdfdHlwZXNjcmlwdAAmE3BvcGxfbmV3X3R5cGVzY3JpcHQAJhNwb3BoX25ld190eXBlc2NyaXB0ACYSbm90X25ld190eXBlc2NyaXB0ABoTcmV0ZF9uZXdfdHlwZXNjcmlwdAAaE21vdmVfbmV3X3R5cGVzY3JpcHQAGhJtY2xfbmV3X3R5cGVzY3JpcHQAGhNidXJuX25ld190eXBlc2NyaXB0ABoTY3Jvb19uZXdfdHlwZXNjcmlwdAAaE2NzaXpfbmV3X3R5cGVzY3JpcHQAGhNtaW50X25ld190eXBlc2NyaXB0ABoTdGltZV9uZXdfdHlwZXNjcmlwdAAaE2JzaXpfbmV3X3R5cGVzY3JpcHQAGhJyZXRfbmV3X3R5cGVzY3JpcHQAXRNiaGVpX25ld190eXBlc2NyaXB0AF0RY2JfbmV3X3R5cGVzY3JpcHQAXRNydnJ0X25ld190eXBlc2NyaXB0AF0TZmxhZ19uZXdfdHlwZXNjcmlwdABdEmptcF9uZXdfdHlwZXNjcmlwdABdEmNmZV9uZXdfdHlwZXNjcmlwdABdEmNmc19uZXdfdHlwZXNjcmlwdABdE21sZHZfbmV3X3R5cGVzY3JpcHQAORJtZXFfbmV3X3R5cGVzY3JpcHQAORJjY3BfbmV3X3R5cGVzY3JpcHQAORJsb2dfbmV3X3R5cGVzY3JpcHQAORNsb2dkX25ld190eXBlc2NyaXB0ADkTc3J3cV9uZXdfdHlwZXNjcmlwdAA5E3N3d3FfbmV3X3R5cGVzY3JpcHQAORJ0cm9fbmV3X3R5cGVzY3JpcHQAORNlZDE5X25ld190eXBlc2NyaXB0ADkSc21vX25ld190eXBlc2NyaXB0ADkSbGRjX25ld190eXBlc2NyaXB0ADkTam5lZl9uZXdfdHlwZXNjcmlwdAA5E3dkbWRfbmV3X3R5cGVzY3JpcHQAORN3cW1kX25ld190eXBlc2NyaXB0ADkTd2RhbV9uZXdfdHlwZXNjcmlwdAA5E3dxYW1fbmV3X3R5cGVzY3JpcHQAORN3ZG1tX25ld190eXBlc2NyaXB0ADkTd3FtbV9uZXdfdHlwZXNjcmlwdAA5E2VjYWxfbmV3X3R5cGVzY3JpcHQAORNjYWxsX25ld190eXBlc2NyaXB0ADkTZWNvcF9uZXdfdHlwZXNjcmlwdAA5E2VwYXJfbmV3X3R5cGVzY3JpcHQAOQZyZXRfcmEAJQdiaGVpX3JhACUFY2JfcmEAJQdydnJ0X3JhACUHZmxhZ19yYQAlBmptcF9yYQAlCGppX2ltbTI0AAwKY2ZzaV9pbW0yNAAMBmNmZV9yYQAlBmNmc19yYQAlCnBzaGxfaW1tMjQADApwc2hoX2ltbTI0AAwKcG9wbF9pbW0yNAAMCnBvcGhfaW1tMjQADBNtb3ZpX25ld190eXBlc2NyaXB0ABATbWNsaV9uZXdfdHlwZXNjcmlwdAAQE2puemlfbmV3X3R5cGVzY3JpcHQAEBNqbXBmX25ld190eXBlc2NyaXB0ABATX193YmdfbWF0aGFyZ3NfZnJlZQAUH19fd2JnX3NldF9tYXRoYXJnc19pbmRpcmVjdF9yaHMAUx5fX3diZ19zZXRfbXVsYXJnc19pbmRpcmVjdF9saHMAUx9fX3diZ19nZXRfbWF0aGFyZ3NfaW5kaXJlY3RfcmhzAFEeX193YmdfZ2V0X211bGFyZ3NfaW5kaXJlY3RfbGhzAFEPX193YmdfZXhwaV9mcmVlAB0PX193YmdfYmhlaV9mcmVlAB0PX193Ymdfd2RtbF9mcmVlAB0PX193YmdfcHNobF9mcmVlAB0OX193YmdfbG9nX2ZyZWUAHQ5fX3diZ19jY3BfZnJlZQAdD19fd2JnX2VjazFfZnJlZQAdD19fd2JnX2VjcjFfZnJlZQAdDl9fd2JnX3Ntb19mcmVlAB0OX193Ymdfb3JpX2ZyZWUAHQ5fX3diZ190cm9fZnJlZQAdDl9fd2JnX21lcV9mcmVlAB0OX193YmdfY2ZzX2ZyZWUAHQ5fX3diZ19kaXZfZnJlZQAdDV9fd2JnX2x0X2ZyZWUAHQ9fX3diZ19iaHNoX2ZyZWUAHQ1fX3diZ19zYl9mcmVlAB0PX193Ymdfd2RtZF9mcmVlAB0NX193YmdfdHJfZnJlZQAdDl9fd2JnX3hvcl9mcmVlAB0PX193Ymdfam5lYl9mcmVlAB0PX193Ymdfam5lZl9mcmVlAB0PX193YmdfY3Npel9mcmVlAB0PX193YmdfY3Jvb19mcmVlAB0PX193YmdfZGl2aV9mcmVlAB0NX193YmdfZ21fZnJlZQAdD19fd2JnX21vZGlfZnJlZQAdD19fd2JnX3hvcmlfZnJlZQAdDV9fd2JnX2NiX2ZyZWUAHQ9fX3diZ193ZGNtX2ZyZWUAHQ5fX3diZ19qbXBfZnJlZQAdD19fd2JnX3dxYW1fZnJlZQAdDl9fd2JnX2xkY19mcmVlAB0PX193YmdfZWQxOV9mcmVlAB0NX193Ymdfc3dfZnJlZQAdD19fd2JnX3RpbWVfZnJlZQAdD19fd2JnX2Vjb3BfZnJlZQAdD19fd2JnX3Njd3FfZnJlZQAdD19fd2JnX3dxbW1fZnJlZQAdD19fd2JnX3dkYW1fZnJlZQAdDV9fd2JnX2xiX2ZyZWUAHQ1fX3diZ19qaV9mcmVlAB0PX193YmdfazI1Nl9mcmVlAB0PX193YmdfYW5kaV9mcmVlAB0PX193Ymdfam56aV9mcmVlAB0PX193Ymdfc3J3cV9mcmVlAB0OX193Ymdfbm90X2ZyZWUAHQ5fX3diZ19jZmVfZnJlZQAdD19fd2JnX2xvZ2RfZnJlZQAdDl9fd2JnX3Nyd19mcmVlAB0PX193YmdfcnZydF9mcmVlAB0PX193YmdfcHNoaF9mcmVlAB0OX193Ymdfc3JsX2ZyZWUAHQ5fX3diZ19tdWxfZnJlZQAdD19fd2JnX2ZsYWdfZnJlZQAdD19fd2JnX21jcGlfZnJlZQAdDl9fd2JnX21vZF9mcmVlAB0PX193YmdfbW92aV9mcmVlAB0OX193YmdfcmV0X2ZyZWUAHQ9fX3diZ19tcm9vX2ZyZWUAHQ9fX3diZ193cWR2X2ZyZWUAHQ1fX3diZ19sd19mcmVlAB0PX193Ymdfd3FtZF9mcmVlAB0OX193Ymdfc3d3X2ZyZWUAHQ5fX3diZ19ndGZfZnJlZQAdD19fd2JnX3BvcGhfZnJlZQAdDV9fd2JnX29yX2ZyZWUAHQ9fX3diZ19tb3ZlX2ZyZWUAHQ9fX3diZ193ZGR2X2ZyZWUAHQ9fX3diZ19yZXRkX2ZyZWUAHQ5fX3diZ19iYWxfZnJlZQAdD19fd2JnX2FkZGlfZnJlZQAdDl9fd2JnX2FuZF9mcmVlAB0PX193YmdfbWNsaV9mcmVlAB0PX193Ymdfd3FtbF9mcmVlAB0PX193Ymdfc2xsaV9mcmVlAB0PX193Ymdfd2RvcF9mcmVlAB0OX193Ymdfc2xsX2ZyZWUAHQ9fX3diZ19lY2FsX2ZyZWUAHQ9fX3diZ193cWNtX2ZyZWUAHQ9fX3diZ19zd3dxX2ZyZWUAHQ9fX3diZ19tbGR2X2ZyZWUAHQ1fX3diZ19ndF9mcmVlAB0NX193YmdfZXFfZnJlZQAdDl9fd2JnX2puZV9mcmVlAB0PX193Ymdfam5laV9mcmVlAB0PX193Ymdfam1wZl9mcmVlAB0OX193YmdfZXhwX2ZyZWUAHQ9fX3diZ19zMjU2X2ZyZWUAHQ5fX3diZ19zdWJfZnJlZQAdDl9fd2JnX21jcF9mcmVlAB0PX193YmdfZXBhcl9mcmVlAB0PX193YmdfY2ZlaV9mcmVlAB0PX193YmdfY2ZzaV9mcmVlAB0PX193Ymdfam56Zl9mcmVlAB0PX193YmdfbWludF9mcmVlAB0PX193YmdfYnNpel9mcmVlAB0PX193YmdfYnVybl9mcmVlAB0PX193Ymdfd2RtbV9mcmVlAB0PX193Ymdfam1wYl9mcmVlAB0PX193Ymdfc3JsaV9mcmVlAB0PX193Ymdfc3ViaV9mcmVlAB0PX193Ymdfam56Yl9mcmVlAB0PX193YmdfbXVsaV9mcmVlAB0PX193Ymdfd3FvcF9mcmVlAB0PX193YmdfcG9wbF9mcmVlAB0OX193YmdfbWNsX2ZyZWUAHQ9fX3diZ19jYWxsX2ZyZWUAHQ9fX3diZ19tbG9nX2ZyZWUAHQ9fX3diZ19ibGRkX2ZyZWUAHQ9fX3diZ19hbG9jX2ZyZWUAHRN3cWR2X25ld190eXBlc2NyaXB0ANABE3dxbWxfbmV3X3R5cGVzY3JpcHQA0AETd2RtbF9uZXdfdHlwZXNjcmlwdADQARN3cW9wX25ld190eXBlc2NyaXB0ANABE3dkb3BfbmV3X3R5cGVzY3JpcHQA0AETd3FjbV9uZXdfdHlwZXNjcmlwdADQARN3ZGR2X25ld190eXBlc2NyaXB0ANABDndxY21fZnJvbV9hcmdzAEAKd3Fkdl9pbW0wNgA7CndxbWxfaW1tMDYAOwp3ZG1sX2ltbTA2ADsKd3FvcF9pbW0wNgA7Cndkb3BfaW1tMDYAOwp3cWNtX2ltbTA2ADsKd2Rkdl9pbW0wNgA7CndkY21faW1tMDYAOwpqbmVmX2ltbTA2ADsJbGRjX2ltbTA2ADsOd3Fkdl9mcm9tX2FyZ3MAzwEOd3FtbF9mcm9tX2FyZ3MAQQ53cW9wX2Zyb21fYXJncwBABWdtX3JhADoFZ3RfcmMAHgVndF9yYgAXBWd0X3JhADoFbGJfcmIAFwVsYl9yYQA6BWx0X3JjAB4FbHRfcmIAFwVsdF9yYQA6CGx3X2ltbTEyAAoFbHdfcmIAFwVsd19yYQA6BW9yX3JjAB4Fb3JfcmIAFwVvcl9yYQA6CHNiX2ltbTEyAAoFc2JfcmIAFwVzYl9yYQA6CHN3X2ltbTEyAAoFc3dfcmIAFwVzd19yYQA6BXRyX3JjAB4FdHJfcmIAFwV0cl9yYQA6BWVxX3JjAB4FZXFfcmIAFwVlcV9yYQA6BmFuZF9yYwAeBmFuZF9yYgAXBmFuZF9yYQA6BmJhbF9yYwAeBmJhbF9yYgAXBmJhbF9yYQA6BmNjcF9yYwAeBmNjcF9yYgAXBmNjcF9yYQA6BmRpdl9yYwAeBmRpdl9yYgAXBmRpdl9yYQA6BmV4cF9yYwAeBmV4cF9yYgAXBmV4cF9yYQA6CGxiX2ltbTEyAAoGZ3RmX3JiABcGZ3RmX3JhADoGam5lX3JjAB4Gam5lX3JiABcGam5lX3JhADoGbGRjX3JjAB4GbGRjX3JiABcGbGRjX3JhADoGbG9nX3JkADsGbG9nX3JjAB4GbG9nX3JiABcGbG9nX3JhADoGbWNsX3JiABcGbWNsX3JhADoGbWNwX3JjAB4GbWNwX3JiABcGbWNwX3JhADoGbWVxX3JkADsGbWVxX3JjAB4GbWVxX3JiABcGbWVxX3JhADoGbW9kX3JjAB4GbW9kX3JiABcGbW9kX3JhADoGbXVsX3JjAB4GbXVsX3JiABcGbXVsX3JhADoGbm90X3JiABcGbm90X3JhADoJb3JpX2ltbTEyAAoGb3JpX3JiABcGb3JpX3JhADoGc2xsX3JjAB4Gc2xsX3JiABcGc2xsX3JhADoGc21vX3JkADsGc21vX3JjAB4Gc21vX3JiABcGc21vX3JhADoGc3JsX3JjAB4Gc3JsX3JiABcGc3JsX3JhADoGc3J3X3JjAB4Gc3J3X3JiABcGc3J3X3JhADoGc3ViX3JjAB4Gc3ViX3JiABcGc3ViX3JhADoGc3d3X3JjAB4Gc3d3X3JiABcGc3d3X3JhADoGdHJvX3JkADsGdHJvX3JjAB4GdHJvX3JiABcGdHJvX3JhADoGeG9yX3JjAB4GeG9yX3JiABcGeG9yX3JhADoJZ3RmX2ltbTEyAAoHYWRkaV9yYgAXB2FkZGlfcmEAOgphbmRpX2ltbTEyAAoHYW5kaV9yYgAXB2FuZGlfcmEAOgdiaHNoX3JiABcHYmhzaF9yYQA6BmNjcF9yZAA7B2JsZGRfcmMAHgdibGRkX3JiABcHYmxkZF9yYQA6B2JzaXpfcmIAFwdic2l6X3JhADoHYnVybl9yYgAXB2J1cm5fcmEAOgdjYWxsX3JkADsHY2FsbF9yYwAeB2NhbGxfcmIAFwdjYWxsX3JhADoHY3Jvb19yYgAXB2Nyb29fcmEAOgdjc2l6X3JiABcHY3Npel9yYQA6CmRpdmlfaW1tMTIACgdkaXZpX3JiABcHZGl2aV9yYQA6B2VjYWxfcmQAOwdlY2FsX3JjAB4HZWNhbF9yYgAXB2VjYWxfcmEAOgdlY2sxX3JjAB4HZWNrMV9yYgAXB2VjazFfcmEAOgdlY29wX3JkADsHZWNvcF9yYwAeB2Vjb3BfcmIAFwdlY29wX3JhADoHZWNyMV9yYwAeB2VjcjFfcmIAFwdlY3IxX3JhADoHZWQxOV9yZAA7B2VkMTlfcmMAHgdlZDE5X3JiABcHZWQxOV9yYQA6B2VwYXJfcmQAOwdlcGFyX3JjAB4HZXBhcl9yYgAXB2VwYXJfcmEAOgpleHBpX2ltbTEyAAoHZXhwaV9yYgAXB2V4cGlfcmEAOgpqbXBiX2ltbTE4AA8Ham1wYl9yYQA6CmptcGZfaW1tMTgADwdqbXBmX3JhADoHam5lYl9yYwAeB2puZWJfcmIAFwdqbmViX3JhADoHam5lZl9yYwAeB2puZWZfcmIAFwdqbmVmX3JhADoKam5laV9pbW0xMgAKB2puZWlfcmIAFwdqbmVpX3JhADoKam56Yl9pbW0xMgAKB2puemJfcmIAFwdqbnpiX3JhADoKam56Zl9pbW0xMgAKB2puemZfcmIAFwdqbnpmX3JhADoKam56aV9pbW0xOAAPB2puemlfcmEAOgdrMjU2X3JjAB4HazI1Nl9yYgAXB2syNTZfcmEAOgdsb2dkX3JkADsHbG9nZF9yYwAeB2xvZ2RfcmIAFwdsb2dkX3JhADoKbWNsaV9pbW0xOAAPB21jbGlfcmEAOgptY3BpX2ltbTEyAAoHbWNwaV9yYgAXB21jcGlfcmEAOgdtaW50X3JiABcHbWludF9yYQA6B21sZHZfcmQAOwdtbGR2X3JjAB4HbWxkdl9yYgAXB21sZHZfcmEAOgdtbG9nX3JjAB4HbWxvZ19yYgAXB21sb2dfcmEAOgptb2RpX2ltbTEyAAoHbW9kaV9yYgAXB21vZGlfcmEAOgdtb3ZlX3JiABcHbW92ZV9yYQA6Cm1vdmlfaW1tMTgADwdtb3ZpX3JhADoHbXJvb19yYwAeB21yb29fcmIAFwdtcm9vX3JhADoKbXVsaV9pbW0xMgAKB211bGlfcmIAFwdtdWxpX3JhADoHcmV0ZF9yYgAXB3JldGRfcmEAOgdzMjU2X3JjAB4HczI1Nl9yYgAXB3MyNTZfcmEAOgdzY3dxX3JjAB4Hc2N3cV9yYgAXB3Njd3FfcmEAOgpzbGxpX2ltbTEyAAoHc2xsaV9yYgAXB3NsbGlfcmEAOgpzcmxpX2ltbTEyAAoHc3JsaV9yYgAXB3NybGlfcmEAOgdzcndxX3JkADsHc3J3cV9yYwAeB3Nyd3FfcmIAFwdzcndxX3JhADoKc3ViaV9pbW0xMgAKB3N1YmlfcmIAFwdzdWJpX3JhADoHc3d3cV9yZAA7B3N3d3FfcmMAHgdzd3dxX3JiABcHc3d3cV9yYQA6B3RpbWVfcmIAFwd0aW1lX3JhADoHd2RhbV9yZAA7B3dkYW1fcmMAHgd3ZGFtX3JiABcHd2RhbV9yYQA6B3dkY21fcmMAHgd3ZGNtX3JiABcHd2RjbV9yYQA6B3dkZHZfcmMAHgd3ZGR2X3JiABcHd2Rkdl9yYQA6B3dkbWRfcmQAOwd3ZG1kX3JjAB4Hd2RtZF9yYgAXB3dkbWRfcmEAOgd3ZG1sX3JjAB4Hd2RtbF9yYgAXB3dkbWxfcmEAOgd3ZG1tX3JkADsHd2RtbV9yYwAeB3dkbW1fcmIAFwd3ZG1tX3JhADoHd2RvcF9yYwAeB3dkb3BfcmIAFwd3ZG9wX3JhADoHd3FhbV9yZAA7B3dxYW1fcmMAHgd3cWFtX3JiABcHd3FhbV9yYQA6B3dxY21fcmMAHgd3cWNtX3JiABcHd3FjbV9yYQA6B3dxZHZfcmMAHgd3cWR2X3JiABcHd3Fkdl9yYQA6B3dxbWRfcmQAOwd3cW1kX3JjAB4Hd3FtZF9yYgAXB3dxbWRfcmEAOgd3cW1sX3JjAB4Hd3FtbF9yYgAXB3dxbWxfcmEAOgd3cW1tX3JkADsHd3FtbV9yYwAeB3dxbW1fcmIAFwd3cW1tX3JhADoHd3FvcF9yYwAeB3dxb3BfcmIAFwd3cW9wX3JhADoKeG9yaV9pbW0xMgAKB3hvcmlfcmIAFwd4b3JpX3JhADoTam5lYl9uZXdfdHlwZXNjcmlwdAA5EF9fd2JnX3JlZ2lkX2ZyZWUALhBfX3diZ19pbW0yNF9mcmVlADAfX193YmluZGdlbl9hZGRfdG9fc3RhY2tfcG9pbnRlcgDcARNfX3diaW5kZ2VuX2V4cG9ydF8wANgBCRMBAEEBCwcC3gHfAeAB6AHkAdEBCvOQAYgC7SICCH8BfgJAAkACQAJAAkACQAJAAkAgAEH1AU8EQCAAQc3/e08NBSAAQQtqIgBBeHEhBUHsj8AAKAIAIghFDQRBACAFayEEAn9BACAFQYACSQ0AGkEfIAVB////B0sNABogBUEGIABBCHZnIgBrdkEBcSAAQQF0a0E+agsiB0ECdEHQjMAAaigCACICRQRAQQAhAAwCC0EAIQAgBUEZIAdBAXZrQQAgB0EfRxt0IQMDQAJAIAIoAgRBeHEiBiAFSQ0AIAYgBWsiBiAETw0AIAIhASAGIgQNAEEAIQQgASEADAQLIAIoAhQiBiAAIAYgAiADQR12QQRxakEQaigCACICRxsgACAGGyEAIANBAXQhAyACDQALDAELQeiPwAAoAgAiAkEQIABBC2pB+ANxIABBC0kbIgVBA3YiAHYiAUEDcQRAAkAgAUF/c0EBcSAAaiIBQQN0IgBB4I3AAGoiAyAAQeiNwABqKAIAIgAoAggiBEcEQCAEIAM2AgwgAyAENgIIDAELQeiPwAAgAkF+IAF3cTYCAAsgACABQQN0IgFBA3I2AgQgACABaiIBIAEoAgRBAXI2AgQMCAsgBUHwj8AAKAIATQ0DAkACQCABRQRAQeyPwAAoAgAiAEUNBiAAaEECdEHQjMAAaigCACIBKAIEQXhxIAVrIQQgASECA0ACQCABKAIQIgANACABKAIUIgANACACKAIYIQcCQAJAIAIgAigCDCIARgRAIAJBFEEQIAIoAhQiABtqKAIAIgENAUEAIQAMAgsgAigCCCIBIAA2AgwgACABNgIIDAELIAJBFGogAkEQaiAAGyEDA0AgAyEGIAEiAEEUaiAAQRBqIAAoAhQiARshAyAAQRRBECABG2ooAgAiAQ0ACyAGQQA2AgALIAdFDQQgAiACKAIcQQJ0QdCMwABqIgEoAgBHBEAgB0EQQRQgBygCECACRhtqIAA2AgAgAEUNBQwECyABIAA2AgAgAA0DQeyPwABB7I/AACgCAEF+IAIoAhx3cTYCAAwECyAAKAIEQXhxIAVrIgEgBCABIARJIgEbIQQgACACIAEbIQIgACEBDAALAAsCQEECIAB0IgNBACADa3IgASAAdHFoIgBBA3QiAUHgjcAAaiIDIAFB6I3AAGooAgAiASgCCCIERwRAIAQgAzYCDCADIAQ2AggMAQtB6I/AACACQX4gAHdxNgIACyABIAVBA3I2AgQgASAFaiIGIABBA3QiACAFayIEQQFyNgIEIAAgAWogBDYCAEHwj8AAKAIAIgIEQCACQXhxQeCNwABqIQBB+I/AACgCACEDAn9B6I/AACgCACIFQQEgAkEDdnQiAnFFBEBB6I/AACACIAVyNgIAIAAMAQsgACgCCAshAiAAIAM2AgggAiADNgIMIAMgADYCDCADIAI2AggLQfiPwAAgBjYCAEHwj8AAIAQ2AgAgAUEIag8LIAAgBzYCGCACKAIQIgEEQCAAIAE2AhAgASAANgIYCyACKAIUIgFFDQAgACABNgIUIAEgADYCGAsCQAJAIARBEE8EQCACIAVBA3I2AgQgAiAFaiIFIARBAXI2AgQgBCAFaiAENgIAQfCPwAAoAgAiA0UNASADQXhxQeCNwABqIQBB+I/AACgCACEBAn9B6I/AACgCACIGQQEgA0EDdnQiA3FFBEBB6I/AACADIAZyNgIAIAAMAQsgACgCCAshAyAAIAE2AgggAyABNgIMIAEgADYCDCABIAM2AggMAQsgAiAEIAVqIgBBA3I2AgQgACACaiIAIAAoAgRBAXI2AgQMAQtB+I/AACAFNgIAQfCPwAAgBDYCAAsgAkEIag8LIAAgAXJFBEBBACEBQQIgB3QiAEEAIABrciAIcSIARQ0DIABoQQJ0QdCMwABqKAIAIQALIABFDQELA0AgACABIAAoAgRBeHEiAyAFayIGIARJIgcbIQggACgCECICRQRAIAAoAhQhAgsgASAIIAMgBUkiABshASAEIAYgBCAHGyAAGyEEIAIiAA0ACwsgAUUNACAFQfCPwAAoAgAiAE0gBCAAIAVrT3ENACABKAIYIQcCQAJAIAEgASgCDCIARgRAIAFBFEEQIAEoAhQiABtqKAIAIgINAUEAIQAMAgsgASgCCCICIAA2AgwgACACNgIIDAELIAFBFGogAUEQaiAAGyEDA0AgAyEGIAIiAEEUaiAAQRBqIAAoAhQiAhshAyAAQRRBECACG2ooAgAiAg0ACyAGQQA2AgALIAdFDQMgASABKAIcQQJ0QdCMwABqIgIoAgBHBEAgB0EQQRQgBygCECABRhtqIAA2AgAgAEUNBAwDCyACIAA2AgAgAA0CQeyPwABB7I/AACgCAEF+IAEoAhx3cTYCAAwDCwJAAkACQAJAAkAgBUHwj8AAKAIAIgFLBEAgBUH0j8AAKAIAIgBPBEBBACEEIAVBr4AEaiIAQRB2QAAiAUF/RiIDDQcgAUEQdCICRQ0HQYCQwABBACAAQYCAfHEgAxsiBEGAkMAAKAIAaiIANgIAQYSQwABBhJDAACgCACIBIAAgACABSRs2AgACQAJAQfyPwAAoAgAiAwRAQdCNwAAhAANAIAAoAgAiASAAKAIEIgZqIAJGDQIgACgCCCIADQALDAILQYyQwAAoAgAiAEEAIAAgAk0bRQRAQYyQwAAgAjYCAAtBkJDAAEH/HzYCAEHUjcAAIAQ2AgBB0I3AACACNgIAQeyNwABB4I3AADYCAEH0jcAAQeiNwAA2AgBB6I3AAEHgjcAANgIAQfyNwABB8I3AADYCAEHwjcAAQeiNwAA2AgBBhI7AAEH4jcAANgIAQfiNwABB8I3AADYCAEGMjsAAQYCOwAA2AgBBgI7AAEH4jcAANgIAQZSOwABBiI7AADYCAEGIjsAAQYCOwAA2AgBBnI7AAEGQjsAANgIAQZCOwABBiI7AADYCAEGkjsAAQZiOwAA2AgBBmI7AAEGQjsAANgIAQdyNwABBADYCAEGsjsAAQaCOwAA2AgBBoI7AAEGYjsAANgIAQaiOwABBoI7AADYCAEG0jsAAQaiOwAA2AgBBsI7AAEGojsAANgIAQbyOwABBsI7AADYCAEG4jsAAQbCOwAA2AgBBxI7AAEG4jsAANgIAQcCOwABBuI7AADYCAEHMjsAAQcCOwAA2AgBByI7AAEHAjsAANgIAQdSOwABByI7AADYCAEHQjsAAQciOwAA2AgBB3I7AAEHQjsAANgIAQdiOwABB0I7AADYCAEHkjsAAQdiOwAA2AgBB4I7AAEHYjsAANgIAQeyOwABB4I7AADYCAEH0jsAAQeiOwAA2AgBB6I7AAEHgjsAANgIAQfyOwABB8I7AADYCAEHwjsAAQeiOwAA2AgBBhI/AAEH4jsAANgIAQfiOwABB8I7AADYCAEGMj8AAQYCPwAA2AgBBgI/AAEH4jsAANgIAQZSPwABBiI/AADYCAEGIj8AAQYCPwAA2AgBBnI/AAEGQj8AANgIAQZCPwABBiI/AADYCAEGkj8AAQZiPwAA2AgBBmI/AAEGQj8AANgIAQayPwABBoI/AADYCAEGgj8AAQZiPwAA2AgBBtI/AAEGoj8AANgIAQaiPwABBoI/AADYCAEG8j8AAQbCPwAA2AgBBsI/AAEGoj8AANgIAQcSPwABBuI/AADYCAEG4j8AAQbCPwAA2AgBBzI/AAEHAj8AANgIAQcCPwABBuI/AADYCAEHUj8AAQciPwAA2AgBByI/AAEHAj8AANgIAQdyPwABB0I/AADYCAEHQj8AAQciPwAA2AgBB5I/AAEHYj8AANgIAQdiPwABB0I/AADYCAEH8j8AAIAI2AgBB4I/AAEHYj8AANgIAQfSPwAAgBEEoayIANgIAIAIgAEEBcjYCBCAAIAJqQSg2AgRBiJDAAEGAgIABNgIADAgLIAIgA00gASADS3INACAAKAIMRQ0DC0GMkMAAQYyQwAAoAgAiACACIAAgAkkbNgIAIAIgBGohAUHQjcAAIQACQAJAA0AgASAAKAIARwRAIAAoAggiAA0BDAILCyAAKAIMRQ0BC0HQjcAAIQADQAJAIAMgACgCACIBTwRAIAMgASAAKAIEaiIGSQ0BCyAAKAIIIQAMAQsLQfyPwAAgAjYCAEH0j8AAIARBKGsiADYCACACIABBAXI2AgQgACACakEoNgIEQYiQwABBgICAATYCACADIAZBIGtBeHFBCGsiACAAIANBEGpJGyIBQRs2AgRB0I3AACkCACEJIAFBEGpB2I3AACkCADcCACABIAk3AghB1I3AACAENgIAQdCNwAAgAjYCAEHYjcAAIAFBCGo2AgBB3I3AAEEANgIAIAFBHGohAANAIABBBzYCACAAQQRqIgAgBkkNAAsgASADRg0HIAEgASgCBEF+cTYCBCADIAEgA2siAEEBcjYCBCABIAA2AgAgAEGAAk8EQCADIAAQBwwICyAAQXhxQeCNwABqIQECf0Hoj8AAKAIAIgJBASAAQQN2dCIAcUUEQEHoj8AAIAAgAnI2AgAgAQwBCyABKAIICyEAIAEgAzYCCCAAIAM2AgwgAyABNgIMIAMgADYCCAwHCyAAIAI2AgAgACAAKAIEIARqNgIEIAIgBUEDcjYCBCABIAIgBWoiA2shBSABQfyPwAAoAgBGDQMgAUH4j8AAKAIARg0EIAEoAgQiBEEDcUEBRgRAIAEgBEF4cSIAEAYgACAFaiEFIAAgAWoiASgCBCEECyABIARBfnE2AgQgAyAFQQFyNgIEIAMgBWogBTYCACAFQYACTwRAIAMgBRAHDAYLIAVBeHFB4I3AAGohAAJ/QeiPwAAoAgAiAUEBIAVBA3Z0IgRxRQRAQeiPwAAgASAEcjYCACAADAELIAAoAggLIQUgACADNgIIIAUgAzYCDCADIAA2AgwgAyAFNgIIDAULQfSPwAAgACAFayIBNgIAQfyPwABB/I/AACgCACIAIAVqIgI2AgAgAiABQQFyNgIEIAAgBUEDcjYCBCAAQQhqIQQMBgtB+I/AACgCACEAAkAgASAFayICQQ9NBEBB+I/AAEEANgIAQfCPwABBADYCACAAIAFBA3I2AgQgACABaiIBIAEoAgRBAXI2AgQMAQtB8I/AACACNgIAQfiPwAAgACAFaiIDNgIAIAMgAkEBcjYCBCAAIAFqIAI2AgAgACAFQQNyNgIECwwICyAAIAQgBmo2AgRB/I/AAEH8j8AAKAIAIgBBD2pBeHEiAUEIayICNgIAQfSPwABB9I/AACgCACAEaiIDIAAgAWtqQQhqIgE2AgAgAiABQQFyNgIEIAAgA2pBKDYCBEGIkMAAQYCAgAE2AgAMAwtB/I/AACADNgIAQfSPwABB9I/AACgCACAFaiIANgIAIAMgAEEBcjYCBAwBC0H4j8AAIAM2AgBB8I/AAEHwj8AAKAIAIAVqIgA2AgAgAyAAQQFyNgIEIAAgA2ogADYCAAsgAkEIag8LQQAhBEH0j8AAKAIAIgAgBU0NAEH0j8AAIAAgBWsiATYCAEH8j8AAQfyPwAAoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQMAwsgBA8LIAAgBzYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABKAIUIgJFDQAgACACNgIUIAIgADYCGAsCQCAEQRBPBEAgASAFQQNyNgIEIAEgBWoiAiAEQQFyNgIEIAIgBGogBDYCACAEQYACTwRAIAIgBBAHDAILIARBeHFB4I3AAGohAAJ/QeiPwAAoAgAiA0EBIARBA3Z0IgRxRQRAQeiPwAAgAyAEcjYCACAADAELIAAoAggLIQQgACACNgIIIAQgAjYCDCACIAA2AgwgAiAENgIIDAELIAEgBCAFaiIAQQNyNgIEIAAgAWoiACAAKAIEQQFyNgIECyABQQhqDwsgAEEIagueCgELfyAAKAIEIQggACgCACEGAkACQAJAIAEoAgAiAyABKAIIIgByBEACQCAARQ0AIAYgCGohBAJAIAEoAgwiCUUEQCAGIQIMAQsgBiECA0AgAiIAIARGDQICfyAAQQFqIAAsAAAiAkEATg0AGiAAQQJqIAJBYEkNABogAEEDaiACQXBJDQAaIABBBGoLIgIgAGsgBWohBSAJIAdBAWoiB0cNAAsLIAIgBEYNACACLAAAGgJAAkAgBUUNACAFIAhJBEBBACEAIAUgBmosAABBv39KDQEMAgtBACEAIAUgCEcNAQsgBiEACyAFIAggABshCCAAIAYgABshBgsgA0UNAyABKAIEIQsgCEEQTwRAIAggBiAGQQNqQXxxIgVrIgdqIgpBA3EhCUEAIQNBACEAIAUgBkcEQCAHQXxNBEBBACEEA0AgACAEIAZqIgIsAABBv39KaiACQQFqLAAAQb9/SmogAkECaiwAAEG/f0pqIAJBA2osAABBv39KaiEAIARBBGoiBA0ACwsgBiECA0AgACACLAAAQb9/SmohACACQQFqIQIgB0EBaiIHDQALCwJAIAlFDQAgBSAKQXxxaiICLAAAQb9/SiEDIAlBAUYNACADIAIsAAFBv39KaiEDIAlBAkYNACADIAIsAAJBv39KaiEDCyAKQQJ2IQQgACADaiEDA0AgBSEHIARFDQRBwAEgBCAEQcABTxsiCUEDcSEKIAlBAnQhBUEAIQIgBEEETwRAIAcgBUHwB3FqIQwgByEAA0AgAiAAKAIAIgJBf3NBB3YgAkEGdnJBgYKECHFqIAAoAgQiAkF/c0EHdiACQQZ2ckGBgoQIcWogACgCCCICQX9zQQd2IAJBBnZyQYGChAhxaiAAKAIMIgJBf3NBB3YgAkEGdnJBgYKECHFqIQIgAEEQaiIAIAxHDQALCyAEIAlrIQQgBSAHaiEFIAJBCHZB/4H8B3EgAkH/gfwHcWpBgYAEbEEQdiADaiEDIApFDQALIAcgCUH8AXFBAnRqIgIoAgAiAEF/c0EHdiAAQQZ2ckGBgoQIcSEAIApBAUYNAiAAIAIoAgQiAEF/c0EHdiAAQQZ2ckGBgoQIcWohACAKQQJGDQIgACACKAIIIgBBf3NBB3YgAEEGdnJBgYKECHFqIQAMAgsgCEUEQEEAIQMMAwsgCEEDcSECAkAgCEEESQRAQQAhA0EAIQcMAQtBACEDIAYhACAIQQxxIgchBQNAIAMgACwAAEG/f0pqIABBAWosAABBv39KaiAAQQJqLAAAQb9/SmogAEEDaiwAAEG/f0pqIQMgAEEEaiEAIAVBBGsiBQ0ACwsgAkUNAiAGIAdqIQADQCADIAAsAABBv39KaiEDIABBAWohACACQQFrIgINAAsMAgsMAgsgAEEIdkH/gRxxIABB/4H8B3FqQYGABGxBEHYgA2ohAwsCQCADIAtJBEAgCyADayEEQQAhAAJAAkACQCABLQAgQQFrDgIAAQILIAQhAEEAIQQMAQsgBEEBdiEAIARBAWpBAXYhBAsgAEEBaiEAIAEoAhAhByABKAIYIQIgASgCFCEBA0AgAEEBayIARQ0CIAEgByACKAIQEQMARQ0AC0EBDwsMAQtBASEAIAEgBiAIIAIoAgwRAAAEf0EBBUEAIQACfwNAIAQgACAERg0BGiAAQQFqIQAgASAHIAIoAhARAwBFDQALIABBAWsLIARJCw8LIAEoAhQgBiAIIAEoAhgoAgwRAAALnQYCDX8BfiMAQTBrIgckAEEnIQICQCAAQpDOAFQEQCAAIQ8MAQsDQCAHQQlqIAJqIgZBBGsgAEKQzgCAIg9C8LEDfiAAfKciBEH//wNxQeQAbiIDQQF0QYSHwABqLwAAOwAAIAZBAmsgA0Gcf2wgBGpB//8DcUEBdEGEh8AAai8AADsAACACQQRrIQIgAEL/wdcvViAPIQANAAsLIA+nIgRB4wBLBEAgAkECayICIAdBCWpqIA+nIgNB//8DcUHkAG4iBEGcf2wgA2pB//8DcUEBdEGEh8AAai8AADsAAAsCQCAEQQpPBEAgAkECayICIAdBCWpqIARBAXRBhIfAAGovAAA7AAAMAQsgAkEBayICIAdBCWpqIARBMHI6AAALQScgAmshCEEBIQVBK0GAgMQAIAEoAhwiBEEBcSIMGyEJIARBBHFBAnYhCiAHQQlqIAJqIQsCQCABKAIARQRAIAEoAhQiAyABKAIYIgEgCSAKEFwNASADIAsgCCABKAIMEQAAIQUMAQsgASgCBCINIAggDGoiA00EQCABKAIUIgMgASgCGCIBIAkgChBcDQEgAyALIAggASgCDBEAACEFDAELIARBCHEEQCABKAIQIQQgAUEwNgIQIAEtACAhAyABQQE6ACAgASgCFCIOIAEoAhgiBiAJIAoQXA0BIAIgDWogDGtBJmshAgNAIAJBAWsiAgRAIA5BMCAGKAIQEQMARQ0BDAMLCyAOIAsgCCAGKAIMEQAADQEgASADOgAgIAEgBDYCEEEAIQUMAQsgDSADayEDAkACQAJAIAEtACAiAkEBaw4DAAEAAgsgAyECQQAhAwwBCyADQQF2IQIgA0EBakEBdiEDCyACQQFqIQIgASgCECEEIAEoAhghBiABKAIUIQECQANAIAJBAWsiAkUNASABIAQgBigCEBEDAEUNAAsMAQsgASAGIAkgChBcDQAgASALIAggBigCDBEAAA0AQQAhAgNAIAIgA0YEQEEAIQUMAgsgAkEBaiECIAEgBCAGKAIQEQMARQ0ACyACQQFrIANJIQULIAdBMGokACAFC6gGAQF/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAEGABGsOJgECAwQFBgcIOwkKCwwNOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Dg87OzsQAAtBASEBAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQQFrDg5SAQIDBAUGUQcICQoLDAALAkAgAEHABGsODCcoKSorLC0uLzAxMgALAkAgAEGBAmsOCg0ODxAREhMUFRYACwJAIABBgAZrDgkzNDU2N1FRODkACwJAIABBgAprDgY8PT4/QEEACwJAIABBgAxrDgZCQ0RFRkcACwJAIABBgBJrDgZKS0xNTk8ACwJAIABBgAhrDgI6OwALIABBgA5rDgJHSE8LQQIPC0EDDwtBBA8LQQUPC0EGDwtBBw8LQQkPC0EKDwtBCw8LQQwPC0ENDwtBDg8LQYECDwtBggIPC0GDAg8LQYQCDwtBhQIPC0GGAg8LQYcCDwtBiAIPC0GJAg8LQYoCDwtBgAQPC0GBBA8LQYIEDwtBgwQPC0GEBA8LQYUEDwtBhgQPC0GHBA8LQYkEDwtBigQPC0GLBA8LQYwEDwtBjQQPC0GgBA8LQaEEDwtBpQQPC0HABA8LQcEEDwtBwgQPC0HDBA8LQcQEDwtBxQQPC0HGBA8LQccEDwtByAQPC0HJBA8LQcoEDwtBywQPC0GABg8LQYEGDwtBggYPC0GDBg8LQYQGDwtBhwYPC0GIBg8LQYAIDwtBgQgPC0GACg8LQYEKDwtBggoPC0GDCg8LQYQKDwtBhQoPC0GADA8LQYEMDwtBggwPC0GDDA8LQYQMDwtBhQwPC0GADg8LQYEODwtBgBIPC0GBEg8LQYISDwtBgxIPC0GEEg8LQYUSIQEMAgtBgBAhASAAQYAQRg0BC0HggsAAQRkQ4QEACyABC/gDAQJ/IAAgAWohAgJAAkAgACgCBCIDQQFxDQAgA0ECcUUNASAAKAIAIgMgAWohASAAIANrIgBB+I/AACgCAEYEQCACKAIEQQNxQQNHDQFB8I/AACABNgIAIAIgAigCBEF+cTYCBCAAIAFBAXI2AgQgAiABNgIADAILIAAgAxAGCwJAAkACQCACKAIEIgNBAnFFBEAgAkH8j8AAKAIARg0CIAJB+I/AACgCAEYNAyACIANBeHEiAhAGIAAgASACaiIBQQFyNgIEIAAgAWogATYCACAAQfiPwAAoAgBHDQFB8I/AACABNgIADwsgAiADQX5xNgIEIAAgAUEBcjYCBCAAIAFqIAE2AgALIAFBgAJPBEAgACABEAcPCyABQXhxQeCNwABqIQICf0Hoj8AAKAIAIgNBASABQQN2dCIBcUUEQEHoj8AAIAEgA3I2AgAgAgwBCyACKAIICyEBIAIgADYCCCABIAA2AgwgACACNgIMIAAgATYCCA8LQfyPwAAgADYCAEH0j8AAQfSPwAAoAgAgAWoiATYCACAAIAFBAXI2AgQgAEH4j8AAKAIARw0BQfCPwABBADYCAEH4j8AAQQA2AgAPC0H4j8AAIAA2AgBB8I/AAEHwj8AAKAIAIAFqIgE2AgAgACABQQFyNgIEIAAgAWogATYCAAsL8QIBBH8gACgCDCECAkACQCABQYACTwRAIAAoAhghAwJAAkAgACACRgRAIABBFEEQIAAoAhQiAhtqKAIAIgENAUEAIQIMAgsgACgCCCIBIAI2AgwgAiABNgIIDAELIABBFGogAEEQaiACGyEEA0AgBCEFIAEiAkEUaiACQRBqIAIoAhQiARshBCACQRRBECABG2ooAgAiAQ0ACyAFQQA2AgALIANFDQIgACAAKAIcQQJ0QdCMwABqIgEoAgBHBEAgA0EQQRQgAygCECAARhtqIAI2AgAgAkUNAwwCCyABIAI2AgAgAg0BQeyPwABB7I/AACgCAEF+IAAoAhx3cTYCAAwCCyAAKAIIIgAgAkcEQCAAIAI2AgwgAiAANgIIDwtB6I/AAEHoj8AAKAIAQX4gAUEDdndxNgIADwsgAiADNgIYIAAoAhAiAQRAIAIgATYCECABIAI2AhgLIAAoAhQiAEUNACACIAA2AhQgACACNgIYCwu6AgEEf0EfIQIgAEIANwIQIAFB////B00EQCABQQYgAUEIdmciA2t2QQFxIANBAXRrQT5qIQILIAAgAjYCHCACQQJ0QdCMwABqIQRBASACdCIDQeyPwAAoAgBxRQRAIAQgADYCACAAIAQ2AhggACAANgIMIAAgADYCCEHsj8AAQeyPwAAoAgAgA3I2AgAPCwJAAkAgASAEKAIAIgMoAgRBeHFGBEAgAyECDAELIAFBGSACQQF2a0EAIAJBH0cbdCEFA0AgAyAFQR12QQRxakEQaiIEKAIAIgJFDQIgBUEBdCEFIAIhAyACKAIEQXhxIAFHDQALCyACKAIIIgEgADYCDCACIAA2AgggAEEANgIYIAAgAjYCDCAAIAE2AggPCyAEIAA2AgAgACADNgIYIAAgADYCDCAAIAA2AggLlAEBBH8gARDXASABQQhrIgMgAygCAEEBaiICNgIAAkACQCACBEAgASgCACICQX9GDQEgASACQQFqNgIAIAEoAgQoAAAiBMBBAnRBuIPAAGooAgAhBUEBQQQQ2QEiAg0CCwALEN0BAAsgAiAFIARBgH5xcjYAACABIAEoAgBBAWs2AgAgAxBeIABBBDYCBCAAIAI2AgALiwEBAn8gABDXASAAQQhrIgIoAgAhAwJAAkAgAUUEQCADQQFGBEAgAkEANgIAIAJBf0YNAyAAQQRrIgAgACgCAEEBayIANgIAIABFDQIMAwtB+YLAAEE/EOEBAAsgAiADQQFrIgE2AgAgAQ0BIABBBGsiACAAKAIAQQFrIgA2AgAgAA0BCyACQRAQIwsLhAEBA38jAEEQayIBJAAgAUEEaiAAECAgASgCBCIAQQJqLQAAIQIgAC8AACEDIAEoAgggASgCDBDSAUEEQRAQ2QEiAEUEQAALIABBADYCCCAAQoGAgIAQNwIAIAAgAyACQRB0chDmASICQQh2QYAecSACQRh2cjsBDCABQRBqJAAgAEEIagt1AgF/AX4gARDXASABQQhrIgIoAgBBAUYEQCABNQIEIQMgAkEANgIAAkAgAkF/Rg0AIAFBBGsiASABKAIAQQFrIgE2AgAgAQ0AIAJBEBAjCyAAIANCAYM8AAAgACADp0EIdkEBcToAAQ8LQfmCwABBPxDhAQALbAECfyAAENcBIABBCGsiASABKAIAQQFqIgI2AgACQCACBEAgACgCAEF/Rg0BIAAvAAQgAEEGai0AAEEQdHIQ5gEhACABEGMgAEEIdkGA/gNxIABBGHZyIABBgP4DcUEIdHIQZg8LAAsQ3QEAC28BAn8gARDXASABQQhrIgIoAgBBAUYEQCABKAIEIQMgAkEANgIAAkAgAkF/Rg0AIAFBBGsiASABKAIAQQFrIgE2AgAgAQ0AIAJBEBAjCyAAIANBCHY6AAEgACADQQFxOgAADwtB+YLAAEE/EOEBAAtrAQF/IAAQ1wEgAEEIayECAkAgAUUEQCACKAIAQQFHDQEgACgCBCACQQA2AgACQCACQX9GDQAgAEEEayIAIAAoAgBBAWsiADYCACAADQAgAkEQECMLEOUBDwsgAhBeDwtB+YLAAEE/EOEBAAthAQF/IwBBEGsiASQAIAFBBGogABAgIAEoAgQiAC8AACAAQQJqLQAAQRB0chDmASEAIAEoAgggASgCDBDSASAAQQh2QYD+A3EgAEEYdnIgAEGABnFBCHRyEGYgAUEQaiQAC2cBAX8gABAfIQIgARAiIQFBBEEQENkBIgBFBEAACyAAQoGAgIAQNwIAIAAgAUEQdEGAgPwHcSACQf8BcUESdCABciIBQYD+A3FBCHQgAUEIdkGA/gNxckEIdnKtQiCGNwIIIABBCGoLewEBfyMAQRBrIgMkAEHMjMAAQcyMwAAoAgAiBEEBajYCAAJAIARBAEgNAAJAQZiQwAAtAABFBEBBlJDAAEGUkMAAKAIAQQFqNgIAQciMwAAoAgBBAE4NAQwCCyADQQhqIAAgAREEAAALQZiQwABBADoAACACRQ0AAAsAC2oBAX8jAEEwayIBJAAgASAAOgAPIABB/wFxQcAATwRAIAFBAjYCFCABQfSAwAA2AhAgAUIBNwIcIAFBAjYCLCABIAFBKGo2AhggASABQQ9qNgIoIAFBEGpBhIHAABA/AAsgAUEwaiQAIAALawEBfyMAQTBrIgEkACABIAA7AQ4gAEH//wNxQYAgTwRAIAFBAjYCFCABQbiBwAA2AhAgAUIBNwIcIAFBAzYCLCABIAFBKGo2AhggASABQQ5qNgIoIAFBEGpByIHAABA/AAsgAUEwaiQAIAALYwECfyMAQRBrIgIkAAJAIAFFBEAgAkEIaiAAEA0MAQsgABDXASAAQQhrIgEgASgCAEEBayIDNgIAIAMNACAAQQRrIgAgACgCAEEBayIANgIAIAANACABQRAQIwsgAkEQaiQAC1sBAn8CQAJAIAAQHyICQRhxDQAgAkEHcSIAQQdGDQBBBEEQENkBIgFFDQEgAUKBgICAEDcCACABIAJBBXZBAXGtQiCGIACtQiiGhDcCCCABQQhqIQELIAEPCwALYwECfyMAQRBrIgIkAAJAIAFFBEAgAkEIaiAAEAsMAQsgABDXASAAQQhrIgEgASgCAEEBayIDNgIAIAMNACAAQQRrIgAgACgCAEEBayIANgIAIAANACABQRAQIwsgAkEQaiQAC14BAX8jAEEQayIBJAAgAUEEaiAAECAgASgCBCIALwAAIABBAmotAABBEHRyEOYBIQAgASgCCCABKAIMENIBIABBCHZBgOADcSAAQYAGcUEIdHJBDHYQZyABQRBqJAALFQAgAEGMgsAAQfyBwABBgIAQEIECCxYAIABB0ILAAEHAgsAAQYCAgAgQgQILXgEBfyAAEB8hAiABEB8hAUEEQRAQ2QEiAEUEQAALIABCgYCAgBA3AgAgACABQf8BcUEMdCACQRJ0ciIBQYDgA3FBCHQgAUEIdkGA/gNxckEIdq1CIIY3AgggAEEIagtcAQJ/IAAQ1wEgAEEIayIBKAIAQQFGBEAgAC0ABCABQQA2AgACQCABQX9GDQAgAEEEayIAIAAoAgBBAWsiADYCACAADQAgAUEQECMLQQFxDwtB+YLAAEE/EOEBAAtgAQF/IAAQ1wEgAEEIayECAkAgAUUEQCACKAIAQQFGBEAgAkEANgIAIAJBf0YNAiAAQQRrIgAgACgCAEEBayIANgIAIAANAiACQRQQIw8LQfmCwABBPxDhAQALIAIQZAsLYAEBfyAAENcBIABBCGshAgJAIAFFBEAgAigCAEEBRgRAIAJBADYCACACQX9GDQIgAEEEayIAIAAoAgBBAWsiADYCACAADQIgAkEQECMPC0H5gsAAQT8Q4QEACyACEGMLC1UBAX8jAEEQayIBJAAgAUEEaiAAECAgASgCBCIALwAAIABBAmotAABBEHRyEOYBIQAgASgCCCABKAIMENIBIABBDnZBPHEgAEEednIQZyABQRBqJAALWQECfyAAENcBIABBCGsiASgCAEEBRgRAIAAtAAQgAUEANgIAAkAgAUF/Rg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCw8LQfmCwABBPxDhAQALWQECfyABENcBIAFBCGsiAyADKAIAQQFqIgI2AgACQCACBEAgASgCACICQX9GDQEgACADNgIIIAAgATYCBCAAIAFBBGo2AgAgASACQQFqNgIADwsACxDdAQALWQECfyAAENcBIABBCGsiASgCAEEBRgRAIAAvAQQgAUEANgIAAkAgAUF/Rg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCw8LQfmCwABBPxDhAQALWQECfyAAENcBIABBCGsiASgCAEEBRgRAIAAoAgQgAUEANgIAAkAgAUF/Rg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCw8LQfmCwABBPxDhAQALzQYBBH8CQCAAQQRrKAIAIgQiAkF4cSIDQQRBCCACQQNxIgIbIAFqTwRAIAJBACADIAFBJ2pLGw0BIABBCGsiASAEIgNBeHEiAGohAgJAAkAgA0EBcQ0AIANBAnFFDQEgASgCACIDIABqIQAgASADayIBQfiPwAAoAgBGBEAgAigCBEEDcUEDRw0BQfCPwAAgADYCACACIAIoAgRBfnE2AgQgASAAQQFyNgIEIAIgADYCAAwCCyABIAMQBgsCQAJAAkACQAJAIAIoAgQiA0ECcUUEQCACQfyPwAAoAgBGDQIgAkH4j8AAKAIARg0DIAIgA0F4cSICEAYgASAAIAJqIgBBAXI2AgQgACABaiAANgIAIAFB+I/AACgCAEcNAUHwj8AAIAA2AgAMBgsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQIgASAAEAdBACEBQZCQwABBkJDAACgCAEEBayIANgIAIAANBEHYjcAAKAIAIgAEQANAIAFBAWohASAAKAIIIgANAAsLQZCQwABB/x8gASABQf8fTRs2AgAMBAtB/I/AACABNgIAQfSPwABB9I/AACgCACAAaiIANgIAIAEgAEEBcjYCBEH4j8AAKAIAIAFGBEBB8I/AAEEANgIAQfiPwABBADYCAAsgAEGIkMAAKAIAIgNNDQNB/I/AACgCACICRQ0DQQAhAEH0j8AAKAIAIgRBKUkNAkHQjcAAIQEDQCACIAEoAgAiBU8EQCACIAUgASgCBGpJDQQLIAEoAgghAQwACwALQfiPwAAgATYCAEHwj8AAQfCPwAAoAgAgAGoiADYCACABIABBAXI2AgQgACABaiAANgIADAILIABBeHFB4I3AAGohAgJ/QeiPwAAoAgAiA0EBIABBA3Z0IgBxRQRAQeiPwAAgACADcjYCACACDAELIAIoAggLIQAgAiABNgIIIAAgATYCDCABIAI2AgwgASAANgIIDAELQdiNwAAoAgAiAQRAA0AgAEEBaiEAIAEoAggiAQ0ACwtBkJDAAEH/HyAAIABB/x9NGzYCACADIARPDQBBiJDAAEF/NgIACw8LQfWIwABBpInAABBSAAtBtInAAEHkicAAEFIAC0wAIANB/wFxIAFB/wFxQQx0IABB/wFxQRJ0ciIAIAJB/wFxQQZ0cnIiAUEQdEGAgPwHcSAAQQh2QYD+A3EgAUGA/gNxQQh0ckEIdnILTwECfyAAENcBIABBCGsiASABKAIAQQFqIgI2AgACQCACBEAgACgCAEF/Rg0BIAAvAAQgAEEGai0AAEEQdHIQ2gEgARBjEGcPCwALEN0BAAtVAQF/IAAQIiEAQQRBEBDZASIBRQRAAAsgAUKBgICAEDcCACABIABBEHRBgID8B3EgAEEIdkGA/gNxIABBgP4DcUEIdHJBCHZyrUIghjcCCCABQQhqC04BAX8gAUUEQCAAEBsaDwsgABDXASAAQQhrIgEgASgCAEEBayICNgIAAkAgAg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCwsQACAAIAEgAiADQd4AEIICCxAAIAAgASACIANB3wAQggILEAAgACABIAIgA0HgABCCAgsQACAAIAEgAiADQeEAEIICCxAAIAAgASACIANB4gAQgwILEAAgACABIAIgA0HjABCDAgtOAQF/IAFFBEAgABAfGg8LIAAQ1wEgAEEIayIBIAEoAgBBAWsiAjYCAAJAIAINACAAQQRrIgAgACgCAEEBayIANgIAIAANACABQRAQIwsLTgEBfyABRQRAIAAQIRoPCyAAENcBIABBCGsiASABKAIAQQFrIgI2AgACQCACDQAgAEEEayIAIAAoAgBBAWsiADYCACAADQAgAUEQECMLC04BAX8gAUUEQCAAECIaDwsgABDXASAAQQhrIgEgASgCAEEBayICNgIAAkAgAg0AIABBBGsiACAAKAIAQQFrIgA2AgAgAA0AIAFBEBAjCwsPACAAIAFBgICAyAEQhAILDAAgACABQcsAEIUCCwwAIAAgAUHMABCFAgsMACAAIAFBzQAQhQILDAAgACABQc4AEIUCCwwAIAAgAUHPABCFAgsMACAAIAFB0AAQhQILDwAgACABQYCAgOgGEIQCC1MBAX8gABAfIQQgARAfIQEgAhAfIQIgAxAfIQNBBEEQENkBIgBFBEAACyAAQoGAgIAQNwIAIAAgBCABIAIgAxAkrUL///8Hg0IghjcCCCAAQQhqC0UBAX8jAEEQayIBJAAgAUEEaiAAECAgASgCBCIALwAAIABBAmotAABBEHRyENoBIAEoAgggASgCDBDSARBnIAFBEGokAAtLAQF/IwBBEGsiASQAIAFBBGogABAgIAEoAgQi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AUKBgICAEDcCACABIACtQv///weDQiCGNwIIIAFBCGoLMAEBf0EEQRAQ2QEiAUUEQAALIAEgADYCDCABQQA2AgggAUKBgICAEDcCACABQQhqCzABAX9BBEEQENkBIgFFBEAACyABIAA6AAwgAUEANgIIIAFCgYCAgBA3AgAgAUEIagsoACABKAIARQRAIAFBfzYCACAAIAE2AgQgACABQQRqNgIADwsQ3QEACyQAIAAQ1wEgACgCAARAEN0BAAsgAEEANgIAIAAgAUEARzoABAsoACADEBshAyAAEM0BIAEQzQEgAhDNASADENUBQQh0QeQAchDKARBmCygAIAMQGyEDIAAQzQEgARDNASACEM0BIAMQ1QFBCHRB5QByEMoBEGYLIAAgAEEBayIAQQZNBEAgAEEBag8LQeCCwABBGRDhAQALKQEBf0EEQRAQ2QEiAEUEQAALIABCADcCCCAAQoGAgIAQNwIAIABBCGoLIgAgAhAEIQIgABDNASABEM0BIAIQT0EIdEHKAHIQygEQZgsPACAAIAEgAiADQRIQ/AELDwAgACABIAIgA0EYEPwBCw8AIAAgASACIANBHBD8AQsPACAAIAEgAiADQR0Q/AELDwAgACABIAIgA0EhEP0BCw8AIAAgASACIANBIhD8AQsPACAAIAEgAiADQSMQ/AELDwAgACABIAIgA0EoEPwBCw8AIAAgASACIANBKhD8AQsPACAAIAEgAiADQSwQ/AELDwAgACABIAIgA0EvEPwBCw8AIAAgASACIANBOBD8AQsQACAAIAEgAiADQdMAEP0BCxAAIAAgASACIANB1AAQ/QELEAAgACABIAIgA0HeABD9AQsQACAAIAEgAiADQd8AEP0BCxAAIAAgASACIANB4AAQ/QELEAAgACABIAIgA0HhABD9AQsQACAAIAEgAiADQeIAEP0BCxAAIAAgASACIANB4wAQ/QELEAAgACABIAIgA0HkABD9AQsQACAAIAEgAiADQeUAEP0BCxAAIAAgASACIANB5gAQ/AELEAAgACABIAIgA0HnABD8AQsQACAAIAEgAiADQegAEPwBCxAAIAAgASACIANB6QAQ/AELEAAgACABIAIgA0HqABD8AQsQACAAIAEgAiADQesAEPwBCxAAIAAgASACIANB7AAQ/AELEAAgACABIAIgA0HuABD8AQsQACAAIAEgAiADQe8AEPwBCxAAIAAgASACIANB8AAQ/AELHgAgARBsIQEgABDNASABEMsBQQh0QcwAchDKARBmCxkAIAAgASACQSBBACAEG0EQQQAgAxtyECQLDQAgACABIAJBARD+AQsNACAAIAEgAkECEP4BCw0AIAAgASACQQMQ/gELDQAgACABIAJBBBD+AQsNACAAIAEgAkEFEP4BCw0AIAAgASACQQYQ/gELDQAgACABIAJBBxD+AQsNACAAIAEgAkEIEP4BCw0AIAAgASACQQkQ/gELDQAgACABIAJBCxD+AQsNACAAIAEgAkENEP4BCw0AIAAgASACQQ4Q/gELDQAgACABIAJBDxD+AQsNACAAIAEgAkEQEP4BCw0AIAAgASACQREQ/gELDQAgACABIAJBFxD+AQsNACAAIAEgAkEmEP4BCw0AIAAgASACQScQ/gELDQAgACABIAJBKRD+AQsNACAAIAEgAkErEP4BCw0AIAAgASACQS0Q/gELDQAgACABIAJBLhD+AQsNACAAIAEgAkEwEP4BCw0AIAAgASACQTEQ/gELDQAgACABIAJBNRD+AQsNACAAIAEgAkE3EP4BCw0AIAAgASACQTkQ/wELDQAgACABIAJBOhD/AQsNACAAIAEgAkE7EP8BCw0AIAAgASACQTwQ/wELDQAgACABIAJBPRD/AQsNACAAIAEgAkE+EP8BCw0AIAAgASACQT8Q/wELDgAgACABIAJBwAAQ/wELDgAgACABIAJBwQAQ/wELDgAgACABIAJBwgAQ/wELDgAgACABIAJBwwAQ/wELDgAgACABIAJBxAAQ/wELDgAgACABIAJBxQAQ/wELDgAgACABIAJBxgAQ/wELDgAgACABIAJBxwAQ/wELDgAgACABIAJByAAQ/wELDgAgACABIAJByQAQ/wELDgAgACABIAJBygAQ/wELDgAgACABIAJB0QAQ/wELDgAgACABIAJB0gAQ/wELFwEBfyAAQf8BcUE/TQR/IAAQZwVBAAsLGwAgABDXASAAKAIAQX9GBEAQ3QEACyAALQAECwkAIABBExCAAgsJACAAQRUQgAILCQAgAEEaEIACCwkAIABBIBCAAgsJACAAQSUQgAILCQAgAEE0EIACCwkAIABBNhCAAgsKACAAQdgAEIACCwoAIABB2QAQgAILGwEBf0EBQQQQ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", imports);
|
16921
17021
|
}
|
16922
17022
|
__name(wasm, "wasm");
|
16923
17023
|
async function initWasm2() {
|
16924
|
-
return await __wbg_init(wasm());
|
17024
|
+
return await __wbg_init({ module_or_path: wasm() });
|
16925
17025
|
}
|
16926
17026
|
__name(initWasm2, "initWasm");
|
16927
17027
|
initWasm2();
|
@@ -17889,9 +17989,9 @@
|
|
17889
17989
|
var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name", { value, configurable: true }), "__name");
|
17890
17990
|
function getBuiltinVersions() {
|
17891
17991
|
return {
|
17892
|
-
FUEL_CORE: "0.
|
17893
|
-
FORC: "0.
|
17894
|
-
FUELS: "0.100.
|
17992
|
+
FUEL_CORE: "0.43.1",
|
17993
|
+
FORC: "0.68.1",
|
17994
|
+
FUELS: "0.100.4"
|
17895
17995
|
};
|
17896
17996
|
}
|
17897
17997
|
__name(getBuiltinVersions, "getBuiltinVersions");
|
@@ -18044,6 +18144,8 @@ This unreleased fuel-core build may include features and updates not yet support
|
|
18044
18144
|
ErrorCode2["FUNDS_TOO_LOW"] = "funds-too-low";
|
18045
18145
|
ErrorCode2["MAX_OUTPUTS_EXCEEDED"] = "max-outputs-exceeded";
|
18046
18146
|
ErrorCode2["ASSET_BURN_DETECTED"] = "asset-burn-detected";
|
18147
|
+
ErrorCode2["CHANGE_OUTPUT_COLLISION"] = "change-output-collision";
|
18148
|
+
ErrorCode2["DUPLICATE_CHANGE_OUTPUT_ACCOUNT"] = "duplicate-change-output-account";
|
18047
18149
|
ErrorCode2["INVALID_RECEIPT_TYPE"] = "invalid-receipt-type";
|
18048
18150
|
ErrorCode2["INVALID_WORD_LIST"] = "invalid-word-list";
|
18049
18151
|
ErrorCode2["INVALID_MNEMONIC"] = "invalid-mnemonic";
|
@@ -18053,9 +18155,12 @@ This unreleased fuel-core build may include features and updates not yet support
|
|
18053
18155
|
ErrorCode2["INVALID_PASSWORD"] = "invalid-password";
|
18054
18156
|
ErrorCode2["ACCOUNT_REQUIRED"] = "account-required";
|
18055
18157
|
ErrorCode2["UNLOCKED_WALLET_REQUIRED"] = "unlocked-wallet-required";
|
18158
|
+
ErrorCode2["NO_COINS_TO_CONSOLIDATE"] = "no-coins-to-consolidate";
|
18159
|
+
ErrorCode2["COINS_ASSET_ID_MISMATCH"] = "coins-asset-id-mismatch";
|
18056
18160
|
ErrorCode2["ASSET_NOT_FOUND"] = "asset-not-found";
|
18057
18161
|
ErrorCode2["NUMBER_TOO_BIG"] = "number-too-big";
|
18058
18162
|
ErrorCode2["ERROR_BUILDING_BLOCK_EXPLORER_URL"] = "error-building-block-explorer-url";
|
18163
|
+
ErrorCode2["RPC_CONSISTENCY"] = "rpc-consistency";
|
18059
18164
|
ErrorCode2["VITEPRESS_PLUGIN_ERROR"] = "vitepress-plugin-error";
|
18060
18165
|
ErrorCode2["SCRIPT_REVERTED"] = "script-reverted";
|
18061
18166
|
ErrorCode2["SCRIPT_RETURN_INVALID_TYPE"] = "script-return-invalid-type";
|
@@ -27013,27 +27118,84 @@ spurious results.`);
|
|
27013
27118
|
gql["default"] = gql;
|
27014
27119
|
var lib_default2 = gql;
|
27015
27120
|
|
27016
|
-
// src/connectors/utils/promises.ts
|
27017
|
-
function deferPromise() {
|
27018
|
-
const defer = {};
|
27019
|
-
defer.promise = new Promise((resolve, reject) => {
|
27020
|
-
defer.reject = reject;
|
27021
|
-
defer.resolve = resolve;
|
27022
|
-
});
|
27023
|
-
return defer;
|
27024
|
-
}
|
27025
|
-
__name(deferPromise, "deferPromise");
|
27026
|
-
async function withTimeout(promise, timeout = 1050) {
|
27027
|
-
const timeoutPromise = new Promise((resolve, reject) => {
|
27028
|
-
setTimeout(() => {
|
27029
|
-
reject(new FuelError(FuelError.CODES.TIMEOUT_EXCEEDED, "Promise timed out"));
|
27030
|
-
}, timeout);
|
27031
|
-
});
|
27032
|
-
return Promise.race([timeoutPromise, promise]);
|
27033
|
-
}
|
27034
|
-
__name(withTimeout, "withTimeout");
|
27035
|
-
|
27036
27121
|
// src/providers/__generated__/operations.ts
|
27122
|
+
var InputCoinFragmentDoc = lib_default2`
|
27123
|
+
fragment InputCoinFragment on InputCoin {
|
27124
|
+
type: __typename
|
27125
|
+
utxoId
|
27126
|
+
owner
|
27127
|
+
amount
|
27128
|
+
assetId
|
27129
|
+
txPointer
|
27130
|
+
coinWitnessIndex: witnessIndex
|
27131
|
+
predicateGasUsed
|
27132
|
+
predicate
|
27133
|
+
predicateData
|
27134
|
+
}
|
27135
|
+
`;
|
27136
|
+
var InputMessageFragmentDoc = lib_default2`
|
27137
|
+
fragment InputMessageFragment on InputMessage {
|
27138
|
+
type: __typename
|
27139
|
+
sender
|
27140
|
+
recipient
|
27141
|
+
amount
|
27142
|
+
nonce
|
27143
|
+
messageWitnessIndex: witnessIndex
|
27144
|
+
predicateGasUsed
|
27145
|
+
data
|
27146
|
+
predicate
|
27147
|
+
predicateData
|
27148
|
+
}
|
27149
|
+
`;
|
27150
|
+
var InputContractFragmentDoc = lib_default2`
|
27151
|
+
fragment InputContractFragment on InputContract {
|
27152
|
+
type: __typename
|
27153
|
+
utxoId
|
27154
|
+
balanceRoot
|
27155
|
+
stateRoot
|
27156
|
+
txPointer
|
27157
|
+
contractId
|
27158
|
+
}
|
27159
|
+
`;
|
27160
|
+
var OutputCoinFragmentDoc = lib_default2`
|
27161
|
+
fragment OutputCoinFragment on CoinOutput {
|
27162
|
+
type: __typename
|
27163
|
+
to
|
27164
|
+
amount
|
27165
|
+
assetId
|
27166
|
+
}
|
27167
|
+
`;
|
27168
|
+
var OutputContractFragmentDoc = lib_default2`
|
27169
|
+
fragment OutputContractFragment on ContractOutput {
|
27170
|
+
type: __typename
|
27171
|
+
inputIndex
|
27172
|
+
balanceRoot
|
27173
|
+
stateRoot
|
27174
|
+
}
|
27175
|
+
`;
|
27176
|
+
var OutputChangeFragmentDoc = lib_default2`
|
27177
|
+
fragment OutputChangeFragment on ChangeOutput {
|
27178
|
+
type: __typename
|
27179
|
+
to
|
27180
|
+
amount
|
27181
|
+
assetId
|
27182
|
+
}
|
27183
|
+
`;
|
27184
|
+
var OutputVariableFragmentDoc = lib_default2`
|
27185
|
+
fragment OutputVariableFragment on VariableOutput {
|
27186
|
+
type: __typename
|
27187
|
+
to
|
27188
|
+
amount
|
27189
|
+
assetId
|
27190
|
+
}
|
27191
|
+
`;
|
27192
|
+
var OutputContractCreatedFragmentDoc = lib_default2`
|
27193
|
+
fragment OutputContractCreatedFragment on ContractCreated {
|
27194
|
+
type: __typename
|
27195
|
+
contract
|
27196
|
+
stateRoot
|
27197
|
+
}
|
27198
|
+
`;
|
27037
27199
|
var SubmittedStatusFragmentDoc = lib_default2`
|
27038
27200
|
fragment SubmittedStatusFragment on SubmittedStatus {
|
27039
27201
|
type: __typename
|
@@ -27162,6 +27324,87 @@ spurious results.`);
|
|
27162
27324
|
reason
|
27163
27325
|
}
|
27164
27326
|
`;
|
27327
|
+
var PreconfirmationSuccessStatusFragmentDoc = lib_default2`
|
27328
|
+
fragment PreconfirmationSuccessStatusFragment on PreconfirmationSuccessStatus {
|
27329
|
+
type: __typename
|
27330
|
+
totalGas
|
27331
|
+
totalFee
|
27332
|
+
resolvedOutputs {
|
27333
|
+
utxoId
|
27334
|
+
output {
|
27335
|
+
type: __typename
|
27336
|
+
... on CoinOutput {
|
27337
|
+
to
|
27338
|
+
amount
|
27339
|
+
assetId
|
27340
|
+
}
|
27341
|
+
... on ContractOutput {
|
27342
|
+
inputIndex
|
27343
|
+
balanceRoot
|
27344
|
+
stateRoot
|
27345
|
+
}
|
27346
|
+
... on ChangeOutput {
|
27347
|
+
to
|
27348
|
+
amount
|
27349
|
+
assetId
|
27350
|
+
}
|
27351
|
+
... on VariableOutput {
|
27352
|
+
to
|
27353
|
+
amount
|
27354
|
+
assetId
|
27355
|
+
}
|
27356
|
+
... on ContractCreated {
|
27357
|
+
contract
|
27358
|
+
stateRoot
|
27359
|
+
}
|
27360
|
+
}
|
27361
|
+
}
|
27362
|
+
preconfirmationReceipts: receipts {
|
27363
|
+
...receiptFragment
|
27364
|
+
}
|
27365
|
+
}
|
27366
|
+
${ReceiptFragmentDoc}`;
|
27367
|
+
var PreconfirmationFailureStatusFragmentDoc = lib_default2`
|
27368
|
+
fragment PreconfirmationFailureStatusFragment on PreconfirmationFailureStatus {
|
27369
|
+
type: __typename
|
27370
|
+
reason
|
27371
|
+
totalGas
|
27372
|
+
totalFee
|
27373
|
+
resolvedOutputs {
|
27374
|
+
utxoId
|
27375
|
+
output {
|
27376
|
+
type: __typename
|
27377
|
+
... on CoinOutput {
|
27378
|
+
to
|
27379
|
+
amount
|
27380
|
+
assetId
|
27381
|
+
}
|
27382
|
+
... on ContractOutput {
|
27383
|
+
inputIndex
|
27384
|
+
balanceRoot
|
27385
|
+
stateRoot
|
27386
|
+
}
|
27387
|
+
... on ChangeOutput {
|
27388
|
+
to
|
27389
|
+
amount
|
27390
|
+
assetId
|
27391
|
+
}
|
27392
|
+
... on VariableOutput {
|
27393
|
+
to
|
27394
|
+
amount
|
27395
|
+
assetId
|
27396
|
+
}
|
27397
|
+
... on ContractCreated {
|
27398
|
+
contract
|
27399
|
+
stateRoot
|
27400
|
+
}
|
27401
|
+
}
|
27402
|
+
}
|
27403
|
+
preconfirmationReceipts: receipts {
|
27404
|
+
...receiptFragment
|
27405
|
+
}
|
27406
|
+
}
|
27407
|
+
${ReceiptFragmentDoc}`;
|
27165
27408
|
var TransactionStatusSubscriptionFragmentDoc = lib_default2`
|
27166
27409
|
fragment transactionStatusSubscriptionFragment on TransactionStatus {
|
27167
27410
|
... on SubmittedStatus {
|
@@ -27182,12 +27425,20 @@ spurious results.`);
|
|
27182
27425
|
... on SqueezedOutStatus {
|
27183
27426
|
...SqueezedOutStatusFragment
|
27184
27427
|
}
|
27428
|
+
... on PreconfirmationSuccessStatus {
|
27429
|
+
...PreconfirmationSuccessStatusFragment
|
27430
|
+
}
|
27431
|
+
... on PreconfirmationFailureStatus {
|
27432
|
+
...PreconfirmationFailureStatusFragment
|
27433
|
+
}
|
27185
27434
|
}
|
27186
27435
|
${SubmittedStatusFragmentDoc}
|
27187
27436
|
${SuccessStatusWithBlockIdFragmentDoc}
|
27188
27437
|
${MalleableTransactionFieldsFragmentDoc}
|
27189
27438
|
${FailureStatusWithBlockIdFragmentDoc}
|
27190
|
-
${SqueezedOutStatusFragmentDoc}
|
27439
|
+
${SqueezedOutStatusFragmentDoc}
|
27440
|
+
${PreconfirmationSuccessStatusFragmentDoc}
|
27441
|
+
${PreconfirmationFailureStatusFragmentDoc}`;
|
27191
27442
|
var TransactionStatusFragmentDoc = lib_default2`
|
27192
27443
|
fragment transactionStatusFragment on TransactionStatus {
|
27193
27444
|
... on SubmittedStatus {
|
@@ -27239,6 +27490,23 @@ ${SqueezedOutStatusFragmentDoc}`;
|
|
27239
27490
|
}
|
27240
27491
|
}
|
27241
27492
|
${InputEstimatePredicatesFragmentDoc}`;
|
27493
|
+
var DryRunFailureAssembleTxFragmentDoc = lib_default2`
|
27494
|
+
fragment dryRunFailureAssembleTxFragment on DryRunFailureStatus {
|
27495
|
+
type: __typename
|
27496
|
+
reason
|
27497
|
+
receipts {
|
27498
|
+
...receiptFragment
|
27499
|
+
}
|
27500
|
+
}
|
27501
|
+
${ReceiptFragmentDoc}`;
|
27502
|
+
var DryRunSuccessAssembleTxFragmentDoc = lib_default2`
|
27503
|
+
fragment dryRunSuccessAssembleTxFragment on DryRunSuccessStatus {
|
27504
|
+
type: __typename
|
27505
|
+
receipts {
|
27506
|
+
...receiptFragment
|
27507
|
+
}
|
27508
|
+
}
|
27509
|
+
${ReceiptFragmentDoc}`;
|
27242
27510
|
var DryRunFailureStatusFragmentDoc = lib_default2`
|
27243
27511
|
fragment dryRunFailureStatusFragment on DryRunFailureStatus {
|
27244
27512
|
type: __typename
|
@@ -27595,13 +27863,21 @@ ${NodeInfoFragmentDoc}`;
|
|
27595
27863
|
... on SqueezedOutStatus {
|
27596
27864
|
...SqueezedOutStatusFragment
|
27597
27865
|
}
|
27866
|
+
... on PreconfirmationSuccessStatus {
|
27867
|
+
...PreconfirmationSuccessStatusFragment
|
27868
|
+
}
|
27869
|
+
... on PreconfirmationFailureStatus {
|
27870
|
+
...PreconfirmationFailureStatusFragment
|
27871
|
+
}
|
27598
27872
|
}
|
27599
27873
|
}
|
27600
27874
|
}
|
27601
27875
|
${SubmittedStatusFragmentDoc}
|
27602
27876
|
${SuccessStatusWithBlockIdFragmentDoc}
|
27603
27877
|
${FailureStatusWithBlockIdFragmentDoc}
|
27604
|
-
${SqueezedOutStatusFragmentDoc}
|
27878
|
+
${SqueezedOutStatusFragmentDoc}
|
27879
|
+
${PreconfirmationSuccessStatusFragmentDoc}
|
27880
|
+
${PreconfirmationFailureStatusFragmentDoc}`;
|
27605
27881
|
var GetTransactionsDocument = lib_default2`
|
27606
27882
|
query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
|
27607
27883
|
transactions(after: $after, before: $before, first: $first, last: $last) {
|
@@ -27892,6 +28168,77 @@ ${GetMessageFragmentDoc}`;
|
|
27892
28168
|
}
|
27893
28169
|
}
|
27894
28170
|
`;
|
28171
|
+
var AssembleTxDocument = lib_default2`
|
28172
|
+
query assembleTx($tx: HexString!, $blockHorizon: U32!, $requiredBalances: [RequiredBalance!]!, $feeAddressIndex: U16!, $excludeInput: ExcludeInput, $estimatePredicates: Boolean, $reserveGas: U64) {
|
28173
|
+
assembleTx(
|
28174
|
+
tx: $tx
|
28175
|
+
blockHorizon: $blockHorizon
|
28176
|
+
requiredBalances: $requiredBalances
|
28177
|
+
feeAddressIndex: $feeAddressIndex
|
28178
|
+
excludeInput: $excludeInput
|
28179
|
+
estimatePredicates: $estimatePredicates
|
28180
|
+
reserveGas: $reserveGas
|
28181
|
+
) {
|
28182
|
+
transaction {
|
28183
|
+
id
|
28184
|
+
inputs {
|
28185
|
+
... on InputCoin {
|
28186
|
+
...InputCoinFragment
|
28187
|
+
}
|
28188
|
+
... on InputContract {
|
28189
|
+
...InputContractFragment
|
28190
|
+
}
|
28191
|
+
... on InputMessage {
|
28192
|
+
...InputMessageFragment
|
28193
|
+
}
|
28194
|
+
}
|
28195
|
+
outputs {
|
28196
|
+
... on CoinOutput {
|
28197
|
+
...OutputCoinFragment
|
28198
|
+
}
|
28199
|
+
... on ContractOutput {
|
28200
|
+
...OutputContractFragment
|
28201
|
+
}
|
28202
|
+
... on ChangeOutput {
|
28203
|
+
...OutputChangeFragment
|
28204
|
+
}
|
28205
|
+
... on VariableOutput {
|
28206
|
+
...OutputVariableFragment
|
28207
|
+
}
|
28208
|
+
... on ContractCreated {
|
28209
|
+
...OutputContractCreatedFragment
|
28210
|
+
}
|
28211
|
+
}
|
28212
|
+
policies {
|
28213
|
+
tip
|
28214
|
+
witnessLimit
|
28215
|
+
maturity
|
28216
|
+
maxFee
|
28217
|
+
}
|
28218
|
+
witnesses
|
28219
|
+
scriptGasLimit
|
28220
|
+
}
|
28221
|
+
status {
|
28222
|
+
... on DryRunFailureStatus {
|
28223
|
+
...dryRunFailureAssembleTxFragment
|
28224
|
+
}
|
28225
|
+
... on DryRunSuccessStatus {
|
28226
|
+
...dryRunSuccessAssembleTxFragment
|
28227
|
+
}
|
28228
|
+
}
|
28229
|
+
gasPrice
|
28230
|
+
}
|
28231
|
+
}
|
28232
|
+
${InputCoinFragmentDoc}
|
28233
|
+
${InputContractFragmentDoc}
|
28234
|
+
${InputMessageFragmentDoc}
|
28235
|
+
${OutputCoinFragmentDoc}
|
28236
|
+
${OutputContractFragmentDoc}
|
28237
|
+
${OutputChangeFragmentDoc}
|
28238
|
+
${OutputVariableFragmentDoc}
|
28239
|
+
${OutputContractCreatedFragmentDoc}
|
28240
|
+
${DryRunFailureAssembleTxFragmentDoc}
|
28241
|
+
${DryRunSuccessAssembleTxFragmentDoc}`;
|
27895
28242
|
var DryRunDocument = lib_default2`
|
27896
28243
|
mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean, $gasPrice: U64) {
|
27897
28244
|
dryRun(
|
@@ -27950,15 +28297,22 @@ ${GetMessageFragmentDoc}`;
|
|
27950
28297
|
}
|
27951
28298
|
`;
|
27952
28299
|
var SubmitAndAwaitStatusDocument = lib_default2`
|
27953
|
-
subscription submitAndAwaitStatus($encodedTransaction: HexString
|
27954
|
-
submitAndAwaitStatus(
|
28300
|
+
subscription submitAndAwaitStatus($encodedTransaction: HexString!, $estimatePredicates: Boolean, $includePreConfirmation: Boolean) {
|
28301
|
+
submitAndAwaitStatus(
|
28302
|
+
tx: $encodedTransaction
|
28303
|
+
estimatePredicates: $estimatePredicates
|
28304
|
+
includePreconfirmation: $includePreConfirmation
|
28305
|
+
) {
|
27955
28306
|
...transactionStatusSubscriptionFragment
|
27956
28307
|
}
|
27957
28308
|
}
|
27958
28309
|
${TransactionStatusSubscriptionFragmentDoc}`;
|
27959
28310
|
var StatusChangeDocument = lib_default2`
|
27960
|
-
subscription statusChange($transactionId: TransactionId
|
27961
|
-
statusChange(
|
28311
|
+
subscription statusChange($transactionId: TransactionId!, $includePreConfirmation: Boolean) {
|
28312
|
+
statusChange(
|
28313
|
+
id: $transactionId
|
28314
|
+
includePreconfirmation: $includePreConfirmation
|
28315
|
+
) {
|
27962
28316
|
...transactionStatusSubscriptionFragment
|
27963
28317
|
}
|
27964
28318
|
}
|
@@ -28061,6 +28415,9 @@ ${GetMessageFragmentDoc}`;
|
|
28061
28415
|
getAssetDetails(variables, options) {
|
28062
28416
|
return requester(GetAssetDetailsDocument, variables, options);
|
28063
28417
|
},
|
28418
|
+
assembleTx(variables, options) {
|
28419
|
+
return requester(AssembleTxDocument, variables, options);
|
28420
|
+
},
|
28064
28421
|
dryRun(variables, options) {
|
28065
28422
|
return requester(DryRunDocument, variables, options);
|
28066
28423
|
},
|
@@ -28089,9 +28446,67 @@ ${GetMessageFragmentDoc}`;
|
|
28089
28446
|
}
|
28090
28447
|
__name(getSdk, "getSdk");
|
28091
28448
|
|
28449
|
+
// src/providers/assemble-tx-helpers.ts
|
28450
|
+
var resolveAccountForAssembleTxParams = /* @__PURE__ */ __name((account) => {
|
28451
|
+
const assembleTxAccount = {};
|
28452
|
+
const accountIsPredicate = "bytes" in account;
|
28453
|
+
if (accountIsPredicate) {
|
28454
|
+
assembleTxAccount.predicate = {
|
28455
|
+
predicate: hexlify(account.bytes),
|
28456
|
+
predicateAddress: account.address.toB256(),
|
28457
|
+
predicateData: hexlify(account.getPredicateData())
|
28458
|
+
};
|
28459
|
+
} else {
|
28460
|
+
assembleTxAccount.address = account.address.toB256();
|
28461
|
+
}
|
28462
|
+
return assembleTxAccount;
|
28463
|
+
}, "resolveAccountForAssembleTxParams");
|
28464
|
+
var setAndValidateGasAndFeeForAssembledTx = /* @__PURE__ */ __name(async (params) => {
|
28465
|
+
const { gasPrice, transactionRequest, setGasLimit, setMaxFee, provider } = params;
|
28466
|
+
const gasLimitSpecified = isDefined(setGasLimit);
|
28467
|
+
const maxFeeSpecified = isDefined(setMaxFee);
|
28468
|
+
const isScriptTx = transactionRequest.type === TransactionType.Script;
|
28469
|
+
if (gasLimitSpecified && isScriptTx) {
|
28470
|
+
const requiredGasLimit = transactionRequest.gasLimit;
|
28471
|
+
if (bn(setGasLimit).lt(bn(requiredGasLimit))) {
|
28472
|
+
throw new FuelError(
|
28473
|
+
ErrorCode.GAS_LIMIT_TOO_LOW,
|
28474
|
+
`Gas limit '${setGasLimit}' is lower than the required: '${requiredGasLimit}'.`
|
28475
|
+
);
|
28476
|
+
}
|
28477
|
+
transactionRequest.gasLimit = bn(setGasLimit);
|
28478
|
+
}
|
28479
|
+
if (maxFeeSpecified) {
|
28480
|
+
const requiredMaxFee = transactionRequest.maxFee;
|
28481
|
+
if (bn(setMaxFee).lt(requiredMaxFee)) {
|
28482
|
+
throw new FuelError(
|
28483
|
+
ErrorCode.MAX_FEE_TOO_LOW,
|
28484
|
+
`Max fee '${setMaxFee}' is lower than the required: '${requiredMaxFee}'.`
|
28485
|
+
);
|
28486
|
+
}
|
28487
|
+
transactionRequest.maxFee = bn(setMaxFee);
|
28488
|
+
}
|
28489
|
+
if (gasLimitSpecified && !maxFeeSpecified) {
|
28490
|
+
const { maxFee: feeForGasPrice } = await provider.estimateTxGasAndFee({
|
28491
|
+
transactionRequest,
|
28492
|
+
gasPrice
|
28493
|
+
});
|
28494
|
+
transactionRequest.maxFee = feeForGasPrice;
|
28495
|
+
}
|
28496
|
+
return transactionRequest;
|
28497
|
+
}, "setAndValidateGasAndFeeForAssembledTx");
|
28498
|
+
|
28092
28499
|
// src/providers/utils/handle-gql-error-message.ts
|
28500
|
+
var gqlErrorMessage = {
|
28501
|
+
RPC_CONSISTENCY: /The required fuel block height is higher than the current block height. Required: \d+, Current: \d+/,
|
28502
|
+
NOT_ENOUGH_COINS_MAX_COINS: /the target cannot be met due to no coins available or exceeding the \d+ coin limit./,
|
28503
|
+
ASSET_NOT_FOUND: /resource was not found in table/,
|
28504
|
+
MULTIPLE_CHANGE_POLICIES: /The asset ([a-fA-F0-9]{64}) has multiple change policies/,
|
28505
|
+
DUPLICATE_CHANGE_OUTPUT_ACCOUNT: /required balances contain duplicate \(asset, account\) pair/,
|
28506
|
+
INSUFFICIENT_FEE_AMOUNT: /InsufficientFeeAmount { expected: (\d+), provided: (\d+) }/
|
28507
|
+
};
|
28093
28508
|
var mapGqlErrorMessage = /* @__PURE__ */ __name((error2) => {
|
28094
|
-
if (
|
28509
|
+
if (gqlErrorMessage.NOT_ENOUGH_COINS_MAX_COINS.test(error2.message)) {
|
28095
28510
|
return new FuelError(
|
28096
28511
|
ErrorCode.INSUFFICIENT_FUNDS_OR_MAX_COINS,
|
28097
28512
|
`Insufficient funds or too many small value coins. Consider combining UTXOs.`,
|
@@ -28099,7 +28514,25 @@ ${GetMessageFragmentDoc}`;
|
|
28099
28514
|
error2
|
28100
28515
|
);
|
28101
28516
|
}
|
28102
|
-
if (
|
28517
|
+
if (gqlErrorMessage.MULTIPLE_CHANGE_POLICIES.test(error2.message)) {
|
28518
|
+
const match = error2.message.match(/asset ([a-fA-F0-9]{64})/);
|
28519
|
+
const assetId = match?.[1] || "";
|
28520
|
+
return new FuelError(
|
28521
|
+
ErrorCode.CHANGE_OUTPUT_COLLISION,
|
28522
|
+
`OutputChange address for asset 0x${assetId} differs between transaction request and assembleTx parameters.`,
|
28523
|
+
{},
|
28524
|
+
error2
|
28525
|
+
);
|
28526
|
+
}
|
28527
|
+
if (gqlErrorMessage.DUPLICATE_CHANGE_OUTPUT_ACCOUNT.test(error2.message)) {
|
28528
|
+
return new FuelError(
|
28529
|
+
ErrorCode.DUPLICATE_CHANGE_OUTPUT_ACCOUNT,
|
28530
|
+
`The parameter 'accountCoinQuantities' of assembleTx contains duplicate entries for the same assetId with different 'changeOutputAccount'.`,
|
28531
|
+
{},
|
28532
|
+
error2
|
28533
|
+
);
|
28534
|
+
}
|
28535
|
+
if (gqlErrorMessage.ASSET_NOT_FOUND.test(error2.message)) {
|
28103
28536
|
return new FuelError(
|
28104
28537
|
ErrorCode.ASSET_NOT_FOUND,
|
28105
28538
|
`Asset not found for given asset id.`,
|
@@ -28107,6 +28540,13 @@ ${GetMessageFragmentDoc}`;
|
|
28107
28540
|
error2
|
28108
28541
|
);
|
28109
28542
|
}
|
28543
|
+
if (gqlErrorMessage.RPC_CONSISTENCY.test(error2.message)) {
|
28544
|
+
return new FuelError(ErrorCode.RPC_CONSISTENCY, error2.message, {}, error2);
|
28545
|
+
}
|
28546
|
+
if (gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT.test(error2.message)) {
|
28547
|
+
const match = error2.message.match(gqlErrorMessage.INSUFFICIENT_FEE_AMOUNT);
|
28548
|
+
return new FuelError(ErrorCode.FUNDS_TOO_LOW, match?.[0] || error2.message, {}, error2);
|
28549
|
+
}
|
28110
28550
|
return new FuelError(ErrorCode.INVALID_REQUEST, error2.message, {}, error2);
|
28111
28551
|
}, "mapGqlErrorMessage");
|
28112
28552
|
var mapGqlErrorWithIncompatibleNodeVersion = /* @__PURE__ */ __name((error2, incompatibleNodeVersionMessage) => {
|
@@ -28139,8 +28579,9 @@ ${incompatibleNodeVersionMessage}`,
|
|
28139
28579
|
|
28140
28580
|
// src/providers/fuel-graphql-subscriber.ts
|
28141
28581
|
var FuelGraphqlSubscriber = class _FuelGraphqlSubscriber {
|
28142
|
-
constructor(stream) {
|
28582
|
+
constructor(stream, onEvent) {
|
28143
28583
|
this.stream = stream;
|
28584
|
+
this.onEvent = onEvent;
|
28144
28585
|
}
|
28145
28586
|
static {
|
28146
28587
|
__name(this, "FuelGraphqlSubscriber");
|
@@ -28148,12 +28589,13 @@ ${incompatibleNodeVersionMessage}`,
|
|
28148
28589
|
static incompatibleNodeVersionMessage = false;
|
28149
28590
|
static textDecoder = new TextDecoder();
|
28150
28591
|
static async create(options) {
|
28151
|
-
const { url, query, variables, fetchFn } = options;
|
28592
|
+
const { url, query, variables, fetchFn, operationName, onEvent } = options;
|
28152
28593
|
const response = await fetchFn(`${url}-sub`, {
|
28153
28594
|
method: "POST",
|
28154
28595
|
body: JSON.stringify({
|
28155
28596
|
query: print(query),
|
28156
|
-
variables
|
28597
|
+
variables,
|
28598
|
+
operationName
|
28157
28599
|
}),
|
28158
28600
|
headers: {
|
28159
28601
|
"Content-Type": "application/json",
|
@@ -28162,46 +28604,78 @@ ${incompatibleNodeVersionMessage}`,
|
|
28162
28604
|
});
|
28163
28605
|
const [errorReader, resultReader] = response.body.tee().map((stream) => stream.getReader());
|
28164
28606
|
await new _FuelGraphqlSubscriber(errorReader).next();
|
28165
|
-
return new _FuelGraphqlSubscriber(resultReader);
|
28607
|
+
return new _FuelGraphqlSubscriber(resultReader, onEvent);
|
28166
28608
|
}
|
28167
|
-
|
28168
|
-
|
28169
|
-
|
28609
|
+
/**
|
28610
|
+
* This method will take a stream reader and parse the event from the stream.
|
28611
|
+
*
|
28612
|
+
* @param reader - The reader of the SSE stream
|
28613
|
+
* @param parsingLeftover - The leftover string from parsing the previous event
|
28614
|
+
* @returns The event parsed as a full GraphQL response, whether the stream is done and the leftover string after parsing
|
28615
|
+
*/
|
28616
|
+
static async readEvent(reader, parsingLeftover = "") {
|
28617
|
+
let text = parsingLeftover;
|
28618
|
+
const regex = /data:.*\n\n/g;
|
28170
28619
|
while (true) {
|
28171
|
-
if (this.events.length > 0) {
|
28172
|
-
const { data, errors: errors2 } = this.events.shift();
|
28173
|
-
assertGqlResponseHasNoErrors(errors2, _FuelGraphqlSubscriber.incompatibleNodeVersionMessage);
|
28174
|
-
return { value: data, done: false };
|
28175
|
-
}
|
28176
|
-
const { value, done } = await this.stream.read();
|
28177
|
-
if (done) {
|
28178
|
-
return { value, done };
|
28179
|
-
}
|
28180
|
-
const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
|
28181
|
-
if (decoded === "") {
|
28182
|
-
continue;
|
28183
|
-
}
|
28184
|
-
const text = `${this.parsingLeftover}${decoded}`;
|
28185
|
-
const regex = /data:.*\n\n/g;
|
28186
28620
|
const matches = [...text.matchAll(regex)].flatMap((match) => match);
|
28187
|
-
matches.
|
28621
|
+
if (matches.length > 0) {
|
28188
28622
|
try {
|
28189
|
-
|
28623
|
+
const event = JSON.parse(matches[0].replace(/^data:/, ""));
|
28624
|
+
return {
|
28625
|
+
event,
|
28626
|
+
done: false,
|
28627
|
+
parsingLeftover: text.replace(matches[0], "")
|
28628
|
+
};
|
28190
28629
|
} catch (e) {
|
28191
28630
|
throw new FuelError(
|
28192
28631
|
ErrorCode.STREAM_PARSING_ERROR,
|
28193
28632
|
`Error while parsing stream data response: ${text}`
|
28194
28633
|
);
|
28195
28634
|
}
|
28196
|
-
}
|
28197
|
-
|
28635
|
+
}
|
28636
|
+
const { value, done } = await reader.read();
|
28637
|
+
if (done) {
|
28638
|
+
return { event: void 0, done, parsingLeftover: "" };
|
28639
|
+
}
|
28640
|
+
const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
|
28641
|
+
text += decoded;
|
28198
28642
|
}
|
28199
28643
|
}
|
28644
|
+
events = [];
|
28645
|
+
parsingLeftover = "";
|
28200
28646
|
/**
|
28201
|
-
* Gets called when
|
28647
|
+
* Gets automatically called when iterating in a `for-await-of` loop.
|
28648
|
+
* It can also be called manually.
|
28649
|
+
*
|
28650
|
+
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator/next
|
28202
28651
|
*/
|
28203
|
-
|
28204
|
-
|
28652
|
+
async next() {
|
28653
|
+
while (true) {
|
28654
|
+
const nextEvent = this.events.shift();
|
28655
|
+
if (nextEvent) {
|
28656
|
+
this.onEvent?.(nextEvent);
|
28657
|
+
assertGqlResponseHasNoErrors(
|
28658
|
+
nextEvent.errors,
|
28659
|
+
_FuelGraphqlSubscriber.incompatibleNodeVersionMessage
|
28660
|
+
);
|
28661
|
+
return { value: nextEvent.data, done: false };
|
28662
|
+
}
|
28663
|
+
const { event, done, parsingLeftover } = await _FuelGraphqlSubscriber.readEvent(
|
28664
|
+
this.stream,
|
28665
|
+
this.parsingLeftover
|
28666
|
+
);
|
28667
|
+
this.parsingLeftover = parsingLeftover;
|
28668
|
+
if (done) {
|
28669
|
+
return { value: void 0, done: true };
|
28670
|
+
}
|
28671
|
+
this.events.push(event);
|
28672
|
+
}
|
28673
|
+
}
|
28674
|
+
/**
|
28675
|
+
* Gets called when `break` is called in a `for-await-of` loop.
|
28676
|
+
*/
|
28677
|
+
return() {
|
28678
|
+
return Promise.resolve({ done: true, value: void 0 });
|
28205
28679
|
}
|
28206
28680
|
[Symbol.asyncIterator]() {
|
28207
28681
|
return this;
|
@@ -28240,7 +28714,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
28240
28714
|
case InputType.Contract: {
|
28241
28715
|
return {
|
28242
28716
|
type: InputType.Contract,
|
28243
|
-
txID: ZeroBytes32,
|
28717
|
+
txID: hexlify(value.txID || ZeroBytes32),
|
28244
28718
|
outputIndex: 0,
|
28245
28719
|
balanceRoot: ZeroBytes32,
|
28246
28720
|
stateRoot: ZeroBytes32,
|
@@ -28311,9 +28785,9 @@ ${incompatibleNodeVersionMessage}`,
|
|
28311
28785
|
case OutputType.Variable: {
|
28312
28786
|
return {
|
28313
28787
|
type: OutputType.Variable,
|
28314
|
-
to: ZeroBytes32,
|
28315
|
-
amount: bn(
|
28316
|
-
assetId: ZeroBytes32
|
28788
|
+
to: hexlify(value.to || ZeroBytes32),
|
28789
|
+
amount: bn(value.amount),
|
28790
|
+
assetId: hexlify(value.assetId || ZeroBytes32)
|
28317
28791
|
};
|
28318
28792
|
}
|
28319
28793
|
case OutputType.ContractCreated: {
|
@@ -28360,6 +28834,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
28360
28834
|
"BlobIdAlreadyUploaded",
|
28361
28835
|
"BlobNotFound",
|
28362
28836
|
"BytecodeAlreadyUploaded",
|
28837
|
+
"CanNotGetGasPriceInPredicate",
|
28363
28838
|
"ContractIdAlreadyDeployed",
|
28364
28839
|
"ContractInstructionNotAllowed",
|
28365
28840
|
"ContractMaxSize",
|
@@ -28383,6 +28858,7 @@ ${incompatibleNodeVersionMessage}`,
|
|
28383
28858
|
"InvalidImmediateValue",
|
28384
28859
|
"InvalidInstruction",
|
28385
28860
|
"InvalidMetadataIdentifier",
|
28861
|
+
"InvalidUpgradePurposeType",
|
28386
28862
|
"MalformedCallStructure",
|
28387
28863
|
"MaxStaticContractsReached",
|
28388
28864
|
"MemoryGrowthOverlap",
|
@@ -28399,8 +28875,10 @@ ${incompatibleNodeVersionMessage}`,
|
|
28399
28875
|
"PolicyIsNotSet",
|
28400
28876
|
"PolicyNotFound",
|
28401
28877
|
"PredicateReturnedNonOne",
|
28878
|
+
"ProofInUploadNotFound",
|
28402
28879
|
"ReservedRegisterNotWritable",
|
28403
28880
|
"Revert",
|
28881
|
+
"StorageSlotsNotFound",
|
28404
28882
|
"ThePartIsNotSequentiallyConnected",
|
28405
28883
|
"TooManyReceipts",
|
28406
28884
|
"TooManySlots",
|
@@ -28754,6 +29232,141 @@ ${incompatibleNodeVersionMessage}`,
|
|
28754
29232
|
throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);
|
28755
29233
|
}
|
28756
29234
|
}, "deserializeReceipt");
|
29235
|
+
var deserializeInput = /* @__PURE__ */ __name((input) => {
|
29236
|
+
let parsedInput;
|
29237
|
+
switch (input.type) {
|
29238
|
+
case "InputCoin":
|
29239
|
+
parsedInput = {
|
29240
|
+
type: InputType.Coin,
|
29241
|
+
id: input.utxoId,
|
29242
|
+
amount: bn(input.amount),
|
29243
|
+
assetId: input.assetId,
|
29244
|
+
owner: input.owner,
|
29245
|
+
txPointer: `0x${input.txPointer}`,
|
29246
|
+
witnessIndex: Number(input.coinWitnessIndex),
|
29247
|
+
predicate: input.predicate,
|
29248
|
+
predicateData: input.predicateData,
|
29249
|
+
predicateGasUsed: bn(input.predicateGasUsed)
|
29250
|
+
};
|
29251
|
+
break;
|
29252
|
+
case "InputMessage":
|
29253
|
+
parsedInput = {
|
29254
|
+
type: InputType.Message,
|
29255
|
+
nonce: input.nonce,
|
29256
|
+
amount: bn(input.amount),
|
29257
|
+
recipient: input.recipient,
|
29258
|
+
sender: input.sender,
|
29259
|
+
data: input.data,
|
29260
|
+
witnessIndex: Number(input.messageWitnessIndex),
|
29261
|
+
predicate: input.predicate,
|
29262
|
+
predicateData: input.predicateData,
|
29263
|
+
predicateGasUsed: bn(input.predicateGasUsed)
|
29264
|
+
};
|
29265
|
+
break;
|
29266
|
+
case "InputContract":
|
29267
|
+
parsedInput = {
|
29268
|
+
type: InputType.Contract,
|
29269
|
+
contractId: input.contractId,
|
29270
|
+
txPointer: `0x${input.txPointer}`,
|
29271
|
+
txID: hexlify(arrayify(input.utxoId).slice(0, 32))
|
29272
|
+
};
|
29273
|
+
break;
|
29274
|
+
default:
|
29275
|
+
assertUnreachable(input);
|
29276
|
+
}
|
29277
|
+
return parsedInput;
|
29278
|
+
}, "deserializeInput");
|
29279
|
+
var deserializeOutput = /* @__PURE__ */ __name((output) => {
|
29280
|
+
let parsedOutput;
|
29281
|
+
switch (output.type) {
|
29282
|
+
case "CoinOutput":
|
29283
|
+
parsedOutput = {
|
29284
|
+
type: OutputType.Coin,
|
29285
|
+
amount: bn(output.amount),
|
29286
|
+
assetId: output.assetId,
|
29287
|
+
to: output.to
|
29288
|
+
};
|
29289
|
+
break;
|
29290
|
+
case "ContractOutput":
|
29291
|
+
parsedOutput = {
|
29292
|
+
type: OutputType.Contract,
|
29293
|
+
inputIndex: Number(output.inputIndex)
|
29294
|
+
};
|
29295
|
+
break;
|
29296
|
+
case "ChangeOutput":
|
29297
|
+
parsedOutput = {
|
29298
|
+
type: OutputType.Change,
|
29299
|
+
assetId: output.assetId,
|
29300
|
+
to: output.to
|
29301
|
+
};
|
29302
|
+
break;
|
29303
|
+
case "ContractCreated":
|
29304
|
+
parsedOutput = {
|
29305
|
+
type: OutputType.ContractCreated,
|
29306
|
+
stateRoot: output.stateRoot,
|
29307
|
+
contractId: output.contract
|
29308
|
+
};
|
29309
|
+
break;
|
29310
|
+
case "VariableOutput":
|
29311
|
+
parsedOutput = {
|
29312
|
+
type: OutputType.Variable,
|
29313
|
+
amount: bn(output.amount),
|
29314
|
+
assetId: output.assetId,
|
29315
|
+
to: output.to
|
29316
|
+
};
|
29317
|
+
break;
|
29318
|
+
default:
|
29319
|
+
assertUnreachable(output);
|
29320
|
+
}
|
29321
|
+
return parsedOutput;
|
29322
|
+
}, "deserializeOutput");
|
29323
|
+
var deserializeProcessedTxOutput = /* @__PURE__ */ __name((output) => {
|
29324
|
+
let parsedOutput;
|
29325
|
+
switch (output.type) {
|
29326
|
+
case "CoinOutput":
|
29327
|
+
parsedOutput = {
|
29328
|
+
type: OutputType.Coin,
|
29329
|
+
amount: bn(output.amount),
|
29330
|
+
assetId: output.assetId,
|
29331
|
+
to: output.to
|
29332
|
+
};
|
29333
|
+
break;
|
29334
|
+
case "ContractOutput":
|
29335
|
+
parsedOutput = {
|
29336
|
+
type: OutputType.Contract,
|
29337
|
+
inputIndex: Number(output.inputIndex),
|
29338
|
+
balanceRoot: output.balanceRoot,
|
29339
|
+
stateRoot: output.stateRoot
|
29340
|
+
};
|
29341
|
+
break;
|
29342
|
+
case "ChangeOutput":
|
29343
|
+
parsedOutput = {
|
29344
|
+
type: OutputType.Change,
|
29345
|
+
assetId: output.assetId,
|
29346
|
+
to: output.to,
|
29347
|
+
amount: bn(output.amount)
|
29348
|
+
};
|
29349
|
+
break;
|
29350
|
+
case "ContractCreated":
|
29351
|
+
parsedOutput = {
|
29352
|
+
type: OutputType.ContractCreated,
|
29353
|
+
stateRoot: output.stateRoot,
|
29354
|
+
contractId: output.contract
|
29355
|
+
};
|
29356
|
+
break;
|
29357
|
+
case "VariableOutput":
|
29358
|
+
parsedOutput = {
|
29359
|
+
type: OutputType.Variable,
|
29360
|
+
amount: bn(output.amount),
|
29361
|
+
assetId: output.assetId,
|
29362
|
+
to: output.to
|
29363
|
+
};
|
29364
|
+
break;
|
29365
|
+
default:
|
29366
|
+
assertUnreachable(output);
|
29367
|
+
}
|
29368
|
+
return parsedOutput;
|
29369
|
+
}, "deserializeProcessedTxOutput");
|
28757
29370
|
|
28758
29371
|
// src/providers/utils/receipts.ts
|
28759
29372
|
var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
|
@@ -29079,11 +29692,12 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
29079
29692
|
});
|
29080
29693
|
}, "assembleRevertError");
|
29081
29694
|
var extractTxError = /* @__PURE__ */ __name((params) => {
|
29082
|
-
const { receipts, statusReason, logs } = params;
|
29695
|
+
const { receipts, statusReason, logs, groupedLogs } = params;
|
29083
29696
|
const isPanic = receipts.some(({ type: type3 }) => type3 === ReceiptType.Panic);
|
29084
29697
|
const isRevert = receipts.some(({ type: type3 }) => type3 === ReceiptType.Revert);
|
29085
29698
|
const metadata = {
|
29086
29699
|
logs,
|
29700
|
+
groupedLogs,
|
29087
29701
|
receipts,
|
29088
29702
|
panic: isPanic,
|
29089
29703
|
revert: isRevert,
|
@@ -29095,6 +29709,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
29095
29709
|
return assembleRevertError(receipts, logs, metadata);
|
29096
29710
|
}, "extractTxError");
|
29097
29711
|
|
29712
|
+
// src/providers/utils/merge-quantities.ts
|
29713
|
+
var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
|
29714
|
+
const resultMap = {};
|
29715
|
+
function addToMap({ amount, assetId }) {
|
29716
|
+
if (resultMap[assetId]) {
|
29717
|
+
resultMap[assetId] = resultMap[assetId].add(amount);
|
29718
|
+
} else {
|
29719
|
+
resultMap[assetId] = amount;
|
29720
|
+
}
|
29721
|
+
}
|
29722
|
+
__name(addToMap, "addToMap");
|
29723
|
+
coinQuantities.forEach((arr) => arr.forEach(addToMap));
|
29724
|
+
return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
|
29725
|
+
}, "mergeQuantities");
|
29726
|
+
|
29098
29727
|
// src/providers/transaction-request/errors.ts
|
29099
29728
|
var ChangeOutputCollisionError = class extends Error {
|
29100
29729
|
static {
|
@@ -30046,6 +30675,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
30046
30675
|
* @param account - The account to fund the transaction.
|
30047
30676
|
* @param params - The parameters for the transaction cost.
|
30048
30677
|
* @returns The current instance of the `ScriptTransactionRequest` funded.
|
30678
|
+
*
|
30679
|
+
* @deprecated Use `provider.assembleTx` instead.
|
30680
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
30049
30681
|
*/
|
30050
30682
|
async estimateAndFund(account, { signatureCallback, quantities = [] } = {}) {
|
30051
30683
|
const txCost = await account.getTransactionCost(this, { signatureCallback, quantities });
|
@@ -30129,6 +30761,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
30129
30761
|
}
|
30130
30762
|
return this.outputs.length - 1;
|
30131
30763
|
}
|
30764
|
+
/**
|
30765
|
+
* Adds a variable output to the transaction request.
|
30766
|
+
*
|
30767
|
+
* @param to - The recipient address as a BytesLike object. Defaults to ZeroBytes32 if not provided.
|
30768
|
+
* @param amount - The amount to be transferred as a BigNumberish object. Defaults to 0 if not provided.
|
30769
|
+
* @param assetId - The asset ID as a BytesLike object. Defaults to ZeroBytes32 if not provided.
|
30770
|
+
*/
|
30771
|
+
addVariableOutput(to, amount, assetId) {
|
30772
|
+
this.pushOutput({
|
30773
|
+
type: OutputType.Variable,
|
30774
|
+
to,
|
30775
|
+
amount,
|
30776
|
+
assetId
|
30777
|
+
});
|
30778
|
+
}
|
30132
30779
|
/**
|
30133
30780
|
* Calculates the maximum gas for the transaction.
|
30134
30781
|
*
|
@@ -30799,6 +31446,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
30799
31446
|
TransactionStatus2["success"] = "success";
|
30800
31447
|
TransactionStatus2["squeezedout"] = "squeezedout";
|
30801
31448
|
TransactionStatus2["failure"] = "failure";
|
31449
|
+
TransactionStatus2["preconfirmationSuccess"] = "preconfirmationSuccess";
|
31450
|
+
TransactionStatus2["preconfirmationFailure"] = "preconfirmationFailure";
|
30802
31451
|
return TransactionStatus2;
|
30803
31452
|
})(TransactionStatus || {});
|
30804
31453
|
var OperationName = /* @__PURE__ */ ((OperationName2) => {
|
@@ -31265,6 +31914,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31265
31914
|
return "submitted" /* submitted */;
|
31266
31915
|
case "SqueezedOutStatus":
|
31267
31916
|
return "squeezedout" /* squeezedout */;
|
31917
|
+
case "PreconfirmationSuccessStatus":
|
31918
|
+
return "preconfirmationSuccess" /* preconfirmationSuccess */;
|
31919
|
+
case "PreconfirmationFailureStatus":
|
31920
|
+
return "preconfirmationFailure" /* preconfirmationFailure */;
|
31268
31921
|
default:
|
31269
31922
|
throw new FuelError(
|
31270
31923
|
ErrorCode.INVALID_TRANSACTION_STATUS,
|
@@ -31272,15 +31925,30 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31272
31925
|
);
|
31273
31926
|
}
|
31274
31927
|
}, "getTransactionStatusName");
|
31928
|
+
var extractResolvedOutputs = /* @__PURE__ */ __name((serializedOutputs) => {
|
31929
|
+
const resolvedOutputs = [];
|
31930
|
+
serializedOutputs?.forEach(
|
31931
|
+
({ utxoId, output }) => resolvedOutputs.push({
|
31932
|
+
utxoId,
|
31933
|
+
output: deserializeProcessedTxOutput(output)
|
31934
|
+
})
|
31935
|
+
);
|
31936
|
+
return resolvedOutputs;
|
31937
|
+
}, "extractResolvedOutputs");
|
31275
31938
|
var processGraphqlStatus = /* @__PURE__ */ __name((gqlTransactionStatus) => {
|
31276
31939
|
let time;
|
31277
31940
|
let blockId;
|
31278
31941
|
let status;
|
31279
31942
|
let totalFee;
|
31280
31943
|
let totalGas;
|
31944
|
+
let receipts;
|
31945
|
+
let resolvedOutputs = [];
|
31946
|
+
let errorReason;
|
31281
31947
|
let isStatusFailure = false;
|
31282
31948
|
let isStatusSuccess = false;
|
31283
31949
|
let isStatusPending = false;
|
31950
|
+
let isStatusPreConfirmationSuccess = false;
|
31951
|
+
let isStatusPreConfirmationFailure = false;
|
31284
31952
|
if (gqlTransactionStatus?.type) {
|
31285
31953
|
status = getTransactionStatusName(gqlTransactionStatus.type);
|
31286
31954
|
switch (gqlTransactionStatus.type) {
|
@@ -31288,6 +31956,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31288
31956
|
time = gqlTransactionStatus.time;
|
31289
31957
|
blockId = gqlTransactionStatus.block?.id;
|
31290
31958
|
isStatusSuccess = true;
|
31959
|
+
receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
|
31291
31960
|
totalFee = bn(gqlTransactionStatus.totalFee);
|
31292
31961
|
totalGas = bn(gqlTransactionStatus.totalGas);
|
31293
31962
|
break;
|
@@ -31296,12 +31965,28 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31296
31965
|
blockId = gqlTransactionStatus.block?.id;
|
31297
31966
|
isStatusFailure = true;
|
31298
31967
|
totalFee = bn(gqlTransactionStatus.totalFee);
|
31968
|
+
receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
|
31299
31969
|
totalGas = bn(gqlTransactionStatus.totalGas);
|
31300
31970
|
break;
|
31301
31971
|
case "SubmittedStatus":
|
31302
31972
|
time = gqlTransactionStatus.time;
|
31303
31973
|
isStatusPending = true;
|
31304
31974
|
break;
|
31975
|
+
case "PreconfirmationSuccessStatus":
|
31976
|
+
isStatusPreConfirmationSuccess = true;
|
31977
|
+
totalFee = bn(gqlTransactionStatus.totalFee);
|
31978
|
+
totalGas = bn(gqlTransactionStatus.totalGas);
|
31979
|
+
receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
|
31980
|
+
resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
|
31981
|
+
break;
|
31982
|
+
case "PreconfirmationFailureStatus":
|
31983
|
+
isStatusPreConfirmationFailure = true;
|
31984
|
+
totalFee = bn(gqlTransactionStatus.totalFee);
|
31985
|
+
totalGas = bn(gqlTransactionStatus.totalGas);
|
31986
|
+
receipts = gqlTransactionStatus.preconfirmationReceipts?.map(deserializeReceipt);
|
31987
|
+
resolvedOutputs = extractResolvedOutputs(gqlTransactionStatus.resolvedOutputs);
|
31988
|
+
errorReason = gqlTransactionStatus.reason;
|
31989
|
+
break;
|
31305
31990
|
default:
|
31306
31991
|
}
|
31307
31992
|
}
|
@@ -31311,9 +31996,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31311
31996
|
status,
|
31312
31997
|
totalFee,
|
31313
31998
|
totalGas,
|
31999
|
+
receipts,
|
31314
32000
|
isStatusFailure,
|
31315
32001
|
isStatusSuccess,
|
31316
|
-
isStatusPending
|
32002
|
+
isStatusPending,
|
32003
|
+
isStatusPreConfirmationSuccess,
|
32004
|
+
isStatusPreConfirmationFailure,
|
32005
|
+
resolvedOutputs,
|
32006
|
+
errorReason
|
31317
32007
|
};
|
31318
32008
|
return processedGraphqlStatus;
|
31319
32009
|
}, "processGraphqlStatus");
|
@@ -31398,9 +32088,85 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31398
32088
|
return transactionSummary;
|
31399
32089
|
}
|
31400
32090
|
__name(assembleTransactionSummary, "assembleTransactionSummary");
|
32091
|
+
function assemblePreConfirmationTransactionSummary(params) {
|
32092
|
+
const { id, gqlTransactionStatus, transactionRequest, baseAssetId, maxInputs, abiMap } = params;
|
32093
|
+
let type3;
|
32094
|
+
let operations;
|
32095
|
+
let gasUsed;
|
32096
|
+
let tip;
|
32097
|
+
let transaction;
|
32098
|
+
let mintedAssets;
|
32099
|
+
let burnedAssets;
|
32100
|
+
const {
|
32101
|
+
isStatusFailure,
|
32102
|
+
isStatusSuccess,
|
32103
|
+
isStatusPending,
|
32104
|
+
status,
|
32105
|
+
receipts,
|
32106
|
+
resolvedOutputs,
|
32107
|
+
errorReason,
|
32108
|
+
totalFee,
|
32109
|
+
isStatusPreConfirmationFailure,
|
32110
|
+
isStatusPreConfirmationSuccess
|
32111
|
+
} = processGraphqlStatus(gqlTransactionStatus);
|
32112
|
+
if (receipts) {
|
32113
|
+
gasUsed = getGasUsedFromReceipts(receipts);
|
32114
|
+
mintedAssets = extractMintedAssetsFromReceipts(receipts);
|
32115
|
+
burnedAssets = extractBurnedAssetsFromReceipts(receipts);
|
32116
|
+
}
|
32117
|
+
if (transactionRequest) {
|
32118
|
+
transaction = transactionRequest.toTransaction();
|
32119
|
+
type3 = getTransactionTypeName(transaction.type);
|
32120
|
+
tip = bn(transaction.policies?.find((policy) => policy.type === PolicyType.Tip)?.data);
|
32121
|
+
if (receipts) {
|
32122
|
+
const rawPayload = hexlify(new TransactionCoder().encode(transaction));
|
32123
|
+
operations = getOperations({
|
32124
|
+
transactionType: transaction.type,
|
32125
|
+
inputs: transaction.inputs || [],
|
32126
|
+
outputs: transaction.outputs || [],
|
32127
|
+
receipts,
|
32128
|
+
rawPayload,
|
32129
|
+
abiMap,
|
32130
|
+
maxInputs,
|
32131
|
+
baseAssetId
|
32132
|
+
});
|
32133
|
+
}
|
32134
|
+
}
|
32135
|
+
const transactionSummary = {
|
32136
|
+
id,
|
32137
|
+
fee: totalFee,
|
32138
|
+
type: type3,
|
32139
|
+
status,
|
32140
|
+
receipts,
|
32141
|
+
gasUsed,
|
32142
|
+
tip,
|
32143
|
+
isStatusPreConfirmationFailure,
|
32144
|
+
isStatusPreConfirmationSuccess,
|
32145
|
+
isStatusFailure,
|
32146
|
+
isStatusSuccess,
|
32147
|
+
isStatusPending,
|
32148
|
+
...transaction && {
|
32149
|
+
isTypeMint: isTypeMint(transaction.type),
|
32150
|
+
isTypeCreate: isTypeCreate(transaction.type),
|
32151
|
+
isTypeScript: isTypeScript(transaction.type),
|
32152
|
+
isTypeUpgrade: isTypeUpgrade(transaction.type),
|
32153
|
+
isTypeUpload: isTypeUpload(transaction.type),
|
32154
|
+
isTypeBlob: isTypeBlob(transaction.type)
|
32155
|
+
},
|
32156
|
+
mintedAssets,
|
32157
|
+
burnedAssets,
|
32158
|
+
resolvedOutputs,
|
32159
|
+
errorReason,
|
32160
|
+
transaction,
|
32161
|
+
operations
|
32162
|
+
};
|
32163
|
+
return transactionSummary;
|
32164
|
+
}
|
32165
|
+
__name(assemblePreConfirmationTransactionSummary, "assemblePreConfirmationTransactionSummary");
|
31401
32166
|
|
31402
|
-
// src/providers/transaction-response/
|
31403
|
-
function
|
32167
|
+
// src/providers/transaction-response/getAllDecodedLogs.ts
|
32168
|
+
function getAllDecodedLogs(opts) {
|
32169
|
+
const { receipts, mainAbi, externalAbis = {} } = opts;
|
31404
32170
|
let mainContract = "";
|
31405
32171
|
if (mainAbi.programType === "contract") {
|
31406
32172
|
const firstCallReceipt = receipts.find(
|
@@ -31408,54 +32174,27 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31408
32174
|
);
|
31409
32175
|
mainContract = firstCallReceipt.to;
|
31410
32176
|
}
|
31411
|
-
return receipts.reduce(
|
31412
|
-
|
31413
|
-
|
31414
|
-
|
31415
|
-
|
31416
|
-
|
31417
|
-
|
31418
|
-
|
31419
|
-
|
32177
|
+
return receipts.reduce(
|
32178
|
+
({ logs, groupedLogs }, receipt) => {
|
32179
|
+
if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {
|
32180
|
+
const isLogFromMainAbi = receipt.id === ZeroBytes32 || mainContract === receipt.id;
|
32181
|
+
const isDecodable = isLogFromMainAbi || externalAbis[receipt.id];
|
32182
|
+
if (isDecodable) {
|
32183
|
+
const interfaceToUse = isLogFromMainAbi ? new Interface(mainAbi) : new Interface(externalAbis[receipt.id]);
|
32184
|
+
const data = receipt.type === ReceiptType.Log ? new BigNumberCoder("u64").encode(receipt.ra) : receipt.data;
|
32185
|
+
const [decodedLog] = interfaceToUse.decodeLog(data, receipt.rb.toString());
|
32186
|
+
logs.push(decodedLog);
|
32187
|
+
groupedLogs[receipt.id] = [...groupedLogs[receipt.id] || [], decodedLog];
|
32188
|
+
}
|
31420
32189
|
}
|
31421
|
-
|
31422
|
-
|
31423
|
-
|
32190
|
+
return { logs, groupedLogs };
|
32191
|
+
},
|
32192
|
+
{ logs: [], groupedLogs: {} }
|
32193
|
+
);
|
31424
32194
|
}
|
31425
|
-
__name(
|
32195
|
+
__name(getAllDecodedLogs, "getAllDecodedLogs");
|
31426
32196
|
|
31427
32197
|
// src/providers/transaction-response/transaction-response.ts
|
31428
|
-
function mapGqlOutputsToTxOutputs(outputs) {
|
31429
|
-
return outputs.map((o) => {
|
31430
|
-
const obj = "amount" in o ? { ...o, amount: bn(o.amount) } : o;
|
31431
|
-
switch (obj.type) {
|
31432
|
-
case "CoinOutput":
|
31433
|
-
return { ...obj, type: OutputType.Coin };
|
31434
|
-
case "ContractOutput":
|
31435
|
-
return {
|
31436
|
-
...obj,
|
31437
|
-
type: OutputType.Contract,
|
31438
|
-
inputIndex: parseInt(obj.inputIndex, 10)
|
31439
|
-
};
|
31440
|
-
case "ChangeOutput":
|
31441
|
-
return {
|
31442
|
-
...obj,
|
31443
|
-
type: OutputType.Change
|
31444
|
-
};
|
31445
|
-
case "VariableOutput":
|
31446
|
-
return { ...obj, type: OutputType.Variable };
|
31447
|
-
case "ContractCreated":
|
31448
|
-
return {
|
31449
|
-
...obj,
|
31450
|
-
type: OutputType.ContractCreated,
|
31451
|
-
contractId: obj.contract
|
31452
|
-
};
|
31453
|
-
default:
|
31454
|
-
return assertUnreachable(obj);
|
31455
|
-
}
|
31456
|
-
});
|
31457
|
-
}
|
31458
|
-
__name(mapGqlOutputsToTxOutputs, "mapGqlOutputsToTxOutputs");
|
31459
32198
|
var TransactionResponse = class _TransactionResponse {
|
31460
32199
|
/**
|
31461
32200
|
* Constructor for `TransactionResponse`.
|
@@ -31465,11 +32204,16 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31465
32204
|
*/
|
31466
32205
|
constructor(tx, provider, chainId, abis, submitTxSubscription) {
|
31467
32206
|
this.submitTxSubscription = submitTxSubscription;
|
31468
|
-
|
32207
|
+
if (typeof tx === "string") {
|
32208
|
+
this.id = tx;
|
32209
|
+
} else {
|
32210
|
+
this.id = tx.getTransactionId(chainId);
|
32211
|
+
this.request = tx;
|
32212
|
+
}
|
31469
32213
|
this.provider = provider;
|
31470
32214
|
this.abis = abis;
|
31471
|
-
this.request = typeof tx === "string" ? void 0 : tx;
|
31472
32215
|
this.waitForResult = this.waitForResult.bind(this);
|
32216
|
+
this.waitForPreConfirmation = this.waitForPreConfirmation.bind(this);
|
31473
32217
|
}
|
31474
32218
|
static {
|
31475
32219
|
__name(this, "TransactionResponse");
|
@@ -31485,6 +32229,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31485
32229
|
request;
|
31486
32230
|
status;
|
31487
32231
|
abis;
|
32232
|
+
waitingForStreamData = false;
|
32233
|
+
statusResolvers = /* @__PURE__ */ new Map();
|
32234
|
+
preConfirmationStatus;
|
31488
32235
|
/**
|
31489
32236
|
* Async constructor for `TransactionResponse`. This method can be used to create
|
31490
32237
|
* an instance of `TransactionResponse` and wait for the transaction to be fetched
|
@@ -31516,29 +32263,38 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31516
32263
|
}
|
31517
32264
|
return input;
|
31518
32265
|
});
|
31519
|
-
tx.outputs =
|
31520
|
-
if (
|
32266
|
+
tx.outputs = status.transaction.outputs.map(deserializeProcessedTxOutput);
|
32267
|
+
if (status.transaction.receiptsRoot) {
|
31521
32268
|
tx.receiptsRoot = status.transaction.receiptsRoot;
|
31522
32269
|
}
|
31523
32270
|
}
|
31524
32271
|
}
|
31525
32272
|
async getTransaction() {
|
31526
32273
|
if (this.request) {
|
31527
|
-
const
|
31528
|
-
this.applyMalleableSubscriptionFields(
|
32274
|
+
const tx2 = this.request.toTransaction();
|
32275
|
+
this.applyMalleableSubscriptionFields(tx2);
|
31529
32276
|
return {
|
31530
|
-
tx,
|
32277
|
+
tx: tx2,
|
31531
32278
|
bytes: this.request.toTransactionBytes()
|
31532
32279
|
};
|
31533
32280
|
}
|
31534
32281
|
const gqlTransaction = this.gqlTransaction ?? await this.fetch();
|
32282
|
+
const { rawPayload } = gqlTransaction;
|
32283
|
+
const bytes = arrayify(rawPayload);
|
32284
|
+
const [tx] = new TransactionCoder().decode(bytes, 0);
|
31535
32285
|
return {
|
31536
|
-
tx
|
31537
|
-
bytes
|
32286
|
+
tx,
|
32287
|
+
bytes
|
31538
32288
|
};
|
31539
32289
|
}
|
32290
|
+
/**
|
32291
|
+
*
|
32292
|
+
* NOTE: This method is only called within `getTransactionSummary`, which is invoked after `getTransaction`.
|
32293
|
+
* Since `getTransaction` only resolves once the transaction has been processed,
|
32294
|
+
* the status at this point is guaranteed to be either `SuccessStatus` or `FailureStatus`.
|
32295
|
+
*/
|
31540
32296
|
getReceipts() {
|
31541
|
-
const status = this.
|
32297
|
+
const status = this.getTransactionStatus();
|
31542
32298
|
switch (status?.type) {
|
31543
32299
|
case "SuccessStatus":
|
31544
32300
|
case "FailureStatus":
|
@@ -31571,18 +32327,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31571
32327
|
this.gqlTransaction = response.transaction;
|
31572
32328
|
return response.transaction;
|
31573
32329
|
}
|
31574
|
-
/**
|
31575
|
-
* Decode the raw payload of the transaction.
|
31576
|
-
*
|
31577
|
-
* @param transactionWithReceipts - The transaction with receipts object.
|
31578
|
-
* @returns The decoded transaction.
|
31579
|
-
*/
|
31580
|
-
decodeTransaction(transactionWithReceipts) {
|
31581
|
-
return new TransactionCoder().decode(
|
31582
|
-
arrayify(transactionWithReceipts.rawPayload),
|
31583
|
-
0
|
31584
|
-
)?.[0];
|
31585
|
-
}
|
31586
32330
|
/**
|
31587
32331
|
* Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will
|
31588
32332
|
* fetch it from the provider
|
@@ -31593,7 +32337,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31593
32337
|
async getTransactionSummary(contractsAbiMap) {
|
31594
32338
|
const { tx: transaction, bytes: transactionBytes } = await this.getTransaction();
|
31595
32339
|
const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = await this.provider.getGasConfig();
|
31596
|
-
const
|
32340
|
+
const transactionStatus = this.getTransactionStatus();
|
32341
|
+
const totalFee = getTotalFeeFromStatus(transactionStatus);
|
31597
32342
|
const gasPrice = totalFee ? bn(0) : await this.provider.getLatestGasPrice();
|
31598
32343
|
const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
|
31599
32344
|
const baseAssetId = await this.provider.getBaseAssetId();
|
@@ -31602,7 +32347,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31602
32347
|
receipts: this.getReceipts(),
|
31603
32348
|
transaction,
|
31604
32349
|
transactionBytes,
|
31605
|
-
gqlTransactionStatus:
|
32350
|
+
gqlTransactionStatus: transactionStatus,
|
31606
32351
|
gasPerByte,
|
31607
32352
|
gasPriceFactor,
|
31608
32353
|
abiMap: contractsAbiMap,
|
@@ -31614,29 +32359,92 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31614
32359
|
});
|
31615
32360
|
return transactionSummary;
|
31616
32361
|
}
|
32362
|
+
async getPreConfirmationTransactionSummary(contractsAbiMap) {
|
32363
|
+
const baseAssetId = await this.provider.getBaseAssetId();
|
32364
|
+
const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
|
32365
|
+
const transactionSummary = assemblePreConfirmationTransactionSummary({
|
32366
|
+
id: this.id,
|
32367
|
+
gqlTransactionStatus: this.preConfirmationStatus || this.status,
|
32368
|
+
baseAssetId,
|
32369
|
+
maxInputs,
|
32370
|
+
abiMap: contractsAbiMap,
|
32371
|
+
transactionRequest: this.request
|
32372
|
+
});
|
32373
|
+
return transactionSummary;
|
32374
|
+
}
|
32375
|
+
resolveStatus(type3) {
|
32376
|
+
const resolvers = this.statusResolvers.get(type3) || [];
|
32377
|
+
resolvers.forEach((resolve) => resolve());
|
32378
|
+
this.statusResolvers.delete(type3);
|
32379
|
+
}
|
32380
|
+
async waitForStatus(type3) {
|
32381
|
+
return new Promise((resolve, reject) => {
|
32382
|
+
const resolvers = this.statusResolvers.get(type3) || [];
|
32383
|
+
resolvers.push(() => {
|
32384
|
+
resolve();
|
32385
|
+
});
|
32386
|
+
this.statusResolvers.set(type3, resolvers);
|
32387
|
+
this.waitForStatusChange().catch(reject);
|
32388
|
+
});
|
32389
|
+
}
|
32390
|
+
/**
|
32391
|
+
* Waits for the status change of the transaction.
|
32392
|
+
* If the transaction is already in a final state, it will return immediately.
|
32393
|
+
* If the transaction is not in a final state, it will wait for the status change.
|
32394
|
+
* If we are already subscribed to the status change, it will return immediately.
|
32395
|
+
*/
|
31617
32396
|
async waitForStatusChange() {
|
31618
|
-
const
|
31619
|
-
if (
|
32397
|
+
const type3 = this.status?.type;
|
32398
|
+
if (type3 && (type3 === "FailureStatus" || type3 === "SuccessStatus")) {
|
32399
|
+
this.resolveStatus("preConfirmation");
|
32400
|
+
this.resolveStatus("confirmation");
|
32401
|
+
return;
|
32402
|
+
}
|
32403
|
+
if (this.waitingForStreamData) {
|
31620
32404
|
return;
|
31621
32405
|
}
|
32406
|
+
this.waitingForStreamData = true;
|
31622
32407
|
const subscription = this.submitTxSubscription ?? await this.provider.operations.statusChange({
|
31623
|
-
transactionId: this.id
|
32408
|
+
transactionId: this.id,
|
32409
|
+
includePreConfirmation: true
|
31624
32410
|
});
|
31625
32411
|
for await (const sub2 of subscription) {
|
31626
32412
|
const statusChange = "statusChange" in sub2 ? sub2.statusChange : sub2.submitAndAwaitStatus;
|
31627
32413
|
this.status = statusChange;
|
31628
32414
|
if (statusChange.type === "SqueezedOutStatus") {
|
31629
|
-
this.unsetResourceCache();
|
31630
32415
|
throw new FuelError(
|
31631
32416
|
ErrorCode.TRANSACTION_SQUEEZED_OUT,
|
31632
32417
|
`Transaction Squeezed Out with reason: ${statusChange.reason}`
|
31633
32418
|
);
|
31634
32419
|
}
|
31635
|
-
if (statusChange.type
|
32420
|
+
if (statusChange.type === "PreconfirmationSuccessStatus" || statusChange.type === "PreconfirmationFailureStatus") {
|
32421
|
+
this.preConfirmationStatus = statusChange;
|
32422
|
+
this.resolveStatus("preConfirmation");
|
32423
|
+
}
|
32424
|
+
if (statusChange.type === "SuccessStatus" || statusChange.type === "FailureStatus") {
|
32425
|
+
this.resolveStatus("confirmation");
|
32426
|
+
this.resolveStatus("preConfirmation");
|
32427
|
+
this.waitingForStreamData = false;
|
31636
32428
|
break;
|
31637
32429
|
}
|
31638
32430
|
}
|
31639
32431
|
}
|
32432
|
+
async waitForConfirmationStatuses() {
|
32433
|
+
try {
|
32434
|
+
await this.waitForStatus("confirmation");
|
32435
|
+
} catch (error2) {
|
32436
|
+
this.unsetResourceCache();
|
32437
|
+
throw error2;
|
32438
|
+
}
|
32439
|
+
}
|
32440
|
+
async waitForPreConfirmationStatuses() {
|
32441
|
+
try {
|
32442
|
+
await this.waitForStatus("preConfirmation");
|
32443
|
+
} catch (error2) {
|
32444
|
+
this.unsetResourceCache();
|
32445
|
+
throw error2;
|
32446
|
+
}
|
32447
|
+
}
|
31640
32448
|
/**
|
31641
32449
|
* Assembles the result of a transaction by retrieving the transaction summary,
|
31642
32450
|
* decoding logs (if available), and handling transaction failure.
|
@@ -31654,37 +32462,69 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31654
32462
|
const transactionResult = {
|
31655
32463
|
...transactionSummary
|
31656
32464
|
};
|
31657
|
-
let logs = [];
|
32465
|
+
let { logs, groupedLogs } = { logs: [], groupedLogs: {} };
|
31658
32466
|
if (this.abis) {
|
31659
|
-
logs =
|
31660
|
-
transactionSummary.receipts,
|
31661
|
-
this.abis.main,
|
31662
|
-
this.abis.otherContractsAbis
|
31663
|
-
);
|
32467
|
+
({ logs, groupedLogs } = getAllDecodedLogs({
|
32468
|
+
receipts: transactionSummary.receipts,
|
32469
|
+
mainAbi: this.abis.main,
|
32470
|
+
externalAbis: this.abis.otherContractsAbis
|
32471
|
+
}));
|
31664
32472
|
transactionResult.logs = logs;
|
32473
|
+
transactionResult.groupedLogs = groupedLogs;
|
31665
32474
|
}
|
31666
32475
|
const { receipts } = transactionResult;
|
31667
|
-
const status = this.
|
32476
|
+
const status = this.getTransactionStatus();
|
31668
32477
|
if (status?.type === "FailureStatus") {
|
31669
32478
|
const { reason } = status;
|
31670
32479
|
throw extractTxError({
|
31671
32480
|
receipts,
|
31672
32481
|
statusReason: reason,
|
31673
|
-
logs
|
32482
|
+
logs,
|
32483
|
+
groupedLogs
|
31674
32484
|
});
|
31675
32485
|
}
|
31676
32486
|
return transactionResult;
|
31677
32487
|
}
|
32488
|
+
async assemblePreConfirmationResult(contractsAbiMap) {
|
32489
|
+
const transactionSummary = await this.getPreConfirmationTransactionSummary(contractsAbiMap);
|
32490
|
+
const transactionResult = {
|
32491
|
+
...transactionSummary,
|
32492
|
+
logs: [],
|
32493
|
+
groupedLogs: {}
|
32494
|
+
};
|
32495
|
+
let { logs, groupedLogs } = { logs: [], groupedLogs: {} };
|
32496
|
+
if (this.abis && transactionSummary.receipts) {
|
32497
|
+
({ logs, groupedLogs } = getAllDecodedLogs({
|
32498
|
+
receipts: transactionSummary.receipts,
|
32499
|
+
mainAbi: this.abis.main,
|
32500
|
+
externalAbis: this.abis.otherContractsAbis
|
32501
|
+
}));
|
32502
|
+
transactionResult.logs = logs;
|
32503
|
+
transactionResult.groupedLogs = groupedLogs;
|
32504
|
+
}
|
32505
|
+
return transactionResult;
|
32506
|
+
}
|
31678
32507
|
/**
|
31679
32508
|
* Waits for transaction to complete and returns the result.
|
31680
32509
|
*
|
31681
32510
|
* @returns The completed transaction result
|
31682
32511
|
*/
|
31683
32512
|
async waitForResult(contractsAbiMap) {
|
31684
|
-
await this.
|
32513
|
+
await this.waitForConfirmationStatuses();
|
31685
32514
|
this.unsetResourceCache();
|
31686
32515
|
return this.assembleResult(contractsAbiMap);
|
31687
32516
|
}
|
32517
|
+
/**
|
32518
|
+
* Waits for the transaction's pre-confirmation and returns the result.
|
32519
|
+
*
|
32520
|
+
* @param contractsAbiMap - The contracts ABI map.
|
32521
|
+
* @returns The pre-confirmed transaction result
|
32522
|
+
*/
|
32523
|
+
async waitForPreConfirmation(contractsAbiMap) {
|
32524
|
+
await this.waitForPreConfirmationStatuses();
|
32525
|
+
this.unsetResourceCache();
|
32526
|
+
return this.assemblePreConfirmationResult(contractsAbiMap);
|
32527
|
+
}
|
31688
32528
|
/**
|
31689
32529
|
* Waits for transaction to complete and returns the result.
|
31690
32530
|
*
|
@@ -31696,8 +32536,36 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31696
32536
|
unsetResourceCache() {
|
31697
32537
|
this.provider.cache?.unset(this.id);
|
31698
32538
|
}
|
32539
|
+
getTransactionStatus() {
|
32540
|
+
return this.status ?? this.gqlTransaction?.status;
|
32541
|
+
}
|
31699
32542
|
};
|
31700
32543
|
|
32544
|
+
// src/providers/transaction-response/getDecodedLogs.ts
|
32545
|
+
function getDecodedLogs(receipts, mainAbi, externalAbis = {}) {
|
32546
|
+
let mainContract = "";
|
32547
|
+
if (mainAbi.programType === "contract") {
|
32548
|
+
const firstCallReceipt = receipts.find(
|
32549
|
+
(r) => r.type === ReceiptType.Call && r.id === ZeroBytes32
|
32550
|
+
);
|
32551
|
+
mainContract = firstCallReceipt.to;
|
32552
|
+
}
|
32553
|
+
return receipts.reduce((logs, receipt) => {
|
32554
|
+
if (receipt.type === ReceiptType.LogData || receipt.type === ReceiptType.Log) {
|
32555
|
+
const isLogFromMainAbi = receipt.id === ZeroBytes32 || mainContract === receipt.id;
|
32556
|
+
const isDecodable = isLogFromMainAbi || externalAbis[receipt.id];
|
32557
|
+
if (isDecodable) {
|
32558
|
+
const interfaceToUse = isLogFromMainAbi ? new Interface(mainAbi) : new Interface(externalAbis[receipt.id]);
|
32559
|
+
const data = receipt.type === ReceiptType.Log ? new BigNumberCoder("u64").encode(receipt.ra) : receipt.data;
|
32560
|
+
const [decodedLog] = interfaceToUse.decodeLog(data, receipt.rb.toString());
|
32561
|
+
logs.push(decodedLog);
|
32562
|
+
}
|
32563
|
+
}
|
32564
|
+
return logs;
|
32565
|
+
}, []);
|
32566
|
+
}
|
32567
|
+
__name(getDecodedLogs, "getDecodedLogs");
|
32568
|
+
|
31701
32569
|
// src/providers/utils/auto-retry-fetch.ts
|
31702
32570
|
function getWaitDelay(options, retryAttemptNum) {
|
31703
32571
|
const duration = options.baseDelay ?? 150;
|
@@ -31736,21 +32604,22 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31736
32604
|
}
|
31737
32605
|
__name(autoRetryFetch, "autoRetryFetch");
|
31738
32606
|
|
31739
|
-
// src/providers/utils/
|
31740
|
-
var
|
31741
|
-
const {
|
31742
|
-
|
31743
|
-
|
31744
|
-
if (
|
31745
|
-
|
31746
|
-
|
31747
|
-
|
31748
|
-
|
31749
|
-
|
31750
|
-
final.messages = [...final.messages, ...cached.messages.slice(0, maxInputs - total)];
|
32607
|
+
// src/providers/utils/parse-graphql-response.ts
|
32608
|
+
var parseGraphqlResponse = /* @__PURE__ */ __name(async (options) => {
|
32609
|
+
const { response, isSubscription } = options;
|
32610
|
+
let extensions;
|
32611
|
+
const responseClone = response.clone();
|
32612
|
+
if (isSubscription) {
|
32613
|
+
const reader = responseClone.body?.getReader();
|
32614
|
+
const { event } = await FuelGraphqlSubscriber.readEvent(reader);
|
32615
|
+
extensions = event?.extensions;
|
32616
|
+
} else {
|
32617
|
+
extensions = (await responseClone.json()).extensions;
|
31751
32618
|
}
|
31752
|
-
return
|
31753
|
-
|
32619
|
+
return {
|
32620
|
+
extensions
|
32621
|
+
};
|
32622
|
+
}, "parseGraphqlResponse");
|
31754
32623
|
|
31755
32624
|
// src/providers/utils/validate-pagination-args.ts
|
31756
32625
|
var validatePaginationArgs = /* @__PURE__ */ __name((params) => {
|
@@ -31795,22 +32664,48 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31795
32664
|
var BLOCKS_PAGE_SIZE_LIMIT = 5;
|
31796
32665
|
var DEFAULT_RESOURCE_CACHE_TTL = 2e4;
|
31797
32666
|
var GAS_USED_MODIFIER = 1.2;
|
32667
|
+
var WRITE_OPERATIONS = [
|
32668
|
+
"submit",
|
32669
|
+
"submitAndAwaitStatus",
|
32670
|
+
"produceBlocks"
|
32671
|
+
];
|
31798
32672
|
var Provider = class _Provider {
|
31799
32673
|
static {
|
31800
32674
|
__name(this, "Provider");
|
31801
32675
|
}
|
31802
32676
|
operations;
|
31803
32677
|
cache;
|
31804
|
-
/**
|
31805
|
-
|
32678
|
+
/**
|
32679
|
+
* @hidden
|
32680
|
+
* @param url - If provided, clears cache only for given url
|
32681
|
+
*/
|
32682
|
+
static clearChainAndNodeCaches(url) {
|
32683
|
+
if (url) {
|
32684
|
+
delete _Provider.inflightFetchChainAndNodeInfoRequests[url];
|
32685
|
+
delete _Provider.chainInfoCache[url];
|
32686
|
+
delete _Provider.nodeInfoCache[url];
|
32687
|
+
delete _Provider.currentBlockHeightCache[url];
|
32688
|
+
return;
|
32689
|
+
}
|
31806
32690
|
_Provider.inflightFetchChainAndNodeInfoRequests = {};
|
31807
32691
|
_Provider.nodeInfoCache = {};
|
31808
32692
|
_Provider.chainInfoCache = {};
|
32693
|
+
_Provider.currentBlockHeightCache = {};
|
31809
32694
|
}
|
31810
32695
|
/** @hidden */
|
31811
32696
|
url;
|
31812
32697
|
/** @hidden */
|
31813
32698
|
urlWithoutAuth;
|
32699
|
+
/**
|
32700
|
+
* Governs whether to include the required block height in the request body
|
32701
|
+
* for block-sensitive operations like when submitting a transaction.
|
32702
|
+
*
|
32703
|
+
* This ensures that the operation is executed at the correct block height,
|
32704
|
+
* regardless of which node in the network the request is routed to.
|
32705
|
+
*
|
32706
|
+
* `true` by default.
|
32707
|
+
*/
|
32708
|
+
static ENABLE_RPC_CONSISTENCY = true;
|
31814
32709
|
/** @hidden */
|
31815
32710
|
static inflightFetchChainAndNodeInfoRequests = {};
|
31816
32711
|
/** @hidden */
|
@@ -31818,6 +32713,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31818
32713
|
/** @hidden */
|
31819
32714
|
static nodeInfoCache = {};
|
31820
32715
|
/** @hidden */
|
32716
|
+
static currentBlockHeightCache = {};
|
32717
|
+
/** @hidden */
|
31821
32718
|
static incompatibleNodeVersionMessage = "";
|
31822
32719
|
/** @hidden */
|
31823
32720
|
consensusParametersTimestamp;
|
@@ -31829,6 +32726,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31829
32726
|
headers: void 0,
|
31830
32727
|
cache: void 0
|
31831
32728
|
};
|
32729
|
+
static extractOperationName(body) {
|
32730
|
+
return body?.toString().match(/"operationName":"(.+)"/)?.[1];
|
32731
|
+
}
|
32732
|
+
static isWriteOperation(body) {
|
32733
|
+
return WRITE_OPERATIONS.includes(this.extractOperationName(body));
|
32734
|
+
}
|
32735
|
+
static normalizeUrl(url) {
|
32736
|
+
return url.replace(/-sub$/, "");
|
32737
|
+
}
|
32738
|
+
static hasWriteOperationHappened(url) {
|
32739
|
+
return isDefined(_Provider.currentBlockHeightCache[this.normalizeUrl(url)]);
|
32740
|
+
}
|
31832
32741
|
/**
|
31833
32742
|
* @hidden
|
31834
32743
|
*/
|
@@ -31846,9 +32755,57 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31846
32755
|
if (options.requestMiddleware) {
|
31847
32756
|
fullRequest = await options.requestMiddleware(fullRequest);
|
31848
32757
|
}
|
31849
|
-
|
32758
|
+
if (_Provider.ENABLE_RPC_CONSISTENCY && _Provider.hasWriteOperationHappened(url)) {
|
32759
|
+
_Provider.applyBlockHeight(fullRequest, url);
|
32760
|
+
}
|
32761
|
+
return _Provider.fetchAndProcessBlockHeight(url, fullRequest, options);
|
31850
32762
|
}, retryOptions);
|
31851
32763
|
}
|
32764
|
+
static applyBlockHeight(request2, url) {
|
32765
|
+
const normalizedUrl = this.normalizeUrl(url);
|
32766
|
+
const currentBlockHeight = _Provider.currentBlockHeightCache[normalizedUrl] ?? 0;
|
32767
|
+
request2.body = request2.body?.toString().replace(/}$/, `,"extensions":{"required_fuel_block_height":${currentBlockHeight}}}`);
|
32768
|
+
}
|
32769
|
+
static async fetchAndProcessBlockHeight(url, request2, options) {
|
32770
|
+
const fetchFn = /* @__PURE__ */ __name(() => options.fetch ? options.fetch(url, request2, options) : fetch(url, request2), "fetchFn");
|
32771
|
+
const isWriteOperation = _Provider.isWriteOperation(request2.body);
|
32772
|
+
if (isWriteOperation && !_Provider.hasWriteOperationHappened(url)) {
|
32773
|
+
_Provider.currentBlockHeightCache[_Provider.normalizeUrl(url)] = 0;
|
32774
|
+
}
|
32775
|
+
let response = await fetchFn();
|
32776
|
+
if (!_Provider.ENABLE_RPC_CONSISTENCY) {
|
32777
|
+
return response;
|
32778
|
+
}
|
32779
|
+
const retryOptions = {
|
32780
|
+
maxRetries: 5,
|
32781
|
+
baseDelay: 500
|
32782
|
+
};
|
32783
|
+
for (let retriesLeft = retryOptions.maxRetries; retriesLeft > 0; --retriesLeft) {
|
32784
|
+
const { extensions } = await parseGraphqlResponse({
|
32785
|
+
response,
|
32786
|
+
isSubscription: url.endsWith("-sub")
|
32787
|
+
});
|
32788
|
+
_Provider.setCurrentBlockHeight(url, extensions?.current_fuel_block_height);
|
32789
|
+
if (!extensions?.fuel_block_height_precondition_failed) {
|
32790
|
+
break;
|
32791
|
+
}
|
32792
|
+
const retryAttempt = retryOptions.maxRetries - retriesLeft + 1;
|
32793
|
+
const sleepTime = getWaitDelay(retryOptions, retryAttempt);
|
32794
|
+
await sleep(sleepTime);
|
32795
|
+
response = await fetchFn();
|
32796
|
+
}
|
32797
|
+
return response;
|
32798
|
+
}
|
32799
|
+
static setCurrentBlockHeight(url, height) {
|
32800
|
+
const writeOperationHappened = _Provider.hasWriteOperationHappened(url);
|
32801
|
+
if (!isDefined(height) || !writeOperationHappened) {
|
32802
|
+
return;
|
32803
|
+
}
|
32804
|
+
const normalizedUrl = _Provider.normalizeUrl(url);
|
32805
|
+
if (height > _Provider.currentBlockHeightCache[normalizedUrl]) {
|
32806
|
+
_Provider.currentBlockHeightCache[normalizedUrl] = height;
|
32807
|
+
}
|
32808
|
+
}
|
31852
32809
|
/**
|
31853
32810
|
* Constructor to initialize a Provider.
|
31854
32811
|
*
|
@@ -31934,6 +32891,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31934
32891
|
* Returns some helpful parameters related to gas fees.
|
31935
32892
|
*/
|
31936
32893
|
async getGasConfig() {
|
32894
|
+
await this.init();
|
31937
32895
|
const {
|
31938
32896
|
txParameters: { maxGasPerTx },
|
31939
32897
|
predicateParameters: { maxGasPerPredicate },
|
@@ -31969,39 +32927,52 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
31969
32927
|
* @returns A promise that resolves to the Chain and NodeInfo.
|
31970
32928
|
*/
|
31971
32929
|
async fetchChainAndNodeInfo(ignoreCache = false) {
|
31972
|
-
|
31973
|
-
|
31974
|
-
|
31975
|
-
|
31976
|
-
chain
|
31977
|
-
|
31978
|
-
|
31979
|
-
|
31980
|
-
|
31981
|
-
|
31982
|
-
|
31983
|
-
|
31984
|
-
|
31985
|
-
|
31986
|
-
|
31987
|
-
}
|
31988
|
-
const { promise, resolve } = deferPromise();
|
31989
|
-
_Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth] = promise;
|
31990
|
-
const data = await this.operations.getChainAndNodeInfo();
|
31991
|
-
nodeInfo = deserializeNodeInfo(data.nodeInfo);
|
31992
|
-
chain = deserializeChain(data.chain);
|
31993
|
-
_Provider.setIncompatibleNodeVersionMessage(nodeInfo);
|
31994
|
-
_Provider.chainInfoCache[this.urlWithoutAuth] = chain;
|
31995
|
-
_Provider.nodeInfoCache[this.urlWithoutAuth] = nodeInfo;
|
31996
|
-
const now = Date.now();
|
31997
|
-
this.consensusParametersTimestamp = now;
|
31998
|
-
resolve(now);
|
31999
|
-
delete _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth];
|
32930
|
+
const nodeInfo = _Provider.nodeInfoCache[this.urlWithoutAuth];
|
32931
|
+
const chain = _Provider.chainInfoCache[this.urlWithoutAuth];
|
32932
|
+
const hasCache = nodeInfo && chain;
|
32933
|
+
if (hasCache && !ignoreCache) {
|
32934
|
+
return { nodeInfo, chain };
|
32935
|
+
}
|
32936
|
+
const inflightRequest = _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth];
|
32937
|
+
if (inflightRequest) {
|
32938
|
+
return inflightRequest.then((data) => {
|
32939
|
+
this.consensusParametersTimestamp = data.consensusParametersTimestamp;
|
32940
|
+
return {
|
32941
|
+
nodeInfo: _Provider.nodeInfoCache[this.urlWithoutAuth],
|
32942
|
+
chain: _Provider.chainInfoCache[this.urlWithoutAuth]
|
32943
|
+
};
|
32944
|
+
});
|
32000
32945
|
}
|
32001
|
-
|
32002
|
-
chain,
|
32003
|
-
nodeInfo
|
32004
|
-
|
32946
|
+
const getChainAndNodeInfoFromNetwork = this.operations.getChainAndNodeInfo().then((data) => ({
|
32947
|
+
chain: deserializeChain(data.chain),
|
32948
|
+
nodeInfo: deserializeNodeInfo(data.nodeInfo),
|
32949
|
+
consensusParametersTimestamp: Date.now()
|
32950
|
+
})).then((data) => {
|
32951
|
+
_Provider.setIncompatibleNodeVersionMessage(data.nodeInfo);
|
32952
|
+
_Provider.chainInfoCache[this.urlWithoutAuth] = data.chain;
|
32953
|
+
_Provider.nodeInfoCache[this.urlWithoutAuth] = data.nodeInfo;
|
32954
|
+
this.consensusParametersTimestamp = data.consensusParametersTimestamp;
|
32955
|
+
return data;
|
32956
|
+
}).catch((err) => {
|
32957
|
+
const error2 = new FuelError(
|
32958
|
+
FuelError.CODES.CONNECTION_REFUSED,
|
32959
|
+
"Unable to fetch chain and node info from the network",
|
32960
|
+
{ url: this.urlWithoutAuth },
|
32961
|
+
err
|
32962
|
+
);
|
32963
|
+
error2.cause = { code: "ECONNREFUSED" };
|
32964
|
+
throw error2;
|
32965
|
+
}).finally(() => {
|
32966
|
+
delete _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth];
|
32967
|
+
});
|
32968
|
+
_Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth] = getChainAndNodeInfoFromNetwork;
|
32969
|
+
return _Provider.inflightFetchChainAndNodeInfoRequests[this.urlWithoutAuth].then((data) => {
|
32970
|
+
this.consensusParametersTimestamp = data.consensusParametersTimestamp;
|
32971
|
+
return {
|
32972
|
+
nodeInfo: _Provider.nodeInfoCache[this.urlWithoutAuth],
|
32973
|
+
chain: _Provider.chainInfoCache[this.urlWithoutAuth]
|
32974
|
+
};
|
32975
|
+
});
|
32005
32976
|
}
|
32006
32977
|
/**
|
32007
32978
|
* @hidden
|
@@ -32045,7 +33016,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32045
33016
|
url: this.urlWithoutAuth,
|
32046
33017
|
query,
|
32047
33018
|
fetchFn: /* @__PURE__ */ __name((url, requestInit) => fetchFn(url, requestInit, this.options), "fetchFn"),
|
32048
|
-
variables: vars
|
33019
|
+
variables: vars,
|
33020
|
+
operationName: opDefinition.name.value,
|
33021
|
+
onEvent: /* @__PURE__ */ __name((event) => {
|
33022
|
+
_Provider.setCurrentBlockHeight(
|
33023
|
+
this.urlWithoutAuth,
|
33024
|
+
event.extensions?.current_fuel_block_height
|
33025
|
+
);
|
33026
|
+
}, "onEvent")
|
32049
33027
|
});
|
32050
33028
|
}
|
32051
33029
|
return gqlClient.request(query, vars);
|
@@ -32203,7 +33181,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32203
33181
|
* @param sendTransactionParams - The provider send transaction parameters (optional).
|
32204
33182
|
* @returns A promise that resolves to the transaction response object.
|
32205
33183
|
*/
|
32206
|
-
async sendTransaction(transactionRequestLike, {
|
33184
|
+
async sendTransaction(transactionRequestLike, {
|
33185
|
+
enableAssetBurn,
|
33186
|
+
estimateTxDependencies = true,
|
33187
|
+
includePreConfirmation: _includePreConfirmation = true
|
33188
|
+
} = {}) {
|
32207
33189
|
const transactionRequest = transactionRequestify(transactionRequestLike);
|
32208
33190
|
validateTransactionForAssetBurn(
|
32209
33191
|
await this.getBaseAssetId(),
|
@@ -32219,7 +33201,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32219
33201
|
if (isTransactionTypeScript(transactionRequest)) {
|
32220
33202
|
abis = transactionRequest.abis;
|
32221
33203
|
}
|
32222
|
-
const subscription = await this.operations.submitAndAwaitStatus({
|
33204
|
+
const subscription = await this.operations.submitAndAwaitStatus({
|
33205
|
+
encodedTransaction,
|
33206
|
+
includePreConfirmation: true
|
33207
|
+
});
|
32223
33208
|
this.#cacheInputs(
|
32224
33209
|
transactionRequest.inputs,
|
32225
33210
|
transactionRequest.getTransactionId(await this.getChainId())
|
@@ -32571,6 +33556,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32571
33556
|
* @param transactionCostParams - The transaction cost parameters (optional).
|
32572
33557
|
*
|
32573
33558
|
* @returns A promise that resolves to the transaction cost object.
|
33559
|
+
*
|
33560
|
+
* @deprecated Use provider.assembleTx instead
|
33561
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
32574
33562
|
*/
|
32575
33563
|
async getTransactionCost(transactionRequestLike, { signatureCallback, gasPrice: gasPriceParam } = {}) {
|
32576
33564
|
const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
|
@@ -32613,7 +33601,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32613
33601
|
}
|
32614
33602
|
({ rawReceipts, receipts, missingContractIds, outputVariables, dryRunStatus } = await this.estimateTxDependencies(txRequestClone, { gasPrice }));
|
32615
33603
|
if (dryRunStatus && "reason" in dryRunStatus) {
|
32616
|
-
throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus);
|
33604
|
+
throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus.reason);
|
32617
33605
|
}
|
32618
33606
|
const { maxGasPerTx } = await this.getGasConfig();
|
32619
33607
|
const pristineGasUsed = getGasUsedFromReceipts(receipts);
|
@@ -32646,6 +33634,102 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32646
33634
|
transactionSummary
|
32647
33635
|
};
|
32648
33636
|
}
|
33637
|
+
/**
|
33638
|
+
* Assembles a transaction by completely estimating and funding it.
|
33639
|
+
*
|
33640
|
+
* @param params - Parameters used to assemble the transaction.
|
33641
|
+
*
|
33642
|
+
* @returns The assembled transaction request, estimated gas price, and receipts
|
33643
|
+
*/
|
33644
|
+
async assembleTx(params) {
|
33645
|
+
const {
|
33646
|
+
request: request2,
|
33647
|
+
reserveGas,
|
33648
|
+
resourcesIdsToIgnore,
|
33649
|
+
feePayerAccount,
|
33650
|
+
blockHorizon = 10,
|
33651
|
+
estimatePredicates = true,
|
33652
|
+
accountCoinQuantities = []
|
33653
|
+
} = params;
|
33654
|
+
const allAddresses = /* @__PURE__ */ new Set();
|
33655
|
+
const baseAssetId = await this.getBaseAssetId();
|
33656
|
+
let feePayerIndex = -1;
|
33657
|
+
let baseAssetChange;
|
33658
|
+
const requiredBalances = accountCoinQuantities.map((quantity, index) => {
|
33659
|
+
const { amount, assetId, account = feePayerAccount, changeOutputAccount } = quantity;
|
33660
|
+
const changeAccountAddress = changeOutputAccount ? changeOutputAccount.address.toB256() : account.address.toB256();
|
33661
|
+
allAddresses.add(account.address.toB256());
|
33662
|
+
const changePolicy = {
|
33663
|
+
change: changeAccountAddress
|
33664
|
+
};
|
33665
|
+
if (assetId === baseAssetId) {
|
33666
|
+
baseAssetChange = changePolicy.change;
|
33667
|
+
}
|
33668
|
+
if (account.address.equals(feePayerAccount.address)) {
|
33669
|
+
feePayerIndex = index;
|
33670
|
+
}
|
33671
|
+
const requiredBalance = {
|
33672
|
+
account: resolveAccountForAssembleTxParams(account),
|
33673
|
+
amount: bn(amount).toString(10),
|
33674
|
+
assetId,
|
33675
|
+
changePolicy
|
33676
|
+
};
|
33677
|
+
return requiredBalance;
|
33678
|
+
});
|
33679
|
+
if (feePayerIndex === -1) {
|
33680
|
+
allAddresses.add(feePayerAccount.address.toB256());
|
33681
|
+
const newLength = requiredBalances.push({
|
33682
|
+
account: resolveAccountForAssembleTxParams(feePayerAccount),
|
33683
|
+
amount: bn(0).toString(10),
|
33684
|
+
// Since the correct fee amount cannot be determined yet, we can use 0
|
33685
|
+
assetId: baseAssetId,
|
33686
|
+
changePolicy: {
|
33687
|
+
change: baseAssetChange || feePayerAccount.address.toB256()
|
33688
|
+
}
|
33689
|
+
});
|
33690
|
+
feePayerIndex = newLength - 1;
|
33691
|
+
}
|
33692
|
+
const excludeInput = await this.adjustResourcesToIgnoreForAddresses(
|
33693
|
+
Array.from(allAddresses),
|
33694
|
+
resourcesIdsToIgnore
|
33695
|
+
);
|
33696
|
+
const {
|
33697
|
+
assembleTx: { status, transaction: gqlTransaction, gasPrice }
|
33698
|
+
} = await this.operations.assembleTx({
|
33699
|
+
tx: hexlify(request2.toTransactionBytes()),
|
33700
|
+
blockHorizon: String(blockHorizon),
|
33701
|
+
feeAddressIndex: String(feePayerIndex),
|
33702
|
+
requiredBalances,
|
33703
|
+
estimatePredicates,
|
33704
|
+
excludeInput,
|
33705
|
+
reserveGas: reserveGas ? reserveGas.toString(10) : void 0
|
33706
|
+
});
|
33707
|
+
if (status.type === "DryRunFailureStatus") {
|
33708
|
+
const parsedReceipts = status.receipts.map(deserializeReceipt);
|
33709
|
+
throw this.extractDryRunError(request2, parsedReceipts, status.reason);
|
33710
|
+
}
|
33711
|
+
request2.witnesses = gqlTransaction.witnesses || request2.witnesses;
|
33712
|
+
request2.inputs = gqlTransaction.inputs?.map(deserializeInput) || request2.inputs;
|
33713
|
+
request2.outputs = gqlTransaction.outputs?.map(deserializeOutput) || request2.outputs;
|
33714
|
+
if (gqlTransaction.policies?.maxFee) {
|
33715
|
+
request2.maxFee = bn(gqlTransaction.policies.maxFee);
|
33716
|
+
}
|
33717
|
+
if (gqlTransaction.scriptGasLimit) {
|
33718
|
+
request2.gasLimit = bn(gqlTransaction.scriptGasLimit);
|
33719
|
+
}
|
33720
|
+
const rawReceipts = status.receipts;
|
33721
|
+
const chainId = await this.getChainId();
|
33722
|
+
request2.updateState(chainId, "funded", {
|
33723
|
+
gasPrice: gasPrice.toString(),
|
33724
|
+
receipts: rawReceipts
|
33725
|
+
});
|
33726
|
+
return {
|
33727
|
+
assembledRequest: request2,
|
33728
|
+
gasPrice: bn(gasPrice),
|
33729
|
+
receipts: status.receipts.map(deserializeReceipt),
|
33730
|
+
rawReceipts
|
33731
|
+
};
|
33732
|
+
}
|
32649
33733
|
/**
|
32650
33734
|
* Returns coins for the given owner.
|
32651
33735
|
*
|
@@ -32684,30 +33768,15 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32684
33768
|
*
|
32685
33769
|
* @param owner - The address to get resources for.
|
32686
33770
|
* @param quantities - The coin quantities to get.
|
32687
|
-
* @param
|
33771
|
+
* @param resourcesIdsToIgnore - IDs of excluded resources from the selection (optional).
|
32688
33772
|
* @returns A promise that resolves to the resources.
|
32689
33773
|
*/
|
32690
|
-
async getResourcesToSpend(owner, quantities,
|
33774
|
+
async getResourcesToSpend(owner, quantities, resourcesIdsToIgnore) {
|
32691
33775
|
const ownerAddress = new Address(owner);
|
32692
|
-
|
32693
|
-
|
32694
|
-
|
32695
|
-
|
32696
|
-
if (this.cache) {
|
32697
|
-
const cached = this.cache.getActiveData(ownerAddress.toB256());
|
32698
|
-
if (cached.utxos.length || cached.messages.length) {
|
32699
|
-
const {
|
32700
|
-
consensusParameters: {
|
32701
|
-
txParameters: { maxInputs }
|
32702
|
-
}
|
32703
|
-
} = await this.getChain();
|
32704
|
-
idsToExclude = adjustResourcesToExclude({
|
32705
|
-
userInput: idsToExclude,
|
32706
|
-
cached,
|
32707
|
-
maxInputs: maxInputs.toNumber()
|
32708
|
-
});
|
32709
|
-
}
|
32710
|
-
}
|
33776
|
+
const excludedIds = await this.adjustResourcesToIgnoreForAddresses(
|
33777
|
+
[ownerAddress.b256Address],
|
33778
|
+
resourcesIdsToIgnore
|
33779
|
+
);
|
32711
33780
|
const coinsQuery = {
|
32712
33781
|
owner: ownerAddress.toB256(),
|
32713
33782
|
queryPerAsset: quantities.map(coinQuantityfy).map(({ assetId, amount, max: maxPerAsset }) => ({
|
@@ -32715,7 +33784,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
32715
33784
|
amount: (amount.eqn(0) ? bn(1) : amount).toString(10),
|
32716
33785
|
max: maxPerAsset ? maxPerAsset.toString(10) : void 0
|
32717
33786
|
})),
|
32718
|
-
excludedIds
|
33787
|
+
excludedIds
|
32719
33788
|
};
|
32720
33789
|
const result = await this.operations.getCoinsToSpend(coinsQuery);
|
32721
33790
|
const coins = result.coinsToSpend.flat().map((coin) => {
|
@@ -33282,20 +34351,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33282
34351
|
/**
|
33283
34352
|
* @hidden
|
33284
34353
|
*/
|
33285
|
-
extractDryRunError(transactionRequest, receipts,
|
33286
|
-
const status = dryRunStatus;
|
34354
|
+
extractDryRunError(transactionRequest, receipts, reason) {
|
33287
34355
|
let logs = [];
|
33288
|
-
|
33289
|
-
|
34356
|
+
let groupedLogs = {};
|
34357
|
+
if (transactionRequest.type === TransactionType.Script && transactionRequest.abis) {
|
34358
|
+
({ logs, groupedLogs } = getAllDecodedLogs({
|
33290
34359
|
receipts,
|
33291
|
-
transactionRequest.abis.main,
|
33292
|
-
transactionRequest.abis.otherContractsAbis
|
33293
|
-
);
|
34360
|
+
mainAbi: transactionRequest.abis.main,
|
34361
|
+
externalAbis: transactionRequest.abis.otherContractsAbis
|
34362
|
+
}));
|
33294
34363
|
}
|
33295
34364
|
return extractTxError({
|
33296
34365
|
logs,
|
34366
|
+
groupedLogs,
|
33297
34367
|
receipts,
|
33298
|
-
statusReason:
|
34368
|
+
statusReason: reason
|
33299
34369
|
});
|
33300
34370
|
}
|
33301
34371
|
/**
|
@@ -33322,6 +34392,45 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33322
34392
|
}
|
33323
34393
|
return transactionRequest;
|
33324
34394
|
}
|
34395
|
+
/**
|
34396
|
+
* @hidden
|
34397
|
+
*
|
34398
|
+
* This helper adjusts the resources to be excluded for a given set of addresses.
|
34399
|
+
* Supporting multiple addresses is important because of the `assembleTx` method,
|
34400
|
+
* which may be invoked with different addresses. It handles both messages and UTXOs,
|
34401
|
+
* ensuring the total number of inputs does not exceed the maximum allowed by the chain's
|
34402
|
+
* consensus parameters. The resources specified in the `resourcesIdsToIgnore` parameter have priority
|
34403
|
+
* over those retrieved from the cache.
|
34404
|
+
*/
|
34405
|
+
async adjustResourcesToIgnoreForAddresses(addresses, resourcesIdsToIgnore) {
|
34406
|
+
const final = {
|
34407
|
+
messages: resourcesIdsToIgnore?.messages?.map((nonce) => hexlify(nonce)) || [],
|
34408
|
+
utxos: resourcesIdsToIgnore?.utxos?.map((id) => hexlify(id)) || []
|
34409
|
+
};
|
34410
|
+
if (this.cache) {
|
34411
|
+
const cache2 = this.cache;
|
34412
|
+
const allCached = addresses.map((address) => cache2.getActiveData(address));
|
34413
|
+
const {
|
34414
|
+
consensusParameters: {
|
34415
|
+
txParameters: { maxInputs: maxInputsBn }
|
34416
|
+
}
|
34417
|
+
} = await this.getChain();
|
34418
|
+
const maxInputs = maxInputsBn.toNumber();
|
34419
|
+
for (let i = 0; i < allCached.length; i++) {
|
34420
|
+
let total = final.utxos.length + final.messages.length;
|
34421
|
+
if (total >= maxInputs) {
|
34422
|
+
break;
|
34423
|
+
}
|
34424
|
+
final.utxos = [...final.utxos, ...allCached[i].utxos.slice(0, maxInputs - total)];
|
34425
|
+
total = final.utxos.length + final.messages.length;
|
34426
|
+
if (total >= maxInputs) {
|
34427
|
+
break;
|
34428
|
+
}
|
34429
|
+
final.messages = [...final.messages, ...allCached[i].messages.slice(0, maxInputs - total)];
|
34430
|
+
}
|
34431
|
+
}
|
34432
|
+
return final;
|
34433
|
+
}
|
33325
34434
|
};
|
33326
34435
|
|
33327
34436
|
// src/providers/transaction-summary/get-transaction-summary.ts
|
@@ -33488,21 +34597,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33488
34597
|
});
|
33489
34598
|
}, "assembleTransactionSummaryFromJson");
|
33490
34599
|
|
33491
|
-
// src/providers/utils/merge-quantities.ts
|
33492
|
-
var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
|
33493
|
-
const resultMap = {};
|
33494
|
-
function addToMap({ amount, assetId }) {
|
33495
|
-
if (resultMap[assetId]) {
|
33496
|
-
resultMap[assetId] = resultMap[assetId].add(amount);
|
33497
|
-
} else {
|
33498
|
-
resultMap[assetId] = amount;
|
33499
|
-
}
|
33500
|
-
}
|
33501
|
-
__name(addToMap, "addToMap");
|
33502
|
-
coinQuantities.forEach((arr) => arr.forEach(addToMap));
|
33503
|
-
return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
|
33504
|
-
}, "mergeQuantities");
|
33505
|
-
|
33506
34600
|
// src/types.ts
|
33507
34601
|
var AbstractAccount = class {
|
33508
34602
|
static {
|
@@ -33547,6 +34641,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33547
34641
|
return { script, scriptData };
|
33548
34642
|
}, "assembleTransferToContractScript");
|
33549
34643
|
|
34644
|
+
// src/utils/split-coins-into-batches.ts
|
34645
|
+
var splitCoinsIntoBatches = /* @__PURE__ */ __name((coins, maxBatchLength) => {
|
34646
|
+
const batchesNum = Math.ceil(coins.length / maxBatchLength);
|
34647
|
+
const batches = [];
|
34648
|
+
for (let i = 0; i < batchesNum; i += 1) {
|
34649
|
+
const batchStart = i * maxBatchLength;
|
34650
|
+
const batchEnd = (i + 1) * maxBatchLength;
|
34651
|
+
batches.push(coins.slice(batchStart, batchEnd));
|
34652
|
+
}
|
34653
|
+
return batches;
|
34654
|
+
}, "splitCoinsIntoBatches");
|
34655
|
+
|
33550
34656
|
// src/account.ts
|
33551
34657
|
var MAX_FUNDING_ATTEMPTS = 5;
|
33552
34658
|
var Account = class extends AbstractAccount {
|
@@ -33613,11 +34719,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33613
34719
|
* Retrieves resources satisfying the spend query for the account.
|
33614
34720
|
*
|
33615
34721
|
* @param quantities - Quantities of resources to be obtained.
|
33616
|
-
* @param
|
34722
|
+
* @param resourcesIdsToIgnore - IDs of resources to be excluded from the query (optional).
|
33617
34723
|
* @returns A promise that resolves to an array of Resources.
|
33618
34724
|
*/
|
33619
|
-
async getResourcesToSpend(quantities,
|
33620
|
-
return this.provider.getResourcesToSpend(this.address, quantities,
|
34725
|
+
async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
|
34726
|
+
return this.provider.getResourcesToSpend(this.address, quantities, resourcesIdsToIgnore);
|
33621
34727
|
}
|
33622
34728
|
/**
|
33623
34729
|
* Retrieves coins owned by the account.
|
@@ -33662,6 +34768,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33662
34768
|
* @param request - The transaction request to fund.
|
33663
34769
|
* @param params - The estimated transaction parameters.
|
33664
34770
|
* @returns A promise that resolves to the funded transaction request.
|
34771
|
+
*
|
34772
|
+
* @deprecated Use provider.assembleTx instead
|
34773
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
33665
34774
|
*/
|
33666
34775
|
async fund(request2, params) {
|
33667
34776
|
const {
|
@@ -33784,7 +34893,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33784
34893
|
amount,
|
33785
34894
|
assetId: assetId || await this.provider.getBaseAssetId()
|
33786
34895
|
});
|
33787
|
-
|
34896
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request2);
|
34897
|
+
request2 = await setAndValidateGasAndFeeForAssembledTx({
|
34898
|
+
gasPrice,
|
34899
|
+
provider: this.provider,
|
34900
|
+
transactionRequest,
|
34901
|
+
setGasLimit: txParams?.gasLimit,
|
34902
|
+
setMaxFee: txParams?.maxFee
|
34903
|
+
});
|
33788
34904
|
return request2;
|
33789
34905
|
}
|
33790
34906
|
/**
|
@@ -33810,7 +34926,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33810
34926
|
async batchTransfer(transferParams, txParams = {}) {
|
33811
34927
|
let request2 = new ScriptTransactionRequest(txParams);
|
33812
34928
|
request2 = this.addBatchTransfer(request2, transferParams);
|
33813
|
-
|
34929
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request2);
|
34930
|
+
request2 = await setAndValidateGasAndFeeForAssembledTx({
|
34931
|
+
gasPrice,
|
34932
|
+
provider: this.provider,
|
34933
|
+
transactionRequest,
|
34934
|
+
setGasLimit: txParams?.gasLimit,
|
34935
|
+
setMaxFee: txParams?.maxFee
|
34936
|
+
});
|
33814
34937
|
return this.sendTransaction(request2, { estimateTxDependencies: false });
|
33815
34938
|
}
|
33816
34939
|
/**
|
@@ -33882,7 +35005,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33882
35005
|
const { script, scriptData } = await assembleTransferToContractScript(transferParams);
|
33883
35006
|
request2.script = script;
|
33884
35007
|
request2.scriptData = scriptData;
|
33885
|
-
|
35008
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request2, quantities);
|
35009
|
+
request2 = await setAndValidateGasAndFeeForAssembledTx({
|
35010
|
+
gasPrice,
|
35011
|
+
provider: this.provider,
|
35012
|
+
transactionRequest,
|
35013
|
+
setGasLimit: txParams?.gasLimit,
|
35014
|
+
setMaxFee: txParams?.maxFee
|
35015
|
+
});
|
33886
35016
|
return this.sendTransaction(request2);
|
33887
35017
|
}
|
33888
35018
|
/**
|
@@ -33910,16 +35040,144 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33910
35040
|
const baseAssetId = await this.provider.getBaseAssetId();
|
33911
35041
|
let request2 = new ScriptTransactionRequest(params);
|
33912
35042
|
const quantities = [{ amount: bn(amount), assetId: baseAssetId }];
|
33913
|
-
const
|
33914
|
-
request2 =
|
33915
|
-
|
33916
|
-
|
33917
|
-
|
33918
|
-
txParams
|
35043
|
+
const { gasPrice, transactionRequest } = await this.assembleTx(request2, quantities);
|
35044
|
+
request2 = await setAndValidateGasAndFeeForAssembledTx({
|
35045
|
+
gasPrice,
|
35046
|
+
provider: this.provider,
|
35047
|
+
transactionRequest,
|
35048
|
+
setGasLimit: txParams?.gasLimit,
|
35049
|
+
setMaxFee: txParams?.maxFee
|
33919
35050
|
});
|
33920
|
-
await this.fund(request2, txCost);
|
33921
35051
|
return this.sendTransaction(request2);
|
33922
35052
|
}
|
35053
|
+
/**
|
35054
|
+
* Consolidates base asset UTXOs into fewer, larger ones.
|
35055
|
+
*
|
35056
|
+
* Retrieves a limited number of base asset coins (as defined by `Provider.RESOURCES_PAGE_SIZE_LIMIT`),
|
35057
|
+
* assembles consolidation transactions, and submits them to the network.
|
35058
|
+
*
|
35059
|
+
* Note: This method currently supports only the base asset.
|
35060
|
+
*
|
35061
|
+
* @param params - The parameters for coin consolidation, including the asset ID, mode, and output number.
|
35062
|
+
* @returns A promise that resolves to the response of the submitted transactions.
|
35063
|
+
* @throws Will throw an error if the asset is not a base asset as non-base asset consolidation is not implemented.
|
35064
|
+
*/
|
35065
|
+
async consolidateCoins(params) {
|
35066
|
+
const { assetId } = params;
|
35067
|
+
const { coins } = await this.getCoins(assetId);
|
35068
|
+
const baseAssetId = await this.provider.getBaseAssetId();
|
35069
|
+
const isBaseAsset = baseAssetId === assetId;
|
35070
|
+
let submitAll;
|
35071
|
+
const consolidationParams = {
|
35072
|
+
coins,
|
35073
|
+
mode: params.mode,
|
35074
|
+
outputNum: params.outputNum
|
35075
|
+
};
|
35076
|
+
if (isBaseAsset) {
|
35077
|
+
({ submitAll } = await this.assembleBaseAssetConsolidationTxs(consolidationParams));
|
35078
|
+
} else {
|
35079
|
+
throw new FuelError(
|
35080
|
+
ErrorCode.UNSUPPORTED_FEATURE,
|
35081
|
+
"Consolidation for non-base assets is not supported yet."
|
35082
|
+
);
|
35083
|
+
}
|
35084
|
+
return submitAll();
|
35085
|
+
}
|
35086
|
+
/**
|
35087
|
+
* Assembles transactions for consolidating base asset coins into fewer UTXOs.
|
35088
|
+
*
|
35089
|
+
* This method splits the provided coins into batches and creates transaction requests
|
35090
|
+
* to consolidate them. It calculates the necessary fee and sets up the transactions
|
35091
|
+
* to be submitted either in parallel (default) or sequentially.
|
35092
|
+
*
|
35093
|
+
* @param params - The parameters for assembling base asset consolidation transactions.
|
35094
|
+
*
|
35095
|
+
* @returns An object containing the assembled transactions, the total fee cost, and a callback to submit all transactions.
|
35096
|
+
*/
|
35097
|
+
async assembleBaseAssetConsolidationTxs(params) {
|
35098
|
+
const { coins, mode = "parallel", outputNum = 1 } = params;
|
35099
|
+
const baseAssetId = await this.provider.getBaseAssetId();
|
35100
|
+
this.validateConsolidationTxsCoins(coins, baseAssetId);
|
35101
|
+
const chainInfo = await this.provider.getChain();
|
35102
|
+
const maxInputsNumber = chainInfo.consensusParameters.txParameters.maxInputs.toNumber();
|
35103
|
+
let totalFeeCost = bn(0);
|
35104
|
+
const txs = [];
|
35105
|
+
const coinsBatches = splitCoinsIntoBatches(coins, maxInputsNumber);
|
35106
|
+
const gasPrice = await this.provider.estimateGasPrice(10);
|
35107
|
+
const consolidateMoreThanOneCoin = outputNum > 1;
|
35108
|
+
coinsBatches.filter((batch) => batch.length > 1).forEach((coinBatch) => {
|
35109
|
+
const request2 = new ScriptTransactionRequest({
|
35110
|
+
script: "0x"
|
35111
|
+
});
|
35112
|
+
request2.addResources(coinBatch);
|
35113
|
+
if (consolidateMoreThanOneCoin) {
|
35114
|
+
Array.from({ length: outputNum - 1 }).forEach(() => {
|
35115
|
+
request2.addCoinOutput(this.address, 0, baseAssetId);
|
35116
|
+
});
|
35117
|
+
}
|
35118
|
+
const minGas = request2.calculateMinGas(chainInfo);
|
35119
|
+
const fee = calculateGasFee({
|
35120
|
+
gasPrice,
|
35121
|
+
gas: minGas,
|
35122
|
+
priceFactor: chainInfo.consensusParameters.feeParameters.gasPriceFactor,
|
35123
|
+
tip: request2.tip
|
35124
|
+
});
|
35125
|
+
request2.maxFee = fee;
|
35126
|
+
if (consolidateMoreThanOneCoin) {
|
35127
|
+
const total = request2.inputs.filter(isRequestInputCoin).reduce((acc, input) => acc.add(input.amount), bn(0));
|
35128
|
+
const amountPerNewUtxo = total.div(outputNum + 1);
|
35129
|
+
request2.outputs.forEach((output) => {
|
35130
|
+
if (output.type === OutputType.Coin) {
|
35131
|
+
output.amount = amountPerNewUtxo;
|
35132
|
+
}
|
35133
|
+
});
|
35134
|
+
}
|
35135
|
+
totalFeeCost = totalFeeCost.add(fee);
|
35136
|
+
txs.push(request2);
|
35137
|
+
});
|
35138
|
+
const submitAll = this.prepareSubmitAll({ txs, mode });
|
35139
|
+
return { txs, totalFeeCost, submitAll };
|
35140
|
+
}
|
35141
|
+
/**
|
35142
|
+
* Prepares a function to submit all transactions either sequentially or in parallel.
|
35143
|
+
*
|
35144
|
+
* @param params - The parameters for preparing the submitAll callback.
|
35145
|
+
*
|
35146
|
+
* @returns A callback that, when called, submits all transactions and returns their results and any errors encountered.
|
35147
|
+
*/
|
35148
|
+
prepareSubmitAll = /* @__PURE__ */ __name((params) => {
|
35149
|
+
const { txs, mode = "sequential" } = params;
|
35150
|
+
return async () => {
|
35151
|
+
const txResponses = [];
|
35152
|
+
const errors2 = [];
|
35153
|
+
if (mode === "sequential") {
|
35154
|
+
for (const tx of txs) {
|
35155
|
+
try {
|
35156
|
+
const submit = await this.sendTransaction(tx);
|
35157
|
+
const response = await submit.waitForResult();
|
35158
|
+
txResponses.push(response);
|
35159
|
+
} catch (error2) {
|
35160
|
+
errors2.push(error2);
|
35161
|
+
}
|
35162
|
+
}
|
35163
|
+
} else {
|
35164
|
+
const results = await Promise.allSettled(
|
35165
|
+
txs.map(async (tx) => {
|
35166
|
+
const submit = await this.sendTransaction(tx);
|
35167
|
+
return submit.waitForResult();
|
35168
|
+
})
|
35169
|
+
);
|
35170
|
+
results.forEach((result) => {
|
35171
|
+
if (result.status === "fulfilled") {
|
35172
|
+
txResponses.push(result.value);
|
35173
|
+
} else {
|
35174
|
+
errors2.push(result.reason);
|
35175
|
+
}
|
35176
|
+
});
|
35177
|
+
}
|
35178
|
+
return { txResponses, errors: errors2 };
|
35179
|
+
};
|
35180
|
+
}, "prepareSubmitAll");
|
33923
35181
|
/**
|
33924
35182
|
* Returns a transaction cost to enable user
|
33925
35183
|
* to set gasLimit and also reserve balance amounts
|
@@ -33929,6 +35187,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
33929
35187
|
* @param transactionCostParams - The transaction cost parameters (optional).
|
33930
35188
|
*
|
33931
35189
|
* @returns A promise that resolves to the transaction cost object.
|
35190
|
+
*
|
35191
|
+
* @deprecated Use provider.assembleTx instead
|
35192
|
+
* Check the migration guide https://docs.fuel.network/guide/assembling-transactions/migration-guide.html for more information.
|
33932
35193
|
*/
|
33933
35194
|
async getTransactionCost(transactionRequestLike, { signatureCallback, quantities = [], gasPrice } = {}) {
|
33934
35195
|
const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
|
@@ -34090,6 +35351,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34090
35351
|
} : void 0;
|
34091
35352
|
}
|
34092
35353
|
/** @hidden * */
|
35354
|
+
async assembleTx(transactionRequest, quantities = []) {
|
35355
|
+
const outputQuantities = transactionRequest.outputs.filter((o) => o.type === OutputType.Coin).map(({ amount, assetId }) => ({ assetId: String(assetId), amount: bn(amount) }));
|
35356
|
+
transactionRequest.gasLimit = bn(0);
|
35357
|
+
transactionRequest.maxFee = bn(0);
|
35358
|
+
const { assembledRequest, gasPrice } = await this.provider.assembleTx({
|
35359
|
+
request: transactionRequest,
|
35360
|
+
accountCoinQuantities: mergeQuantities(outputQuantities, quantities),
|
35361
|
+
feePayerAccount: this
|
35362
|
+
});
|
35363
|
+
return { transactionRequest: assembledRequest, gasPrice };
|
35364
|
+
}
|
35365
|
+
/** @hidden * */
|
34093
35366
|
validateTransferAmount(amount) {
|
34094
35367
|
if (bn(amount).lte(0)) {
|
34095
35368
|
throw new FuelError(
|
@@ -34137,6 +35410,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
34137
35410
|
}
|
34138
35411
|
return request2;
|
34139
35412
|
}
|
35413
|
+
/** @hidden * */
|
35414
|
+
validateConsolidationTxsCoins(coins, assetId) {
|
35415
|
+
if (coins.length <= 1) {
|
35416
|
+
throw new FuelError(ErrorCode.NO_COINS_TO_CONSOLIDATE, "No coins to consolidate.");
|
35417
|
+
}
|
35418
|
+
if (!coins.every((c) => c.assetId === assetId)) {
|
35419
|
+
throw new FuelError(
|
35420
|
+
ErrorCode.COINS_ASSET_ID_MISMATCH,
|
35421
|
+
"All coins to consolidate must be from the same asset id."
|
35422
|
+
);
|
35423
|
+
}
|
35424
|
+
}
|
34140
35425
|
};
|
34141
35426
|
|
34142
35427
|
// ../../node_modules/.pnpm/@noble+curves@1.8.1/node_modules/@noble/curves/esm/abstract/utils.js
|
@@ -39546,24 +40831,12 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
39546
40831
|
|
39547
40832
|
// src/utils/deployScriptOrPredicate.ts
|
39548
40833
|
async function fundBlobTx(deployer, blobTxRequest) {
|
39549
|
-
|
39550
|
-
|
39551
|
-
|
39552
|
-
|
39553
|
-
|
39554
|
-
|
39555
|
-
gasPrice,
|
39556
|
-
gas: minGas,
|
39557
|
-
priceFactor,
|
39558
|
-
tip: blobTxRequest.tip
|
39559
|
-
}).add(1);
|
39560
|
-
totalCost = totalCost.add(minFee);
|
39561
|
-
if (totalCost.gt(await deployer.getBalance())) {
|
39562
|
-
throw new FuelError(ErrorCode.FUNDS_TOO_LOW, "Insufficient balance to deploy predicate.");
|
39563
|
-
}
|
39564
|
-
const txCost = await deployer.getTransactionCost(blobTxRequest);
|
39565
|
-
blobTxRequest.maxFee = txCost.maxFee;
|
39566
|
-
return deployer.fund(blobTxRequest, txCost);
|
40834
|
+
const { assembledRequest } = await deployer.provider.assembleTx({
|
40835
|
+
request: blobTxRequest,
|
40836
|
+
feePayerAccount: deployer,
|
40837
|
+
accountCoinQuantities: []
|
40838
|
+
});
|
40839
|
+
return assembledRequest;
|
39567
40840
|
}
|
39568
40841
|
__name(fundBlobTx, "fundBlobTx");
|
39569
40842
|
function adjustConfigurableOffsets(jsonAbi, configurableOffsetDiff) {
|
@@ -40159,6 +41432,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
40159
41432
|
const transactionRequest = transactionRequestify(transactionRequestLike);
|
40160
41433
|
return super.simulateTransaction(transactionRequest, { estimateTxDependencies: false });
|
40161
41434
|
}
|
41435
|
+
/**
|
41436
|
+
* Retrieves the properly encoded predicate data.
|
41437
|
+
*
|
41438
|
+
* @returns A Uint8Array containing the encoded predicate data. If no predicate data is available, returns an empty Uint8Array.
|
41439
|
+
*/
|
40162
41440
|
getPredicateData() {
|
40163
41441
|
if (!this.predicateData.length) {
|
40164
41442
|
return new Uint8Array();
|
@@ -40213,14 +41491,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
40213
41491
|
* Retrieves resources satisfying the spend query for the account.
|
40214
41492
|
*
|
40215
41493
|
* @param quantities - IDs of coins to exclude.
|
40216
|
-
* @param
|
41494
|
+
* @param resourcesIdsToIgnore - IDs of resources to be excluded from the query.
|
40217
41495
|
* @returns A promise that resolves to an array of Resources.
|
40218
41496
|
*/
|
40219
|
-
async getResourcesToSpend(quantities,
|
41497
|
+
async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
|
40220
41498
|
const resources = await this.provider.getResourcesToSpend(
|
40221
41499
|
this.address,
|
40222
41500
|
quantities,
|
40223
|
-
|
41501
|
+
resourcesIdsToIgnore
|
40224
41502
|
);
|
40225
41503
|
return resources.map((resource) => ({
|
40226
41504
|
...resource,
|
@@ -40651,6 +41929,26 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
|
|
40651
41929
|
}
|
40652
41930
|
__name(dispatchFuelConnectorEvent, "dispatchFuelConnectorEvent");
|
40653
41931
|
|
41932
|
+
// src/connectors/utils/promises.ts
|
41933
|
+
function deferPromise() {
|
41934
|
+
const defer = {};
|
41935
|
+
defer.promise = new Promise((resolve, reject) => {
|
41936
|
+
defer.reject = reject;
|
41937
|
+
defer.resolve = resolve;
|
41938
|
+
});
|
41939
|
+
return defer;
|
41940
|
+
}
|
41941
|
+
__name(deferPromise, "deferPromise");
|
41942
|
+
async function withTimeout(promise, timeout = 1050) {
|
41943
|
+
const timeoutPromise = new Promise((resolve, reject) => {
|
41944
|
+
setTimeout(() => {
|
41945
|
+
reject(new FuelError(FuelError.CODES.TIMEOUT_EXCEEDED, "Promise timed out"));
|
41946
|
+
}, timeout);
|
41947
|
+
});
|
41948
|
+
return Promise.race([timeoutPromise, promise]);
|
41949
|
+
}
|
41950
|
+
__name(withTimeout, "withTimeout");
|
41951
|
+
|
40654
41952
|
// src/connectors/fuel.ts
|
40655
41953
|
var HAS_CONNECTOR_TIMEOUT = 2e3;
|
40656
41954
|
var PING_CACHE_TIME = 5e3;
|