@fuel-ts/account 0.100.3 → 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.
Files changed (60) hide show
  1. package/dist/account.d.ts +71 -3
  2. package/dist/account.d.ts.map +1 -1
  3. package/dist/index.global.js +1467 -217
  4. package/dist/index.global.js.map +1 -1
  5. package/dist/index.js +2165 -1005
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +1976 -818
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/predicate/predicate.d.ts +9 -4
  10. package/dist/predicate/predicate.d.ts.map +1 -1
  11. package/dist/providers/__generated__/operations.d.ts +1183 -87
  12. package/dist/providers/__generated__/operations.d.ts.map +1 -1
  13. package/dist/providers/assemble-tx-helpers.d.ts +39 -0
  14. package/dist/providers/assemble-tx-helpers.d.ts.map +1 -0
  15. package/dist/providers/fuel-graphql-subscriber.d.ts +28 -0
  16. package/dist/providers/fuel-graphql-subscriber.d.ts.map +1 -1
  17. package/dist/providers/index.d.ts +1 -0
  18. package/dist/providers/index.d.ts.map +1 -1
  19. package/dist/providers/provider.d.ts +80 -6
  20. package/dist/providers/provider.d.ts.map +1 -1
  21. package/dist/providers/resource.d.ts +4 -1
  22. package/dist/providers/resource.d.ts.map +1 -1
  23. package/dist/providers/transaction-request/helpers.d.ts +3 -3
  24. package/dist/providers/transaction-request/helpers.d.ts.map +1 -1
  25. package/dist/providers/transaction-request/input.d.ts +2 -0
  26. package/dist/providers/transaction-request/input.d.ts.map +1 -1
  27. package/dist/providers/transaction-request/output.d.ts +6 -0
  28. package/dist/providers/transaction-request/output.d.ts.map +1 -1
  29. package/dist/providers/transaction-request/script-transaction-request.d.ts +11 -0
  30. package/dist/providers/transaction-request/script-transaction-request.d.ts.map +1 -1
  31. package/dist/providers/transaction-response/transaction-response.d.ts +38 -11
  32. package/dist/providers/transaction-response/transaction-response.d.ts.map +1 -1
  33. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts +12 -1
  34. package/dist/providers/transaction-summary/assemble-transaction-summary.d.ts.map +1 -1
  35. package/dist/providers/transaction-summary/get-transaction-summary.d.ts.map +1 -1
  36. package/dist/providers/transaction-summary/status.d.ts +16 -2
  37. package/dist/providers/transaction-summary/status.d.ts.map +1 -1
  38. package/dist/providers/transaction-summary/types.d.ts +85 -4
  39. package/dist/providers/transaction-summary/types.d.ts.map +1 -1
  40. package/dist/providers/utils/handle-gql-error-message.d.ts.map +1 -1
  41. package/dist/providers/utils/index.d.ts +1 -0
  42. package/dist/providers/utils/index.d.ts.map +1 -1
  43. package/dist/providers/utils/parse-graphql-response.d.ts +12 -0
  44. package/dist/providers/utils/parse-graphql-response.d.ts.map +1 -0
  45. package/dist/providers/utils/serialization.d.ts +9 -0
  46. package/dist/providers/utils/serialization.d.ts.map +1 -1
  47. package/dist/test-utils/launchNode.d.ts.map +1 -1
  48. package/dist/test-utils/setup-test-provider-and-wallets.d.ts.map +1 -1
  49. package/dist/test-utils.global.js +1461 -201
  50. package/dist/test-utils.global.js.map +1 -1
  51. package/dist/test-utils.js +2046 -891
  52. package/dist/test-utils.js.map +1 -1
  53. package/dist/test-utils.mjs +1892 -731
  54. package/dist/test-utils.mjs.map +1 -1
  55. package/dist/utils/deployScriptOrPredicate.d.ts.map +1 -1
  56. package/dist/utils/split-coins-into-batches.d.ts +3 -0
  57. package/dist/utils/split-coins-into-batches.d.ts.map +1 -0
  58. package/package.json +15 -15
  59. package/dist/providers/utils/helpers.d.ts +0 -14
  60. package/dist/providers/utils/helpers.d.ts.map +0 -1
@@ -7970,9 +7970,9 @@
7970
7970
  }
7971
7971
  });
7972
7972
 
7973
- // ../../node_modules/.pnpm/@fuels+vm-asm@0.59.1/node_modules/@fuels/vm-asm/dist/node/index.cjs
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.59.1/node_modules/@fuels/vm-asm/dist/node/index.cjs"(exports) {
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+QEUcmVnaWRfbmV3X3R5cGVzY3JpcHQA4gELcmVnaWRfdG9fdTgA4wESYW5kX25ld190eXBlc2NyaXB0AEMSZGl2X25ld190eXBlc2NyaXB0AEMRZXFfbmV3X3R5cGVzY3JpcHQAQxJleHBfbmV3X3R5cGVzY3JpcHQAQxFndF9uZXdfdHlwZXNjcmlwdABDEWx0X25ld190eXBlc2NyaXB0AEMTbWxvZ19uZXdfdHlwZXNjcmlwdABDE21yb29fbmV3X3R5cGVzY3JpcHQAQxJtb2RfbmV3X3R5cGVzY3JpcHQAQxJtdWxfbmV3X3R5cGVzY3JpcHQAQxFvcl9uZXdfdHlwZXNjcmlwdABDEnNsbF9uZXdfdHlwZXNjcmlwdABDEnNybF9uZXdfdHlwZXNjcmlwdABDEnN1Yl9uZXdfdHlwZXNjcmlwdABDEnhvcl9uZXdfdHlwZXNjcmlwdABDEm1jcF9uZXdfdHlwZXNjcmlwdABDE3Njd3FfbmV3X3R5cGVzY3JpcHQAQxJzcndfbmV3X3R5cGVzY3JpcHQAQxJzd3dfbmV3X3R5cGVzY3JpcHQAQxF0cl9uZXdfdHlwZXNjcmlwdABDE2VjazFfbmV3X3R5cGVzY3JpcHQAQxNlY3IxX25ld190eXBlc2NyaXB0AEMTazI1Nl9uZXdfdHlwZXNjcmlwdABDE3MyNTZfbmV3X3R5cGVzY3JpcHQAQxJiYWxfbmV3X3R5cGVzY3JpcHQAQxJqbmVfbmV3X3R5cGVzY3JpcHQAQxNhbmRpX25ld190eXBlc2NyaXB0AEQTZGl2aV9uZXdfdHlwZXNjcmlwdABEE2V4cGlfbmV3X3R5cGVzY3JpcHQARBNtb2RpX25ld190eXBlc2NyaXB0AEQTbXVsaV9uZXdfdHlwZXNjcmlwdABEEm9yaV9uZXdfdHlwZXNjcmlwdABEE3NsbGlfbmV3X3R5cGVzY3JpcHQARBNzcmxpX25ld190eXBlc2NyaXB0AEQTc3ViaV9uZXdfdHlwZXNjcmlwdABEE3hvcmlfbmV3X3R5cGVzY3JpcHQARBNqbmVpX25ld190eXBlc2NyaXB0AEQRbGJfbmV3X3R5cGVzY3JpcHQARBFsd19uZXdfdHlwZXNjcmlwdABEEXNiX25ld190eXBlc2NyaXB0AEQRc3dfbmV3X3R5cGVzY3JpcHQARBNtY3BpX25ld190eXBlc2NyaXB0AEQTam56Zl9uZXdfdHlwZXNjcmlwdABEE2puemJfbmV3X3R5cGVzY3JpcHQARBFqaV9uZXdfdHlwZXNjcmlwdAAmE2Nmc2lfbmV3X3R5cGVzY3JpcHQAJhNwc2hsX25ld190eXBlc2NyaXB0ACYTcHNoaF9uZXdfdHlwZXNjcmlwdAAmE3BvcGxfbmV3X3R5cGVzY3JpcHQAJhNwb3BoX25ld190eXBlc2NyaXB0ACYSbm90X25ld190eXBlc2NyaXB0ABoTcmV0ZF9uZXdfdHlwZXNjcmlwdAAaE21vdmVfbmV3X3R5cGVzY3JpcHQAGhJtY2xfbmV3X3R5cGVzY3JpcHQAGhNidXJuX25ld190eXBlc2NyaXB0ABoTY3Jvb19uZXdfdHlwZXNjcmlwdAAaE2NzaXpfbmV3X3R5cGVzY3JpcHQAGhNtaW50X25ld190eXBlc2NyaXB0ABoTdGltZV9uZXdfdHlwZXNjcmlwdAAaE2JzaXpfbmV3X3R5cGVzY3JpcHQAGhJyZXRfbmV3X3R5cGVzY3JpcHQAXRNiaGVpX25ld190eXBlc2NyaXB0AF0RY2JfbmV3X3R5cGVzY3JpcHQAXRNydnJ0X25ld190eXBlc2NyaXB0AF0TZmxhZ19uZXdfdHlwZXNjcmlwdABdEmptcF9uZXdfdHlwZXNjcmlwdABdEmNmZV9uZXdfdHlwZXNjcmlwdABdEmNmc19uZXdfdHlwZXNjcmlwdABdE21sZHZfbmV3X3R5cGVzY3JpcHQAORJtZXFfbmV3X3R5cGVzY3JpcHQAORJjY3BfbmV3X3R5cGVzY3JpcHQAORJsb2dfbmV3X3R5cGVzY3JpcHQAORNsb2dkX25ld190eXBlc2NyaXB0ADkTc3J3cV9uZXdfdHlwZXNjcmlwdAA5E3N3d3FfbmV3X3R5cGVzY3JpcHQAORJ0cm9fbmV3X3R5cGVzY3JpcHQAORNlZDE5X25ld190eXBlc2NyaXB0ADkSc21vX25ld190eXBlc2NyaXB0ADkSbGRjX25ld190eXBlc2NyaXB0ADkTam5lZl9uZXdfdHlwZXNjcmlwdAA5E3dkbWRfbmV3X3R5cGVzY3JpcHQAORN3cW1kX25ld190eXBlc2NyaXB0ADkTd2RhbV9uZXdfdHlwZXNjcmlwdAA5E3dxYW1fbmV3X3R5cGVzY3JpcHQAORN3ZG1tX25ld190eXBlc2NyaXB0ADkTd3FtbV9uZXdfdHlwZXNjcmlwdAA5E2VjYWxfbmV3X3R5cGVzY3JpcHQAORNjYWxsX25ld190eXBlc2NyaXB0ADkTZWNvcF9uZXdfdHlwZXNjcmlwdAA5E2VwYXJfbmV3X3R5cGVzY3JpcHQAOQZyZXRfcmEAJQdiaGVpX3JhACUFY2JfcmEAJQdydnJ0X3JhACUHZmxhZ19yYQAlBmptcF9yYQAlCGppX2ltbTI0AAwKY2ZzaV9pbW0yNAAMBmNmZV9yYQAlBmNmc19yYQAlCnBzaGxfaW1tMjQADApwc2hoX2ltbTI0AAwKcG9wbF9pbW0yNAAMCnBvcGhfaW1tMjQADBNtb3ZpX25ld190eXBlc2NyaXB0ABATbWNsaV9uZXdfdHlwZXNjcmlwdAAQE2puemlfbmV3X3R5cGVzY3JpcHQAEBNqbXBmX25ld190eXBlc2NyaXB0ABATX193YmdfbWF0aGFyZ3NfZnJlZQAUH19fd2JnX3NldF9tYXRoYXJnc19pbmRpcmVjdF9yaHMAUx5fX3diZ19zZXRfbXVsYXJnc19pbmRpcmVjdF9saHMAUx9fX3diZ19nZXRfbWF0aGFyZ3NfaW5kaXJlY3RfcmhzAFEeX193YmdfZ2V0X211bGFyZ3NfaW5kaXJlY3RfbGhzAFEPX193YmdfZXhwaV9mcmVlAB0PX193YmdfYmhlaV9mcmVlAB0PX193Ymdfd2RtbF9mcmVlAB0PX193YmdfcHNobF9mcmVlAB0OX193YmdfbG9nX2ZyZWUAHQ5fX3diZ19jY3BfZnJlZQAdD19fd2JnX2VjazFfZnJlZQAdD19fd2JnX2VjcjFfZnJlZQAdDl9fd2JnX3Ntb19mcmVlAB0OX193Ymdfb3JpX2ZyZWUAHQ5fX3diZ190cm9fZnJlZQAdDl9fd2JnX21lcV9mcmVlAB0OX193YmdfY2ZzX2ZyZWUAHQ5fX3diZ19kaXZfZnJlZQAdDV9fd2JnX2x0X2ZyZWUAHQ9fX3diZ19iaHNoX2ZyZWUAHQ1fX3diZ19zYl9mcmVlAB0PX193Ymdfd2RtZF9mcmVlAB0NX193YmdfdHJfZnJlZQAdDl9fd2JnX3hvcl9mcmVlAB0PX193Ymdfam5lYl9mcmVlAB0PX193Ymdfam5lZl9mcmVlAB0PX193YmdfY3Npel9mcmVlAB0PX193YmdfY3Jvb19mcmVlAB0PX193YmdfZGl2aV9mcmVlAB0NX193YmdfZ21fZnJlZQAdD19fd2JnX21vZGlfZnJlZQAdD19fd2JnX3hvcmlfZnJlZQAdDV9fd2JnX2NiX2ZyZWUAHQ9fX3diZ193ZGNtX2ZyZWUAHQ5fX3diZ19qbXBfZnJlZQAdD19fd2JnX3dxYW1fZnJlZQAdDl9fd2JnX2xkY19mcmVlAB0PX193YmdfZWQxOV9mcmVlAB0NX193Ymdfc3dfZnJlZQAdD19fd2JnX3RpbWVfZnJlZQAdD19fd2JnX2Vjb3BfZnJlZQAdD19fd2JnX3Njd3FfZnJlZQAdD19fd2JnX3dxbW1fZnJlZQAdD19fd2JnX3dkYW1fZnJlZQAdDV9fd2JnX2xiX2ZyZWUAHQ1fX3diZ19qaV9mcmVlAB0PX193YmdfazI1Nl9mcmVlAB0PX193YmdfYW5kaV9mcmVlAB0PX193Ymdfam56aV9mcmVlAB0PX193Ymdfc3J3cV9mcmVlAB0OX193Ymdfbm90X2ZyZWUAHQ5fX3diZ19jZmVfZnJlZQAdD19fd2JnX2xvZ2RfZnJlZQAdDl9fd2JnX3Nyd19mcmVlAB0PX193YmdfcnZydF9mcmVlAB0PX193YmdfcHNoaF9mcmVlAB0OX193Ymdfc3JsX2ZyZWUAHQ5fX3diZ19tdWxfZnJlZQAdD19fd2JnX2ZsYWdfZnJlZQAdD19fd2JnX21jcGlfZnJlZQAdDl9fd2JnX21vZF9mcmVlAB0PX193YmdfbW92aV9mcmVlAB0OX193YmdfcmV0X2ZyZWUAHQ9fX3diZ19tcm9vX2ZyZWUAHQ9fX3diZ193cWR2X2ZyZWUAHQ1fX3diZ19sd19mcmVlAB0PX193Ymdfd3FtZF9mcmVlAB0OX193Ymdfc3d3X2ZyZWUAHQ5fX3diZ19ndGZfZnJlZQAdD19fd2JnX3BvcGhfZnJlZQAdDV9fd2JnX29yX2ZyZWUAHQ9fX3diZ19tb3ZlX2ZyZWUAHQ9fX3diZ193ZGR2X2ZyZWUAHQ9fX3diZ19yZXRkX2ZyZWUAHQ5fX3diZ19iYWxfZnJlZQAdD19fd2JnX2FkZGlfZnJlZQAdDl9fd2JnX2FuZF9mcmVlAB0PX193YmdfbWNsaV9mcmVlAB0PX193Ymdfd3FtbF9mcmVlAB0PX193Ymdfc2xsaV9mcmVlAB0PX193Ymdfd2RvcF9mcmVlAB0OX193Ymdfc2xsX2ZyZWUAHQ9fX3diZ19lY2FsX2ZyZWUAHQ9fX3diZ193cWNtX2ZyZWUAHQ9fX3diZ19zd3dxX2ZyZWUAHQ9fX3diZ19tbGR2X2ZyZWUAHQ1fX3diZ19ndF9mcmVlAB0NX193YmdfZXFfZnJlZQAdDl9fd2JnX2puZV9mcmVlAB0PX193Ymdfam5laV9mcmVlAB0PX193Ymdfam1wZl9mcmVlAB0OX193YmdfZXhwX2ZyZWUAHQ9fX3diZ19zMjU2X2ZyZWUAHQ5fX3diZ19zdWJfZnJlZQAdDl9fd2JnX21jcF9mcmVlAB0PX193YmdfZXBhcl9mcmVlAB0PX193YmdfY2ZlaV9mcmVlAB0PX193YmdfY2ZzaV9mcmVlAB0PX193Ymdfam56Zl9mcmVlAB0PX193YmdfbWludF9mcmVlAB0PX193YmdfYnNpel9mcmVlAB0PX193YmdfYnVybl9mcmVlAB0PX193Ymdfd2RtbV9mcmVlAB0PX193Ymdfam1wYl9mcmVlAB0PX193Ymdfc3JsaV9mcmVlAB0PX193Ymdfc3ViaV9mcmVlAB0PX193Ymdfam56Yl9mcmVlAB0PX193YmdfbXVsaV9mcmVlAB0PX193Ymdfd3FvcF9mcmVlAB0PX193YmdfcG9wbF9mcmVlAB0OX193YmdfbWNsX2ZyZWUAHQ9fX3diZ19jYWxsX2ZyZWUAHQ9fX3diZ19tbG9nX2ZyZWUAHQ9fX3diZ19ibGRkX2ZyZWUAHQ9fX3diZ19hbG9jX2ZyZWUAHRN3cWR2X25ld190eXBlc2NyaXB0ANABE3dxbWxfbmV3X3R5cGVzY3JpcHQA0AETd2RtbF9uZXdfdHlwZXNjcmlwdADQARN3cW9wX25ld190eXBlc2NyaXB0ANABE3dkb3BfbmV3X3R5cGVzY3JpcHQA0AETd3FjbV9uZXdfdHlwZXNjcmlwdADQARN3ZGR2X25ld190eXBlc2NyaXB0ANABDndxY21fZnJvbV9hcmdzAEAKd3Fkdl9pbW0wNgA7CndxbWxfaW1tMDYAOwp3ZG1sX2ltbTA2ADsKd3FvcF9pbW0wNgA7Cndkb3BfaW1tMDYAOwp3cWNtX2ltbTA2ADsKd2Rkdl9pbW0wNgA7CndkY21faW1tMDYAOwpqbmVmX2ltbTA2ADsJbGRjX2ltbTA2ADsOd3Fkdl9mcm9tX2FyZ3MAzwEOd3FtbF9mcm9tX2FyZ3MAQQ53cW9wX2Zyb21fYXJncwBABWdtX3JhADoFZ3RfcmMAHgVndF9yYgAXBWd0X3JhADoFbGJfcmIAFwVsYl9yYQA6BWx0X3JjAB4FbHRfcmIAFwVsdF9yYQA6CGx3X2ltbTEyAAoFbHdfcmIAFwVsd19yYQA6BW9yX3JjAB4Fb3JfcmIAFwVvcl9yYQA6CHNiX2ltbTEyAAoFc2JfcmIAFwVzYl9yYQA6CHN3X2ltbTEyAAoFc3dfcmIAFwVzd19yYQA6BXRyX3JjAB4FdHJfcmIAFwV0cl9yYQA6BWVxX3JjAB4FZXFfcmIAFwVlcV9yYQA6BmFuZF9yYwAeBmFuZF9yYgAXBmFuZF9yYQA6BmJhbF9yYwAeBmJhbF9yYgAXBmJhbF9yYQA6BmNjcF9yYwAeBmNjcF9yYgAXBmNjcF9yYQA6BmRpdl9yYwAeBmRpdl9yYgAXBmRpdl9yYQA6BmV4cF9yYwAeBmV4cF9yYgAXBmV4cF9yYQA6CGxiX2ltbTEyAAoGZ3RmX3JiABcGZ3RmX3JhADoGam5lX3JjAB4Gam5lX3JiABcGam5lX3JhADoGbGRjX3JjAB4GbGRjX3JiABcGbGRjX3JhADoGbG9nX3JkADsGbG9nX3JjAB4GbG9nX3JiABcGbG9nX3JhADoGbWNsX3JiABcGbWNsX3JhADoGbWNwX3JjAB4GbWNwX3JiABcGbWNwX3JhADoGbWVxX3JkADsGbWVxX3JjAB4GbWVxX3JiABcGbWVxX3JhADoGbW9kX3JjAB4GbW9kX3JiABcGbW9kX3JhADoGbXVsX3JjAB4GbXVsX3JiABcGbXVsX3JhADoGbm90X3JiABcGbm90X3JhADoJb3JpX2ltbTEyAAoGb3JpX3JiABcGb3JpX3JhADoGc2xsX3JjAB4Gc2xsX3JiABcGc2xsX3JhADoGc21vX3JkADsGc21vX3JjAB4Gc21vX3JiABcGc21vX3JhADoGc3JsX3JjAB4Gc3JsX3JiABcGc3JsX3JhADoGc3J3X3JjAB4Gc3J3X3JiABcGc3J3X3JhADoGc3ViX3JjAB4Gc3ViX3JiABcGc3ViX3JhADoGc3d3X3JjAB4Gc3d3X3JiABcGc3d3X3JhADoGdHJvX3JkADsGdHJvX3JjAB4GdHJvX3JiABcGdHJvX3JhADoGeG9yX3JjAB4GeG9yX3JiABcGeG9yX3JhADoJZ3RmX2ltbTEyAAoHYWRkaV9yYgAXB2FkZGlfcmEAOgphbmRpX2ltbTEyAAoHYW5kaV9yYgAXB2FuZGlfcmEAOgdiaHNoX3JiABcHYmhzaF9yYQA6BmNjcF9yZAA7B2JsZGRfcmMAHgdibGRkX3JiABcHYmxkZF9yYQA6B2JzaXpfcmIAFwdic2l6X3JhADoHYnVybl9yYgAXB2J1cm5fcmEAOgdjYWxsX3JkADsHY2FsbF9yYwAeB2NhbGxfcmIAFwdjYWxsX3JhADoHY3Jvb19yYgAXB2Nyb29fcmEAOgdjc2l6X3JiABcHY3Npel9yYQA6CmRpdmlfaW1tMTIACgdkaXZpX3JiABcHZGl2aV9yYQA6B2VjYWxfcmQAOwdlY2FsX3JjAB4HZWNhbF9yYgAXB2VjYWxfcmEAOgdlY2sxX3JjAB4HZWNrMV9yYgAXB2VjazFfcmEAOgdlY29wX3JkADsHZWNvcF9yYwAeB2Vjb3BfcmIAFwdlY29wX3JhADoHZWNyMV9yYwAeB2VjcjFfcmIAFwdlY3IxX3JhADoHZWQxOV9yZAA7B2VkMTlfcmMAHgdlZDE5X3JiABcHZWQxOV9yYQA6B2VwYXJfcmQAOwdlcGFyX3JjAB4HZXBhcl9yYgAXB2VwYXJfcmEAOgpleHBpX2ltbTEyAAoHZXhwaV9yYgAXB2V4cGlfcmEAOgpqbXBiX2ltbTE4AA8Ham1wYl9yYQA6CmptcGZfaW1tMTgADwdqbXBmX3JhADoHam5lYl9yYwAeB2puZWJfcmIAFwdqbmViX3JhADoHam5lZl9yYwAeB2puZWZfcmIAFwdqbmVmX3JhADoKam5laV9pbW0xMgAKB2puZWlfcmIAFwdqbmVpX3JhADoKam56Yl9pbW0xMgAKB2puemJfcmIAFwdqbnpiX3JhADoKam56Zl9pbW0xMgAKB2puemZfcmIAFwdqbnpmX3JhADoKam56aV9pbW0xOAAPB2puemlfcmEAOgdrMjU2X3JjAB4HazI1Nl9yYgAXB2syNTZfcmEAOgdsb2dkX3JkADsHbG9nZF9yYwAeB2xvZ2RfcmIAFwdsb2dkX3JhADoKbWNsaV9pbW0xOAAPB21jbGlfcmEAOgptY3BpX2ltbTEyAAoHbWNwaV9yYgAXB21jcGlfcmEAOgdtaW50X3JiABcHbWludF9yYQA6B21sZHZfcmQAOwdtbGR2X3JjAB4HbWxkdl9yYgAXB21sZHZfcmEAOgdtbG9nX3JjAB4HbWxvZ19yYgAXB21sb2dfcmEAOgptb2RpX2ltbTEyAAoHbW9kaV9yYgAXB21vZGlfcmEAOgdtb3ZlX3JiABcHbW92ZV9yYQA6Cm1vdmlfaW1tMTgADwdtb3ZpX3JhADoHbXJvb19yYwAeB21yb29fcmIAFwdtcm9vX3JhADoKbXVsaV9pbW0xMgAKB211bGlfcmIAFwdtdWxpX3JhADoHcmV0ZF9yYgAXB3JldGRfcmEAOgdzMjU2X3JjAB4HczI1Nl9yYgAXB3MyNTZfcmEAOgdzY3dxX3JjAB4Hc2N3cV9yYgAXB3Njd3FfcmEAOgpzbGxpX2ltbTEyAAoHc2xsaV9yYgAXB3NsbGlfcmEAOgpzcmxpX2ltbTEyAAoHc3JsaV9yYgAXB3NybGlfcmEAOgdzcndxX3JkADsHc3J3cV9yYwAeB3Nyd3FfcmIAFwdzcndxX3JhADoKc3ViaV9pbW0xMgAKB3N1YmlfcmIAFwdzdWJpX3JhADoHc3d3cV9yZAA7B3N3d3FfcmMAHgdzd3dxX3JiABcHc3d3cV9yYQA6B3RpbWVfcmIAFwd0aW1lX3JhADoHd2RhbV9yZAA7B3dkYW1fcmMAHgd3ZGFtX3JiABcHd2RhbV9yYQA6B3dkY21fcmMAHgd3ZGNtX3JiABcHd2RjbV9yYQA6B3dkZHZfcmMAHgd3ZGR2X3JiABcHd2Rkdl9yYQA6B3dkbWRfcmQAOwd3ZG1kX3JjAB4Hd2RtZF9yYgAXB3dkbWRfcmEAOgd3ZG1sX3JjAB4Hd2RtbF9yYgAXB3dkbWxfcmEAOgd3ZG1tX3JkADsHd2RtbV9yYwAeB3dkbW1fcmIAFwd3ZG1tX3Jh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QQh2QYD+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.41.9",
17893
- FORC: "0.67.0",
17894
- FUELS: "0.100.3"
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";
@@ -27014,6 +27119,83 @@ spurious results.`);
27014
27119
  var lib_default2 = gql;
27015
27120
 
27016
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
+ `;
27017
27199
  var SubmittedStatusFragmentDoc = lib_default2`
27018
27200
  fragment SubmittedStatusFragment on SubmittedStatus {
27019
27201
  type: __typename
@@ -27142,6 +27324,87 @@ spurious results.`);
27142
27324
  reason
27143
27325
  }
27144
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}`;
27145
27408
  var TransactionStatusSubscriptionFragmentDoc = lib_default2`
27146
27409
  fragment transactionStatusSubscriptionFragment on TransactionStatus {
27147
27410
  ... on SubmittedStatus {
@@ -27162,12 +27425,20 @@ spurious results.`);
27162
27425
  ... on SqueezedOutStatus {
27163
27426
  ...SqueezedOutStatusFragment
27164
27427
  }
27428
+ ... on PreconfirmationSuccessStatus {
27429
+ ...PreconfirmationSuccessStatusFragment
27430
+ }
27431
+ ... on PreconfirmationFailureStatus {
27432
+ ...PreconfirmationFailureStatusFragment
27433
+ }
27165
27434
  }
27166
27435
  ${SubmittedStatusFragmentDoc}
27167
27436
  ${SuccessStatusWithBlockIdFragmentDoc}
27168
27437
  ${MalleableTransactionFieldsFragmentDoc}
27169
27438
  ${FailureStatusWithBlockIdFragmentDoc}
27170
- ${SqueezedOutStatusFragmentDoc}`;
27439
+ ${SqueezedOutStatusFragmentDoc}
27440
+ ${PreconfirmationSuccessStatusFragmentDoc}
27441
+ ${PreconfirmationFailureStatusFragmentDoc}`;
27171
27442
  var TransactionStatusFragmentDoc = lib_default2`
27172
27443
  fragment transactionStatusFragment on TransactionStatus {
27173
27444
  ... on SubmittedStatus {
@@ -27219,6 +27490,23 @@ ${SqueezedOutStatusFragmentDoc}`;
27219
27490
  }
27220
27491
  }
27221
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}`;
27222
27510
  var DryRunFailureStatusFragmentDoc = lib_default2`
27223
27511
  fragment dryRunFailureStatusFragment on DryRunFailureStatus {
27224
27512
  type: __typename
@@ -27575,13 +27863,21 @@ ${NodeInfoFragmentDoc}`;
27575
27863
  ... on SqueezedOutStatus {
27576
27864
  ...SqueezedOutStatusFragment
27577
27865
  }
27866
+ ... on PreconfirmationSuccessStatus {
27867
+ ...PreconfirmationSuccessStatusFragment
27868
+ }
27869
+ ... on PreconfirmationFailureStatus {
27870
+ ...PreconfirmationFailureStatusFragment
27871
+ }
27578
27872
  }
27579
27873
  }
27580
27874
  }
27581
27875
  ${SubmittedStatusFragmentDoc}
27582
27876
  ${SuccessStatusWithBlockIdFragmentDoc}
27583
27877
  ${FailureStatusWithBlockIdFragmentDoc}
27584
- ${SqueezedOutStatusFragmentDoc}`;
27878
+ ${SqueezedOutStatusFragmentDoc}
27879
+ ${PreconfirmationSuccessStatusFragmentDoc}
27880
+ ${PreconfirmationFailureStatusFragmentDoc}`;
27585
27881
  var GetTransactionsDocument = lib_default2`
27586
27882
  query getTransactions($after: String, $before: String, $first: Int, $last: Int) {
27587
27883
  transactions(after: $after, before: $before, first: $first, last: $last) {
@@ -27872,6 +28168,77 @@ ${GetMessageFragmentDoc}`;
27872
28168
  }
27873
28169
  }
27874
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}`;
27875
28242
  var DryRunDocument = lib_default2`
27876
28243
  mutation dryRun($encodedTransactions: [HexString!]!, $utxoValidation: Boolean, $gasPrice: U64) {
27877
28244
  dryRun(
@@ -27930,15 +28297,22 @@ ${GetMessageFragmentDoc}`;
27930
28297
  }
27931
28298
  `;
27932
28299
  var SubmitAndAwaitStatusDocument = lib_default2`
27933
- subscription submitAndAwaitStatus($encodedTransaction: HexString!) {
27934
- submitAndAwaitStatus(tx: $encodedTransaction) {
28300
+ subscription submitAndAwaitStatus($encodedTransaction: HexString!, $estimatePredicates: Boolean, $includePreConfirmation: Boolean) {
28301
+ submitAndAwaitStatus(
28302
+ tx: $encodedTransaction
28303
+ estimatePredicates: $estimatePredicates
28304
+ includePreconfirmation: $includePreConfirmation
28305
+ ) {
27935
28306
  ...transactionStatusSubscriptionFragment
27936
28307
  }
27937
28308
  }
27938
28309
  ${TransactionStatusSubscriptionFragmentDoc}`;
27939
28310
  var StatusChangeDocument = lib_default2`
27940
- subscription statusChange($transactionId: TransactionId!) {
27941
- statusChange(id: $transactionId) {
28311
+ subscription statusChange($transactionId: TransactionId!, $includePreConfirmation: Boolean) {
28312
+ statusChange(
28313
+ id: $transactionId
28314
+ includePreconfirmation: $includePreConfirmation
28315
+ ) {
27942
28316
  ...transactionStatusSubscriptionFragment
27943
28317
  }
27944
28318
  }
@@ -28041,6 +28415,9 @@ ${GetMessageFragmentDoc}`;
28041
28415
  getAssetDetails(variables, options) {
28042
28416
  return requester(GetAssetDetailsDocument, variables, options);
28043
28417
  },
28418
+ assembleTx(variables, options) {
28419
+ return requester(AssembleTxDocument, variables, options);
28420
+ },
28044
28421
  dryRun(variables, options) {
28045
28422
  return requester(DryRunDocument, variables, options);
28046
28423
  },
@@ -28069,9 +28446,67 @@ ${GetMessageFragmentDoc}`;
28069
28446
  }
28070
28447
  __name(getSdk, "getSdk");
28071
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
+
28072
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
+ };
28073
28508
  var mapGqlErrorMessage = /* @__PURE__ */ __name((error2) => {
28074
- if (new RegExp("the target cannot be met due to no coins available or exceeding the \\d+ coin limit." /* NOT_ENOUGH_COINS_MAX_COINS */).test(error2.message)) {
28509
+ if (gqlErrorMessage.NOT_ENOUGH_COINS_MAX_COINS.test(error2.message)) {
28075
28510
  return new FuelError(
28076
28511
  ErrorCode.INSUFFICIENT_FUNDS_OR_MAX_COINS,
28077
28512
  `Insufficient funds or too many small value coins. Consider combining UTXOs.`,
@@ -28079,7 +28514,25 @@ ${GetMessageFragmentDoc}`;
28079
28514
  error2
28080
28515
  );
28081
28516
  }
28082
- if (new RegExp("resource was not found in table" /* ASSET_NOT_FOUND */).test(error2.message)) {
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)) {
28083
28536
  return new FuelError(
28084
28537
  ErrorCode.ASSET_NOT_FOUND,
28085
28538
  `Asset not found for given asset id.`,
@@ -28087,6 +28540,13 @@ ${GetMessageFragmentDoc}`;
28087
28540
  error2
28088
28541
  );
28089
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
+ }
28090
28550
  return new FuelError(ErrorCode.INVALID_REQUEST, error2.message, {}, error2);
28091
28551
  }, "mapGqlErrorMessage");
28092
28552
  var mapGqlErrorWithIncompatibleNodeVersion = /* @__PURE__ */ __name((error2, incompatibleNodeVersionMessage) => {
@@ -28119,8 +28579,9 @@ ${incompatibleNodeVersionMessage}`,
28119
28579
 
28120
28580
  // src/providers/fuel-graphql-subscriber.ts
28121
28581
  var FuelGraphqlSubscriber = class _FuelGraphqlSubscriber {
28122
- constructor(stream) {
28582
+ constructor(stream, onEvent) {
28123
28583
  this.stream = stream;
28584
+ this.onEvent = onEvent;
28124
28585
  }
28125
28586
  static {
28126
28587
  __name(this, "FuelGraphqlSubscriber");
@@ -28128,12 +28589,13 @@ ${incompatibleNodeVersionMessage}`,
28128
28589
  static incompatibleNodeVersionMessage = false;
28129
28590
  static textDecoder = new TextDecoder();
28130
28591
  static async create(options) {
28131
- const { url, query, variables, fetchFn } = options;
28592
+ const { url, query, variables, fetchFn, operationName, onEvent } = options;
28132
28593
  const response = await fetchFn(`${url}-sub`, {
28133
28594
  method: "POST",
28134
28595
  body: JSON.stringify({
28135
28596
  query: print(query),
28136
- variables
28597
+ variables,
28598
+ operationName
28137
28599
  }),
28138
28600
  headers: {
28139
28601
  "Content-Type": "application/json",
@@ -28142,39 +28604,71 @@ ${incompatibleNodeVersionMessage}`,
28142
28604
  });
28143
28605
  const [errorReader, resultReader] = response.body.tee().map((stream) => stream.getReader());
28144
28606
  await new _FuelGraphqlSubscriber(errorReader).next();
28145
- return new _FuelGraphqlSubscriber(resultReader);
28607
+ return new _FuelGraphqlSubscriber(resultReader, onEvent);
28146
28608
  }
28147
- events = [];
28148
- parsingLeftover = "";
28149
- async next() {
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;
28150
28619
  while (true) {
28151
- if (this.events.length > 0) {
28152
- const { data, errors: errors2 } = this.events.shift();
28153
- assertGqlResponseHasNoErrors(errors2, _FuelGraphqlSubscriber.incompatibleNodeVersionMessage);
28154
- return { value: data, done: false };
28155
- }
28156
- const { value, done } = await this.stream.read();
28157
- if (done) {
28158
- return { value, done };
28159
- }
28160
- const decoded = _FuelGraphqlSubscriber.textDecoder.decode(value).replace(":keep-alive-text\n\n", "");
28161
- if (decoded === "") {
28162
- continue;
28163
- }
28164
- const text = `${this.parsingLeftover}${decoded}`;
28165
- const regex = /data:.*\n\n/g;
28166
28620
  const matches = [...text.matchAll(regex)].flatMap((match) => match);
28167
- matches.forEach((match) => {
28621
+ if (matches.length > 0) {
28168
28622
  try {
28169
- this.events.push(JSON.parse(match.replace(/^data:/, "")));
28623
+ const event = JSON.parse(matches[0].replace(/^data:/, ""));
28624
+ return {
28625
+ event,
28626
+ done: false,
28627
+ parsingLeftover: text.replace(matches[0], "")
28628
+ };
28170
28629
  } catch (e) {
28171
28630
  throw new FuelError(
28172
28631
  ErrorCode.STREAM_PARSING_ERROR,
28173
28632
  `Error while parsing stream data response: ${text}`
28174
28633
  );
28175
28634
  }
28176
- });
28177
- this.parsingLeftover = text.replace(matches.join(), "");
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;
28642
+ }
28643
+ }
28644
+ events = [];
28645
+ parsingLeftover = "";
28646
+ /**
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
28651
+ */
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);
28178
28672
  }
28179
28673
  }
28180
28674
  /**
@@ -28220,7 +28714,7 @@ ${incompatibleNodeVersionMessage}`,
28220
28714
  case InputType.Contract: {
28221
28715
  return {
28222
28716
  type: InputType.Contract,
28223
- txID: ZeroBytes32,
28717
+ txID: hexlify(value.txID || ZeroBytes32),
28224
28718
  outputIndex: 0,
28225
28719
  balanceRoot: ZeroBytes32,
28226
28720
  stateRoot: ZeroBytes32,
@@ -28291,9 +28785,9 @@ ${incompatibleNodeVersionMessage}`,
28291
28785
  case OutputType.Variable: {
28292
28786
  return {
28293
28787
  type: OutputType.Variable,
28294
- to: ZeroBytes32,
28295
- amount: bn(0),
28296
- assetId: ZeroBytes32
28788
+ to: hexlify(value.to || ZeroBytes32),
28789
+ amount: bn(value.amount),
28790
+ assetId: hexlify(value.assetId || ZeroBytes32)
28297
28791
  };
28298
28792
  }
28299
28793
  case OutputType.ContractCreated: {
@@ -28340,6 +28834,7 @@ ${incompatibleNodeVersionMessage}`,
28340
28834
  "BlobIdAlreadyUploaded",
28341
28835
  "BlobNotFound",
28342
28836
  "BytecodeAlreadyUploaded",
28837
+ "CanNotGetGasPriceInPredicate",
28343
28838
  "ContractIdAlreadyDeployed",
28344
28839
  "ContractInstructionNotAllowed",
28345
28840
  "ContractMaxSize",
@@ -28363,6 +28858,7 @@ ${incompatibleNodeVersionMessage}`,
28363
28858
  "InvalidImmediateValue",
28364
28859
  "InvalidInstruction",
28365
28860
  "InvalidMetadataIdentifier",
28861
+ "InvalidUpgradePurposeType",
28366
28862
  "MalformedCallStructure",
28367
28863
  "MaxStaticContractsReached",
28368
28864
  "MemoryGrowthOverlap",
@@ -28379,8 +28875,10 @@ ${incompatibleNodeVersionMessage}`,
28379
28875
  "PolicyIsNotSet",
28380
28876
  "PolicyNotFound",
28381
28877
  "PredicateReturnedNonOne",
28878
+ "ProofInUploadNotFound",
28382
28879
  "ReservedRegisterNotWritable",
28383
28880
  "Revert",
28881
+ "StorageSlotsNotFound",
28384
28882
  "ThePartIsNotSequentiallyConnected",
28385
28883
  "TooManyReceipts",
28386
28884
  "TooManySlots",
@@ -28734,16 +29232,151 @@ ${incompatibleNodeVersionMessage}`,
28734
29232
  throw new FuelError(ErrorCode.INVALID_RECEIPT_TYPE, `Invalid receipt type: ${receiptType}.`);
28735
29233
  }
28736
29234
  }, "deserializeReceipt");
28737
-
28738
- // src/providers/utils/receipts.ts
28739
- var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
28740
- var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
28741
- var getReceiptsWithMissingData = /* @__PURE__ */ __name((receipts) => receipts.reduce(
28742
- (memo, receipt) => {
28743
- if (doesReceiptHaveMissingOutputVariables(receipt)) {
28744
- memo.missingOutputVariables.push(receipt);
28745
- }
28746
- if (doesReceiptHaveMissingContractId(receipt)) {
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");
29370
+
29371
+ // src/providers/utils/receipts.ts
29372
+ var doesReceiptHaveMissingOutputVariables = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Revert && receipt.val.toString("hex") === FAILED_TRANSFER_TO_ADDRESS_SIGNAL, "doesReceiptHaveMissingOutputVariables");
29373
+ var doesReceiptHaveMissingContractId = /* @__PURE__ */ __name((receipt) => receipt.type === ReceiptType.Panic && receipt.contractId !== "0x0000000000000000000000000000000000000000000000000000000000000000", "doesReceiptHaveMissingContractId");
29374
+ var getReceiptsWithMissingData = /* @__PURE__ */ __name((receipts) => receipts.reduce(
29375
+ (memo, receipt) => {
29376
+ if (doesReceiptHaveMissingOutputVariables(receipt)) {
29377
+ memo.missingOutputVariables.push(receipt);
29378
+ }
29379
+ if (doesReceiptHaveMissingContractId(receipt)) {
28747
29380
  memo.missingOutputContractIds.push(receipt);
28748
29381
  }
28749
29382
  return memo;
@@ -29076,6 +29709,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
29076
29709
  return assembleRevertError(receipts, logs, metadata);
29077
29710
  }, "extractTxError");
29078
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
+
29079
29727
  // src/providers/transaction-request/errors.ts
29080
29728
  var ChangeOutputCollisionError = class extends Error {
29081
29729
  static {
@@ -30027,6 +30675,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
30027
30675
  * @param account - The account to fund the transaction.
30028
30676
  * @param params - The parameters for the transaction cost.
30029
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.
30030
30681
  */
30031
30682
  async estimateAndFund(account, { signatureCallback, quantities = [] } = {}) {
30032
30683
  const txCost = await account.getTransactionCost(this, { signatureCallback, quantities });
@@ -30110,6 +30761,21 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
30110
30761
  }
30111
30762
  return this.outputs.length - 1;
30112
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
+ }
30113
30779
  /**
30114
30780
  * Calculates the maximum gas for the transaction.
30115
30781
  *
@@ -30780,6 +31446,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
30780
31446
  TransactionStatus2["success"] = "success";
30781
31447
  TransactionStatus2["squeezedout"] = "squeezedout";
30782
31448
  TransactionStatus2["failure"] = "failure";
31449
+ TransactionStatus2["preconfirmationSuccess"] = "preconfirmationSuccess";
31450
+ TransactionStatus2["preconfirmationFailure"] = "preconfirmationFailure";
30783
31451
  return TransactionStatus2;
30784
31452
  })(TransactionStatus || {});
30785
31453
  var OperationName = /* @__PURE__ */ ((OperationName2) => {
@@ -31246,6 +31914,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31246
31914
  return "submitted" /* submitted */;
31247
31915
  case "SqueezedOutStatus":
31248
31916
  return "squeezedout" /* squeezedout */;
31917
+ case "PreconfirmationSuccessStatus":
31918
+ return "preconfirmationSuccess" /* preconfirmationSuccess */;
31919
+ case "PreconfirmationFailureStatus":
31920
+ return "preconfirmationFailure" /* preconfirmationFailure */;
31249
31921
  default:
31250
31922
  throw new FuelError(
31251
31923
  ErrorCode.INVALID_TRANSACTION_STATUS,
@@ -31253,15 +31925,30 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31253
31925
  );
31254
31926
  }
31255
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");
31256
31938
  var processGraphqlStatus = /* @__PURE__ */ __name((gqlTransactionStatus) => {
31257
31939
  let time;
31258
31940
  let blockId;
31259
31941
  let status;
31260
31942
  let totalFee;
31261
31943
  let totalGas;
31944
+ let receipts;
31945
+ let resolvedOutputs = [];
31946
+ let errorReason;
31262
31947
  let isStatusFailure = false;
31263
31948
  let isStatusSuccess = false;
31264
31949
  let isStatusPending = false;
31950
+ let isStatusPreConfirmationSuccess = false;
31951
+ let isStatusPreConfirmationFailure = false;
31265
31952
  if (gqlTransactionStatus?.type) {
31266
31953
  status = getTransactionStatusName(gqlTransactionStatus.type);
31267
31954
  switch (gqlTransactionStatus.type) {
@@ -31269,6 +31956,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31269
31956
  time = gqlTransactionStatus.time;
31270
31957
  blockId = gqlTransactionStatus.block?.id;
31271
31958
  isStatusSuccess = true;
31959
+ receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
31272
31960
  totalFee = bn(gqlTransactionStatus.totalFee);
31273
31961
  totalGas = bn(gqlTransactionStatus.totalGas);
31274
31962
  break;
@@ -31277,12 +31965,28 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31277
31965
  blockId = gqlTransactionStatus.block?.id;
31278
31966
  isStatusFailure = true;
31279
31967
  totalFee = bn(gqlTransactionStatus.totalFee);
31968
+ receipts = gqlTransactionStatus.receipts?.map(deserializeReceipt);
31280
31969
  totalGas = bn(gqlTransactionStatus.totalGas);
31281
31970
  break;
31282
31971
  case "SubmittedStatus":
31283
31972
  time = gqlTransactionStatus.time;
31284
31973
  isStatusPending = true;
31285
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;
31286
31990
  default:
31287
31991
  }
31288
31992
  }
@@ -31292,9 +31996,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31292
31996
  status,
31293
31997
  totalFee,
31294
31998
  totalGas,
31999
+ receipts,
31295
32000
  isStatusFailure,
31296
32001
  isStatusSuccess,
31297
- isStatusPending
32002
+ isStatusPending,
32003
+ isStatusPreConfirmationSuccess,
32004
+ isStatusPreConfirmationFailure,
32005
+ resolvedOutputs,
32006
+ errorReason
31298
32007
  };
31299
32008
  return processedGraphqlStatus;
31300
32009
  }, "processGraphqlStatus");
@@ -31379,6 +32088,81 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31379
32088
  return transactionSummary;
31380
32089
  }
31381
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");
31382
32166
 
31383
32167
  // src/providers/transaction-response/getAllDecodedLogs.ts
31384
32168
  function getAllDecodedLogs(opts) {
@@ -31411,37 +32195,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31411
32195
  __name(getAllDecodedLogs, "getAllDecodedLogs");
31412
32196
 
31413
32197
  // src/providers/transaction-response/transaction-response.ts
31414
- function mapGqlOutputsToTxOutputs(outputs) {
31415
- return outputs.map((o) => {
31416
- const obj = "amount" in o ? { ...o, amount: bn(o.amount) } : o;
31417
- switch (obj.type) {
31418
- case "CoinOutput":
31419
- return { ...obj, type: OutputType.Coin };
31420
- case "ContractOutput":
31421
- return {
31422
- ...obj,
31423
- type: OutputType.Contract,
31424
- inputIndex: parseInt(obj.inputIndex, 10)
31425
- };
31426
- case "ChangeOutput":
31427
- return {
31428
- ...obj,
31429
- type: OutputType.Change
31430
- };
31431
- case "VariableOutput":
31432
- return { ...obj, type: OutputType.Variable };
31433
- case "ContractCreated":
31434
- return {
31435
- ...obj,
31436
- type: OutputType.ContractCreated,
31437
- contractId: obj.contract
31438
- };
31439
- default:
31440
- return assertUnreachable(obj);
31441
- }
31442
- });
31443
- }
31444
- __name(mapGqlOutputsToTxOutputs, "mapGqlOutputsToTxOutputs");
31445
32198
  var TransactionResponse = class _TransactionResponse {
31446
32199
  /**
31447
32200
  * Constructor for `TransactionResponse`.
@@ -31451,11 +32204,16 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31451
32204
  */
31452
32205
  constructor(tx, provider, chainId, abis, submitTxSubscription) {
31453
32206
  this.submitTxSubscription = submitTxSubscription;
31454
- this.id = typeof tx === "string" ? tx : tx.getTransactionId(chainId);
32207
+ if (typeof tx === "string") {
32208
+ this.id = tx;
32209
+ } else {
32210
+ this.id = tx.getTransactionId(chainId);
32211
+ this.request = tx;
32212
+ }
31455
32213
  this.provider = provider;
31456
32214
  this.abis = abis;
31457
- this.request = typeof tx === "string" ? void 0 : tx;
31458
32215
  this.waitForResult = this.waitForResult.bind(this);
32216
+ this.waitForPreConfirmation = this.waitForPreConfirmation.bind(this);
31459
32217
  }
31460
32218
  static {
31461
32219
  __name(this, "TransactionResponse");
@@ -31471,6 +32229,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31471
32229
  request;
31472
32230
  status;
31473
32231
  abis;
32232
+ waitingForStreamData = false;
32233
+ statusResolvers = /* @__PURE__ */ new Map();
32234
+ preConfirmationStatus;
31474
32235
  /**
31475
32236
  * Async constructor for `TransactionResponse`. This method can be used to create
31476
32237
  * an instance of `TransactionResponse` and wait for the transaction to be fetched
@@ -31502,29 +32263,38 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31502
32263
  }
31503
32264
  return input;
31504
32265
  });
31505
- tx.outputs = mapGqlOutputsToTxOutputs(status.transaction.outputs);
31506
- if ("receiptsRoot" in status.transaction) {
32266
+ tx.outputs = status.transaction.outputs.map(deserializeProcessedTxOutput);
32267
+ if (status.transaction.receiptsRoot) {
31507
32268
  tx.receiptsRoot = status.transaction.receiptsRoot;
31508
32269
  }
31509
32270
  }
31510
32271
  }
31511
32272
  async getTransaction() {
31512
32273
  if (this.request) {
31513
- const tx = this.request.toTransaction();
31514
- this.applyMalleableSubscriptionFields(tx);
32274
+ const tx2 = this.request.toTransaction();
32275
+ this.applyMalleableSubscriptionFields(tx2);
31515
32276
  return {
31516
- tx,
32277
+ tx: tx2,
31517
32278
  bytes: this.request.toTransactionBytes()
31518
32279
  };
31519
32280
  }
31520
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);
31521
32285
  return {
31522
- tx: this.decodeTransaction(gqlTransaction),
31523
- bytes: arrayify(gqlTransaction.rawPayload)
32286
+ tx,
32287
+ bytes
31524
32288
  };
31525
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
+ */
31526
32296
  getReceipts() {
31527
- const status = this.status ?? this.gqlTransaction?.status;
32297
+ const status = this.getTransactionStatus();
31528
32298
  switch (status?.type) {
31529
32299
  case "SuccessStatus":
31530
32300
  case "FailureStatus":
@@ -31557,18 +32327,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31557
32327
  this.gqlTransaction = response.transaction;
31558
32328
  return response.transaction;
31559
32329
  }
31560
- /**
31561
- * Decode the raw payload of the transaction.
31562
- *
31563
- * @param transactionWithReceipts - The transaction with receipts object.
31564
- * @returns The decoded transaction.
31565
- */
31566
- decodeTransaction(transactionWithReceipts) {
31567
- return new TransactionCoder().decode(
31568
- arrayify(transactionWithReceipts.rawPayload),
31569
- 0
31570
- )?.[0];
31571
- }
31572
32330
  /**
31573
32331
  * Retrieves the TransactionSummary. If the `gqlTransaction` is not set, it will
31574
32332
  * fetch it from the provider
@@ -31579,7 +32337,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31579
32337
  async getTransactionSummary(contractsAbiMap) {
31580
32338
  const { tx: transaction, bytes: transactionBytes } = await this.getTransaction();
31581
32339
  const { gasPerByte, gasPriceFactor, gasCosts, maxGasPerTx } = await this.provider.getGasConfig();
31582
- const totalFee = getTotalFeeFromStatus(this.status ?? this.gqlTransaction?.status);
32340
+ const transactionStatus = this.getTransactionStatus();
32341
+ const totalFee = getTotalFeeFromStatus(transactionStatus);
31583
32342
  const gasPrice = totalFee ? bn(0) : await this.provider.getLatestGasPrice();
31584
32343
  const maxInputs = (await this.provider.getChain()).consensusParameters.txParameters.maxInputs;
31585
32344
  const baseAssetId = await this.provider.getBaseAssetId();
@@ -31588,7 +32347,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31588
32347
  receipts: this.getReceipts(),
31589
32348
  transaction,
31590
32349
  transactionBytes,
31591
- gqlTransactionStatus: this.status ?? this.gqlTransaction?.status,
32350
+ gqlTransactionStatus: transactionStatus,
31592
32351
  gasPerByte,
31593
32352
  gasPriceFactor,
31594
32353
  abiMap: contractsAbiMap,
@@ -31600,29 +32359,92 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31600
32359
  });
31601
32360
  return transactionSummary;
31602
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
+ */
31603
32396
  async waitForStatusChange() {
31604
- const status = this.gqlTransaction?.status?.type;
31605
- if (status && status !== "SubmittedStatus") {
32397
+ const type3 = this.status?.type;
32398
+ if (type3 && (type3 === "FailureStatus" || type3 === "SuccessStatus")) {
32399
+ this.resolveStatus("preConfirmation");
32400
+ this.resolveStatus("confirmation");
31606
32401
  return;
31607
32402
  }
32403
+ if (this.waitingForStreamData) {
32404
+ return;
32405
+ }
32406
+ this.waitingForStreamData = true;
31608
32407
  const subscription = this.submitTxSubscription ?? await this.provider.operations.statusChange({
31609
- transactionId: this.id
32408
+ transactionId: this.id,
32409
+ includePreConfirmation: true
31610
32410
  });
31611
32411
  for await (const sub2 of subscription) {
31612
32412
  const statusChange = "statusChange" in sub2 ? sub2.statusChange : sub2.submitAndAwaitStatus;
31613
32413
  this.status = statusChange;
31614
32414
  if (statusChange.type === "SqueezedOutStatus") {
31615
- this.unsetResourceCache();
31616
32415
  throw new FuelError(
31617
32416
  ErrorCode.TRANSACTION_SQUEEZED_OUT,
31618
32417
  `Transaction Squeezed Out with reason: ${statusChange.reason}`
31619
32418
  );
31620
32419
  }
31621
- if (statusChange.type !== "SubmittedStatus") {
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;
31622
32428
  break;
31623
32429
  }
31624
32430
  }
31625
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
+ }
31626
32448
  /**
31627
32449
  * Assembles the result of a transaction by retrieving the transaction summary,
31628
32450
  * decoding logs (if available), and handling transaction failure.
@@ -31651,7 +32473,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31651
32473
  transactionResult.groupedLogs = groupedLogs;
31652
32474
  }
31653
32475
  const { receipts } = transactionResult;
31654
- const status = this.status ?? this.gqlTransaction?.status;
32476
+ const status = this.getTransactionStatus();
31655
32477
  if (status?.type === "FailureStatus") {
31656
32478
  const { reason } = status;
31657
32479
  throw extractTxError({
@@ -31663,16 +32485,46 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31663
32485
  }
31664
32486
  return transactionResult;
31665
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
+ }
31666
32507
  /**
31667
32508
  * Waits for transaction to complete and returns the result.
31668
32509
  *
31669
32510
  * @returns The completed transaction result
31670
32511
  */
31671
32512
  async waitForResult(contractsAbiMap) {
31672
- await this.waitForStatusChange();
32513
+ await this.waitForConfirmationStatuses();
31673
32514
  this.unsetResourceCache();
31674
32515
  return this.assembleResult(contractsAbiMap);
31675
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
+ }
31676
32528
  /**
31677
32529
  * Waits for transaction to complete and returns the result.
31678
32530
  *
@@ -31684,6 +32536,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31684
32536
  unsetResourceCache() {
31685
32537
  this.provider.cache?.unset(this.id);
31686
32538
  }
32539
+ getTransactionStatus() {
32540
+ return this.status ?? this.gqlTransaction?.status;
32541
+ }
31687
32542
  };
31688
32543
 
31689
32544
  // src/providers/transaction-response/getDecodedLogs.ts
@@ -31749,21 +32604,22 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31749
32604
  }
31750
32605
  __name(autoRetryFetch, "autoRetryFetch");
31751
32606
 
31752
- // src/providers/utils/helpers.ts
31753
- var adjustResourcesToExclude = /* @__PURE__ */ __name((params) => {
31754
- const { userInput, cached, maxInputs } = params;
31755
- const final = { ...userInput };
31756
- let total = final.utxos.length + final.messages.length;
31757
- if (total >= maxInputs) {
31758
- return final;
31759
- }
31760
- final.utxos = [...final.utxos, ...cached.utxos.slice(0, maxInputs - total)];
31761
- total = final.utxos.length + final.messages.length;
31762
- if (total < maxInputs) {
31763
- 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;
31764
32618
  }
31765
- return final;
31766
- }, "adjustResourcesToExclude");
32619
+ return {
32620
+ extensions
32621
+ };
32622
+ }, "parseGraphqlResponse");
31767
32623
 
31768
32624
  // src/providers/utils/validate-pagination-args.ts
31769
32625
  var validatePaginationArgs = /* @__PURE__ */ __name((params) => {
@@ -31808,22 +32664,48 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31808
32664
  var BLOCKS_PAGE_SIZE_LIMIT = 5;
31809
32665
  var DEFAULT_RESOURCE_CACHE_TTL = 2e4;
31810
32666
  var GAS_USED_MODIFIER = 1.2;
32667
+ var WRITE_OPERATIONS = [
32668
+ "submit",
32669
+ "submitAndAwaitStatus",
32670
+ "produceBlocks"
32671
+ ];
31811
32672
  var Provider = class _Provider {
31812
32673
  static {
31813
32674
  __name(this, "Provider");
31814
32675
  }
31815
32676
  operations;
31816
32677
  cache;
31817
- /** @hidden */
31818
- static clearChainAndNodeCaches() {
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
+ }
31819
32690
  _Provider.inflightFetchChainAndNodeInfoRequests = {};
31820
32691
  _Provider.nodeInfoCache = {};
31821
32692
  _Provider.chainInfoCache = {};
32693
+ _Provider.currentBlockHeightCache = {};
31822
32694
  }
31823
32695
  /** @hidden */
31824
32696
  url;
31825
32697
  /** @hidden */
31826
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;
31827
32709
  /** @hidden */
31828
32710
  static inflightFetchChainAndNodeInfoRequests = {};
31829
32711
  /** @hidden */
@@ -31831,6 +32713,8 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31831
32713
  /** @hidden */
31832
32714
  static nodeInfoCache = {};
31833
32715
  /** @hidden */
32716
+ static currentBlockHeightCache = {};
32717
+ /** @hidden */
31834
32718
  static incompatibleNodeVersionMessage = "";
31835
32719
  /** @hidden */
31836
32720
  consensusParametersTimestamp;
@@ -31842,6 +32726,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31842
32726
  headers: void 0,
31843
32727
  cache: void 0
31844
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
+ }
31845
32741
  /**
31846
32742
  * @hidden
31847
32743
  */
@@ -31859,9 +32755,57 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31859
32755
  if (options.requestMiddleware) {
31860
32756
  fullRequest = await options.requestMiddleware(fullRequest);
31861
32757
  }
31862
- return options.fetch ? options.fetch(url, fullRequest, options) : fetch(url, fullRequest);
32758
+ if (_Provider.ENABLE_RPC_CONSISTENCY && _Provider.hasWriteOperationHappened(url)) {
32759
+ _Provider.applyBlockHeight(fullRequest, url);
32760
+ }
32761
+ return _Provider.fetchAndProcessBlockHeight(url, fullRequest, options);
31863
32762
  }, retryOptions);
31864
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
+ }
31865
32809
  /**
31866
32810
  * Constructor to initialize a Provider.
31867
32811
  *
@@ -31947,6 +32891,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
31947
32891
  * Returns some helpful parameters related to gas fees.
31948
32892
  */
31949
32893
  async getGasConfig() {
32894
+ await this.init();
31950
32895
  const {
31951
32896
  txParameters: { maxGasPerTx },
31952
32897
  predicateParameters: { maxGasPerPredicate },
@@ -32071,7 +33016,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32071
33016
  url: this.urlWithoutAuth,
32072
33017
  query,
32073
33018
  fetchFn: /* @__PURE__ */ __name((url, requestInit) => fetchFn(url, requestInit, this.options), "fetchFn"),
32074
- 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")
32075
33027
  });
32076
33028
  }
32077
33029
  return gqlClient.request(query, vars);
@@ -32229,7 +33181,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32229
33181
  * @param sendTransactionParams - The provider send transaction parameters (optional).
32230
33182
  * @returns A promise that resolves to the transaction response object.
32231
33183
  */
32232
- async sendTransaction(transactionRequestLike, { estimateTxDependencies = true, enableAssetBurn } = {}) {
33184
+ async sendTransaction(transactionRequestLike, {
33185
+ enableAssetBurn,
33186
+ estimateTxDependencies = true,
33187
+ includePreConfirmation: _includePreConfirmation = true
33188
+ } = {}) {
32233
33189
  const transactionRequest = transactionRequestify(transactionRequestLike);
32234
33190
  validateTransactionForAssetBurn(
32235
33191
  await this.getBaseAssetId(),
@@ -32245,7 +33201,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32245
33201
  if (isTransactionTypeScript(transactionRequest)) {
32246
33202
  abis = transactionRequest.abis;
32247
33203
  }
32248
- const subscription = await this.operations.submitAndAwaitStatus({ encodedTransaction });
33204
+ const subscription = await this.operations.submitAndAwaitStatus({
33205
+ encodedTransaction,
33206
+ includePreConfirmation: true
33207
+ });
32249
33208
  this.#cacheInputs(
32250
33209
  transactionRequest.inputs,
32251
33210
  transactionRequest.getTransactionId(await this.getChainId())
@@ -32597,6 +33556,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32597
33556
  * @param transactionCostParams - The transaction cost parameters (optional).
32598
33557
  *
32599
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.
32600
33562
  */
32601
33563
  async getTransactionCost(transactionRequestLike, { signatureCallback, gasPrice: gasPriceParam } = {}) {
32602
33564
  const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
@@ -32639,7 +33601,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32639
33601
  }
32640
33602
  ({ rawReceipts, receipts, missingContractIds, outputVariables, dryRunStatus } = await this.estimateTxDependencies(txRequestClone, { gasPrice }));
32641
33603
  if (dryRunStatus && "reason" in dryRunStatus) {
32642
- throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus);
33604
+ throw this.extractDryRunError(txRequestClone, receipts, dryRunStatus.reason);
32643
33605
  }
32644
33606
  const { maxGasPerTx } = await this.getGasConfig();
32645
33607
  const pristineGasUsed = getGasUsedFromReceipts(receipts);
@@ -32672,6 +33634,102 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32672
33634
  transactionSummary
32673
33635
  };
32674
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
+ }
32675
33733
  /**
32676
33734
  * Returns coins for the given owner.
32677
33735
  *
@@ -32710,30 +33768,15 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32710
33768
  *
32711
33769
  * @param owner - The address to get resources for.
32712
33770
  * @param quantities - The coin quantities to get.
32713
- * @param excludedIds - IDs of excluded resources from the selection (optional).
33771
+ * @param resourcesIdsToIgnore - IDs of excluded resources from the selection (optional).
32714
33772
  * @returns A promise that resolves to the resources.
32715
33773
  */
32716
- async getResourcesToSpend(owner, quantities, excludedIds) {
33774
+ async getResourcesToSpend(owner, quantities, resourcesIdsToIgnore) {
32717
33775
  const ownerAddress = new Address(owner);
32718
- let idsToExclude = {
32719
- messages: excludedIds?.messages?.map((nonce) => hexlify(nonce)) || [],
32720
- utxos: excludedIds?.utxos?.map((id) => hexlify(id)) || []
32721
- };
32722
- if (this.cache) {
32723
- const cached = this.cache.getActiveData(ownerAddress.toB256());
32724
- if (cached.utxos.length || cached.messages.length) {
32725
- const {
32726
- consensusParameters: {
32727
- txParameters: { maxInputs }
32728
- }
32729
- } = await this.getChain();
32730
- idsToExclude = adjustResourcesToExclude({
32731
- userInput: idsToExclude,
32732
- cached,
32733
- maxInputs: maxInputs.toNumber()
32734
- });
32735
- }
32736
- }
33776
+ const excludedIds = await this.adjustResourcesToIgnoreForAddresses(
33777
+ [ownerAddress.b256Address],
33778
+ resourcesIdsToIgnore
33779
+ );
32737
33780
  const coinsQuery = {
32738
33781
  owner: ownerAddress.toB256(),
32739
33782
  queryPerAsset: quantities.map(coinQuantityfy).map(({ assetId, amount, max: maxPerAsset }) => ({
@@ -32741,7 +33784,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
32741
33784
  amount: (amount.eqn(0) ? bn(1) : amount).toString(10),
32742
33785
  max: maxPerAsset ? maxPerAsset.toString(10) : void 0
32743
33786
  })),
32744
- excludedIds: idsToExclude
33787
+ excludedIds
32745
33788
  };
32746
33789
  const result = await this.operations.getCoinsToSpend(coinsQuery);
32747
33790
  const coins = result.coinsToSpend.flat().map((coin) => {
@@ -33308,11 +34351,10 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33308
34351
  /**
33309
34352
  * @hidden
33310
34353
  */
33311
- extractDryRunError(transactionRequest, receipts, dryRunStatus) {
33312
- const status = dryRunStatus;
34354
+ extractDryRunError(transactionRequest, receipts, reason) {
33313
34355
  let logs = [];
33314
34356
  let groupedLogs = {};
33315
- if (transactionRequest.abis) {
34357
+ if (transactionRequest.type === TransactionType.Script && transactionRequest.abis) {
33316
34358
  ({ logs, groupedLogs } = getAllDecodedLogs({
33317
34359
  receipts,
33318
34360
  mainAbi: transactionRequest.abis.main,
@@ -33323,7 +34365,7 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33323
34365
  logs,
33324
34366
  groupedLogs,
33325
34367
  receipts,
33326
- statusReason: status.reason
34368
+ statusReason: reason
33327
34369
  });
33328
34370
  }
33329
34371
  /**
@@ -33350,6 +34392,45 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33350
34392
  }
33351
34393
  return transactionRequest;
33352
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
+ }
33353
34434
  };
33354
34435
 
33355
34436
  // src/providers/transaction-summary/get-transaction-summary.ts
@@ -33516,21 +34597,6 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33516
34597
  });
33517
34598
  }, "assembleTransactionSummaryFromJson");
33518
34599
 
33519
- // src/providers/utils/merge-quantities.ts
33520
- var mergeQuantities = /* @__PURE__ */ __name((...coinQuantities) => {
33521
- const resultMap = {};
33522
- function addToMap({ amount, assetId }) {
33523
- if (resultMap[assetId]) {
33524
- resultMap[assetId] = resultMap[assetId].add(amount);
33525
- } else {
33526
- resultMap[assetId] = amount;
33527
- }
33528
- }
33529
- __name(addToMap, "addToMap");
33530
- coinQuantities.forEach((arr) => arr.forEach(addToMap));
33531
- return Object.entries(resultMap).map(([assetId, amount]) => ({ assetId, amount }));
33532
- }, "mergeQuantities");
33533
-
33534
34600
  // src/types.ts
33535
34601
  var AbstractAccount = class {
33536
34602
  static {
@@ -33575,6 +34641,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33575
34641
  return { script, scriptData };
33576
34642
  }, "assembleTransferToContractScript");
33577
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
+
33578
34656
  // src/account.ts
33579
34657
  var MAX_FUNDING_ATTEMPTS = 5;
33580
34658
  var Account = class extends AbstractAccount {
@@ -33641,11 +34719,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33641
34719
  * Retrieves resources satisfying the spend query for the account.
33642
34720
  *
33643
34721
  * @param quantities - Quantities of resources to be obtained.
33644
- * @param excludedIds - IDs of resources to be excluded from the query (optional).
34722
+ * @param resourcesIdsToIgnore - IDs of resources to be excluded from the query (optional).
33645
34723
  * @returns A promise that resolves to an array of Resources.
33646
34724
  */
33647
- async getResourcesToSpend(quantities, excludedIds) {
33648
- return this.provider.getResourcesToSpend(this.address, quantities, excludedIds);
34725
+ async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
34726
+ return this.provider.getResourcesToSpend(this.address, quantities, resourcesIdsToIgnore);
33649
34727
  }
33650
34728
  /**
33651
34729
  * Retrieves coins owned by the account.
@@ -33690,6 +34768,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33690
34768
  * @param request - The transaction request to fund.
33691
34769
  * @param params - The estimated transaction parameters.
33692
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.
33693
34774
  */
33694
34775
  async fund(request2, params) {
33695
34776
  const {
@@ -33812,7 +34893,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33812
34893
  amount,
33813
34894
  assetId: assetId || await this.provider.getBaseAssetId()
33814
34895
  });
33815
- request2 = await this.estimateAndFundTransaction(request2, txParams);
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
+ });
33816
34904
  return request2;
33817
34905
  }
33818
34906
  /**
@@ -33838,7 +34926,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33838
34926
  async batchTransfer(transferParams, txParams = {}) {
33839
34927
  let request2 = new ScriptTransactionRequest(txParams);
33840
34928
  request2 = this.addBatchTransfer(request2, transferParams);
33841
- request2 = await this.estimateAndFundTransaction(request2, txParams);
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
+ });
33842
34937
  return this.sendTransaction(request2, { estimateTxDependencies: false });
33843
34938
  }
33844
34939
  /**
@@ -33910,7 +35005,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33910
35005
  const { script, scriptData } = await assembleTransferToContractScript(transferParams);
33911
35006
  request2.script = script;
33912
35007
  request2.scriptData = scriptData;
33913
- request2 = await this.estimateAndFundTransaction(request2, txParams, { quantities });
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
+ });
33914
35016
  return this.sendTransaction(request2);
33915
35017
  }
33916
35018
  /**
@@ -33938,16 +35040,144 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33938
35040
  const baseAssetId = await this.provider.getBaseAssetId();
33939
35041
  let request2 = new ScriptTransactionRequest(params);
33940
35042
  const quantities = [{ amount: bn(amount), assetId: baseAssetId }];
33941
- const txCost = await this.getTransactionCost(request2, { quantities });
33942
- request2 = this.validateGasLimitAndMaxFee({
33943
- transactionRequest: request2,
33944
- gasUsed: txCost.gasUsed,
33945
- maxFee: txCost.maxFee,
33946
- 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
33947
35050
  });
33948
- await this.fund(request2, txCost);
33949
35051
  return this.sendTransaction(request2);
33950
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");
33951
35181
  /**
33952
35182
  * Returns a transaction cost to enable user
33953
35183
  * to set gasLimit and also reserve balance amounts
@@ -33957,6 +35187,9 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
33957
35187
  * @param transactionCostParams - The transaction cost parameters (optional).
33958
35188
  *
33959
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.
33960
35193
  */
33961
35194
  async getTransactionCost(transactionRequestLike, { signatureCallback, quantities = [], gasPrice } = {}) {
33962
35195
  const txRequestClone = clone_default(transactionRequestify(transactionRequestLike));
@@ -34118,6 +35351,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34118
35351
  } : void 0;
34119
35352
  }
34120
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 * */
34121
35366
  validateTransferAmount(amount) {
34122
35367
  if (bn(amount).lte(0)) {
34123
35368
  throw new FuelError(
@@ -34165,6 +35410,18 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
34165
35410
  }
34166
35411
  return request2;
34167
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
+ }
34168
35425
  };
34169
35426
 
34170
35427
  // ../../node_modules/.pnpm/@noble+curves@1.8.1/node_modules/@noble/curves/esm/abstract/utils.js
@@ -39574,24 +40831,12 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
39574
40831
 
39575
40832
  // src/utils/deployScriptOrPredicate.ts
39576
40833
  async function fundBlobTx(deployer, blobTxRequest) {
39577
- let totalCost = bn(0);
39578
- const chainInfo = await deployer.provider.getChain();
39579
- const gasPrice = await deployer.provider.estimateGasPrice(10);
39580
- const priceFactor = chainInfo.consensusParameters.feeParameters.gasPriceFactor;
39581
- const minGas = blobTxRequest.calculateMinGas(chainInfo);
39582
- const minFee = calculateGasFee({
39583
- gasPrice,
39584
- gas: minGas,
39585
- priceFactor,
39586
- tip: blobTxRequest.tip
39587
- }).add(1);
39588
- totalCost = totalCost.add(minFee);
39589
- if (totalCost.gt(await deployer.getBalance())) {
39590
- throw new FuelError(ErrorCode.FUNDS_TOO_LOW, "Insufficient balance to deploy predicate.");
39591
- }
39592
- const txCost = await deployer.getTransactionCost(blobTxRequest);
39593
- blobTxRequest.maxFee = txCost.maxFee;
39594
- return deployer.fund(blobTxRequest, txCost);
40834
+ const { assembledRequest } = await deployer.provider.assembleTx({
40835
+ request: blobTxRequest,
40836
+ feePayerAccount: deployer,
40837
+ accountCoinQuantities: []
40838
+ });
40839
+ return assembledRequest;
39595
40840
  }
39596
40841
  __name(fundBlobTx, "fundBlobTx");
39597
40842
  function adjustConfigurableOffsets(jsonAbi, configurableOffsetDiff) {
@@ -40187,6 +41432,11 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
40187
41432
  const transactionRequest = transactionRequestify(transactionRequestLike);
40188
41433
  return super.simulateTransaction(transactionRequest, { estimateTxDependencies: false });
40189
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
+ */
40190
41440
  getPredicateData() {
40191
41441
  if (!this.predicateData.length) {
40192
41442
  return new Uint8Array();
@@ -40241,14 +41491,14 @@ ${PANIC_DOC_URL}#variant.${statusReason}`;
40241
41491
  * Retrieves resources satisfying the spend query for the account.
40242
41492
  *
40243
41493
  * @param quantities - IDs of coins to exclude.
40244
- * @param excludedIds - IDs of resources to be excluded from the query.
41494
+ * @param resourcesIdsToIgnore - IDs of resources to be excluded from the query.
40245
41495
  * @returns A promise that resolves to an array of Resources.
40246
41496
  */
40247
- async getResourcesToSpend(quantities, excludedIds) {
41497
+ async getResourcesToSpend(quantities, resourcesIdsToIgnore) {
40248
41498
  const resources = await this.provider.getResourcesToSpend(
40249
41499
  this.address,
40250
41500
  quantities,
40251
- excludedIds
41501
+ resourcesIdsToIgnore
40252
41502
  );
40253
41503
  return resources.map((resource) => ({
40254
41504
  ...resource,