@opensea/seaport-js 1.0.0 → 1.0.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/abi/ERC1155.d.ts +29 -29
- package/lib/abi/ERC20.d.ts +29 -29
- package/lib/abi/ERC721.d.ts +29 -29
- package/lib/abi/Seaport.d.ts +112 -112
- package/lib/constants.d.ts +49 -49
- package/lib/index.d.ts +2 -2
- package/lib/index.esm.mjs +2 -0
- package/lib/index.esm.mjs.map +1 -0
- package/lib/index.js +2 -6
- package/lib/index.js.map +1 -1
- package/lib/index.modern.mjs +2 -0
- package/lib/index.modern.mjs.map +1 -0
- package/lib/index.umd.js +2 -0
- package/lib/index.umd.js.map +1 -0
- package/lib/seaport.d.ts +181 -181
- package/lib/types.d.ts +207 -207
- package/lib/utils/approval.d.ts +9 -9
- package/lib/utils/balance.d.ts +4 -4
- package/lib/utils/balanceAndApprovalCheck.d.ts +108 -108
- package/lib/utils/criteria.d.ts +13 -14
- package/lib/utils/fulfill.d.ts +84 -84
- package/lib/utils/gcd.d.ts +3 -3
- package/lib/utils/item.d.ts +30 -29
- package/lib/utils/match.d.ts +49 -49
- package/lib/utils/merkletree.d.ts +11 -11
- package/lib/utils/order.d.ts +37 -37
- package/lib/utils/usecase.d.ts +4 -4
- package/package.json +4 -2
- package/lib/abi/ERC1155.js +0 -319
- package/lib/abi/ERC1155.js.map +0 -1
- package/lib/abi/ERC20.js +0 -317
- package/lib/abi/ERC20.js.map +0 -1
- package/lib/abi/ERC721.js +0 -337
- package/lib/abi/ERC721.js.map +0 -1
- package/lib/abi/Seaport.js +0 -2585
- package/lib/abi/Seaport.js.map +0 -1
- package/lib/constants.js +0 -73
- package/lib/constants.js.map +0 -1
- package/lib/seaport.js +0 -720
- package/lib/seaport.js.map +0 -1
- package/lib/typechain/ERC1155.d.ts +0 -189
- package/lib/typechain/ERC1155.js +0 -3
- package/lib/typechain/ERC1155.js.map +0 -1
- package/lib/typechain/ERC20.d.ts +0 -209
- package/lib/typechain/ERC20.js +0 -3
- package/lib/typechain/ERC20.js.map +0 -1
- package/lib/typechain/ERC721.d.ts +0 -220
- package/lib/typechain/ERC721.js +0 -3
- package/lib/typechain/ERC721.js.map +0 -1
- package/lib/typechain/Seaport.d.ts +0 -686
- package/lib/typechain/Seaport.js +0 -3
- package/lib/typechain/Seaport.js.map +0 -1
- package/lib/typechain/common.d.ts +0 -21
- package/lib/typechain/common.js +0 -3
- package/lib/typechain/common.js.map +0 -1
- package/lib/types.js +0 -3
- package/lib/types.js.map +0 -1
- package/lib/utils/approval.js +0 -108
- package/lib/utils/approval.js.map +0 -1
- package/lib/utils/balance.js +0 -86
- package/lib/utils/balance.js.map +0 -1
- package/lib/utils/balanceAndApprovalCheck.js +0 -322
- package/lib/utils/balanceAndApprovalCheck.js.map +0 -1
- package/lib/utils/criteria.js +0 -91
- package/lib/utils/criteria.js.map +0 -1
- package/lib/utils/fulfill.js +0 -573
- package/lib/utils/fulfill.js.map +0 -1
- package/lib/utils/gcd.js +0 -25
- package/lib/utils/gcd.js.map +0 -1
- package/lib/utils/item.js +0 -136
- package/lib/utils/item.js.map +0 -1
- package/lib/utils/match.js +0 -56
- package/lib/utils/match.js.map +0 -1
- package/lib/utils/merkletree.js +0 -32
- package/lib/utils/merkletree.js.map +0 -1
- package/lib/utils/order.js +0 -224
- package/lib/utils/order.js.map +0 -1
- package/lib/utils/usecase.js +0 -158
- package/lib/utils/usecase.js.map +0 -1
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCAAoC;AAE3B,wFAFA,iBAAO,OAEA"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/abi/Seaport.ts","../src/constants.ts","../src/abi/ERC20.ts","../src/abi/ERC721.ts","../src/utils/gcd.ts","../src/utils/item.ts","../src/utils/usecase.ts","../src/utils/approval.ts","../src/abi/ERC1155.ts","../src/utils/fulfill.ts","../src/utils/balanceAndApprovalCheck.ts","../src/utils/balance.ts","../src/utils/criteria.ts","../src/utils/merkletree.ts","../src/utils/order.ts","../src/seaport.ts"],"sourcesContent":["const SeaportABI = [\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"conduitController\",\n type: \"address\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"constructor\",\n },\n {\n inputs: [],\n name: \"BadContractSignature\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"BadFraction\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"BadReturnValueFromERC20OnTransfer\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n ],\n name: \"BadSignatureV\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"ConsiderationCriteriaResolverOutOfRange\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"considerationIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"shortfallAmount\",\n type: \"uint256\",\n },\n ],\n name: \"ConsiderationNotMet\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"CriteriaNotEnabledForItem\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"identifiers\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amounts\",\n type: \"uint256[]\",\n },\n ],\n name: \"ERC1155BatchTransferGenericFailure\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"EtherTransferGenericFailure\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InexactFraction\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InsufficientEtherSupplied\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidBasicOrderParameterEncoding\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"conduit\",\n type: \"address\",\n },\n ],\n name: \"InvalidCallToConduit\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidCanceller\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"conduit\",\n type: \"address\",\n },\n ],\n name: \"InvalidConduit\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidERC721TransferAmount\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidFulfillmentComponentData\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n ],\n name: \"InvalidMsgValue\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidProof\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"orderHash\",\n type: \"bytes32\",\n },\n ],\n name: \"InvalidRestrictedOrder\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidSignature\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidSigner\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"InvalidTime\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MismatchedFulfillmentOfferAndConsiderationComponents\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"enum Side\",\n name: \"side\",\n type: \"uint8\",\n },\n ],\n name: \"MissingFulfillmentComponentOnAggregation\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MissingItemAmount\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"MissingOriginalConsiderationItems\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"account\",\n type: \"address\",\n },\n ],\n name: \"NoContract\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"NoReentrantCalls\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"NoSpecifiedOrdersAvailable\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"OfferAndConsiderationRequiredOnFulfillment\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"OfferCriteriaResolverOutOfRange\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"orderHash\",\n type: \"bytes32\",\n },\n ],\n name: \"OrderAlreadyFilled\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"OrderCriteriaResolverOutOfRange\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"orderHash\",\n type: \"bytes32\",\n },\n ],\n name: \"OrderIsCancelled\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"orderHash\",\n type: \"bytes32\",\n },\n ],\n name: \"OrderPartiallyFilled\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"PartialFillsNotEnabledForOrder\",\n type: \"error\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"TokenTransferGenericFailure\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"UnresolvedConsiderationCriteria\",\n type: \"error\",\n },\n {\n inputs: [],\n name: \"UnresolvedOfferCriteria\",\n type: \"error\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"newCounter\",\n type: \"uint256\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n ],\n name: \"CounterIncremented\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"orderHash\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n ],\n name: \"OrderCancelled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"orderHash\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n indexed: false,\n internalType: \"struct SpentItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n indexed: false,\n internalType: \"struct ReceivedItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n ],\n name: \"OrderFulfilled\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"bytes32\",\n name: \"orderHash\",\n type: \"bytes32\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n ],\n name: \"OrderValidated\",\n type: \"event\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum OrderType\",\n name: \"orderType\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"counter\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OrderComponents[]\",\n name: \"orders\",\n type: \"tuple[]\",\n },\n ],\n name: \"cancel\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"cancelled\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum OrderType\",\n name: \"orderType\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"totalOriginalConsiderationItems\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n {\n internalType: \"uint120\",\n name: \"numerator\",\n type: \"uint120\",\n },\n {\n internalType: \"uint120\",\n name: \"denominator\",\n type: \"uint120\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct AdvancedOrder\",\n name: \"advancedOrder\",\n type: \"tuple\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"enum Side\",\n name: \"side\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32[]\",\n name: \"criteriaProof\",\n type: \"bytes32[]\",\n },\n ],\n internalType: \"struct CriteriaResolver[]\",\n name: \"criteriaResolvers\",\n type: \"tuple[]\",\n },\n {\n internalType: \"bytes32\",\n name: \"fulfillerConduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n name: \"fulfillAdvancedOrder\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"fulfilled\",\n type: \"bool\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum OrderType\",\n name: \"orderType\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"totalOriginalConsiderationItems\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n {\n internalType: \"uint120\",\n name: \"numerator\",\n type: \"uint120\",\n },\n {\n internalType: \"uint120\",\n name: \"denominator\",\n type: \"uint120\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct AdvancedOrder[]\",\n name: \"advancedOrders\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"enum Side\",\n name: \"side\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32[]\",\n name: \"criteriaProof\",\n type: \"bytes32[]\",\n },\n ],\n internalType: \"struct CriteriaResolver[]\",\n name: \"criteriaResolvers\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[][]\",\n name: \"offerFulfillments\",\n type: \"tuple[][]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[][]\",\n name: \"considerationFulfillments\",\n type: \"tuple[][]\",\n },\n {\n internalType: \"bytes32\",\n name: \"fulfillerConduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"recipient\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"maximumFulfilled\",\n type: \"uint256\",\n },\n ],\n name: \"fulfillAvailableAdvancedOrders\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"availableOrders\",\n type: \"bool[]\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ReceivedItem\",\n name: \"item\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct Execution[]\",\n name: \"executions\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum OrderType\",\n name: \"orderType\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"totalOriginalConsiderationItems\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Order[]\",\n name: \"orders\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[][]\",\n name: \"offerFulfillments\",\n type: \"tuple[][]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[][]\",\n name: \"considerationFulfillments\",\n type: \"tuple[][]\",\n },\n {\n internalType: \"bytes32\",\n name: \"fulfillerConduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"maximumFulfilled\",\n type: \"uint256\",\n },\n ],\n name: \"fulfillAvailableOrders\",\n outputs: [\n {\n internalType: \"bool[]\",\n name: \"availableOrders\",\n type: \"bool[]\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ReceivedItem\",\n name: \"item\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct Execution[]\",\n name: \"executions\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"considerationToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"considerationIdentifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"considerationAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"offerToken\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"offerIdentifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"offerAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"enum BasicOrderType\",\n name: \"basicOrderType\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"offererConduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"fulfillerConduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"totalOriginalAdditionalRecipients\",\n type: \"uint256\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct AdditionalRecipient[]\",\n name: \"additionalRecipients\",\n type: \"tuple[]\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct BasicOrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n ],\n name: \"fulfillBasicOrder\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"fulfilled\",\n type: \"bool\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum OrderType\",\n name: \"orderType\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"totalOriginalConsiderationItems\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Order\",\n name: \"order\",\n type: \"tuple\",\n },\n {\n internalType: \"bytes32\",\n name: \"fulfillerConduitKey\",\n type: \"bytes32\",\n },\n ],\n name: \"fulfillOrder\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"fulfilled\",\n type: \"bool\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n ],\n name: \"getCounter\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"counter\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum OrderType\",\n name: \"orderType\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"counter\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OrderComponents\",\n name: \"order\",\n type: \"tuple\",\n },\n ],\n name: \"getOrderHash\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"orderHash\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes32\",\n name: \"orderHash\",\n type: \"bytes32\",\n },\n ],\n name: \"getOrderStatus\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"isValidated\",\n type: \"bool\",\n },\n {\n internalType: \"bool\",\n name: \"isCancelled\",\n type: \"bool\",\n },\n {\n internalType: \"uint256\",\n name: \"totalFilled\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"totalSize\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"incrementCounter\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"newCounter\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"information\",\n outputs: [\n {\n internalType: \"string\",\n name: \"version\",\n type: \"string\",\n },\n {\n internalType: \"bytes32\",\n name: \"domainSeparator\",\n type: \"bytes32\",\n },\n {\n internalType: \"address\",\n name: \"conduitController\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum OrderType\",\n name: \"orderType\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"totalOriginalConsiderationItems\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n {\n internalType: \"uint120\",\n name: \"numerator\",\n type: \"uint120\",\n },\n {\n internalType: \"uint120\",\n name: \"denominator\",\n type: \"uint120\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"extraData\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct AdvancedOrder[]\",\n name: \"advancedOrders\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"enum Side\",\n name: \"side\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"index\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32[]\",\n name: \"criteriaProof\",\n type: \"bytes32[]\",\n },\n ],\n internalType: \"struct CriteriaResolver[]\",\n name: \"criteriaResolvers\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[]\",\n name: \"offerComponents\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[]\",\n name: \"considerationComponents\",\n type: \"tuple[]\",\n },\n ],\n internalType: \"struct Fulfillment[]\",\n name: \"fulfillments\",\n type: \"tuple[]\",\n },\n ],\n name: \"matchAdvancedOrders\",\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ReceivedItem\",\n name: \"item\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct Execution[]\",\n name: \"executions\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum OrderType\",\n name: \"orderType\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"totalOriginalConsiderationItems\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Order[]\",\n name: \"orders\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[]\",\n name: \"offerComponents\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"orderIndex\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"itemIndex\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct FulfillmentComponent[]\",\n name: \"considerationComponents\",\n type: \"tuple[]\",\n },\n ],\n internalType: \"struct Fulfillment[]\",\n name: \"fulfillments\",\n type: \"tuple[]\",\n },\n ],\n name: \"matchOrders\",\n outputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifier\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ReceivedItem\",\n name: \"item\",\n type: \"tuple\",\n },\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n ],\n internalType: \"struct Execution[]\",\n name: \"executions\",\n type: \"tuple[]\",\n },\n ],\n stateMutability: \"payable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"contractName\",\n type: \"string\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"offerer\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"zone\",\n type: \"address\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OfferItem[]\",\n name: \"offer\",\n type: \"tuple[]\",\n },\n {\n components: [\n {\n internalType: \"enum ItemType\",\n name: \"itemType\",\n type: \"uint8\",\n },\n {\n internalType: \"address\",\n name: \"token\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"identifierOrCriteria\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"startAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endAmount\",\n type: \"uint256\",\n },\n {\n internalType: \"address payable\",\n name: \"recipient\",\n type: \"address\",\n },\n ],\n internalType: \"struct ConsiderationItem[]\",\n name: \"consideration\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum OrderType\",\n name: \"orderType\",\n type: \"uint8\",\n },\n {\n internalType: \"uint256\",\n name: \"startTime\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"endTime\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"zoneHash\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"salt\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"conduitKey\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"totalOriginalConsiderationItems\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct OrderParameters\",\n name: \"parameters\",\n type: \"tuple\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct Order[]\",\n name: \"orders\",\n type: \"tuple[]\",\n },\n ],\n name: \"validate\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"validated\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n];\n\nexport { SeaportABI };\n","import { BigNumber } from \"ethers\";\n\nexport const SEAPORT_CONTRACT_NAME = \"Seaport\";\nexport const SEAPORT_CONTRACT_VERSION = \"1.1\";\nexport const EIP_712_ORDER_TYPE = {\n OrderComponents: [\n { name: \"offerer\", type: \"address\" },\n { name: \"zone\", type: \"address\" },\n { name: \"offer\", type: \"OfferItem[]\" },\n { name: \"consideration\", type: \"ConsiderationItem[]\" },\n { name: \"orderType\", type: \"uint8\" },\n { name: \"startTime\", type: \"uint256\" },\n { name: \"endTime\", type: \"uint256\" },\n { name: \"zoneHash\", type: \"bytes32\" },\n { name: \"salt\", type: \"uint256\" },\n { name: \"conduitKey\", type: \"bytes32\" },\n { name: \"counter\", type: \"uint256\" },\n ],\n OfferItem: [\n { name: \"itemType\", type: \"uint8\" },\n { name: \"token\", type: \"address\" },\n { name: \"identifierOrCriteria\", type: \"uint256\" },\n { name: \"startAmount\", type: \"uint256\" },\n { name: \"endAmount\", type: \"uint256\" },\n ],\n ConsiderationItem: [\n { name: \"itemType\", type: \"uint8\" },\n { name: \"token\", type: \"address\" },\n { name: \"identifierOrCriteria\", type: \"uint256\" },\n { name: \"startAmount\", type: \"uint256\" },\n { name: \"endAmount\", type: \"uint256\" },\n { name: \"recipient\", type: \"address\" },\n ],\n};\n\nexport enum OrderType {\n FULL_OPEN = 0, // No partial fills, anyone can execute\n PARTIAL_OPEN = 1, // Partial fills supported, anyone can execute\n FULL_RESTRICTED = 2, // No partial fills, only offerer or zone can execute\n PARTIAL_RESTRICTED = 3, // Partial fills supported, only offerer or zone can execute\n}\n\nexport enum ItemType {\n NATIVE = 0,\n ERC20 = 1,\n ERC721 = 2,\n ERC1155 = 3,\n ERC721_WITH_CRITERIA = 4,\n ERC1155_WITH_CRITERIA = 5,\n}\n\nexport enum Side {\n OFFER = 0,\n CONSIDERATION = 1,\n}\n\nexport type NftItemType =\n | ItemType.ERC721\n | ItemType.ERC1155\n | ItemType.ERC721_WITH_CRITERIA\n | ItemType.ERC1155_WITH_CRITERIA;\n\nexport enum BasicOrderRouteType {\n ETH_TO_ERC721,\n ETH_TO_ERC1155,\n ERC20_TO_ERC721,\n ERC20_TO_ERC1155,\n ERC721_TO_ERC20,\n ERC1155_TO_ERC20,\n}\n\nexport const MAX_INT = BigNumber.from(\n \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\"\n);\nexport const ONE_HUNDRED_PERCENT_BP = 10000;\nexport const NO_CONDUIT =\n \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n\n// Supply here any known conduit keys as well as their conduits\nexport const KNOWN_CONDUIT_KEYS_TO_CONDUIT = {};\n\nexport const CROSS_CHAIN_SEAPORT_ADDRESS =\n \"0x00000000006c3852cbef3e08e8df289169ede581\";\n","const ERC20ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [],\n name: \"DOMAIN_SEPARATOR\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"PERMIT_TYPEHASH\",\n outputs: [\n {\n internalType: \"bytes32\",\n name: \"\",\n type: \"bytes32\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"allowance\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"decimals\",\n outputs: [\n {\n internalType: \"uint8\",\n name: \"\",\n type: \"uint8\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"nonces\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"value\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"deadline\",\n type: \"uint256\",\n },\n {\n internalType: \"uint8\",\n name: \"v\",\n type: \"uint8\",\n },\n {\n internalType: \"bytes32\",\n name: \"r\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes32\",\n name: \"s\",\n type: \"bytes32\",\n },\n ],\n name: \"permit\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"totalSupply\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transfer\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n];\n\nexport { ERC20ABI };\n","const ERC721ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"Approval\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"Transfer\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"spender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"approve\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"getApproved\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"name\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"ownerOf\",\n outputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [],\n name: \"symbol\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"tokenURI\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"transferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n];\n\nexport { ERC721ABI };\n","import { BigNumber, BigNumberish } from \"ethers\";\n\nexport const gcd = (a: BigNumberish, b: BigNumberish): BigNumber => {\n const bnA = BigNumber.from(a);\n const bnB = BigNumber.from(b);\n\n if (bnA.eq(0)) {\n return bnB;\n }\n\n return gcd(bnB.mod(a), bnA);\n};\n\nexport const findGcd = (elements: BigNumberish[]) => {\n let result = BigNumber.from(elements[0]);\n\n for (let i = 1; i < elements.length; i++) {\n result = gcd(elements[i], result);\n\n if (result.eq(1)) {\n return result;\n }\n }\n\n return result;\n};\n","import { BigNumber } from \"ethers\";\nimport { ItemType } from \"../constants\";\nimport type { InputCriteria, Item, Order, OrderParameters } from \"../types\";\nimport { findGcd } from \"./gcd\";\n\nexport const isCurrencyItem = ({ itemType }: Item) =>\n [ItemType.NATIVE, ItemType.ERC20].includes(itemType);\n\nexport const isNativeCurrencyItem = ({ itemType }: Item) =>\n itemType === ItemType.NATIVE;\n\nexport const isErc20Item = (itemType: Item[\"itemType\"]) =>\n itemType === ItemType.ERC20;\n\nexport const isErc721Item = (itemType: Item[\"itemType\"]) =>\n [ItemType.ERC721, ItemType.ERC721_WITH_CRITERIA].includes(itemType);\n\nexport const isErc1155Item = (itemType: Item[\"itemType\"]) =>\n [ItemType.ERC1155, ItemType.ERC1155_WITH_CRITERIA].includes(itemType);\n\nexport const isCriteriaItem = (itemType: Item[\"itemType\"]) =>\n [ItemType.ERC721_WITH_CRITERIA, ItemType.ERC1155_WITH_CRITERIA].includes(\n itemType\n );\n\nexport type TimeBasedItemParams = {\n isConsiderationItem?: boolean;\n currentBlockTimestamp: number;\n ascendingAmountTimestampBuffer: number;\n} & Pick<OrderParameters, \"startTime\" | \"endTime\">;\n\nexport const getPresentItemAmount = ({\n startAmount,\n endAmount,\n timeBasedItemParams,\n}: Pick<Item, \"startAmount\" | \"endAmount\"> & {\n timeBasedItemParams?: TimeBasedItemParams;\n}): BigNumber => {\n const startAmountBn = BigNumber.from(startAmount);\n const endAmountBn = BigNumber.from(endAmount);\n\n if (!timeBasedItemParams) {\n return startAmountBn.gt(endAmountBn) ? startAmountBn : endAmountBn;\n }\n\n const {\n isConsiderationItem,\n currentBlockTimestamp,\n ascendingAmountTimestampBuffer,\n startTime,\n endTime,\n } = timeBasedItemParams;\n\n const duration = BigNumber.from(endTime).sub(startTime);\n const isAscending = endAmountBn.gt(startAmount);\n const adjustedBlockTimestamp = BigNumber.from(\n isAscending\n ? currentBlockTimestamp + ascendingAmountTimestampBuffer\n : currentBlockTimestamp\n );\n\n if (adjustedBlockTimestamp.lt(startTime)) {\n return startAmountBn;\n }\n\n const elapsed = (\n adjustedBlockTimestamp.gt(endTime)\n ? BigNumber.from(endTime)\n : adjustedBlockTimestamp\n ).sub(startTime);\n\n const remaining = duration.sub(elapsed);\n\n // Adjust amounts based on current time\n // For offer items, we round down\n // For consideration items, we round up\n return startAmountBn\n .mul(remaining)\n .add(endAmountBn.mul(elapsed))\n .add(isConsiderationItem ? duration.sub(1) : 0)\n .div(duration);\n};\n\nexport const getSummedTokenAndIdentifierAmounts = ({\n items,\n criterias,\n timeBasedItemParams,\n}: {\n items: Item[];\n criterias: InputCriteria[];\n timeBasedItemParams?: TimeBasedItemParams;\n}) => {\n const itemToCriteria = getItemToCriteriaMap(items, criterias);\n\n const tokenAndIdentifierToSummedAmount = items.reduce<\n Record<string, Record<string, BigNumber>>\n >((map, item) => {\n const identifierOrCriteria =\n itemToCriteria.get(item)?.identifier ?? item.identifierOrCriteria;\n\n return {\n ...map,\n [item.token]: {\n ...map[item.token],\n // Being explicit about the undefined type as it's possible for it to be undefined at first iteration\n [identifierOrCriteria]: (\n (map[item.token]?.[identifierOrCriteria] as BigNumber | undefined) ??\n BigNumber.from(0)\n ).add(\n getPresentItemAmount({\n startAmount: item.startAmount,\n endAmount: item.endAmount,\n timeBasedItemParams,\n })\n ),\n },\n };\n }, {});\n\n return tokenAndIdentifierToSummedAmount;\n};\n\n/**\n * Returns the maximum size of units possible for the order\n * If any of the items on a partially fillable order specify a different \"startAmount\" and \"endAmount\n * (e.g. they are ascending-amount or descending-amount items), the fraction will be applied to both amounts\n * prior to determining the current price. This ensures that cleanly divisible amounts can be chosen when\n * constructing the order without a dependency on the time when the order is ultimately fulfilled.\n */\nexport const getMaximumSizeForOrder = ({\n parameters: { offer, consideration },\n}: Order) => {\n const allItems = [...offer, ...consideration];\n\n const amounts = allItems.flatMap(({ startAmount, endAmount }) => [\n startAmount,\n endAmount,\n ]);\n\n return findGcd(amounts);\n};\n\nexport const getItemToCriteriaMap = (\n items: Item[],\n criterias: InputCriteria[]\n) => {\n const criteriasCopy = [...criterias];\n\n return items.reduce((map, item) => {\n if (isCriteriaItem(item.itemType)) {\n map.set(item, criteriasCopy.shift() as InputCriteria);\n }\n return map;\n }, new Map<Item, InputCriteria>());\n};\n","import { CallOverrides, Contract, Overrides, PayableOverrides } from \"ethers\";\nimport {\n CreateOrderAction,\n ExchangeAction,\n OrderUseCase,\n TransactionMethods,\n ContractMethodReturnType,\n} from \"../types\";\n\nexport const executeAllActions = async <\n T extends CreateOrderAction | ExchangeAction\n>(\n actions: OrderUseCase<T>[\"actions\"]\n) => {\n for (let i = 0; i < actions.length - 1; i++) {\n const action = actions[i];\n if (action.type === \"approval\") {\n await action.transactionMethods.transact();\n }\n }\n\n const finalAction = actions[actions.length - 1] as T;\n\n return finalAction.type === \"create\"\n ? await finalAction.createOrder()\n : await finalAction.transactionMethods.transact();\n};\n\nconst instanceOfOverrides = <\n T extends Overrides | PayableOverrides | CallOverrides\n>(\n obj: Object | undefined\n): obj is T => {\n const validKeys = [\n \"gasLimit\",\n \"gasPrice\",\n \"maxFeePerGas\",\n \"maxPriorityFeePerGas\",\n \"nonce\",\n \"type\",\n \"accessList\",\n \"customData\",\n \"ccipReadEnabled\",\n \"value\",\n \"blockTag\",\n \"CallOverrides\",\n ];\n\n return (\n obj === undefined ||\n Object.keys(obj).every((key) => validKeys.includes(key))\n );\n};\n\nexport const getTransactionMethods = <\n T extends Contract,\n U extends keyof T[\"functions\"]\n>(\n contract: T,\n method: U,\n args: Parameters<T[\"functions\"][U]>\n): TransactionMethods<ContractMethodReturnType<T, U>> => {\n const lastArg = args[args.length - 1];\n\n let initialOverrides: Overrides;\n\n if (instanceOfOverrides(lastArg)) {\n initialOverrides = lastArg;\n args.pop();\n }\n\n return {\n callStatic: (overrides?: Overrides) => {\n const mergedOverrides = { ...initialOverrides, ...overrides };\n\n return contract.callStatic[method as string](\n ...[...args, mergedOverrides]\n );\n },\n estimateGas: (overrides?: Overrides) => {\n const mergedOverrides = { ...initialOverrides, ...overrides };\n\n return contract.estimateGas[method as string](\n ...[...args, mergedOverrides]\n );\n },\n transact: (overrides?: Overrides) => {\n const mergedOverrides = { ...initialOverrides, ...overrides };\n\n return contract[method as string](...args, mergedOverrides);\n },\n buildTransaction: (overrides?: Overrides) => {\n const mergedOverrides = { ...initialOverrides, ...overrides };\n\n return contract.populateTransaction[method as string](\n ...[...args, mergedOverrides]\n );\n },\n };\n};\n","import { providers as multicallProviders } from \"@0xsequence/multicall\";\nimport { BigNumber, Contract, providers } from \"ethers\";\nimport { ERC20ABI } from \"../abi/ERC20\";\nimport { ERC721ABI } from \"../abi/ERC721\";\nimport { ItemType, MAX_INT } from \"../constants\";\nimport type { ERC20 } from \"../typechain/ERC20\";\nimport type { ERC721 } from \"../typechain/ERC721\";\nimport type { ApprovalAction, Item } from \"../types\";\nimport type { InsufficientApprovals } from \"./balanceAndApprovalCheck\";\nimport { isErc1155Item, isErc721Item } from \"./item\";\nimport { getTransactionMethods } from \"./usecase\";\n\nexport const approvedItemAmount = async (\n owner: string,\n item: Item,\n operator: string,\n multicallProvider: multicallProviders.MulticallProvider\n) => {\n if (isErc721Item(item.itemType) || isErc1155Item(item.itemType)) {\n // isApprovedForAll check is the same for both ERC721 and ERC1155, defaulting to ERC721\n const contract = new Contract(\n item.token,\n ERC721ABI,\n multicallProvider\n ) as ERC721;\n return contract.isApprovedForAll(owner, operator).then((isApprovedForAll) =>\n // Setting to the max int to consolidate types and simplify\n isApprovedForAll ? MAX_INT : BigNumber.from(0)\n );\n } else if (item.itemType === ItemType.ERC20) {\n const contract = new Contract(\n item.token,\n ERC20ABI,\n multicallProvider\n ) as ERC20;\n\n return contract.allowance(owner, operator);\n }\n\n // We don't need to check approvals for native tokens\n return MAX_INT;\n};\n\n/**\n * Get approval actions given a list of insufficent approvals.\n */\nexport function getApprovalActions(\n insufficientApprovals: InsufficientApprovals,\n signer: providers.JsonRpcSigner\n): Promise<ApprovalAction[]> {\n return Promise.all(\n insufficientApprovals\n .filter(\n (approval, index) =>\n index === insufficientApprovals.length - 1 ||\n insufficientApprovals[index + 1].token !== approval.token\n )\n .map(async ({ token, operator, itemType, identifierOrCriteria }) => {\n if (isErc721Item(itemType) || isErc1155Item(itemType)) {\n // setApprovalForAll check is the same for both ERC721 and ERC1155, defaulting to ERC721\n const contract = new Contract(token, ERC721ABI, signer) as ERC721;\n\n return {\n type: \"approval\",\n token,\n identifierOrCriteria,\n itemType,\n operator,\n transactionMethods: getTransactionMethods(\n contract.connect(signer),\n \"setApprovalForAll\",\n [operator, true]\n ),\n };\n } else {\n const contract = new Contract(token, ERC20ABI, signer) as ERC20;\n\n return {\n type: \"approval\",\n token,\n identifierOrCriteria,\n itemType,\n transactionMethods: getTransactionMethods(\n contract.connect(signer),\n \"approve\",\n [operator, MAX_INT]\n ),\n operator,\n };\n }\n })\n );\n}\n","const ERC1155ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"owner\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"ApprovalForAll\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n indexed: false,\n internalType: \"uint256[]\",\n name: \"amounts\",\n type: \"uint256[]\",\n },\n ],\n name: \"TransferBatch\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n indexed: true,\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n indexed: false,\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n ],\n name: \"TransferSingle\",\n type: \"event\",\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: \"string\",\n name: \"value\",\n type: \"string\",\n },\n {\n indexed: true,\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"URI\",\n type: \"event\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n name: \"balanceOf\",\n outputs: [\n {\n internalType: \"uint256\",\n name: \"\",\n type: \"uint256\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address[]\",\n name: \"owners\",\n type: \"address[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n ],\n name: \"balanceOfBatch\",\n outputs: [\n {\n internalType: \"uint256[]\",\n name: \"balances\",\n type: \"uint256[]\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"\",\n type: \"address\",\n },\n ],\n name: \"isApprovedForAll\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256[]\",\n name: \"ids\",\n type: \"uint256[]\",\n },\n {\n internalType: \"uint256[]\",\n name: \"amounts\",\n type: \"uint256[]\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"safeBatchTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"from\",\n type: \"address\",\n },\n {\n internalType: \"address\",\n name: \"to\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"amount\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"data\",\n type: \"bytes\",\n },\n ],\n name: \"safeTransferFrom\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"address\",\n name: \"operator\",\n type: \"address\",\n },\n {\n internalType: \"bool\",\n name: \"approved\",\n type: \"bool\",\n },\n ],\n name: \"setApprovalForAll\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"bytes4\",\n name: \"interfaceId\",\n type: \"bytes4\",\n },\n ],\n name: \"supportsInterface\",\n outputs: [\n {\n internalType: \"bool\",\n name: \"\",\n type: \"bool\",\n },\n ],\n stateMutability: \"pure\",\n type: \"function\",\n },\n {\n inputs: [\n {\n internalType: \"uint256\",\n name: \"id\",\n type: \"uint256\",\n },\n ],\n name: \"uri\",\n outputs: [\n {\n internalType: \"string\",\n name: \"\",\n type: \"string\",\n },\n ],\n stateMutability: \"view\",\n type: \"function\",\n },\n];\n\nexport { ERC1155ABI };\n","import {\n BigNumber,\n BigNumberish,\n ContractTransaction,\n ethers,\n providers,\n} from \"ethers\";\nimport type {\n Seaport as SeaportContract,\n BasicOrderParametersStruct,\n Seaport,\n FulfillmentComponentStruct,\n OrderStruct,\n} from \"../typechain/Seaport\";\nimport { BasicOrderRouteType, ItemType, NO_CONDUIT } from \"../constants\";\nimport type {\n AdvancedOrder,\n ConsiderationItem,\n ExchangeAction,\n InputCriteria,\n Order,\n OrderParameters,\n OrderStatus,\n OrderUseCase,\n ContractMethodReturnType,\n} from \"../types\";\nimport { getApprovalActions } from \"./approval\";\nimport {\n BalancesAndApprovals,\n InsufficientApprovals,\n validateBasicFulfillBalancesAndApprovals,\n validateStandardFulfillBalancesAndApprovals,\n} from \"./balanceAndApprovalCheck\";\nimport { generateCriteriaResolvers } from \"./criteria\";\nimport { gcd } from \"./gcd\";\nimport {\n getMaximumSizeForOrder,\n getSummedTokenAndIdentifierAmounts,\n isCriteriaItem,\n isCurrencyItem,\n isErc721Item,\n isNativeCurrencyItem,\n TimeBasedItemParams,\n getItemToCriteriaMap,\n} from \"./item\";\nimport {\n areAllCurrenciesSame,\n mapOrderAmountsFromFilledStatus,\n mapOrderAmountsFromUnitsToFill,\n totalItemsAmount,\n} from \"./order\";\nimport { executeAllActions, getTransactionMethods } from \"./usecase\";\n\n/**\n * We should use basic fulfill order if the order adheres to the following criteria:\n * 1. The order should not be partially filled.\n * 2. The order only contains a single offer item and contains at least one consideration item\n * 3. The order does not offer an item with Ether (or other native tokens) as its item type.\n * 4. The order only contains a single ERC721 or ERC1155 item and that item is not criteria-based\n * 5. All other items have the same Native or ERC20 item type and token\n * 6. All items have the same startAmount and endAmount\n * 7. First consideration item must contain the offerer as the recipient\n * 8. If the order has multiple consideration items and all consideration items other than the\n * first consideration item have the same item type as the offered item, the offered item\n * amount is not less than the sum of all consideration item amounts excluding the\n * first consideration item amount\n * 9. The token on native currency items needs to be set to the null address and the identifier on\n * currencies needs to be zero, and the amounts on the 721 item need to be 1\n */\nexport const shouldUseBasicFulfill = (\n { offer, consideration, offerer }: OrderParameters,\n totalFilled: OrderStatus[\"totalFilled\"]\n) => {\n // 1. The order must not be partially filled\n if (!totalFilled.eq(0)) {\n return false;\n }\n\n // 2. Must be single offer and at least one consideration\n if (offer.length > 1 || consideration.length === 0) {\n return false;\n }\n\n const allItems = [...offer, ...consideration];\n\n const nfts = allItems.filter(({ itemType }) =>\n [ItemType.ERC721, ItemType.ERC1155].includes(itemType)\n );\n\n const nftsWithCriteria = allItems.filter(({ itemType }) =>\n isCriteriaItem(itemType)\n );\n\n const offersNativeCurrency = isNativeCurrencyItem(offer[0]);\n\n // 3. The order does not offer an item with Ether (or other native tokens) as its item type.\n if (offersNativeCurrency) {\n return false;\n }\n\n // 4. The order only contains a single ERC721 or ERC1155 item and that item is not criteria-based\n if (nfts.length !== 1 || nftsWithCriteria.length !== 0) {\n return false;\n }\n\n // 5. All currencies need to have the same address and item type (Native, ERC20)\n if (!areAllCurrenciesSame({ offer, consideration })) {\n return false;\n }\n\n // 6. All individual items need to have the same startAmount and endAmount\n const differentStartAndEndAmount = allItems.some(\n ({ startAmount, endAmount }) => startAmount !== endAmount\n );\n\n if (differentStartAndEndAmount) {\n return false;\n }\n\n const [firstConsideration, ...restConsideration] = consideration;\n\n // 7. First consideration item must contain the offerer as the recipient\n const firstConsiderationRecipientIsNotOfferer =\n firstConsideration.recipient.toLowerCase() !== offerer.toLowerCase();\n\n if (firstConsiderationRecipientIsNotOfferer) {\n return false;\n }\n\n // 8. If the order has multiple consideration items and all consideration items other than the\n // first consideration item have the same item type as the offered item, the offered item\n // amount is not less than the sum of all consideration item amounts excluding the\n // first consideration item amount\n if (\n consideration.length > 1 &&\n restConsideration.every((item) => item.itemType === offer[0].itemType) &&\n totalItemsAmount(restConsideration).endAmount.gt(offer[0].endAmount)\n ) {\n return false;\n }\n\n const currencies = allItems.filter(isCurrencyItem);\n\n // 9. The token on native currency items needs to be set to the null address and the identifier on\n // currencies needs to be zero, and the amounts on the 721 item need to be 1\n const nativeCurrencyIsZeroAddress = currencies\n .filter(({ itemType }) => itemType === ItemType.NATIVE)\n .every(({ token }) => token === ethers.constants.AddressZero);\n\n const currencyIdentifiersAreZero = currencies.every(\n ({ identifierOrCriteria }) => BigNumber.from(identifierOrCriteria).eq(0)\n );\n\n const erc721sAreSingleAmount = nfts\n .filter(({ itemType }) => itemType === ItemType.ERC721)\n .every(({ endAmount }) => endAmount === \"1\");\n\n return (\n nativeCurrencyIsZeroAddress &&\n currencyIdentifiersAreZero &&\n erc721sAreSingleAmount\n );\n};\n\nconst offerAndConsiderationFulfillmentMapping: {\n [_key in ItemType]?: { [_key in ItemType]?: BasicOrderRouteType };\n} = {\n [ItemType.ERC20]: {\n [ItemType.ERC721]: BasicOrderRouteType.ERC721_TO_ERC20,\n [ItemType.ERC1155]: BasicOrderRouteType.ERC1155_TO_ERC20,\n },\n [ItemType.ERC721]: {\n [ItemType.NATIVE]: BasicOrderRouteType.ETH_TO_ERC721,\n [ItemType.ERC20]: BasicOrderRouteType.ERC20_TO_ERC721,\n },\n [ItemType.ERC1155]: {\n [ItemType.NATIVE]: BasicOrderRouteType.ETH_TO_ERC1155,\n [ItemType.ERC20]: BasicOrderRouteType.ERC20_TO_ERC1155,\n },\n} as const;\n\nexport async function fulfillBasicOrder({\n order,\n seaportContract,\n offererBalancesAndApprovals,\n fulfillerBalancesAndApprovals,\n timeBasedItemParams,\n offererOperator,\n fulfillerOperator,\n signer,\n tips = [],\n conduitKey = NO_CONDUIT,\n}: {\n order: Order;\n seaportContract: Seaport;\n offererBalancesAndApprovals: BalancesAndApprovals;\n fulfillerBalancesAndApprovals: BalancesAndApprovals;\n timeBasedItemParams: TimeBasedItemParams;\n offererOperator: string;\n fulfillerOperator: string;\n signer: providers.JsonRpcSigner;\n tips?: ConsiderationItem[];\n conduitKey: string;\n}): Promise<\n OrderUseCase<\n ExchangeAction<\n ContractMethodReturnType<SeaportContract, \"fulfillBasicOrder\">\n >\n >\n> {\n const { offer, consideration } = order.parameters;\n const considerationIncludingTips = [...consideration, ...tips];\n\n const offerItem = offer[0];\n const [forOfferer, ...forAdditionalRecipients] = considerationIncludingTips;\n\n const basicOrderRouteType =\n offerAndConsiderationFulfillmentMapping[offerItem.itemType]?.[\n forOfferer.itemType\n ];\n\n if (basicOrderRouteType === undefined) {\n throw new Error(\n \"Order parameters did not result in a valid basic fulfillment\"\n );\n }\n\n const additionalRecipients = forAdditionalRecipients.map(\n ({ startAmount, recipient }) => ({\n amount: startAmount,\n recipient,\n })\n );\n\n const considerationWithoutOfferItemType = considerationIncludingTips.filter(\n (item) => item.itemType !== offer[0].itemType\n );\n\n const totalNativeAmount = getSummedTokenAndIdentifierAmounts({\n items: considerationWithoutOfferItemType,\n criterias: [],\n timeBasedItemParams: {\n ...timeBasedItemParams,\n isConsiderationItem: true,\n },\n })[ethers.constants.AddressZero]?.[\"0\"];\n\n const insufficientApprovals = validateBasicFulfillBalancesAndApprovals({\n offer,\n consideration: considerationIncludingTips,\n offererBalancesAndApprovals,\n fulfillerBalancesAndApprovals,\n timeBasedItemParams,\n offererOperator,\n fulfillerOperator,\n });\n\n const basicOrderParameters: BasicOrderParametersStruct = {\n offerer: order.parameters.offerer,\n offererConduitKey: order.parameters.conduitKey,\n zone: order.parameters.zone,\n // Note the use of a \"basicOrderType\" enum;\n // this represents both the usual order type as well as the \"route\"\n // of the basic order (a simple derivation function for the basic order\n // type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n basicOrderType: order.parameters.orderType + 4 * basicOrderRouteType,\n offerToken: offerItem.token,\n offerIdentifier: offerItem.identifierOrCriteria,\n offerAmount: offerItem.endAmount,\n considerationToken: forOfferer.token,\n considerationIdentifier: forOfferer.identifierOrCriteria,\n considerationAmount: forOfferer.endAmount,\n startTime: order.parameters.startTime,\n endTime: order.parameters.endTime,\n salt: order.parameters.salt,\n totalOriginalAdditionalRecipients:\n order.parameters.consideration.length - 1,\n signature: order.signature,\n fulfillerConduitKey: conduitKey,\n additionalRecipients,\n zoneHash: order.parameters.zoneHash,\n };\n\n const payableOverrides = { value: totalNativeAmount };\n\n const approvalActions = await getApprovalActions(\n insufficientApprovals,\n signer\n );\n\n const exchangeAction = {\n type: \"exchange\",\n transactionMethods: getTransactionMethods(\n seaportContract.connect(signer),\n \"fulfillBasicOrder\",\n [basicOrderParameters, payableOverrides]\n ),\n } as const;\n\n const actions = [...approvalActions, exchangeAction] as const;\n\n return {\n actions,\n executeAllActions: () =>\n executeAllActions(actions) as Promise<ContractTransaction>,\n };\n}\n\nexport async function fulfillStandardOrder({\n order,\n unitsToFill = 0,\n totalSize,\n totalFilled,\n offerCriteria,\n considerationCriteria,\n tips = [],\n extraData,\n seaportContract,\n offererBalancesAndApprovals,\n fulfillerBalancesAndApprovals,\n offererOperator,\n fulfillerOperator,\n timeBasedItemParams,\n conduitKey,\n recipientAddress,\n signer,\n}: {\n order: Order;\n unitsToFill?: BigNumberish;\n totalFilled: BigNumber;\n totalSize: BigNumber;\n offerCriteria: InputCriteria[];\n considerationCriteria: InputCriteria[];\n tips?: ConsiderationItem[];\n extraData?: string;\n seaportContract: Seaport;\n offererBalancesAndApprovals: BalancesAndApprovals;\n fulfillerBalancesAndApprovals: BalancesAndApprovals;\n offererOperator: string;\n fulfillerOperator: string;\n conduitKey: string;\n recipientAddress: string;\n timeBasedItemParams: TimeBasedItemParams;\n signer: providers.JsonRpcSigner;\n}): Promise<\n OrderUseCase<\n ExchangeAction<\n ContractMethodReturnType<\n SeaportContract,\n \"fulfillAdvancedOrder\" | \"fulfillOrder\"\n >\n >\n >\n> {\n // If we are supplying units to fill, we adjust the order by the minimum of the amount to fill and\n // the remaining order left to be fulfilled\n const orderWithAdjustedFills = unitsToFill\n ? mapOrderAmountsFromUnitsToFill(order, {\n unitsToFill,\n totalFilled,\n totalSize,\n })\n : // Else, we adjust the order by the remaining order left to be fulfilled\n mapOrderAmountsFromFilledStatus(order, {\n totalFilled,\n totalSize,\n });\n\n const {\n parameters: { offer, consideration },\n } = orderWithAdjustedFills;\n\n const considerationIncludingTips = [...consideration, ...tips];\n\n const offerCriteriaItems = offer.filter(({ itemType }) =>\n isCriteriaItem(itemType)\n );\n\n const considerationCriteriaItems = considerationIncludingTips.filter(\n ({ itemType }) => isCriteriaItem(itemType)\n );\n\n const hasCriteriaItems =\n offerCriteriaItems.length > 0 || considerationCriteriaItems.length > 0;\n\n if (\n offerCriteriaItems.length !== offerCriteria.length ||\n considerationCriteriaItems.length !== considerationCriteria.length\n ) {\n throw new Error(\n \"You must supply the appropriate criterias for criteria based items\"\n );\n }\n\n const totalNativeAmount = getSummedTokenAndIdentifierAmounts({\n items: considerationIncludingTips,\n criterias: considerationCriteria,\n timeBasedItemParams: {\n ...timeBasedItemParams,\n isConsiderationItem: true,\n },\n })[ethers.constants.AddressZero]?.[\"0\"];\n\n const insufficientApprovals = validateStandardFulfillBalancesAndApprovals({\n offer,\n consideration: considerationIncludingTips,\n offerCriteria,\n considerationCriteria,\n offererBalancesAndApprovals,\n fulfillerBalancesAndApprovals,\n timeBasedItemParams,\n offererOperator,\n fulfillerOperator,\n });\n\n const payableOverrides = { value: totalNativeAmount };\n\n const approvalActions = await getApprovalActions(\n insufficientApprovals,\n signer\n );\n\n const isGift = recipientAddress !== ethers.constants.AddressZero;\n\n const useAdvanced = Boolean(unitsToFill) || hasCriteriaItems || isGift;\n\n const orderAccountingForTips: OrderStruct = {\n ...order,\n parameters: {\n ...order.parameters,\n consideration: [...order.parameters.consideration, ...tips],\n totalOriginalConsiderationItems: consideration.length,\n },\n };\n\n const { numerator, denominator } = getAdvancedOrderNumeratorDenominator(\n order,\n unitsToFill\n );\n\n const exchangeAction = {\n type: \"exchange\",\n transactionMethods: useAdvanced\n ? getTransactionMethods(\n seaportContract.connect(signer),\n \"fulfillAdvancedOrder\",\n [\n {\n ...orderAccountingForTips,\n numerator,\n denominator,\n extraData: extraData ?? \"0x\",\n },\n hasCriteriaItems\n ? generateCriteriaResolvers({\n orders: [order],\n offerCriterias: [offerCriteria],\n considerationCriterias: [considerationCriteria],\n })\n : [],\n conduitKey,\n recipientAddress,\n payableOverrides,\n ]\n )\n : getTransactionMethods(seaportContract.connect(signer), \"fulfillOrder\", [\n orderAccountingForTips,\n conduitKey,\n payableOverrides,\n ]),\n } as const;\n\n const actions = [...approvalActions, exchangeAction] as const;\n\n return {\n actions,\n executeAllActions: () =>\n executeAllActions(actions) as Promise<ContractTransaction>,\n };\n}\n\nexport function validateAndSanitizeFromOrderStatus(\n order: Order,\n orderStatus: OrderStatus\n): Order {\n const { isValidated, isCancelled, totalFilled, totalSize } = orderStatus;\n\n if (totalSize.gt(0) && totalFilled.div(totalSize).eq(1)) {\n throw new Error(\"The order you are trying to fulfill is already filled\");\n }\n\n if (isCancelled) {\n throw new Error(\"The order you are trying to fulfill is cancelled\");\n }\n\n if (isValidated) {\n // If the order is already validated, manually wipe the signature off of the order to save gas\n return { parameters: { ...order.parameters }, signature: \"0x\" };\n }\n\n return order;\n}\n\nexport type FulfillOrdersMetadata = {\n order: Order;\n unitsToFill?: BigNumberish;\n orderStatus: OrderStatus;\n offerCriteria: InputCriteria[];\n considerationCriteria: InputCriteria[];\n tips: ConsiderationItem[];\n extraData: string;\n offererBalancesAndApprovals: BalancesAndApprovals;\n offererOperator: string;\n}[];\n\nexport async function fulfillAvailableOrders({\n ordersMetadata,\n seaportContract,\n fulfillerBalancesAndApprovals,\n fulfillerOperator,\n currentBlockTimestamp,\n ascendingAmountTimestampBuffer,\n conduitKey,\n signer,\n recipientAddress,\n}: {\n ordersMetadata: FulfillOrdersMetadata;\n seaportContract: Seaport;\n fulfillerBalancesAndApprovals: BalancesAndApprovals;\n fulfillerOperator: string;\n currentBlockTimestamp: number;\n ascendingAmountTimestampBuffer: number;\n conduitKey: string;\n signer: providers.JsonRpcSigner;\n recipientAddress: string;\n}): Promise<\n OrderUseCase<\n ExchangeAction<\n ContractMethodReturnType<\n SeaportContract,\n \"fulfillAvailableAdvancedOrders\"\n >\n >\n >\n> {\n const sanitizedOrdersMetadata = ordersMetadata.map((orderMetadata) => ({\n ...orderMetadata,\n order: validateAndSanitizeFromOrderStatus(\n orderMetadata.order,\n orderMetadata.orderStatus\n ),\n }));\n\n const ordersMetadataWithAdjustedFills = sanitizedOrdersMetadata.map(\n (orderMetadata) => ({\n ...orderMetadata,\n // If we are supplying units to fill, we adjust the order by the minimum of the amount to fill and\n // the remaining order left to be fulfilled\n order: orderMetadata.unitsToFill\n ? mapOrderAmountsFromUnitsToFill(orderMetadata.order, {\n unitsToFill: orderMetadata.unitsToFill,\n totalFilled: orderMetadata.orderStatus.totalFilled,\n totalSize: orderMetadata.orderStatus.totalSize,\n })\n : // Else, we adjust the order by the remaining order left to be fulfilled\n mapOrderAmountsFromFilledStatus(orderMetadata.order, {\n totalFilled: orderMetadata.orderStatus.totalFilled,\n totalSize: orderMetadata.orderStatus.totalSize,\n }),\n })\n );\n\n let totalNativeAmount = BigNumber.from(0);\n const totalInsufficientApprovals: InsufficientApprovals = [];\n const hasCriteriaItems = false;\n\n const addApprovalIfNeeded = (\n orderInsufficientApprovals: InsufficientApprovals\n ) => {\n orderInsufficientApprovals.forEach((insufficientApproval) => {\n if (\n !totalInsufficientApprovals.find(\n (approval) => approval.token === insufficientApproval.token\n )\n ) {\n totalInsufficientApprovals.push(insufficientApproval);\n }\n });\n };\n\n ordersMetadataWithAdjustedFills.forEach(\n ({\n order,\n tips,\n offerCriteria,\n considerationCriteria,\n offererBalancesAndApprovals,\n offererOperator,\n }) => {\n const considerationIncludingTips = [\n ...order.parameters.consideration,\n ...tips,\n ];\n\n const timeBasedItemParams = {\n startTime: order.parameters.startTime,\n endTime: order.parameters.endTime,\n currentBlockTimestamp,\n ascendingAmountTimestampBuffer,\n isConsiderationItem: true,\n };\n\n totalNativeAmount = totalNativeAmount.add(\n getSummedTokenAndIdentifierAmounts({\n items: considerationIncludingTips,\n criterias: considerationCriteria,\n timeBasedItemParams,\n })[ethers.constants.AddressZero]?.[\"0\"] ?? BigNumber.from(0)\n );\n\n const insufficientApprovals = validateStandardFulfillBalancesAndApprovals(\n {\n offer: order.parameters.offer,\n consideration: considerationIncludingTips,\n offerCriteria,\n considerationCriteria,\n offererBalancesAndApprovals,\n fulfillerBalancesAndApprovals,\n timeBasedItemParams,\n offererOperator,\n fulfillerOperator,\n }\n );\n\n const offerCriteriaItems = order.parameters.offer.filter(({ itemType }) =>\n isCriteriaItem(itemType)\n );\n\n const considerationCriteriaItems = considerationIncludingTips.filter(\n ({ itemType }) => isCriteriaItem(itemType)\n );\n\n if (\n offerCriteriaItems.length !== offerCriteria.length ||\n considerationCriteriaItems.length !== considerationCriteria.length\n ) {\n throw new Error(\n \"You must supply the appropriate criterias for criteria based items\"\n );\n }\n\n addApprovalIfNeeded(insufficientApprovals);\n }\n );\n\n const payableOverrides = { value: totalNativeAmount };\n\n const approvalActions = await getApprovalActions(\n totalInsufficientApprovals,\n signer\n );\n\n const advancedOrdersWithTips: AdvancedOrder[] = sanitizedOrdersMetadata.map(\n ({ order, unitsToFill = 0, tips, extraData }) => {\n const { numerator, denominator } = getAdvancedOrderNumeratorDenominator(\n order,\n unitsToFill\n );\n\n const considerationIncludingTips = [\n ...order.parameters.consideration,\n ...tips,\n ];\n return {\n ...order,\n parameters: {\n ...order.parameters,\n consideration: considerationIncludingTips,\n totalOriginalConsiderationItems:\n order.parameters.consideration.length,\n },\n numerator,\n denominator,\n extraData,\n };\n }\n );\n\n const { offerFulfillments, considerationFulfillments } =\n generateFulfillOrdersFulfillments(ordersMetadata);\n\n const exchangeAction = {\n type: \"exchange\",\n transactionMethods: getTransactionMethods(\n seaportContract.connect(signer),\n \"fulfillAvailableAdvancedOrders\",\n [\n advancedOrdersWithTips,\n hasCriteriaItems\n ? generateCriteriaResolvers({\n orders: ordersMetadata.map(({ order }) => order),\n offerCriterias: ordersMetadata.map(\n ({ offerCriteria }) => offerCriteria\n ),\n considerationCriterias: ordersMetadata.map(\n ({ considerationCriteria }) => considerationCriteria\n ),\n })\n : [],\n offerFulfillments,\n considerationFulfillments,\n conduitKey,\n recipientAddress,\n advancedOrdersWithTips.length,\n payableOverrides,\n ]\n ),\n } as const;\n\n const actions = [...approvalActions, exchangeAction] as const;\n\n return {\n actions,\n executeAllActions: () =>\n executeAllActions(actions) as Promise<ContractTransaction>,\n };\n}\n\nexport function generateFulfillOrdersFulfillments(\n ordersMetadata: FulfillOrdersMetadata\n): {\n offerFulfillments: FulfillmentComponentStruct[];\n considerationFulfillments: FulfillmentComponentStruct[];\n} {\n const hashAggregateKey = ({\n sourceOrDestination,\n operator = \"\",\n token,\n identifier,\n }: {\n sourceOrDestination: string;\n operator?: string;\n token: string;\n identifier: string;\n }) => `${sourceOrDestination}-${operator}-${token}-${identifier}`;\n\n const offerAggregatedFulfillments: Record<\n string,\n FulfillmentComponentStruct\n > = {};\n\n const considerationAggregatedFulfillments: Record<\n string,\n FulfillmentComponentStruct\n > = {};\n\n ordersMetadata.forEach(\n ({ order, offererOperator, offerCriteria }, orderIndex) => {\n const itemToCriteria = getItemToCriteriaMap(\n order.parameters.offer,\n offerCriteria\n );\n\n return order.parameters.offer.forEach((item, itemIndex) => {\n const aggregateKey = `${hashAggregateKey({\n sourceOrDestination: order.parameters.offerer,\n operator: offererOperator,\n token: item.token,\n identifier:\n itemToCriteria.get(item)?.identifier ?? item.identifierOrCriteria,\n // We tack on the index to ensure that erc721s can never be aggregated and instead must be in separate arrays\n })}${isErc721Item(item.itemType) ? itemIndex : \"\"}`;\n\n offerAggregatedFulfillments[aggregateKey] = [\n ...(offerAggregatedFulfillments[aggregateKey] ?? []),\n { orderIndex, itemIndex },\n ];\n });\n }\n );\n\n ordersMetadata.forEach(\n ({ order, considerationCriteria, tips }, orderIndex) => {\n const itemToCriteria = getItemToCriteriaMap(\n order.parameters.consideration,\n considerationCriteria\n );\n return [...order.parameters.consideration, ...tips].forEach(\n (item, itemIndex) => {\n const aggregateKey = `${hashAggregateKey({\n sourceOrDestination: item.recipient,\n token: item.token,\n identifier:\n itemToCriteria.get(item)?.identifier ?? item.identifierOrCriteria,\n // We tack on the index to ensure that erc721s can never be aggregated and instead must be in separate arrays\n })}${isErc721Item(item.itemType) ? itemIndex : \"\"}`;\n\n considerationAggregatedFulfillments[aggregateKey] = [\n ...(considerationAggregatedFulfillments[aggregateKey] ?? []),\n { orderIndex, itemIndex },\n ];\n }\n );\n }\n );\n\n return {\n offerFulfillments: Object.values(offerAggregatedFulfillments),\n considerationFulfillments: Object.values(\n considerationAggregatedFulfillments\n ),\n };\n}\n\nexport const getAdvancedOrderNumeratorDenominator = (\n order: Order,\n unitsToFill?: BigNumberish\n) => {\n // Used for advanced order cases\n const maxUnits = getMaximumSizeForOrder(order);\n const unitsToFillBn = BigNumber.from(unitsToFill);\n\n // Reduce the numerator/denominator as optimization\n const unitsGcd = gcd(unitsToFillBn, maxUnits);\n\n const numerator = unitsToFill\n ? unitsToFillBn.div(unitsGcd)\n : BigNumber.from(1);\n const denominator = unitsToFill ? maxUnits.div(unitsGcd) : BigNumber.from(1);\n\n return { numerator, denominator };\n};\n","import { providers as multicallProviders } from \"@0xsequence/multicall\";\nimport { BigNumber } from \"ethers\";\nimport { ItemType, MAX_INT } from \"../constants\";\nimport type { InputCriteria, Item, OrderParameters } from \"../types\";\nimport { approvedItemAmount } from \"./approval\";\nimport { balanceOf } from \"./balance\";\nimport {\n getItemToCriteriaMap,\n getSummedTokenAndIdentifierAmounts,\n isErc1155Item,\n isErc20Item,\n isErc721Item,\n TimeBasedItemParams,\n} from \"./item\";\n\nexport type BalancesAndApprovals = {\n token: string;\n identifierOrCriteria: string;\n balance: BigNumber;\n approvedAmount: BigNumber;\n itemType: ItemType;\n}[];\n\nexport type InsufficientBalances = {\n token: string;\n identifierOrCriteria: string;\n requiredAmount: BigNumber;\n amountHave: BigNumber;\n itemType: ItemType;\n}[];\n\nexport type InsufficientApprovals = {\n token: string;\n identifierOrCriteria: string;\n approvedAmount: BigNumber;\n requiredApprovedAmount: BigNumber;\n operator: string;\n itemType: ItemType;\n}[];\n\nconst findBalanceAndApproval = (\n balancesAndApprovals: BalancesAndApprovals,\n token: string,\n identifierOrCriteria: string\n) => {\n const balanceAndApproval = balancesAndApprovals.find(\n ({\n token: checkedToken,\n identifierOrCriteria: checkedIdentifierOrCriteria,\n }) =>\n token.toLowerCase() === checkedToken.toLowerCase() &&\n checkedIdentifierOrCriteria.toLowerCase() ===\n identifierOrCriteria.toLowerCase()\n );\n\n if (!balanceAndApproval) {\n throw new Error(\n \"Balances and approvals didn't contain all tokens and identifiers\"\n );\n }\n\n return balanceAndApproval;\n};\n\nexport const getBalancesAndApprovals = async ({\n owner,\n items,\n criterias,\n operator,\n multicallProvider,\n}: {\n owner: string;\n items: Item[];\n criterias: InputCriteria[];\n operator: string;\n multicallProvider: multicallProviders.MulticallProvider;\n}): Promise<BalancesAndApprovals> => {\n const itemToCriteria = getItemToCriteriaMap(items, criterias);\n\n return Promise.all(\n items.map(async (item) => {\n let approvedAmountPromise = Promise.resolve(BigNumber.from(0));\n\n if (isErc721Item(item.itemType) || isErc1155Item(item.itemType)) {\n approvedAmountPromise = approvedItemAmount(\n owner,\n item,\n operator,\n multicallProvider\n );\n } else if (isErc20Item(item.itemType)) {\n approvedAmountPromise = approvedItemAmount(\n owner,\n item,\n operator,\n multicallProvider\n );\n }\n // If native token, we don't need to check for approvals\n else {\n approvedAmountPromise = Promise.resolve(MAX_INT);\n }\n\n return {\n token: item.token,\n identifierOrCriteria:\n itemToCriteria.get(item)?.identifier ?? item.identifierOrCriteria,\n balance: await balanceOf(\n owner,\n item,\n multicallProvider,\n itemToCriteria.get(item)\n ),\n approvedAmount: await approvedAmountPromise,\n itemType: item.itemType,\n };\n })\n );\n};\n\nexport const getInsufficientBalanceAndApprovalAmounts = ({\n balancesAndApprovals,\n tokenAndIdentifierAmounts,\n operator,\n}: {\n balancesAndApprovals: BalancesAndApprovals;\n tokenAndIdentifierAmounts: ReturnType<\n typeof getSummedTokenAndIdentifierAmounts\n >;\n operator: string;\n}): {\n insufficientBalances: InsufficientBalances;\n insufficientApprovals: InsufficientApprovals;\n} => {\n const tokenAndIdentifierAndAmountNeeded = [\n ...Object.entries(tokenAndIdentifierAmounts).map(\n ([token, identifierToAmount]) =>\n Object.entries(identifierToAmount).map(\n ([identifierOrCriteria, amountNeeded]) =>\n [token, identifierOrCriteria, amountNeeded] as const\n )\n ),\n ].flat();\n\n const filterBalancesOrApprovals = (\n filterKey: \"balance\" | \"approvedAmount\"\n ): InsufficientBalances =>\n tokenAndIdentifierAndAmountNeeded\n .filter(([token, identifierOrCriteria, amountNeeded]) =>\n findBalanceAndApproval(\n balancesAndApprovals,\n token,\n identifierOrCriteria\n )[filterKey].lt(amountNeeded)\n )\n .map(([token, identifierOrCriteria, amount]) => {\n const balanceAndApproval = findBalanceAndApproval(\n balancesAndApprovals,\n token,\n identifierOrCriteria\n );\n\n return {\n token,\n identifierOrCriteria,\n requiredAmount: amount,\n amountHave: balanceAndApproval[filterKey],\n itemType: balanceAndApproval.itemType,\n };\n });\n\n const mapToApproval = (\n insufficientBalance: InsufficientBalances[number]\n ): InsufficientApprovals[number] => ({\n token: insufficientBalance.token,\n identifierOrCriteria: insufficientBalance.identifierOrCriteria,\n approvedAmount: insufficientBalance.amountHave,\n requiredApprovedAmount: insufficientBalance.requiredAmount,\n itemType: insufficientBalance.itemType,\n operator,\n });\n\n const [insufficientBalances, insufficientApprovals] = [\n filterBalancesOrApprovals(\"balance\"),\n filterBalancesOrApprovals(\"approvedAmount\").map(mapToApproval),\n ];\n\n return {\n insufficientBalances,\n insufficientApprovals,\n };\n};\n\n/**\n * 1. The offerer should have sufficient balance of all offered items.\n * 2. If the order does not indicate proxy utilization, the offerer should have sufficient approvals set\n * for the Seaport contract for all offered ERC20, ERC721, and ERC1155 items.\n * 3. If the order does indicate proxy utilization, the offerer should have sufficient approvals set\n * for their respective proxy contract for all offered ERC20, ERC721, and ERC1155 items.\n */\nexport const validateOfferBalancesAndApprovals = ({\n offer,\n criterias,\n balancesAndApprovals,\n timeBasedItemParams,\n throwOnInsufficientBalances = true,\n throwOnInsufficientApprovals,\n operator,\n}: {\n balancesAndApprovals: BalancesAndApprovals;\n timeBasedItemParams?: TimeBasedItemParams;\n throwOnInsufficientBalances?: boolean;\n throwOnInsufficientApprovals?: boolean;\n operator: string;\n} & Pick<OrderParameters, \"offer\"> & {\n criterias: InputCriteria[];\n }): InsufficientApprovals => {\n const { insufficientBalances, insufficientApprovals } =\n getInsufficientBalanceAndApprovalAmounts({\n balancesAndApprovals,\n tokenAndIdentifierAmounts: getSummedTokenAndIdentifierAmounts({\n items: offer,\n criterias,\n timeBasedItemParams: timeBasedItemParams\n ? { ...timeBasedItemParams, isConsiderationItem: false }\n : undefined,\n }),\n operator,\n });\n\n if (throwOnInsufficientBalances && insufficientBalances.length > 0) {\n throw new Error(\n \"The offerer does not have the amount needed to create or fulfill.\"\n );\n }\n\n if (throwOnInsufficientApprovals && insufficientApprovals.length > 0) {\n throw new Error(\"The offerer does not have the sufficient approvals.\");\n }\n\n return insufficientApprovals;\n};\n\n/**\n * When fulfilling a basic order, the following requirements need to be checked to ensure that the order will be fulfillable:\n * 1. Offer checks need to be performed to ensure that the offerer still has sufficient balance and approvals\n * 2. The fulfiller should have sufficient balance of all consideration items except for those with an\n * item type that matches the order's offered item type — by way of example, if the fulfilled order offers\n * an ERC20 item and requires an ERC721 item to the offerer and the same ERC20 item to another recipient,\n * the fulfiller needs to own the ERC721 item but does not need to own the ERC20 item as it will be sourced from the offerer.\n * 3. If the fulfiller does not elect to utilize a proxy, they need to have sufficient approvals set for the\n * Seaport contract for all ERC20, ERC721, and ERC1155 consideration items on the fulfilled order except\n * for ERC20 items with an item type that matches the order's offered item type.\n * 4. If the fulfiller does elect to utilize a proxy, they need to have sufficient approvals set for their\n * respective proxy contract for all ERC20, ERC721, and ERC1155 consideration items on the fulfilled order\n * except for ERC20 items with an item type that matches the order's offered item type.\n * 5. If the fulfilled order specifies Ether (or other native tokens) as consideration items, the fulfiller must\n * be able to supply the sum total of those items as msg.value.\n *\n * @returns the list of insufficient owner and proxy approvals\n */\nexport const validateBasicFulfillBalancesAndApprovals = ({\n offer,\n consideration,\n offererBalancesAndApprovals,\n fulfillerBalancesAndApprovals,\n timeBasedItemParams,\n offererOperator,\n fulfillerOperator,\n}: {\n offererBalancesAndApprovals: BalancesAndApprovals;\n fulfillerBalancesAndApprovals: BalancesAndApprovals;\n timeBasedItemParams: TimeBasedItemParams;\n offererOperator: string;\n fulfillerOperator: string;\n} & Pick<OrderParameters, \"offer\" | \"consideration\">) => {\n validateOfferBalancesAndApprovals({\n offer,\n criterias: [],\n balancesAndApprovals: offererBalancesAndApprovals,\n timeBasedItemParams,\n throwOnInsufficientApprovals: true,\n operator: offererOperator,\n });\n\n const considerationWithoutOfferItemType = consideration.filter(\n (item) => item.itemType !== offer[0].itemType\n );\n\n const { insufficientBalances, insufficientApprovals } =\n getInsufficientBalanceAndApprovalAmounts({\n balancesAndApprovals: fulfillerBalancesAndApprovals,\n tokenAndIdentifierAmounts: getSummedTokenAndIdentifierAmounts({\n items: considerationWithoutOfferItemType,\n criterias: [],\n timeBasedItemParams: {\n ...timeBasedItemParams,\n isConsiderationItem: true,\n },\n }),\n operator: fulfillerOperator,\n });\n\n if (insufficientBalances.length > 0) {\n throw new Error(\n \"The fulfiller does not have the balances needed to fulfill.\"\n );\n }\n\n return insufficientApprovals;\n};\n\n/**\n * When fulfilling a standard order, the following requirements need to be checked to ensure that the order will be fulfillable:\n * 1. Offer checks need to be performed to ensure that the offerer still has sufficient balance and approvals\n * 2. The fulfiller should have sufficient balance of all consideration items after receiving all offered items\n * — by way of example, if the fulfilled order offers an ERC20 item and requires an ERC721 item to the offerer\n * and the same ERC20 item to another recipient with an amount less than or equal to the offered amount,\n * the fulfiller does not need to own the ERC20 item as it will first be received from the offerer.\n * 3. If the fulfiller does not elect to utilize a proxy, they need to have sufficient approvals set for the\n * Seaport contract for all ERC20, ERC721, and ERC1155 consideration items on the fulfilled order.\n * 4. If the fulfiller does elect to utilize a proxy, they need to have sufficient approvals set for their\n * respective proxy contract for all ERC20, ERC721, and ERC1155 consideration items on the fulfilled order.\n * 5. If the fulfilled order specifies Ether (or other native tokens) as consideration items, the fulfiller must\n * be able to supply the sum total of those items as msg.value.\n *\n * @returns the list of insufficient owner and proxy approvals\n */\nexport const validateStandardFulfillBalancesAndApprovals = ({\n offer,\n consideration,\n offerCriteria,\n considerationCriteria,\n offererBalancesAndApprovals,\n fulfillerBalancesAndApprovals,\n timeBasedItemParams,\n offererOperator,\n fulfillerOperator,\n}: Pick<OrderParameters, \"offer\" | \"consideration\"> & {\n offerCriteria: InputCriteria[];\n considerationCriteria: InputCriteria[];\n offererBalancesAndApprovals: BalancesAndApprovals;\n fulfillerBalancesAndApprovals: BalancesAndApprovals;\n timeBasedItemParams: TimeBasedItemParams;\n offererOperator: string;\n fulfillerOperator: string;\n}) => {\n validateOfferBalancesAndApprovals({\n offer,\n criterias: offerCriteria,\n balancesAndApprovals: offererBalancesAndApprovals,\n timeBasedItemParams,\n throwOnInsufficientApprovals: true,\n operator: offererOperator,\n });\n\n const fulfillerBalancesAndApprovalsAfterReceivingOfferedItems =\n addToExistingBalances({\n items: offer,\n criterias: offerCriteria,\n balancesAndApprovals: fulfillerBalancesAndApprovals,\n timeBasedItemParams,\n });\n\n const { insufficientBalances, insufficientApprovals } =\n getInsufficientBalanceAndApprovalAmounts({\n balancesAndApprovals:\n fulfillerBalancesAndApprovalsAfterReceivingOfferedItems,\n tokenAndIdentifierAmounts: getSummedTokenAndIdentifierAmounts({\n items: consideration,\n criterias: considerationCriteria,\n timeBasedItemParams: {\n ...timeBasedItemParams,\n isConsiderationItem: true,\n },\n }),\n operator: fulfillerOperator,\n });\n\n if (insufficientBalances.length > 0) {\n throw new Error(\n \"The fulfiller does not have the balances needed to fulfill.\"\n );\n }\n\n return insufficientApprovals;\n};\n\nconst addToExistingBalances = ({\n items,\n criterias,\n timeBasedItemParams,\n balancesAndApprovals,\n}: {\n items: Item[];\n criterias: InputCriteria[];\n timeBasedItemParams: TimeBasedItemParams;\n balancesAndApprovals: BalancesAndApprovals;\n}) => {\n const summedItemAmounts = getSummedTokenAndIdentifierAmounts({\n items,\n criterias,\n timeBasedItemParams: { ...timeBasedItemParams, isConsiderationItem: false },\n });\n\n // Deep clone existing balances\n const balancesAndApprovalsAfterReceivingItems = balancesAndApprovals.map(\n (item) => ({ ...item })\n );\n\n // Add each summed item amount to the existing balances as we may want tocheck balances after receiving all items\n Object.entries(summedItemAmounts).forEach(\n ([token, identifierOrCriteriaToAmount]) =>\n Object.entries(identifierOrCriteriaToAmount).forEach(\n ([identifierOrCriteria, amount]) => {\n const balanceAndApproval = findBalanceAndApproval(\n balancesAndApprovalsAfterReceivingItems,\n token,\n identifierOrCriteria\n );\n\n const balanceAndApprovalIndex =\n balancesAndApprovalsAfterReceivingItems.indexOf(balanceAndApproval);\n\n balancesAndApprovalsAfterReceivingItems[\n balanceAndApprovalIndex\n ].balance =\n balancesAndApprovalsAfterReceivingItems[\n balanceAndApprovalIndex\n ].balance.add(amount);\n }\n )\n );\n\n return balancesAndApprovalsAfterReceivingItems;\n};\n","import { providers as multicallProviders } from \"@0xsequence/multicall\";\nimport { BigNumber, Contract } from \"ethers\";\nimport { ERC1155ABI } from \"../abi/ERC1155\";\nimport { ERC20ABI } from \"../abi/ERC20\";\nimport { ERC721ABI } from \"../abi/ERC721\";\nimport { ItemType } from \"../constants\";\nimport type { ERC20 } from \"../typechain/ERC20\";\nimport type { ERC1155 } from \"../typechain/ERC1155\";\nimport type { ERC721 } from \"../typechain/ERC721\";\nimport type { InputCriteria, Item } from \"../types\";\nimport { isErc1155Item, isErc20Item, isErc721Item } from \"./item\";\n\nexport const balanceOf = async (\n owner: string,\n item: Item,\n multicallProvider: multicallProviders.MulticallProvider,\n criteria?: InputCriteria\n): Promise<BigNumber> => {\n if (isErc721Item(item.itemType)) {\n const contract = new Contract(\n item.token,\n ERC721ABI,\n multicallProvider\n ) as ERC721;\n\n if (item.itemType === ItemType.ERC721_WITH_CRITERIA) {\n return criteria\n ? contract\n .ownerOf(criteria.identifier)\n .then((ownerOf) =>\n BigNumber.from(\n Number(ownerOf.toLowerCase() === owner.toLowerCase())\n )\n )\n : contract.balanceOf(owner);\n }\n\n return contract\n .ownerOf(item.identifierOrCriteria)\n .then((ownerOf) =>\n BigNumber.from(Number(ownerOf.toLowerCase() === owner.toLowerCase()))\n );\n } else if (isErc1155Item(item.itemType)) {\n const contract = new Contract(\n item.token,\n ERC1155ABI,\n multicallProvider\n ) as ERC1155;\n\n if (item.itemType === ItemType.ERC1155_WITH_CRITERIA) {\n if (!criteria) {\n // We don't have a good way to determine the balance of an erc1155 criteria item unless explicit\n // identifiers are provided, so just assume the offerer has sufficient balance\n const startAmount = BigNumber.from(item.startAmount);\n const endAmount = BigNumber.from(item.endAmount);\n\n return startAmount.gt(endAmount) ? startAmount : endAmount;\n }\n return contract.balanceOf(owner, criteria.identifier);\n }\n\n return contract.balanceOf(owner, item.identifierOrCriteria);\n }\n\n if (isErc20Item(item.itemType)) {\n const contract = new Contract(\n item.token,\n ERC20ABI,\n multicallProvider\n ) as ERC20;\n return contract.balanceOf(owner);\n }\n\n return multicallProvider.getBalance(owner);\n};\n","import { Side } from \"../constants\";\nimport { InputCriteria, Item, Order } from \"../types\";\nimport { isCriteriaItem } from \"./item\";\n\nexport const generateCriteriaResolvers = ({\n orders,\n offerCriterias = [[]],\n considerationCriterias = [[]],\n}: {\n orders: Order[];\n offerCriterias?: InputCriteria[][];\n considerationCriterias?: InputCriteria[][];\n}) => {\n const offerCriteriaItems = orders.flatMap((order, orderIndex) =>\n order.parameters.offer\n .map(\n (item, index) =>\n ({\n orderIndex,\n item,\n index,\n side: Side.OFFER,\n } as const)\n )\n .filter(({ item }) => isCriteriaItem(item.itemType))\n );\n\n const considerationCriteriaItems = orders.flatMap((order, orderIndex) =>\n order.parameters.consideration\n .map(\n (item, index) =>\n ({\n orderIndex,\n item,\n index,\n side: Side.CONSIDERATION,\n } as const)\n )\n .filter(({ item }) => isCriteriaItem(item.itemType))\n );\n\n const mapCriteriaItemsToResolver = (\n criteriaItems:\n | typeof offerCriteriaItems\n | typeof considerationCriteriaItems,\n criterias: InputCriteria[][]\n ) =>\n criteriaItems.map(({ orderIndex, item, index, side }, i) => {\n const merkleRoot = item.identifierOrCriteria || \"0\";\n const inputCriteria: InputCriteria = criterias[orderIndex][i];\n\n return {\n orderIndex,\n index,\n side,\n identifier: inputCriteria.identifier,\n criteriaProof: merkleRoot === \"0\" ? [] : inputCriteria.proof,\n };\n });\n\n const criteriaResolvers = [\n ...mapCriteriaItemsToResolver(offerCriteriaItems, offerCriterias),\n ...mapCriteriaItemsToResolver(\n considerationCriteriaItems,\n considerationCriterias\n ),\n ];\n\n return criteriaResolvers;\n};\n","import { BigNumber } from \"ethers\";\nimport { keccak256 } from \"ethers/lib/utils\";\nimport MerkleTreeJS from \"merkletreejs\";\n\nconst hashIdentifier = (identifier: string) =>\n keccak256(\n Buffer.from(\n BigNumber.from(identifier).toHexString().slice(2).padStart(64, \"0\"),\n \"hex\"\n )\n );\n\n/**\n * Simple wrapper over the MerkleTree in merkletreejs.\n * Handles hashing identifiers to be compatible with Seaport.\n */\nexport class MerkleTree {\n tree: MerkleTreeJS;\n\n constructor(identifiers: string[]) {\n this.tree = new MerkleTreeJS(identifiers.map(hashIdentifier), keccak256, {\n sort: true,\n });\n }\n\n getProof(identifier: string): string[] {\n return this.tree.getHexProof(hashIdentifier(identifier));\n }\n\n getRoot() {\n return this.tree.getRoot().toString(\"hex\") ? this.tree.getHexRoot() : \"0\";\n }\n}\n","import { BigNumber, BigNumberish, ethers } from \"ethers\";\nimport { ItemType, ONE_HUNDRED_PERCENT_BP } from \"../constants\";\nimport type {\n ConsiderationItem,\n CreateInputItem,\n Fee,\n Item,\n OfferItem,\n Order,\n OrderParameters,\n} from \"../types\";\nimport { getMaximumSizeForOrder, isCurrencyItem } from \"./item\";\nimport { MerkleTree } from \"./merkletree\";\n\nconst multiplyBasisPoints = (amount: BigNumberish, basisPoints: BigNumberish) =>\n BigNumber.from(amount)\n .mul(BigNumber.from(basisPoints))\n .div(ONE_HUNDRED_PERCENT_BP);\n\nexport const feeToConsiderationItem = ({\n fee,\n token,\n baseAmount,\n baseEndAmount = baseAmount,\n}: {\n fee: Fee;\n token: string;\n baseAmount: BigNumberish;\n baseEndAmount?: BigNumberish;\n}): ConsiderationItem => {\n return {\n itemType:\n token === ethers.constants.AddressZero ? ItemType.NATIVE : ItemType.ERC20,\n token,\n identifierOrCriteria: \"0\",\n startAmount: multiplyBasisPoints(baseAmount, fee.basisPoints).toString(),\n endAmount: multiplyBasisPoints(baseEndAmount, fee.basisPoints).toString(),\n recipient: fee.recipient,\n };\n};\n\nexport const deductFees = <T extends Item>(\n items: T[],\n fees?: readonly Fee[]\n): T[] => {\n if (!fees) {\n return items;\n }\n\n const totalBasisPoints = fees.reduce(\n (accBasisPoints, fee) => accBasisPoints + fee.basisPoints,\n 0\n );\n\n return items.map((item) => ({\n ...item,\n startAmount: isCurrencyItem(item)\n ? BigNumber.from(item.startAmount)\n .sub(multiplyBasisPoints(item.startAmount, totalBasisPoints))\n .toString()\n : item.startAmount,\n endAmount: isCurrencyItem(item)\n ? BigNumber.from(item.endAmount)\n .sub(multiplyBasisPoints(item.endAmount, totalBasisPoints))\n .toString()\n : item.endAmount,\n }));\n};\n\nexport const mapInputItemToOfferItem = (item: CreateInputItem): OfferItem => {\n // Item is an NFT\n if (\"itemType\" in item) {\n // Convert this to a criteria based item\n if (\"identifiers\" in item) {\n const tree = new MerkleTree(item.identifiers);\n\n return {\n itemType:\n item.itemType === ItemType.ERC721\n ? ItemType.ERC721_WITH_CRITERIA\n : ItemType.ERC1155_WITH_CRITERIA,\n token: item.token,\n identifierOrCriteria: tree.getRoot(),\n startAmount: item.amount ?? \"1\",\n endAmount: item.endAmount ?? item.amount ?? \"1\",\n };\n }\n\n if (\"amount\" in item || \"endAmount\" in item) {\n return {\n itemType: item.itemType,\n token: item.token,\n identifierOrCriteria: item.identifier,\n startAmount: item.amount,\n endAmount: item.endAmount ?? item.amount ?? \"1\",\n };\n }\n\n return {\n itemType: item.itemType,\n token: item.token,\n identifierOrCriteria: item.identifier,\n startAmount: \"1\",\n endAmount: \"1\",\n };\n }\n\n // Item is a currency\n return {\n itemType:\n item.token && item.token !== ethers.constants.AddressZero\n ? ItemType.ERC20\n : ItemType.NATIVE,\n token: item.token ?? ethers.constants.AddressZero,\n identifierOrCriteria: \"0\",\n startAmount: item.amount,\n endAmount: item.endAmount ?? item.amount,\n };\n};\n\nexport const areAllCurrenciesSame = ({\n offer,\n consideration,\n}: Pick<OrderParameters, \"offer\" | \"consideration\">) => {\n const allItems = [...offer, ...consideration];\n const currencies = allItems.filter(isCurrencyItem);\n\n return currencies.every(\n ({ itemType, token }) =>\n itemType === currencies[0].itemType &&\n token.toLowerCase() === currencies[0].token.toLowerCase()\n );\n};\n\nexport const totalItemsAmount = <T extends OfferItem>(items: T[]) => {\n const initialValues = {\n startAmount: BigNumber.from(0),\n endAmount: BigNumber.from(0),\n };\n\n return items\n .map(({ startAmount, endAmount }) => ({\n startAmount,\n endAmount,\n }))\n .reduce<typeof initialValues>(\n (\n { startAmount: totalStartAmount, endAmount: totalEndAmount },\n { startAmount, endAmount }\n ) => ({\n startAmount: totalStartAmount.add(startAmount),\n endAmount: totalEndAmount.add(endAmount),\n }),\n {\n startAmount: BigNumber.from(0),\n endAmount: BigNumber.from(0),\n }\n );\n};\n\n/**\n * Maps order offer and consideration item amounts based on the order's filled status\n * After applying the fraction, we can view this order as the \"canonical\" order for which we\n * check approvals and balances\n */\nexport const mapOrderAmountsFromFilledStatus = (\n order: Order,\n { totalFilled, totalSize }: { totalFilled: BigNumber; totalSize: BigNumber }\n): Order => {\n if (totalFilled.eq(0) || totalSize.eq(0)) {\n return order;\n }\n\n // i.e if totalFilled is 3 and totalSize is 4, there are 1 / 4 order amounts left to fill.\n const basisPoints = totalSize\n .sub(totalFilled)\n .mul(ONE_HUNDRED_PERCENT_BP)\n .div(totalSize);\n\n return {\n parameters: {\n ...order.parameters,\n offer: order.parameters.offer.map((item) => ({\n ...item,\n startAmount: multiplyBasisPoints(\n item.startAmount,\n basisPoints\n ).toString(),\n endAmount: multiplyBasisPoints(item.endAmount, basisPoints).toString(),\n })),\n consideration: order.parameters.consideration.map((item) => ({\n ...item,\n startAmount: multiplyBasisPoints(\n item.startAmount,\n basisPoints\n ).toString(),\n endAmount: multiplyBasisPoints(item.endAmount, basisPoints).toString(),\n })),\n },\n signature: order.signature,\n };\n};\n\n/**\n * Maps order offer and consideration item amounts based on the units needed to fulfill\n * After applying the fraction, we can view this order as the \"canonical\" order for which we\n * check approvals and balances\n * Returns the numerator and denominator as well, converting this to an AdvancedOrder\n */\nexport const mapOrderAmountsFromUnitsToFill = (\n order: Order,\n {\n unitsToFill,\n totalFilled,\n totalSize,\n }: { unitsToFill: BigNumberish; totalFilled: BigNumber; totalSize: BigNumber }\n): Order => {\n const unitsToFillBn = BigNumber.from(unitsToFill);\n\n if (unitsToFillBn.lte(0)) {\n throw new Error(\"Units to fill must be greater than 1\");\n }\n\n const maxUnits = getMaximumSizeForOrder(order);\n\n if (totalSize.eq(0)) {\n totalSize = maxUnits;\n }\n\n // This is the percentage of the order that is left to be fulfilled, and therefore we can't fill more than that.\n const remainingOrderPercentageToBeFilled = totalSize\n .sub(totalFilled)\n .mul(ONE_HUNDRED_PERCENT_BP)\n .div(totalSize);\n\n // i.e if totalSize is 8 and unitsToFill is 3, then we multiply every amount by 3 / 8\n const unitsToFillBasisPoints = unitsToFillBn\n .mul(ONE_HUNDRED_PERCENT_BP)\n .div(maxUnits);\n\n // We basically choose the lesser between the units requested to be filled and the actual remaining order amount left\n // This is so that if a user tries to fulfill an order that is 1/2 filled, and supplies a fraction such as 3/4, the maximum\n // amount to fulfill is 1/2 instead of 3/4\n const basisPoints = remainingOrderPercentageToBeFilled.gt(\n unitsToFillBasisPoints\n )\n ? unitsToFillBasisPoints\n : remainingOrderPercentageToBeFilled;\n\n return {\n parameters: {\n ...order.parameters,\n offer: order.parameters.offer.map((item) => ({\n ...item,\n startAmount: multiplyBasisPoints(\n item.startAmount,\n basisPoints\n ).toString(),\n endAmount: multiplyBasisPoints(item.endAmount, basisPoints).toString(),\n })),\n consideration: order.parameters.consideration.map((item) => ({\n ...item,\n startAmount: multiplyBasisPoints(\n item.startAmount,\n basisPoints\n ).toString(),\n endAmount: multiplyBasisPoints(item.endAmount, basisPoints).toString(),\n })),\n },\n signature: order.signature,\n };\n};\n\nexport const generateRandomSalt = () => {\n return `0x${Buffer.from(ethers.utils.randomBytes(16)).toString(\"hex\")}`;\n};\n\nexport const shouldUseMatchForFulfill = () => true;\n","import { providers as multicallProviders } from \"@0xsequence/multicall\";\nimport {\n BigNumberish,\n Contract,\n ethers,\n PayableOverrides,\n providers,\n} from \"ethers\";\nimport { formatBytes32String, _TypedDataEncoder } from \"ethers/lib/utils\";\nimport { SeaportABI } from \"./abi/Seaport\";\nimport {\n SEAPORT_CONTRACT_NAME,\n SEAPORT_CONTRACT_VERSION,\n EIP_712_ORDER_TYPE,\n KNOWN_CONDUIT_KEYS_TO_CONDUIT,\n MAX_INT,\n NO_CONDUIT,\n OrderType,\n CROSS_CHAIN_SEAPORT_ADDRESS,\n} from \"./constants\";\nimport type {\n SeaportConfig,\n CreateOrderAction,\n CreateOrderInput,\n ExchangeAction,\n InputCriteria,\n Order,\n OrderComponents,\n OrderParameters,\n OrderStatus,\n OrderUseCase,\n OrderWithCounter,\n TipInputItem,\n TransactionMethods,\n ContractMethodReturnType,\n MatchOrdersFulfillment,\n SeaportContract,\n} from \"./types\";\nimport { getApprovalActions } from \"./utils/approval\";\nimport {\n getBalancesAndApprovals,\n validateOfferBalancesAndApprovals,\n} from \"./utils/balanceAndApprovalCheck\";\nimport {\n fulfillAvailableOrders,\n fulfillBasicOrder,\n FulfillOrdersMetadata,\n fulfillStandardOrder,\n shouldUseBasicFulfill,\n validateAndSanitizeFromOrderStatus,\n} from \"./utils/fulfill\";\nimport { getMaximumSizeForOrder, isCurrencyItem } from \"./utils/item\";\nimport {\n areAllCurrenciesSame,\n deductFees,\n feeToConsiderationItem,\n generateRandomSalt,\n mapInputItemToOfferItem,\n totalItemsAmount,\n} from \"./utils/order\";\nimport { executeAllActions, getTransactionMethods } from \"./utils/usecase\";\n\nexport class Seaport {\n // Provides the raw interface to the contract for flexibility\n public contract: SeaportContract;\n\n private provider: providers.JsonRpcProvider;\n\n // Use the multicall provider for reads for batching and performance optimisations\n // NOTE: Do NOT await between sequential requests if you're intending to batch\n // instead, use Promise.all() and map to fetch data in parallel\n // https://www.npmjs.com/package/@0xsequence/multicall\n private multicallProvider: multicallProviders.MulticallProvider;\n\n private config: Required<Omit<SeaportConfig, \"overrides\">>;\n\n private defaultConduitKey: string;\n\n /**\n * @param provider - The provider to use for web3-related calls\n * @param considerationConfig - A config to provide flexibility in the usage of Seaport\n */\n public constructor(\n provider: providers.JsonRpcProvider,\n {\n overrides,\n // Five minute buffer\n ascendingAmountFulfillmentBuffer = 300,\n balanceAndApprovalChecksOnOrderCreation = true,\n conduitKeyToConduit,\n }: SeaportConfig = {}\n ) {\n this.provider = provider;\n this.multicallProvider = new multicallProviders.MulticallProvider(provider);\n\n this.contract = new Contract(\n overrides?.contractAddress ?? CROSS_CHAIN_SEAPORT_ADDRESS,\n SeaportABI,\n this.multicallProvider\n ) as SeaportContract;\n\n this.config = {\n ascendingAmountFulfillmentBuffer,\n balanceAndApprovalChecksOnOrderCreation,\n conduitKeyToConduit: {\n ...KNOWN_CONDUIT_KEYS_TO_CONDUIT,\n [NO_CONDUIT]: this.contract.address,\n ...conduitKeyToConduit,\n },\n };\n\n this.defaultConduitKey = overrides?.defaultConduitKey ?? NO_CONDUIT;\n }\n\n /**\n * Returns the corresponding order type based on whether it allows partial fills and is restricted by zone\n *\n * @param input\n * @param input.allowPartialFills Whether or not the order can be partially filled\n * @param input.restrictedByZone Whether or not the order can only be filled/cancelled by the zone\n * @returns the order type\n */\n private _getOrderTypeFromOrderOptions({\n allowPartialFills,\n restrictedByZone,\n }: Pick<CreateOrderInput, \"allowPartialFills\" | \"restrictedByZone\">) {\n if (allowPartialFills) {\n return restrictedByZone\n ? OrderType.PARTIAL_RESTRICTED\n : OrderType.PARTIAL_OPEN;\n }\n\n return restrictedByZone ? OrderType.FULL_RESTRICTED : OrderType.FULL_OPEN;\n }\n\n /**\n * Returns a use case that will create an order.\n * The use case will contain the list of actions necessary to finish creating an order.\n * The list of actions will either be an approval if approvals are necessary\n * or a signature request that will then be supplied into the final Order struct, ready to be fulfilled.\n *\n * @param input\n * @param input.conduitKey The conduitKey key to derive where to source your approvals from. Defaults to 0 which refers to the Seaport contract.\n * Another special value is address(1) will refer to the legacy proxy. All other must derive to the specified address.\n * @param input.zone The zone of the order. Defaults to the zero address.\n * @param input.startTime The start time of the order. Defaults to the current unix time.\n * @param input.endTime The end time of the order. Defaults to \"never end\".\n * It is HIGHLY recommended to pass in an explicit end time\n * @param input.offer The items you are willing to offer. This is a condensed version of the Seaport struct OfferItem for convenience\n * @param input.consideration The items that will go to their respective recipients upon receiving your offer.\n * @param input.counter The counter from which to create the order with. Automatically fetched from the contract if not provided\n * @param input.allowPartialFills Whether to allow the order to be partially filled\n * @param input.restrictedByZone Whether the order should be restricted by zone\n * @param input.fees Convenience array to apply fees onto the order. The fees will be deducted from the\n * existing consideration items and then tacked on as new consideration items\n * @param input.salt Random salt\n * @param input.offerer The order's creator address. Defaults to the first address on the provider.\n * @param accountAddress Optional address for which to create the order with\n * @returns a use case containing the list of actions needed to be performed in order to create the order\n */\n public async createOrder(\n {\n conduitKey = this.defaultConduitKey,\n zone = ethers.constants.AddressZero,\n startTime = Math.floor(Date.now() / 1000).toString(),\n endTime = MAX_INT.toString(),\n offer,\n consideration,\n counter,\n allowPartialFills,\n restrictedByZone,\n fees,\n salt = generateRandomSalt(),\n }: CreateOrderInput,\n accountAddress?: string\n ): Promise<OrderUseCase<CreateOrderAction>> {\n const signer = await this.provider.getSigner(accountAddress);\n const offerer = await signer.getAddress();\n const offerItems = offer.map(mapInputItemToOfferItem);\n const considerationItems = [\n ...consideration.map((consideration) => ({\n ...mapInputItemToOfferItem(consideration),\n recipient: consideration.recipient ?? offerer,\n })),\n ];\n\n if (\n !areAllCurrenciesSame({\n offer: offerItems,\n consideration: considerationItems,\n })\n ) {\n throw new Error(\n \"All currency tokens in the order must be the same token\"\n );\n }\n\n const currencies = [...offerItems, ...considerationItems].filter(\n isCurrencyItem\n );\n\n const totalCurrencyAmount = totalItemsAmount(currencies);\n\n const operator = this.config.conduitKeyToConduit[conduitKey];\n\n const [resolvedCounter, balancesAndApprovals] = await Promise.all([\n counter ?? this.getCounter(offerer),\n getBalancesAndApprovals({\n owner: offerer,\n items: offerItems,\n criterias: [],\n multicallProvider: this.multicallProvider,\n operator,\n }),\n ]);\n\n const orderType = this._getOrderTypeFromOrderOptions({\n allowPartialFills,\n restrictedByZone,\n });\n\n const considerationItemsWithFees = [\n ...deductFees(considerationItems, fees),\n ...(currencies.length\n ? fees?.map((fee) =>\n feeToConsiderationItem({\n fee,\n token: currencies[0].token,\n baseAmount: totalCurrencyAmount.startAmount,\n baseEndAmount: totalCurrencyAmount.endAmount,\n })\n ) ?? []\n : []),\n ];\n\n const orderParameters: OrderParameters = {\n offerer,\n zone,\n // TODO: Placeholder\n zoneHash: formatBytes32String(resolvedCounter.toString()),\n startTime,\n endTime,\n orderType,\n offer: offerItems,\n consideration: considerationItemsWithFees,\n totalOriginalConsiderationItems: considerationItemsWithFees.length,\n salt,\n conduitKey,\n };\n\n const checkBalancesAndApprovals =\n this.config.balanceAndApprovalChecksOnOrderCreation;\n\n const insufficientApprovals = checkBalancesAndApprovals\n ? validateOfferBalancesAndApprovals({\n offer: offerItems,\n criterias: [],\n balancesAndApprovals,\n throwOnInsufficientBalances: checkBalancesAndApprovals,\n operator,\n })\n : [];\n\n const approvalActions = checkBalancesAndApprovals\n ? await getApprovalActions(insufficientApprovals, signer)\n : [];\n\n const createOrderAction = {\n type: \"create\",\n getMessageToSign: () => {\n return this._getMessageToSign(orderParameters, resolvedCounter);\n },\n createOrder: async () => {\n const signature = await this.signOrder(\n orderParameters,\n resolvedCounter,\n offerer\n );\n\n return {\n parameters: { ...orderParameters, counter: resolvedCounter },\n signature,\n };\n },\n } as const;\n\n const actions = [...approvalActions, createOrderAction] as const;\n\n return {\n actions,\n executeAllActions: () =>\n executeAllActions(actions) as Promise<OrderWithCounter>,\n };\n }\n\n /**\n * Returns the domain data used when signing typed data\n * @returns domain data\n */\n private async _getDomainData() {\n const { chainId } = await this.provider.getNetwork();\n\n return {\n name: SEAPORT_CONTRACT_NAME,\n version: SEAPORT_CONTRACT_VERSION,\n chainId,\n verifyingContract: this.contract.address,\n };\n }\n\n /**\n * Returns a raw message to be signed using EIP-712\n * @param orderParameters order parameter struct\n * @param counter counter of the order\n * @returns JSON string of the message to be signed\n */\n private async _getMessageToSign(\n orderParameters: OrderParameters,\n counter: number\n ) {\n const domainData = await this._getDomainData();\n\n const orderComponents: OrderComponents = {\n ...orderParameters,\n counter,\n };\n\n return JSON.stringify(\n _TypedDataEncoder.getPayload(\n domainData,\n EIP_712_ORDER_TYPE,\n orderComponents\n )\n );\n }\n\n /**\n * Submits a request to your provider to sign the order. Signed orders are used for off-chain order books.\n * @param orderParameters standard order parameter struct\n * @param counter counter of the offerer\n * @param accountAddress optional account address from which to sign the order with.\n * @returns the order signature\n */\n public async signOrder(\n orderParameters: OrderParameters,\n counter: number,\n accountAddress?: string\n ): Promise<string> {\n const signer = this.provider.getSigner(accountAddress);\n\n const domainData = await this._getDomainData();\n\n const orderComponents: OrderComponents = {\n ...orderParameters,\n counter,\n };\n\n const signature = await signer._signTypedData(\n domainData,\n EIP_712_ORDER_TYPE,\n orderComponents\n );\n\n // Use EIP-2098 compact signatures to save gas. https://eips.ethereum.org/EIPS/eip-2098\n return ethers.utils.splitSignature(signature).compact;\n }\n\n /**\n * Cancels a list of orders so that they are no longer fulfillable.\n *\n * @param orders list of order components\n * @param accountAddress optional account address from which to cancel the orders from.\n * @returns the set of transaction methods that can be used\n */\n public cancelOrders(\n orders: OrderComponents[],\n accountAddress?: string\n ): TransactionMethods<ContractMethodReturnType<SeaportContract, \"cancel\">> {\n const signer = this.provider.getSigner(accountAddress);\n\n return getTransactionMethods(this.contract.connect(signer), \"cancel\", [\n orders,\n ]);\n }\n\n /**\n * Bulk cancels all existing orders for a given account\n * @param offerer the account to bulk cancel orders on\n * @returns the set of transaction methods that can be used\n */\n public bulkCancelOrders(\n offerer?: string\n ): TransactionMethods<\n ContractMethodReturnType<SeaportContract, \"incrementCounter\">\n > {\n const signer = this.provider.getSigner(offerer);\n\n return getTransactionMethods(\n this.contract.connect(signer),\n \"incrementCounter\",\n []\n );\n }\n\n /**\n * Approves a list of orders on-chain. This allows accounts to fulfill the order without requiring\n * a signature. Can also check if an order is valid using `callStatic`\n * @param orders list of order structs\n * @param accountAddress optional account address to approve orders.\n * @returns the set of transaction methods that can be used\n */\n public validate(\n orders: Order[],\n accountAddress?: string\n ): TransactionMethods<ContractMethodReturnType<SeaportContract, \"validate\">> {\n const signer = this.provider.getSigner(accountAddress);\n\n return getTransactionMethods(this.contract.connect(signer), \"validate\", [\n orders,\n ]);\n }\n\n /**\n * Returns the order status given an order hash\n * @param orderHash the hash of the order\n * @returns an order status struct\n */\n public getOrderStatus(orderHash: string): Promise<OrderStatus> {\n return this.contract.getOrderStatus(orderHash);\n }\n\n /**\n * Gets the counter of a given offerer\n * @param offerer the offerer to get the counter of\n * @returns counter as a number\n */\n public getCounter(offerer: string): Promise<number> {\n return this.contract\n .getCounter(offerer)\n .then((counter) => counter.toNumber());\n }\n\n /**\n * Calculates the order hash of order components so we can forgo executing a request to the contract\n * This saves us RPC calls and latency.\n */\n public getOrderHash = (orderComponents: OrderComponents): string => {\n const offerItemTypeString =\n \"OfferItem(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount)\";\n const considerationItemTypeString =\n \"ConsiderationItem(uint8 itemType,address token,uint256 identifierOrCriteria,uint256 startAmount,uint256 endAmount,address recipient)\";\n const orderComponentsPartialTypeString =\n \"OrderComponents(address offerer,address zone,OfferItem[] offer,ConsiderationItem[] consideration,uint8 orderType,uint256 startTime,uint256 endTime,bytes32 zoneHash,uint256 salt,bytes32 conduitKey,uint256 counter)\";\n const orderTypeString = `${orderComponentsPartialTypeString}${considerationItemTypeString}${offerItemTypeString}`;\n\n const offerItemTypeHash = ethers.utils.keccak256(\n ethers.utils.toUtf8Bytes(offerItemTypeString)\n );\n const considerationItemTypeHash = ethers.utils.keccak256(\n ethers.utils.toUtf8Bytes(considerationItemTypeString)\n );\n const orderTypeHash = ethers.utils.keccak256(\n ethers.utils.toUtf8Bytes(orderTypeString)\n );\n\n const offerHash = ethers.utils.keccak256(\n \"0x\" +\n orderComponents.offer\n .map((offerItem) => {\n return ethers.utils\n .keccak256(\n \"0x\" +\n [\n offerItemTypeHash.slice(2),\n offerItem.itemType.toString().padStart(64, \"0\"),\n offerItem.token.slice(2).padStart(64, \"0\"),\n ethers.BigNumber.from(offerItem.identifierOrCriteria)\n .toHexString()\n .slice(2)\n .padStart(64, \"0\"),\n ethers.BigNumber.from(offerItem.startAmount)\n .toHexString()\n .slice(2)\n .padStart(64, \"0\"),\n ethers.BigNumber.from(offerItem.endAmount)\n .toHexString()\n .slice(2)\n .padStart(64, \"0\"),\n ].join(\"\")\n )\n .slice(2);\n })\n .join(\"\")\n );\n\n const considerationHash = ethers.utils.keccak256(\n \"0x\" +\n orderComponents.consideration\n .map((considerationItem) => {\n return ethers.utils\n .keccak256(\n \"0x\" +\n [\n considerationItemTypeHash.slice(2),\n considerationItem.itemType.toString().padStart(64, \"0\"),\n considerationItem.token.slice(2).padStart(64, \"0\"),\n ethers.BigNumber.from(\n considerationItem.identifierOrCriteria\n )\n .toHexString()\n .slice(2)\n .padStart(64, \"0\"),\n ethers.BigNumber.from(considerationItem.startAmount)\n .toHexString()\n .slice(2)\n .padStart(64, \"0\"),\n ethers.BigNumber.from(considerationItem.endAmount)\n .toHexString()\n .slice(2)\n .padStart(64, \"0\"),\n considerationItem.recipient.slice(2).padStart(64, \"0\"),\n ].join(\"\")\n )\n .slice(2);\n })\n .join(\"\")\n );\n\n const derivedOrderHash = ethers.utils.keccak256(\n \"0x\" +\n [\n orderTypeHash.slice(2),\n orderComponents.offerer.slice(2).padStart(64, \"0\"),\n orderComponents.zone.slice(2).padStart(64, \"0\"),\n offerHash.slice(2),\n considerationHash.slice(2),\n orderComponents.orderType.toString().padStart(64, \"0\"),\n ethers.BigNumber.from(orderComponents.startTime)\n .toHexString()\n .slice(2)\n .padStart(64, \"0\"),\n ethers.BigNumber.from(orderComponents.endTime)\n .toHexString()\n .slice(2)\n .padStart(64, \"0\"),\n orderComponents.zoneHash.slice(2),\n orderComponents.salt.slice(2).padStart(64, \"0\"),\n orderComponents.conduitKey.slice(2).padStart(64, \"0\"),\n ethers.BigNumber.from(orderComponents.counter)\n .toHexString()\n .slice(2)\n .padStart(64, \"0\"),\n ].join(\"\")\n );\n\n return derivedOrderHash;\n };\n\n /**\n * Fulfills an order through either the basic method or the standard method\n * Units to fill are denominated by the max possible size of the order, which is the greatest common denominator (GCD).\n * We expose a helper to get this: getMaximumSizeForOrder\n * i.e. If the maximum size of an order is 4, supplying 2 as the units to fulfill will fill half of the order: ;\n * @param input\n * @param input.order The standard order struct\n * @param input.unitsToFill the number of units to fill for the given order. Only used if you wish to partially fill an order\n * @param input.offerCriteria an array of criteria with length equal to the number of offer criteria items\n * @param input.considerationCriteria an array of criteria with length equal to the number of consideration criteria items\n * @param input.tips an array of optional condensed consideration items to be added onto a fulfillment\n * @param input.extraData extra data supplied to the order\n * @param input.accountAddress optional address from which to fulfill the order from\n * @param input.conduitKey the conduitKey to source approvals from\n * @param input.recipientAddress optional recipient to forward the offer to as opposed to the fulfiller.\n * Defaults to the zero address which means the offer goes to the fulfiller\n * @returns a use case containing the set of approval actions and fulfillment action\n */\n public async fulfillOrder({\n order,\n unitsToFill,\n offerCriteria = [],\n considerationCriteria = [],\n tips = [],\n extraData = \"0x\",\n accountAddress,\n conduitKey = this.defaultConduitKey,\n recipientAddress = ethers.constants.AddressZero,\n }: {\n order: OrderWithCounter;\n unitsToFill?: BigNumberish;\n offerCriteria?: InputCriteria[];\n considerationCriteria?: InputCriteria[];\n tips?: TipInputItem[];\n extraData?: string;\n accountAddress?: string;\n conduitKey?: string;\n recipientAddress?: string;\n }): Promise<\n OrderUseCase<\n ExchangeAction<\n ContractMethodReturnType<\n SeaportContract,\n \"fulfillBasicOrder\" | \"fulfillOrder\" | \"fulfillAdvancedOrder\"\n >\n >\n >\n > {\n const { parameters: orderParameters } = order;\n const { offerer, offer, consideration } = orderParameters;\n\n const fulfiller = await this.provider.getSigner(accountAddress);\n\n const fulfillerAddress = await fulfiller.getAddress();\n\n const offererOperator =\n this.config.conduitKeyToConduit[orderParameters.conduitKey];\n\n const fulfillerOperator = this.config.conduitKeyToConduit[conduitKey];\n\n const [\n offererBalancesAndApprovals,\n fulfillerBalancesAndApprovals,\n currentBlock,\n orderStatus,\n ] = await Promise.all([\n getBalancesAndApprovals({\n owner: offerer,\n items: offer,\n criterias: offerCriteria,\n multicallProvider: this.multicallProvider,\n operator: offererOperator,\n }),\n // Get fulfiller balances and approvals of all items in the set, as offer items\n // may be received by the fulfiller for standard fulfills\n getBalancesAndApprovals({\n owner: fulfillerAddress,\n items: [...offer, ...consideration],\n criterias: [...offerCriteria, ...considerationCriteria],\n multicallProvider: this.multicallProvider,\n operator: fulfillerOperator,\n }),\n this.multicallProvider.getBlock(\"latest\"),\n this.getOrderStatus(this.getOrderHash(orderParameters)),\n ]);\n\n const currentBlockTimestamp = currentBlock.timestamp;\n\n const { totalFilled, totalSize } = orderStatus;\n\n const sanitizedOrder = validateAndSanitizeFromOrderStatus(\n order,\n orderStatus\n );\n\n const timeBasedItemParams = {\n startTime: sanitizedOrder.parameters.startTime,\n endTime: sanitizedOrder.parameters.endTime,\n currentBlockTimestamp,\n ascendingAmountTimestampBuffer:\n this.config.ascendingAmountFulfillmentBuffer,\n };\n\n const tipConsiderationItems = tips.map((tip) => ({\n ...mapInputItemToOfferItem(tip),\n recipient: tip.recipient,\n }));\n\n const isRecipientSelf = recipientAddress === ethers.constants.AddressZero;\n\n // We use basic fulfills as they are more optimal for simple and \"hot\" use cases\n // We cannot use basic fulfill if user is trying to partially fill though.\n if (\n !unitsToFill &&\n isRecipientSelf &&\n shouldUseBasicFulfill(sanitizedOrder.parameters, totalFilled)\n ) {\n // TODO: Use fulfiller proxy if there are approvals needed directly, but none needed for proxy\n return fulfillBasicOrder({\n order: sanitizedOrder,\n seaportContract: this.contract,\n offererBalancesAndApprovals,\n fulfillerBalancesAndApprovals,\n timeBasedItemParams,\n conduitKey,\n offererOperator,\n fulfillerOperator,\n signer: fulfiller,\n tips: tipConsiderationItems,\n });\n }\n\n // Else, we fallback to the standard fulfill order\n return fulfillStandardOrder({\n order: sanitizedOrder,\n unitsToFill,\n totalFilled,\n totalSize: totalSize.eq(0)\n ? getMaximumSizeForOrder(sanitizedOrder)\n : totalSize,\n offerCriteria,\n considerationCriteria,\n tips: tipConsiderationItems,\n extraData,\n seaportContract: this.contract,\n offererBalancesAndApprovals,\n fulfillerBalancesAndApprovals,\n timeBasedItemParams,\n conduitKey,\n signer: fulfiller,\n offererOperator,\n fulfillerOperator,\n recipientAddress,\n });\n }\n\n /**\n * Fulfills an order through best-effort fashion. Orders that fail will not revert the whole transaction\n * unless there's an issue with approvals or balance checks\n * @param input\n * @param input.fulfillOrderDetails list of helper order details\n * @param input.accountAddress the account to fulfill orders on\n * @param input.conduitKey the key from which to source approvals from\n * @param input.recipientAddress optional recipient to forward the offer to as opposed to the fulfiller.\n * Defaults to the zero address which means the offer goes to the fulfiller\n * @returns a use case containing the set of approval actions and fulfillment action\n */\n public async fulfillOrders({\n fulfillOrderDetails,\n accountAddress,\n conduitKey = this.defaultConduitKey,\n recipientAddress = ethers.constants.AddressZero,\n }: {\n fulfillOrderDetails: {\n order: OrderWithCounter;\n unitsToFill?: BigNumberish;\n offerCriteria?: InputCriteria[];\n considerationCriteria?: InputCriteria[];\n tips?: TipInputItem[];\n extraData?: string;\n }[];\n accountAddress?: string;\n conduitKey?: string;\n recipientAddress?: string;\n }) {\n const fulfiller = await this.provider.getSigner(accountAddress);\n\n const fulfillerAddress = await fulfiller.getAddress();\n\n const allOffererOperators = fulfillOrderDetails.map(\n ({ order }) =>\n this.config.conduitKeyToConduit[order.parameters.conduitKey]\n );\n\n const fulfillerOperator = this.config.conduitKeyToConduit[conduitKey];\n\n const allOfferItems = fulfillOrderDetails.flatMap(\n ({ order }) => order.parameters.offer\n );\n\n const allConsiderationItems = fulfillOrderDetails.flatMap(\n ({ order }) => order.parameters.consideration\n );\n const allOfferCriteria = fulfillOrderDetails.flatMap(\n ({ offerCriteria = [] }) => offerCriteria\n );\n const allConsiderationCriteria = fulfillOrderDetails.flatMap(\n ({ considerationCriteria = [] }) => considerationCriteria\n );\n\n const [\n offerersBalancesAndApprovals,\n fulfillerBalancesAndApprovals,\n currentBlock,\n orderStatuses,\n ] = await Promise.all([\n Promise.all(\n fulfillOrderDetails.map(({ order, offerCriteria = [] }, i) =>\n getBalancesAndApprovals({\n owner: order.parameters.offerer,\n items: order.parameters.offer,\n criterias: offerCriteria,\n operator: allOffererOperators[i],\n multicallProvider: this.multicallProvider,\n })\n )\n ),\n // Get fulfiller balances and approvals of all items in the set, as offer items\n // may be received by the fulfiller for standard fulfills\n getBalancesAndApprovals({\n owner: fulfillerAddress,\n items: [...allOfferItems, ...allConsiderationItems],\n criterias: [...allOfferCriteria, ...allConsiderationCriteria],\n operator: fulfillerOperator,\n multicallProvider: this.multicallProvider,\n }),\n this.multicallProvider.getBlock(\"latest\"),\n Promise.all(\n fulfillOrderDetails.map(({ order }) =>\n this.getOrderStatus(this.getOrderHash(order.parameters))\n )\n ),\n ]);\n\n const ordersMetadata: FulfillOrdersMetadata = fulfillOrderDetails.map(\n (orderDetails, index) => ({\n order: orderDetails.order,\n unitsToFill: orderDetails.unitsToFill,\n orderStatus: orderStatuses[index],\n offerCriteria: orderDetails.offerCriteria ?? [],\n considerationCriteria: orderDetails.considerationCriteria ?? [],\n tips:\n orderDetails.tips?.map((tip) => ({\n ...mapInputItemToOfferItem(tip),\n recipient: tip.recipient,\n })) ?? [],\n extraData: orderDetails.extraData ?? \"0x\",\n offererBalancesAndApprovals: offerersBalancesAndApprovals[index],\n offererOperator: allOffererOperators[index],\n })\n );\n\n return fulfillAvailableOrders({\n ordersMetadata,\n seaportContract: this.contract,\n fulfillerBalancesAndApprovals,\n currentBlockTimestamp: currentBlock.timestamp,\n ascendingAmountTimestampBuffer:\n this.config.ascendingAmountFulfillmentBuffer,\n fulfillerOperator,\n signer: fulfiller,\n conduitKey,\n recipientAddress,\n });\n }\n\n /**\n * NOTE: Largely incomplete. Does NOT do any balance or approval checks.\n * Just exposes the bare bones matchOrders where clients will have to supply\n * their own overrides as needed.\n * @param input\n * @param input.orders the list of orders to match\n * @param input.fulfillments the list of fulfillments to match offer and considerations\n * @param input.overrides any overrides the client wants, will need to pass in value for matching orders with ETH.\n * @param input.accountAddress Optional address for which to match the order with\n * @returns set of transaction methods for matching orders\n */\n public matchOrders({\n orders,\n fulfillments,\n overrides,\n accountAddress,\n }: {\n orders: (OrderWithCounter | Order)[];\n fulfillments: MatchOrdersFulfillment[];\n overrides?: PayableOverrides;\n accountAddress?: string;\n }): TransactionMethods<\n ContractMethodReturnType<SeaportContract, \"matchOrders\">\n > {\n const signer = this.provider.getSigner(accountAddress);\n\n return getTransactionMethods(this.contract.connect(signer), \"matchOrders\", [\n orders,\n fulfillments,\n overrides,\n ]);\n }\n}\n"],"names":["OrderType","ItemType","Side","BasicOrderRouteType","SeaportABI","inputs","internalType","name","type","stateMutability","anonymous","indexed","components","outputs","EIP_712_ORDER_TYPE","OrderComponents","OfferItem","ConsiderationItem","MAX_INT","BigNumber","from","NO_CONDUIT","KNOWN_CONDUIT_KEYS_TO_CONDUIT","ERC20ABI","ERC721ABI","gcd","a","b","bnA","bnB","eq","mod","isCurrencyItem","itemType","NATIVE","ERC20","includes","isErc721Item","ERC721","ERC721_WITH_CRITERIA","isErc1155Item","ERC1155","ERC1155_WITH_CRITERIA","isCriteriaItem","getSummedTokenAndIdentifierAmounts","items","timeBasedItemParams","itemToCriteria","getItemToCriteriaMap","_ref4","criterias","tokenAndIdentifierToSummedAmount","reduce","map","item","_itemToCriteria$get$i","_itemToCriteria$get","_map$item$token$ident","_map$item$token","_extends2","_extends3","identifierOrCriteria","get","identifier","token","_extends","add","_ref3","startAmount","endAmount","startAmountBn","gt","endAmountBn","isConsiderationItem","currentBlockTimestamp","ascendingAmountTimestampBuffer","startTime","endTime","duration","sub","isAscending","adjustedBlockTimestamp","lt","elapsed","remaining","mul","div","getPresentItemAmount","getMaximumSizeForOrder","_ref5","parameters","elements","result","i","length","findGcd","offer","_ref5$parameters","consideration","flatMap","_ref6","set","criteriasCopy","shift","Map","pact","state","value","s","_settle","bind","v","then","_Pact","prototype","onRejected","this","callback","onFulfilled","e","_this","executeAllActions","actions","_temp4","finalAction","createOrder","transactionMethods","transact","_i","action","_temp","Promise","resolve","_temp5","reject","getTransactionMethods","contract","method","args","obj","validKeys","lastArg","undefined","Object","keys","every","key","initialOverrides","pop","callStatic","overrides","_contract$callStatic","mergedOverrides","estimateGas","_contract$estimateGas","apply","concat","buildTransaction","_contract$populateTra","populateTransaction","getApprovalActions","insufficientApprovals","signer","all","filter","approval","index","_ref","operator","connect","_contract2","Contract","_ItemType$ERC","_ItemType$ERC2","_ItemType$ERC3","_offerAndConsideratio","ERC1155ABI","findBalanceAndApproval","balancesAndApprovals","find","checkedToken","checkedIdentifierOrCriteria","toLowerCase","balanceAndApproval","Error","getBalancesAndApprovals","owner","_ref2","multicallProvider","approvedAmountPromise","isErc20Item","isApprovedForAll","_contract","allowance","approvedItemAmount","_temp2","balanceOf","criteria","ownerOf","Number","getBalance","_balanceOf","_approvedAmountPromis","_item$token2","balance","approvedAmount","getInsufficientBalanceAndApprovalAmounts","tokenAndIdentifierAndAmountNeeded","entries","tokenAndIdentifierAmounts","identifierToAmount","flat","filterBalancesOrApprovals","filterKey","amountNeeded","_ref7","amount","requiredAmount","amountHave","_ref8","insufficientBalance","requiredApprovedAmount","insufficientBalances","validateOfferBalancesAndApprovals","_ref9","_ref9$throwOnInsuffic","throwOnInsufficientBalances","throwOnInsufficientApprovals","_getInsufficientBalan","validateStandardFulfillBalancesAndApprovals","_ref11","offerCriteria","considerationCriteria","fulfillerBalancesAndApprovals","fulfillerOperator","offererBalancesAndApprovals","offererOperator","fulfillerBalancesAndApprovalsAfterReceivingOfferedItems","addToExistingBalances","_getInsufficientBalan3","_ref12","summedItemAmounts","balancesAndApprovalsAfterReceivingItems","forEach","identifierOrCriteriaToAmount","_ref14","balanceAndApprovalIndex","indexOf","generateCriteriaResolvers","orders","_ref$offerCriterias","offerCriterias","_ref$considerationCri","considerationCriterias","offerCriteriaItems","order","orderIndex","side","OFFER","considerationCriteriaItems","CONSIDERATION","mapCriteriaItemsToResolver","criteriaItems","inputCriteria","criteriaProof","proof","hashIdentifier","keccak256","Buffer","toHexString","slice","padStart","MerkleTree","identifiers","tree","MerkleTreeJS","sort","_proto","getProof","getHexProof","getRoot","toString","getHexRoot","multiplyBasisPoints","basisPoints","mapInputItemToOfferItem","_item$token","_item$endAmount3","_item$amount","_item$endAmount","_item$endAmount2","ethers","constants","AddressZero","areAllCurrenciesSame","currencies","totalEndAmount","mapOrderAmountsFromFilledStatus","totalFilled","totalSize","signature","mapOrderAmountsFromUnitsToFill","_ref10","unitsToFillBn","unitsToFill","lte","maxUnits","remainingOrderPercentageToBeFilled","unitsToFillBasisPoints","offerAndConsiderationFulfillmentMapping","ERC721_TO_ERC20","ERC1155_TO_ERC20","ETH_TO_ERC721","ERC20_TO_ERC721","ETH_TO_ERC1155","ERC20_TO_ERC1155","validateAndSanitizeFromOrderStatus","orderStatus","isValidated","isCancelled","getAdvancedOrderNumeratorDenominator","unitsGcd","numerator","denominator","provider","_overrides$contractAd","_overrides$defaultCon","ascendingAmountFulfillmentBuffer","_ref$ascendingAmountF","balanceAndApprovalChecksOnOrderCreation","_ref$balanceAndApprov","conduitKeyToConduit","config","defaultConduitKey","getOrderHash","orderComponents","offerItemTypeHash","utils","toUtf8Bytes","orderTypeHash","orderComponentsPartialTypeString","offerHash","offerItem","join","considerationHash","considerationItem","considerationItemTypeHash","recipient","offerer","zone","orderType","zoneHash","salt","conduitKey","counter","multicallProviders","MulticallProvider","contractAddress","address","_getOrderTypeFromOrderOptions","restrictedByZone","allowPartialFills","PARTIAL_RESTRICTED","PARTIAL_OPEN","FULL_RESTRICTED","FULL_OPEN","accountAddress","_ref3$conduitKey","Math","floor","Date","now","_ref3$endTime","fees","_ref3$salt","randomBytes","_this2","getSigner","getAddress","offerItems","_consideration$recipi","considerationItems","totalItemsAmount","getCounter","_fees$map","resolvedCounter","approvalActions","createOrderAction","getMessageToSign","_getMessageToSign","orderParameters","signOrder","_executeAllActions","deductFees","accBasisPoints","fee","totalBasisPoints","feeToConsiderationItem","baseAmount","baseEndAmount","totalCurrencyAmount","formatBytes32String","considerationItemsWithFees","totalOriginalConsiderationItems","checkBalancesAndApprovals","_getDomainData","_this4","getNetwork","version","chainId","verifyingContract","domainData","JSON","stringify","_TypedDataEncoder","getPayload","_signTypedData","splitSignature","compact","cancelOrders","bulkCancelOrders","validate","getOrderStatus","orderHash","toNumber","fulfillOrder","_ref6$offerCriteria","_ref6$considerationCr","_ref6$tips","tips","extraData","_ref6$extraData","_ref6$conduitKey","_this9","_ref6$recipientAddres","recipientAddress","_this10","fulfiller","fulfillerAddress","getBlock","timestamp","sanitizedOrder","tipConsiderationItems","tip","allItems","nftsWithCriteria","nfts","some","firstConsideration","restConsideration","nativeCurrencyIsZeroAddress","erc721sAreSingleAmount","currencyIdentifiersAreZero","shouldUseBasicFulfill","fulfillBasicOrder","seaportContract","_ref10$tips","_ref10$conduitKey","_offerAndConsideratio2","_getSummedTokenAndIde","_order$parameters","forOfferer","considerationIncludingTips","forAdditionalRecipients","basicOrderRouteType","additionalRecipients","considerationWithoutOfferItemType","totalNativeAmount","validateBasicFulfillBalancesAndApprovals","basicOrderParameters","offererConduitKey","basicOrderType","offerToken","offerIdentifier","offerAmount","considerationToken","considerationIdentifier","considerationAmount","totalOriginalAdditionalRecipients","fulfillerConduitKey","exchangeAction","payableOverrides","_ref12$unitsToFill","_ref12$tips","_getSummedTokenAndIde2","_orderWithAdjustedFil","hasCriteriaItems","isGift","useAdvanced","Boolean","orderAccountingForTips","_getAdvancedOrderNume","fulfillStandardOrder","fulfillOrders","fulfillOrderDetails","_ref8$conduitKey","_this11","_ref8$recipientAddres","_this12","allOffererOperators","allOfferItems","allConsiderationItems","allOfferCriteria","_ref12$offerCriteria","allConsiderationCriteria","_ref13","_ref13$considerationC","_ref14$offerCriteria","_ref16","currentBlock","orderStatuses","fulfillAvailableOrders","ordersMetadata","_ref15","sanitizedOrdersMetadata","orderMetadata","ordersMetadataWithAdjustedFills","totalInsufficientApprovals","_getSummedTokenAndIde3","_getSummedTokenAndIde4","_ref17","_ref18","insufficientApproval","push","_ref19","_getAdvancedOrderNume2","_ref19$unitsToFill","generateFulfillOrdersFulfillments","sourceOrDestination","_ref23$operator","_ref23","offerAggregatedFulfillments","considerationAggregatedFulfillments","_ref24","itemIndex","aggregateKey","hashAggregateKey","_offerAggregatedFulfi","_ref25","_itemToCriteria$get$i2","_itemToCriteria$get2","_considerationAggrega","offerFulfillments","values","considerationFulfillments","_generateFulfillOrder","advancedOrdersWithTips","orderDetails","_orderDetails$offerCr","_orderDetails$conside","_orderDetails$tips$ma","_orderDetails$tips","_orderDetails$extraDa","offerersBalancesAndApprovals","matchOrders","fulfillments","Seaport"],"mappings":"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AER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVD,KAAM,uBACNC,KAAM,SAER,CACEH,OAAQ,GACRE,KAAM,iCACNC,KAAM,SAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,SACNC,KAAM,YAGVD,KAAM,8BACNC,KAAM,SAER,CACEH,OAAQ,GACRE,KAAM,kCACNC,KAAM,SAER,CACEH,OAAQ,GACRE,KAAM,0BACNC,KAAM,SAER,CACEE,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,UACNC,KAAM,YAGVD,KAAM,qBACNC,KAAM,SAER,CACEE,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,OACNC,KAAM,YAGVD,KAAM,iBACNC,KAAM,SAER,CACEE,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,SACNC,KAAM,YAGVG,SAAS,EACTL,aAAc,qBACdC,KAAM,QACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,SACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVG,SAAS,EACTL,aAAc,wBACdC,KAAM,gBACNC,KAAM,YAGVD,KAAM,iBACNC,KAAM,SAER,CACEE,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,OACNC,KAAM,YAGVD,KAAM,iBACNC,KAAM,SAER,CACEH,OAAQ,CACN,CACEO,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,QACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,6BACdC,KAAM,gBACNC,KAAM,WAER,CACEF,aAAc,iBACdC,KAAM,YACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,YAGVF,aAAc,2BACdC,KAAM,SACNC,KAAM,YAGVD,KAAM,SACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,YACNC,KAAM,SAGVC,gBAAiB,aACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEO,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,QACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,6BACdC,KAAM,gBACNC,KAAM,WAER,CACEF,aAAc,iBACdC,KAAM,YACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,kCACNC,KAAM,YAGVF,aAAc,yBACdC,KAAM,aACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,QACdC,KAAM,YACNC,KAAM,SAER,CACEF,aAAc,QACdC,KAAM,YACNC,KAAM,UAGVF,aAAc,uBACdC,KAAM,gBACNC,KAAM,SAER,CACEI,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,YACdC,KAAM,OACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,YACdC,KAAM,gBACNC,KAAM,cAGVF,aAAc,4BACdC,KAAM,oBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,sBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVD,KAAM,uBACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,YACNC,KAAM,SAGVC,gBAAiB,UACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEO,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,QACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,6BACdC,KAAM,gBACNC,KAAM,WAER,CACEF,aAAc,iBACdC,KAAM,YACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,kCACNC,KAAM,YAGVF,aAAc,yBACdC,KAAM,aACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,QACdC,KAAM,YACNC,KAAM,SAER,CACEF,aAAc,QACdC,KAAM,YACNC,KAAM,UAGVF,aAAc,yBACdC,KAAM,iBACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,YACdC,KAAM,OACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,YACdC,KAAM,gBACNC,KAAM,cAGVF,aAAc,4BACdC,KAAM,oBACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,kCACdC,KAAM,oBACNC,KAAM,aAER,CACEI,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,kCACdC,KAAM,4BACNC,KAAM,aAER,CACEF,aAAc,UACdC,KAAM,sBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,mBACNC,KAAM,YAGVD,KAAM,iCACNM,QAAS,CACP,CACEP,aAAc,SACdC,KAAM,kBACNC,KAAM,UAER,CACEI,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,SACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,sBACdC,KAAM,OACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,aACNC,KAAM,YAGVC,gBAAiB,UACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEO,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,QACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,6BACdC,KAAM,gBACNC,KAAM,WAER,CACEF,aAAc,iBACdC,KAAM,YACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,kCACNC,KAAM,YAGVF,aAAc,yBACdC,KAAM,aACNC,KAAM,SAER,CACEF,aAAc,QACdC,KAAM,YACNC,KAAM,UAGVF,aAAc,iBACdC,KAAM,SACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,kCACdC,KAAM,oBACNC,KAAM,aAER,CACEI,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,kCACdC,KAAM,4BACNC,KAAM,aAER,CACEF,aAAc,UACdC,KAAM,sBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,mBACNC,KAAM,YAGVD,KAAM,yBACNM,QAAS,CACP,CACEP,aAAc,SACdC,KAAM,kBACNC,KAAM,UAER,CACEI,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,SACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,sBACdC,KAAM,OACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,aACNC,KAAM,YAGVC,gBAAiB,UACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEO,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,qBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,0BACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,sBACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,kBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,sBACdC,KAAM,iBACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,oBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,sBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,oCACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,SACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,+BACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,QACdC,KAAM,YACNC,KAAM,UAGVF,aAAc,8BACdC,KAAM,aACNC,KAAM,UAGVD,KAAM,oBACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,YACNC,KAAM,SAGVC,gBAAiB,UACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEO,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,QACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,6BACdC,KAAM,gBACNC,KAAM,WAER,CACEF,aAAc,iBACdC,KAAM,YACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,kCACNC,KAAM,YAGVF,aAAc,yBACdC,KAAM,aACNC,KAAM,SAER,CACEF,aAAc,QACdC,KAAM,YACNC,KAAM,UAGVF,aAAc,eACdC,KAAM,QACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,sBACNC,KAAM,YAGVD,KAAM,eACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,YACNC,KAAM,SAGVC,gBAAiB,UACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,UACNC,KAAM,YAGVD,KAAM,aACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,UACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEO,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,QACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,6BACdC,KAAM,gBACNC,KAAM,WAER,CACEF,aAAc,iBACdC,KAAM,YACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,YAGVF,aAAc,yBACdC,KAAM,QACNC,KAAM,UAGVD,KAAM,eACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVD,KAAM,iBACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,cACNC,KAAM,QAER,CACEF,aAAc,OACdC,KAAM,cACNC,KAAM,QAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,GACRE,KAAM,mBACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,aACNC,KAAM,YAGVC,gBAAiB,aACjBD,KAAM,YAER,CACEH,OAAQ,GACRE,KAAM,cACNM,QAAS,CACP,CACEP,aAAc,SACdC,KAAM,UACNC,KAAM,UAER,CACEF,aAAc,UACdC,KAAM,kBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,oBACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEO,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,QACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,6BACdC,KAAM,gBACNC,KAAM,WAER,CACEF,aAAc,iBACdC,KAAM,YACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,kCACNC,KAAM,YAGVF,aAAc,yBACdC,KAAM,aACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,QACdC,KAAM,YACNC,KAAM,SAER,CACEF,aAAc,QACdC,KAAM,YACNC,KAAM,UAGVF,aAAc,yBACdC,KAAM,iBACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,YACdC,KAAM,OACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,YACdC,KAAM,gBACNC,KAAM,cAGVF,aAAc,4BACdC,KAAM,oBACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,gCACdC,KAAM,kBACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,gCACdC,KAAM,0BACNC,KAAM,YAGVF,aAAc,uBACdC,KAAM,eACNC,KAAM,YAGVD,KAAM,sBACNM,QAAS,CACP,CACED,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,SACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,sBACdC,KAAM,OACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,aACNC,KAAM,YAGVC,gBAAiB,UACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEO,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,QACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,6BACdC,KAAM,gBACNC,KAAM,WAER,CACEF,aAAc,iBACdC,KAAM,YACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,kCACNC,KAAM,YAGVF,aAAc,yBACdC,KAAM,aACNC,KAAM,SAER,CACEF,aAAc,QACdC,KAAM,YACNC,KAAM,UAGVF,aAAc,iBACdC,KAAM,SACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,gCACdC,KAAM,kBACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,gCACdC,KAAM,0BACNC,KAAM,YAGVF,aAAc,uBACdC,KAAM,eACNC,KAAM,YAGVD,KAAM,cACNM,QAAS,CACP,CACED,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,SACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,sBACdC,KAAM,OACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,aACNC,KAAM,YAGVC,gBAAiB,UACjBD,KAAM,YAER,CACEH,OAAQ,GACRE,KAAM,OACNM,QAAS,CACP,CACEP,aAAc,SACdC,KAAM,eACNC,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEO,WAAY,CACV,CACEA,WAAY,CACV,CACEN,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,qBACdC,KAAM,QACNC,KAAM,WAER,CACEI,WAAY,CACV,CACEN,aAAc,gBACdC,KAAM,WACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,uBACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,cACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,kBACdC,KAAM,YACNC,KAAM,YAGVF,aAAc,6BACdC,KAAM,gBACNC,KAAM,WAER,CACEF,aAAc,iBACdC,KAAM,YACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,YACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,aACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,kCACNC,KAAM,YAGVF,aAAc,yBACdC,KAAM,aACNC,KAAM,SAER,CACEF,aAAc,QACdC,KAAM,YACNC,KAAM,UAGVF,aAAc,iBACdC,KAAM,SACNC,KAAM,YAGVD,KAAM,WACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,YACNC,KAAM,SAGVC,gBAAiB,aACjBD,KAAM,aC7gFGM,EAAqB,CAChCC,gBAAiB,CACf,CAAER,KAAM,UAAWC,KAAM,WACzB,CAAED,KAAM,OAAQC,KAAM,WACtB,CAAED,KAAM,QAASC,KAAM,eACvB,CAAED,KAAM,gBAAiBC,KAAM,uBAC/B,CAAED,KAAM,YAAaC,KAAM,SAC3B,CAAED,KAAM,YAAaC,KAAM,WAC3B,CAAED,KAAM,UAAWC,KAAM,WACzB,CAAED,KAAM,WAAYC,KAAM,WAC1B,CAAED,KAAM,OAAQC,KAAM,WACtB,CAAED,KAAM,aAAcC,KAAM,WAC5B,CAAED,KAAM,UAAWC,KAAM,YAE3BQ,UAAW,CACT,CAAET,KAAM,WAAYC,KAAM,SAC1B,CAAED,KAAM,QAASC,KAAM,WACvB,CAAED,KAAM,uBAAwBC,KAAM,WACtC,CAAED,KAAM,cAAeC,KAAM,WAC7B,CAAED,KAAM,YAAaC,KAAM,YAE7BS,kBAAmB,CACjB,CAAEV,KAAM,WAAYC,KAAM,SAC1B,CAAED,KAAM,QAASC,KAAM,WACvB,CAAED,KAAM,uBAAwBC,KAAM,WACtC,CAAED,KAAM,cAAeC,KAAM,WAC7B,CAAED,KAAM,YAAaC,KAAM,WAC3B,CAAED,KAAM,YAAaC,KAAM,cAI/B,SAAYR,GACVA,EAAAA,EAAA,UAAA,GAAA,YACAA,EAAAA,EAAA,aAAA,GAAA,eACAA,EAAAA,EAAA,gBAAA,GAAA,kBACAA,EAAAA,EAAA,mBAAA,GAAA,qBAJF,CAAYA,IAAAA,EAKX,KAED,SAAYC,GACVA,EAAAA,EAAA,OAAA,GAAA,SACAA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,OAAA,GAAA,SACAA,EAAAA,EAAA,QAAA,GAAA,UACAA,EAAAA,EAAA,qBAAA,GAAA,uBACAA,EAAAA,EAAA,sBAAA,GAAA,wBANF,CAAYA,IAAAA,EAOX,KAED,SAAYC,GACVA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,cAAA,GAAA,gBAFF,CAAYA,IAAAA,EAGX,KAQD,SAAYC,GACVA,EAAAA,EAAA,cAAA,GAAA,gBACAA,EAAAA,EAAA,eAAA,GAAA,iBACAA,EAAAA,EAAA,gBAAA,GAAA,kBACAA,EAAAA,EAAA,iBAAA,GAAA,mBACAA,EAAAA,EAAA,gBAAA,GAAA,kBACAA,EAAAA,EAAA,iBAAA,GAAA,mBANF,CAAYA,IAAAA,EAOX,KAEYe,IAAAA,EAAUC,EAASA,UAACC,KAC/B,sEAGqBC,EACrB,qEAGWC,EAAgC,GC/EvCC,EAAW,CACf,CACEb,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,SACNC,KAAM,YAGVD,KAAM,WACNC,KAAM,SAER,CACEE,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,SACNC,KAAM,YAGVD,KAAM,WACNC,KAAM,SAER,CACEH,OAAQ,GACRE,KAAM,mBACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,GACRE,KAAM,kBACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,GACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVD,KAAM,YACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,SACNC,KAAM,YAGVD,KAAM,UACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,GACNC,KAAM,SAGVC,gBAAiB,aACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVD,KAAM,YACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,GACRE,KAAM,WACNM,QAAS,CACP,CACEP,aAAc,QACdC,KAAM,GACNC,KAAM,UAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,GACRE,KAAM,OACNM,QAAS,CACP,CACEP,aAAc,SACdC,KAAM,GACNC,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVD,KAAM,SACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,QACdC,KAAM,IACNC,KAAM,SAER,CACEF,aAAc,UACdC,KAAM,IACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,IACNC,KAAM,YAGVD,KAAM,SACNM,QAAS,GACTJ,gBAAiB,aACjBD,KAAM,YAER,CACEH,OAAQ,GACRE,KAAM,SACNM,QAAS,CACP,CACEP,aAAc,SACdC,KAAM,GACNC,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,GACRE,KAAM,cACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,SACNC,KAAM,YAGVD,KAAM,WACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,GACNC,KAAM,SAGVC,gBAAiB,aACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,SACNC,KAAM,YAGVD,KAAM,eACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,GACNC,KAAM,SAGVC,gBAAiB,aACjBD,KAAM,aCrTJgB,EAAY,CAChB,CACEd,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,KACNC,KAAM,YAGVD,KAAM,WACNC,KAAM,SAER,CACEE,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,OACdC,KAAM,WACNC,KAAM,SAGVD,KAAM,iBACNC,KAAM,SAER,CACEE,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,KACNC,KAAM,YAGVD,KAAM,WACNC,KAAM,SAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,UACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,KACNC,KAAM,YAGVD,KAAM,UACNM,QAAS,GACTJ,gBAAiB,aACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVD,KAAM,YACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVD,KAAM,cACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,GACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVD,KAAM,mBACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,GACNC,KAAM,SAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,GACRE,KAAM,OACNM,QAAS,CACP,CACEP,aAAc,SACdC,KAAM,GACNC,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVD,KAAM,UACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,KACNC,KAAM,YAGVD,KAAM,mBACNM,QAAS,GACTJ,gBAAiB,aACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEF,aAAc,QACdC,KAAM,OACNC,KAAM,UAGVD,KAAM,mBACNM,QAAS,GACTJ,gBAAiB,aACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,OACdC,KAAM,WACNC,KAAM,SAGVD,KAAM,oBACNM,QAAS,GACTJ,gBAAiB,aACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,SACdC,KAAM,cACNC,KAAM,WAGVD,KAAM,oBACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,GACNC,KAAM,SAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,GACRE,KAAM,SACNM,QAAS,CACP,CACEP,aAAc,SACdC,KAAM,GACNC,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,KACNC,KAAM,YAGVD,KAAM,WACNM,QAAS,CACP,CACEP,aAAc,SACdC,KAAM,GACNC,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,KACNC,KAAM,YAGVD,KAAM,eACNM,QAAS,GACTJ,gBAAiB,aACjBD,KAAM,aCvUMiB,EAAG,SAANA,EAAOC,EAAiBC,GACnC,IAAMC,EAAMT,EAASA,UAACC,KAAKM,GACrBG,EAAMV,EAASA,UAACC,KAAKO,GAE3B,OAAIC,EAAIE,GAAG,GACFD,EAGCJ,EAACI,EAAIE,IAAIL,GAAIE,ICLEI,EAAG,SAAGC,GAAH,MAC5B,CAAChC,EAASiC,OAAQjC,EAASkC,OAAOC,WADHH,aAMN,SAACA,GAC1BA,OAAAA,IAAahC,EAASkC,OAEXE,EAAe,SAACJ,GAC3B,MAAA,CAAChC,EAASqC,OAAQrC,EAASsC,sBAAsBH,SAASH,IAElCO,EAAG,SAACP,GAAD,MAC3B,CAAChC,EAASwC,QAASxC,EAASyC,uBAAuBN,SAASH,IAEnCU,EAAG,SAACV,GAAD,MAC5B,CAAChC,EAASsC,qBAAsBtC,EAASyC,uBAAuBN,SAC9DH,IA6D2CW,EAAG,YAChDC,IAAAA,EAAAA,EAAAA,MAEAC,EAAAA,EAAAA,oBAMoBC,EAAGC,EAAqBH,EADzCI,EANHC,WASMC,EAAmCN,EAAMO,OAE7C,SAACC,EAAKC,GAAQ,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACYC,EAAA,OAAAN,EAAA,OAAAC,EACxBT,EAAee,IAAIR,SADK,EACxBE,EAA0BO,YADFR,EACgBD,EAAKO,qBAE/C,OACKR,EAAAA,GAAAA,UACFC,EAAKU,OAFRC,EAAA,GAGOZ,EAAIC,EAAKU,SAEXH,EAAAA,IAAAA,IAEC1C,OAFsBsC,EAAA,OAAAC,EACrBL,EAAIC,EAAKU,aADY,EACrBN,EAAkBG,IACnB1C,EAAAA,EAASA,UAACC,KAAK,IACf8C,IA7E0B,SAMpBC,GAAA,MALdC,EAAAA,YACAC,EAAAA,EAAAA,UACAvB,IAAAA,oBAIMwB,EAAgBnD,EAASA,UAACC,KAAKgD,KACjBjD,YAAUC,KAAKiD,GAEnC,IAAKvB,EACH,OAAoBwB,EAACC,GAAGC,GAAeF,EAAgBE,EAGzD,IACEC,EAKE3B,EALF2B,oBACAC,EAIE5B,EAJF4B,sBACAC,EAGE7B,EAHF6B,+BACAC,EAEE9B,EAFF8B,UACAC,EACE/B,EADF+B,QAGYC,EAAG3D,EAAAA,UAAUC,KAAKyD,GAASE,IAAIH,GAC5BI,EAAGR,EAAYD,GAAGH,GACPa,EAAG9D,EAASA,UAACC,KACvC4D,EACIN,EAAwBC,EACxBD,GAGN,GAAIO,EAAuBC,GAAGN,GAC5B,OACDN,EAED,IAAaa,GACXF,EAAuBV,GAAGM,GACtB1D,YAAUC,KAAKyD,GACfI,GACJF,IAAIH,GAEAQ,EAAYN,EAASC,IAAII,GAK/B,OAAoBb,EACjBe,IAAID,GACJlB,IAAIM,EAAYa,IAAIF,IACpBjB,IAAIO,EAAsBK,EAASC,IAAI,GAAK,GAC5CO,IAAIR,GA6BCS,CAAqB,CACnBnB,YAAad,EAAKc,YAClBC,UAAWf,EAAKe,UAChBvB,oBAAAA,cAKP,IAEH,OAAOK,GAUIqC,EAAyB,SAAAC,GACpCC,IAAAA,EAAAA,EAAAA,WASA,OD9HqB,SAACC,GAGtB,IAFA,IAAIC,EAASzE,EAAAA,UAAUC,KAAKuE,EAAS,IAE5BE,EAAI,EAAGA,EAAIF,EAASG,OAAQD,IAGnC,IAFAD,EAASnE,EAAIkE,EAASE,GAAID,IAEf9D,GAAG,GACZ,OACD8D,EAGH,SCmHOG,CAPcC,GAAAA,OADXC,EADID,MAAOE,EAAAA,eAIIC,QAAQ,YAAgC,MAAA,CAAhCC,EAAGhC,YAAaC,EAAAA,eAQlBrB,EAAG,SAClCH,EACAK,GAEA,MAA0BA,GAAAA,OAAAA,GAE1B,OAAYL,EAACO,OAAO,SAACC,EAAKC,GAIxB,OAHIX,EAAeW,EAAKrB,WACtBoB,EAAIgD,IAAI/C,EAAMgD,EAAcC,YAG7B,IAAIC,iBChFGC,EAAAC,EAAoBC,GAE1B,IAAAF,EAAAG,EAAA,mBAGD,CACD,IAAAD,EAAAC,kBAUSC,EAAAC,KAAQ,KAACL,EAAqBC,IAT/B,MAENA,EAAAC,EAAOC,GAITD,EAAAA,EAAUI,EAQR,GAAAJ,GAAAA,EAAeK,mBAGhBA,KAAAH,EAAAC,KAAA,KAAAL,EAAAC,GAAAG,EAAAC,KAAA,KAAAL,EAAA,qCAnFH,IAASQ,0BACP,SAAAA,YACAA,EAAAC,UAAUF,KAAK,WAAiBG,GAC9B,IAAAvB,EAAA,IAAAqB,EACDP,EAAAU,KAAAR,EACF,GAAAF,EAAA,KAEKW,EAAc,EAAdX,EAAsBY,EAAcH,EAE1C,GAAAE,EAAkB,CAChB,QACmB,EAAAA,WACrB,MAAAE,GAEFV,EAAyBjB,EAAA,EAAA2B,UAMX3B,cAgCZ,cA3BQ,SAAA4B,WAEMb,EAAAa,EAAAT,EACK,EAAjBS,EAAiBZ,IACVhB,EAAA,EAAA0B,EAAAA,EAAAX,GAAAA,GACGQ,IACKvB,EAAA,EAAAuB,EAAAR,IAGVE,EACFjB,EAAc,EAAAe,GAGnB,MAAAY,GAEIV,EAAOjB,EAAA,EAAA2B,wDA7CN,IAAuBE,EAAA,SAG5BC,GAH4B,IAY5B,IAAAC,EAAA,WAAA,IAAiBC,EAAGF,EAAQA,EAAQ5B,OAAS,GAR3C,OAUK8B,QAAAA,QAAqB,WAArBA,EAAYpH,KACToH,EAAYC,cACZD,EAAYE,mBAAmBC,aAX/BC,EAAG,irBAAIA,EAAGN,EAAQ5B,OAAS,GADnC,WAAA,OACuCkC,KAAI,WAC3C,IAAMC,EAASP,EAAQ7B,GACnBoC,EAAAA,WAAAA,GAAgB,aAAhBA,EAAOzH,KACHyH,OAAAA,QAAAA,QAAAA,EAAOH,mBAAmBC,YAHSf,KAAA,cAEvCiB,GAFuC,GAAAC,GAAAA,EAAAlB,KAAA,OAAAkB,EAAAlB,KAAA,gBAD3C,OAAAmB,QAAAC,QAAAC,GAAAA,EAAArB,KAAAqB,EAAArB,KAAAW,GAAAA,KAJ0B,MAAAJ,GAAA,OAAAY,QAAAG,OAAAf,KA6CjBgB,EAAwB,SAInCC,EACAC,EACAC,GAEA,MA/BAC,EAEMC,EA6BOC,EAAGH,EAAKA,EAAK5C,OAAS,GASnC,OAtCM8C,EAAY,CAChB,WACA,WACA,eACA,uBACA,QACA,OACA,aACA,aACA,kBACA,QACA,WACA,uBAIQE,KAlBVH,EAmCwBE,IAhBtBE,OAAOC,KAAKL,GAAKM,MAAM,SAACC,GAAD,OAAkBN,EAACxG,SAAS8G,QAiBnDC,EAAmBN,EACnBH,EAAKU,OAGA,CACLC,WAAY,SAACC,GACX,IAAAC,EAAqBC,EAAAvF,EAAA,GAAQkF,EAAqBG,GAElD,OAAOd,EAAAA,EAASa,YAAWZ,GAClBC,MAAAA,EAAAA,GAAAA,OAAAA,EAAMc,CAAAA,MAGjBC,YAAa,SAACH,GACZ,IAAAI,EAAqBF,EAAAvF,EAAA,GAAQkF,EAAqBG,GAElD,OAAOd,EAAAA,EAASiB,aAAYhB,GAArBkB,MAAAD,EAAA,GAAAE,OACElB,EADF,CACQc,MAGjBzB,SAAU,SAACuB,GACT,IAAME,EAAuBL,EAAAA,GAAAA,EAAqBG,GAElD,OAAOd,EAASC,GAATkB,MAAAnB,EAA8BE,EAAMc,OAAAA,CAAAA,MAE7CK,iBAAkB,SAACP,GACjB,IAAAQ,EAAqBN,EAAAvF,EAAA,GAAQkF,EAAqBG,GAElD,OAAOd,EAAAA,EAASuB,qBAAoBtB,GAC3BC,MAAAA,EAAAA,GAAAA,OAAAA,EAAMc,CAAAA,iBCjDLQ,EACdC,EACAC,GAEA,OAAc/B,QAACgC,IACbF,EACGG,OACC,SAACC,EAAUC,GAAX,WACYL,EAAsBnE,OAAS,GACzCmE,EAAsBK,EAAQ,GAAGtG,QAAUqG,EAASrG,QAEvDX,IANH,SAAAkH,GAAA,MAMgBvG,EAAAA,MAAOwG,EANvBD,EAMuBC,SAAUvI,EAAAA,EAAAA,SAAU4B,EAN3C0G,EAM2C1G,qBAA0B,IACjE,GAAIxB,EAAaJ,IAAaO,EAAcP,GAAW,CAErD,MAAiB,eAAa+B,EAAOxC,EAAW0I,GAEhD,OAAO/B,QAAAC,QAAA,CACL5H,KAAM,WACNwD,MAAAA,EACAH,qBAAAA,EACA5B,SAAAA,EACAuI,SAAAA,EACA1C,mBAAoBS,EAClBC,EAASiC,QAAQP,GACjB,oBACA,CAACM,GAAU,MAIf,IAAcE,EAAG,IAAAC,EAAAA,SAAa3G,EAAOzC,EAAU2I,GAE/C,OAAA/B,QAAAC,QAAO,CACL5H,KAAM,WACNwD,MAAAA,EACAH,qBAAAA,EACA5B,SAAAA,EACA6F,mBAAoBS,EAClBC,EAASiC,QAAQP,GACjB,UACA,CAACM,EAAUtJ,IAEbsJ,SAAAA,IApCR,sCCnDJ,ICmgBAI,EAAAC,EAAAC,EAAAC,EDngBMC,EAAa,CACjB,CACEtK,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,UACdC,KAAM,QACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,OACdC,KAAM,WACNC,KAAM,SAGVD,KAAM,iBACNC,KAAM,SAER,CACEE,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,YACdC,KAAM,MACNC,KAAM,aAER,CACEG,SAAS,EACTL,aAAc,YACdC,KAAM,UACNC,KAAM,cAGVD,KAAM,gBACNC,KAAM,SAER,CACEE,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,SACNC,KAAM,YAGVD,KAAM,iBACNC,KAAM,SAER,CACEE,WAAW,EACXL,OAAQ,CACN,CACEM,SAAS,EACTL,aAAc,SACdC,KAAM,QACNC,KAAM,UAER,CACEG,SAAS,EACTL,aAAc,UACdC,KAAM,KACNC,KAAM,YAGVD,KAAM,MACNC,KAAM,SAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,GACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVD,KAAM,YACNM,QAAS,CACP,CACEP,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,YACdC,KAAM,SACNC,KAAM,aAER,CACEF,aAAc,YACdC,KAAM,MACNC,KAAM,cAGVD,KAAM,iBACNM,QAAS,CACP,CACEP,aAAc,YACdC,KAAM,WACNC,KAAM,cAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,GACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,GACNC,KAAM,YAGVD,KAAM,mBACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,GACNC,KAAM,SAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEF,aAAc,YACdC,KAAM,MACNC,KAAM,aAER,CACEF,aAAc,YACdC,KAAM,UACNC,KAAM,aAER,CACEF,aAAc,QACdC,KAAM,OACNC,KAAM,UAGVD,KAAM,wBACNM,QAAS,GACTJ,gBAAiB,aACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,OACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,KACNC,KAAM,WAER,CACEF,aAAc,UACdC,KAAM,SACNC,KAAM,WAER,CACEF,aAAc,QACdC,KAAM,OACNC,KAAM,UAGVD,KAAM,mBACNM,QAAS,GACTJ,gBAAiB,aACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,WACNC,KAAM,WAER,CACEF,aAAc,OACdC,KAAM,WACNC,KAAM,SAGVD,KAAM,oBACNM,QAAS,GACTJ,gBAAiB,aACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,SACdC,KAAM,cACNC,KAAM,WAGVD,KAAM,oBACNM,QAAS,CACP,CACEP,aAAc,OACdC,KAAM,GACNC,KAAM,SAGVC,gBAAiB,OACjBD,KAAM,YAER,CACEH,OAAQ,CACN,CACEC,aAAc,UACdC,KAAM,KACNC,KAAM,YAGVD,KAAM,MACNM,QAAS,CACP,CACEP,aAAc,SACdC,KAAM,GACNC,KAAM,WAGVC,gBAAiB,OACjBD,KAAM,aE/QJyK,EAAyB,SAC7BC,EACAlH,EACAH,GAEA,MAA2BqH,EAAqBC,KAC9C,SAAAZ,GAAA,IAAAa,EAAAb,EACEvG,MACsBqH,EAFxBd,EAEE1G,qBAFF,OAIOG,EAACsH,gBAAkBF,EAAaE,eACrCD,EAA4BC,gBAC1BzH,EAAqByH,gBAG3B,IAAKC,EACH,MAAUC,IAAAA,MACR,oEAIJ,OAAOD,GAGIE,EAAAA,SACXC,GAAAA,IAAAA,EAAAA,EAAAA,MACA7I,EAAAA,EAAAA,MACAK,EAAAA,EAAAA,UACAsH,EAJkCmB,EAIlCnB,SACAoB,EALkCD,EAKlCC,kBALkC,IAalC,IAAM7I,EAAiBC,EAAqBH,EAAOK,GAEnD,OAAciF,QAACgC,IACbtH,EAAMQ,IAAN,SAAiBC,GAAjB,IACE,IAAAC,EAAAC,EAAyBqI,EAAG1D,QAAQC,QAAQjH,EAASA,UAACC,KAAK,IAGzDyK,EADExJ,EAAaiB,EAAKrB,WAAaO,EAAcc,EAAKrB,WAO3C6J,EAAYxI,EAAKrB,mBH7EhCyJ,EACApI,EACAkH,EACAoB,GAJ6B,IAM7B,GAAIvJ,EAAaiB,EAAKrB,WAAaO,EAAcc,EAAKrB,UAAW,CAE/D,IAAMuG,EAAW,IAAImC,WACnBrH,EAAKU,MACLxC,EACAoK,GAEF,OAAAzD,QAAAC,QAAOI,EAASuD,iBAAiBL,EAAOlB,GAAUxD,KAAK,SAAC+E,GAEtDA,OAAAA,EAAmB7K,EAAUC,YAAUC,KAAK,MAErCkC,GAAAA,EAAKrB,WAAahC,EAASkC,MAAO,CAC3C,IAAc6J,EAAG,IAAArB,EAAAA,SACfrH,EAAKU,MACLzC,EACAqK,GAGF,OAAOpD,QAAAA,QAAAA,EAASyD,UAAUP,EAAOlB,IAInC,OAAOtJ,QAAAA,QAAAA,GA5BsB,MAAAqG,GAAA,OAAAY,QAAAG,OAAAf,IGwEC2E,CACtBR,EACApI,EACAkH,EACAoB,GAYsBzD,QAAQC,QAAQlH,GApBnB,IAAAiL,EAAA,OAAA5I,EA0BnB,OA1BmBC,EA0BnBT,EAAee,IAAIR,SAAnB,EAAAE,EAA0BO,YA1BPR,EA0BqBD,EAAKO,qBAFxCP,EAAAA,EAAKU,MAGGoI,OAAAA,QAAAA,QC/FVA,SACXV,EACApI,EACAsI,EACAS,GACsB,IACtB,GAAIhK,EAAaiB,EAAKrB,UAAW,CAC/B,IAAcuG,EAAG,IAAAmC,EAAAA,SACfrH,EAAKU,MACLxC,EACAoK,GAGF,OACSS,QAAAA,QADL/I,EAAKrB,WAAahC,EAASsC,qBACtB8J,EACH7D,EACG8D,QAAQD,EAAStI,YACjBiD,KAAK,SAACsF,GAAD,mBACMlL,KACRmL,OAAOD,EAAQhB,gBAAkBI,EAAMJ,kBAG7C9C,EAAS4D,UAAUV,GAGlBlD,EACJ8D,QAAQhJ,EAAKO,sBACbmD,KAAK,SAACsF,GACLnL,OAAAA,EAASA,UAACC,KAAKmL,OAAOD,EAAQhB,gBAAkBI,EAAMJ,mBAErD,GAAI9I,EAAcc,EAAKrB,UAAW,CACvC,IAAMuG,EAAW,IAAAmC,WACfrH,EAAKU,MACLgH,EACAY,GAGF,GAAItI,EAAKrB,WAAahC,EAASyC,sBAAuB,CACpD,IAAK2J,EAAU,CAGb,IAAiBjI,EAAGjD,EAAAA,UAAUC,KAAKkC,EAAKc,aACzBC,EAAGlD,EAASA,UAACC,KAAKkC,EAAKe,WAEtC,OAAA8D,QAAAC,QAAOhE,EAAYG,GAAGF,GAAaD,EAAcC,GAEnD,OAAA8D,QAAAC,QAAOI,EAAS4D,UAAUV,EAAOW,EAAStI,aAG5C,uBAAOyE,EAAS4D,UAAUV,EAAOpI,EAAKO,uBAGxC,GAAIiI,EAAYxI,EAAKrB,UAAW,CAC9B,IAAMuG,EAAW,IAAImC,EAAJA,SACfrH,EAAKU,MACLzC,EACAqK,GAEF,OAAOpD,QAAAA,QAAAA,EAAS4D,UAAUV,IAG5B,OAAAvD,QAAAC,QAAOwD,EAAkBY,WAAWd,IA7DhB,MAAfnE,GAAA,OAAAY,QAAAG,OAAAf,ID+FgB6E,CACbV,EACApI,EACAsI,EACA7I,EAAee,IAAIR,KA/BA0D,KAAA,SAAAyF,GAAA,OAAAtE,QAAAC,QAiCCyD,GAjCD7E,KAAA,SAAA0F,GAuBvB,MAAO,CACL1I,MADK2I,EAEL9I,qBAAoBsI,EAEpBS,UAMAC,eAVKH,EAWLzK,SAAUqB,EAAKrB,cAlCnB,MADKsF,GAAA,OAAAY,QAAAG,OAAAf,OAf2B,MAAAA,GAAA,OAAAY,QAAAG,OAAAf,KAwDiBuF,EAAG,SAapD3I,GAAA,IAAA+G,EAAA/G,EAZF+G,qBAEAV,EAAAA,EAAAA,SAWuCuC,EAAG,GACrChE,OAAAA,OAAOiE,QAFV7I,EAXF8I,2BAa+C5J,IAC3C,SAAAJ,GAAA,MAASiK,EAAAA,GACPnE,OAAAA,OAAOiE,QAAPjE,EAAAA,IAAmC1F,IACjC,SAAAoC,GAAA,MACE,CAACzB,EADHyB,EAAA,GAAAA,EAAA,SAIN0H,OAEIC,EAA4B,SAChCC,GAEAN,OAAAA,EACG3C,OAAO,SAAAhE,GAAA,IAA+BkH,EAA/BlH,EAAA,GAAA,SAEJ8E,EAFI9E,EAAA,GAAAA,EAAA,IAKJiH,GAAWnI,GAAGoI,KAEjBjK,IAAI,SAAAkK,GAAEvJ,IAAAA,EAAOH,EAAAA,GAAAA,EAAsB2J,EAAAA,GAAAA,OAC5BjC,EAAqBN,EACzBC,EACAlH,EACAH,GAGF,MAAO,CACLG,MAAAA,EACAH,qBAAAA,EACA4J,eAAgBD,EAChBE,WAAYnC,EAAmB8B,GAC/BpL,SAAUsJ,EAAmBtJ,aAeiB0L,EAAA,CACpDP,EAA0B,WAC1BA,EAA0B,kBAAkB/J,IAbxB,SACpBuK,GADoB,MAEe,CACnC5J,MAAO4J,EAAoB5J,MAC3BH,qBAAsB+J,EAAoB/J,qBAC1CgJ,eAAgBe,EAAoBF,WACpCG,uBAAwBD,EAAoBH,eAC5CxL,SAAU2L,EAAoB3L,SAC9BuI,SAAAA,MAQF,MAAO,CACLsD,qBAN2B7D,EAAAA,GAO3BA,sBAFF0D,EAAA,KAa4CI,EAAG,YAC/C/H,IAGAlD,EAY4BkL,EAZ5BlL,oBAY4BmL,EAAAD,EAX5BE,4BAAAA,OAA8B,IAAAD,GAC9BE,EAAAA,EAAAA,EAAAA,6BACA3D,EAAAA,EAAAA,SAUA4D,EACEtB,EAAyC,CACvC5B,qBAHwB8C,EAb5B9C,qBAiBI+B,0BAA2BrK,EAAmC,CAC5DC,MApBNmD,EAAAA,MAqBM9C,UApBNA,EAAAA,UAqBMJ,oBAAqBA,EAAmBmB,EAAA,GAC/BnB,EAD+B,CACV2B,qBAAqB,SAC/CqE,IAEN0B,SAAAA,IAV0BP,EAAAA,EAAAA,sBAa9B,GAAIiE,GAbIJ,EAAAA,qBAagDhI,OAAS,EAC/D,MAAM,IAAA0F,MACJ,qEAIJ,GAAI2C,GAAgClE,EAAsBnE,OAAS,EACjE,MAAM,IAAA0F,MAAU,uDAGlB,OACDvB,GAuFYoE,EAA8C,SAkBtDC,GAAA,IAAAtI,EAAAsI,EAjBHtI,MACAE,EAAAA,EAAAA,cACAqI,EAAAA,EAAAA,cACAC,IAAAA,sBAEAC,EAYGH,EAZHG,8BACA3L,EAWGwL,EAXHxL,oBAEA4L,EAAAA,EAAAA,kBAUAX,EAAkC,CAChC/H,MAAAA,EACA9C,UAAWqL,EACXrD,qBAJCoD,EAbHK,4BAkBE7L,oBAAAA,EACAqL,8BAA8B,EAC9B3D,SAPC8D,EAVHM,kBAoBA,IAAMC,EACJC,EAAsB,CACpBjM,MAAOmD,EACP9C,UAAWqL,EACXrD,qBAAsBuD,EACtB3L,oBAAAA,IAGJiM,EACEjC,EAAyC,CACvC5B,qBACE2D,EACF5B,0BAA2BrK,EAAmC,CAC5DC,MAAOqD,EACPhD,UAAWsL,EACX1L,oBACKA,EAAAA,GAAAA,EACH2B,CAAAA,qBAAqB,MAGzB+F,SAAUkE,IAZgBzE,IAAAA,sBAe9B,GAfQ6D,EAAAA,qBAeiBhI,OAAS,EAChC,MAAU0F,IAAAA,MACR,+DAIJ,OACDvB,GAE0B6E,EAAG,SAUzBE,GAAA,IANH9D,EAAAA,EAAAA,qBAOuB+D,EAAGrM,EAAmC,CAC3DC,MAFCmM,EATHnM,MAYEK,UAHC8L,EARH9L,UAYEJ,oBAAmBmB,EAAA,GAXrBnB,EAAAA,oBAWqB,CAA4B2B,qBAAqB,MAIhEyK,EAA0ChE,EAAqB7H,IACnE,SAACC,GAAeA,OAAAA,EAAAA,GAAAA,KA2BlB,OAvBAyF,OAAOiE,QAAQiC,GAAmBE,QAChC,SAAEnL,GAAAA,IAAAA,EAAOoL,EAAAA,GACPrG,OAAAA,OAAOiE,QAAPjE,EAAAA,IAA6CoG,QAC3C,SAAmCE,GAAA,IAAX7B,EAAW6B,EAAA,GAC3B9D,EAAqBN,EACzBiE,EACAlL,EAH+BqL,EAAA,IAOJC,EAC3BJ,EAAwCK,QAAQhE,GAElD2D,EACEI,GACA1C,QACAsC,EACEI,GACA1C,QAAQ1I,IAAIsJ,UEzabgC,EAA4B,SAQpCjF,GAAA,IAAAkF,EAAAlF,EAPHkF,OAOGC,EAAAnF,EANHoF,eAAAA,OAMG,IAAAD,EANc,CAAC,IAMfA,EAAAE,EAAArF,EALHsF,uBAAAA,OAAyB,IAAAD,EAAA,CAAC,IAM1BA,EAAwBE,EAAGL,EAAOtJ,QAAQ,SAAC4J,EAAOC,GAAR,OACnCD,EAACrK,WAAWM,MACd3C,IACC,SAACC,EAAMgH,GAAP,MACG,CACC0F,WAAAA,EACA1M,KAAAA,EACAgH,MAAAA,EACA2F,KAAM/P,EAAKgQ,SAGhB9F,OAAO,SAAAuB,GAAA,SAAAA,EAAGrI,KAA+BrB,cAGdkO,EAAGV,EAAOtJ,QAAQ,SAAC4J,EAAOC,GACxDD,OAAAA,EAAMrK,WAAWQ,cACd7C,IACC,SAACC,EAAMgH,SACJ,CACC0F,WAAAA,EACA1M,KAAAA,EACAgH,MAAAA,EACA2F,KAAM/P,EAAKkQ,iBAGhBhG,OAAO,SAAG9G,GAAH,OAA4BX,IAAzBW,KAA+BrB,cAGxCoO,EAA6B,SACjCC,EAGApN,GAEAoN,OAAAA,EAAcjN,IAAI,SAAAJ,EAAoC4C,GAAjCmK,IAAAA,EAAAA,EAAAA,WAEAO,EAAkBrN,EAAU8M,GAAYnK,GAE3D,MAAO,CACLmK,WAAAA,EACA1F,MANuDrH,EAApBqH,MAOnC2F,KAP0CA,EAAAA,KAQ1ClM,WAAYwM,EAAcxM,WAC1ByM,cAA8B,OATyBvN,EAA1BK,KACPO,sBAAwB,KAQV,GAAK0M,EAAcE,UAY7D,MAPKJ,GAAAA,OAAAA,EAA2BP,EAAoBH,GAC/CU,EACDF,EACAN,KC5DAa,EAAiB,SAAC3M,GAAD,OACZ4M,YACPC,OAAOxP,KACLD,EAASA,UAACC,KAAK2C,GAAY8M,cAAcC,MAAM,GAAGC,SAAS,GAAI,KAC/D,SAQOC,eAGX,WAAA,SAAAA,EAAYC,GAFZC,KAAAA,UAGE,EAAA9J,KAAK8J,KAAO,IAAIC,EAAAA,QAAaF,EAAY5N,IAAIqN,GAAiBC,EAAlDA,UAA6D,CACvES,MAAM,IALZ,IAAAC,EAAAL,EAAA9J,UAAA,OAAAmK,EASEC,SAAA,SAASvN,GACP,OAAOqD,KAAK8J,KAAKK,YAAYb,EAAe3M,KAG9CyN,EAAAA,QAAA,WACE,OAAYN,KAAAA,KAAKM,UAAUC,SAAS,OAASrK,KAAK8J,KAAKQ,aAAe,KAd1EV,EAGE,GCLIW,EAAsB,SAACnE,EAAsBoE,GACjDzQ,OAAAA,EAASA,UAACC,KAAKoM,GACZnI,IAAIlE,YAAUC,KAAKwQ,IACnBtM,IbyDiC,MaLFuM,EAAG,SAACvO,GAEtC,IAAAwO,EAAAC,EAAA,GAAI,aAAczO,EAAM,CAEtB,GAAI,gBAAJA,EAA2B,CACzB,IAAA0O,EAAArG,EAAAsG,IAAa,IAAAjB,EAAe1N,EAAK2N,aAEjC,MAAO,CACLhP,SACEqB,EAAKrB,WAAahC,EAASqC,OACvBrC,EAASsC,qBACTtC,EAASyC,sBACfsB,MAAOV,EAAKU,MACZH,qBAAsBqN,EAAKM,UAC3BpN,YAA4B,OAAfd,EAAAA,EAAKkK,QAAUwE,EAAA,IAC5B3N,UAAS,SAAA,SAAEf,EAAKe,WAAP4N,EAAoB3O,EAAKkK,QAAzB7B,EAAmC,KAIH,IAAAxH,EAAA+N,EAA7C,MAAI,WAAY5O,GAAQ,gBACf,CACLrB,SAAUqB,EAAKrB,SACf+B,MAAOV,EAAKU,MACZH,qBAAsBP,EAAKS,WAC3BK,YAAad,EAAKkK,OAClBnJ,UAAS,OAAEf,SAAAA,EAAAA,EAAKe,aAAaf,EAAKkK,QAAzBrJ,EAAmC,KAIzC,CACLlC,SAAUqB,EAAKrB,SACf+B,MAAOV,EAAKU,MACZH,qBAAsBP,EAAKS,WAC3BK,YAAa,IACbC,UAAW,KAKf,MAAO,CACLpC,SACEqB,EAAKU,OAASV,EAAKU,QAAUmO,EAAAA,OAAOC,UAAUC,YAC1CpS,EAASkC,MACTlC,EAASiC,OACf8B,MAAK,OAAA8N,EAAExO,EAAKU,OAAP8N,EAAgBK,EAAMA,OAACC,UAAUC,YACtCxO,qBAAsB,IACtBO,YAAad,EAAKkK,OAClBnJ,UAA6Bf,OAApByO,EAAEzO,EAAKe,WAAaf,EAAAA,EAAKkK,SAIzB8E,EAAuB,SAAArP,OAKlBsP,EADKvM,GAAAA,OADgC/C,EAFrD+C,MAEqD/C,EADrDiD,eAG4BkE,OAAOpI,GAEnC,OAAiBuQ,EAACtJ,MAChB,SAAGhH,GAAH,SAAGA,WACYsQ,EAAW,GAAGtQ,UAD7BwD,EAAazB,MAELsH,gBAAkBiH,EAAW,GAAGvO,MAAMsH,mBAIlB,SAAsBzI,GAMpD,OAJe1B,EAASA,UAACC,KAAK,GACjBD,YAAUC,KAAK,GAGhByB,EACTQ,IAAI,SAAA+C,GAAiC,MAAA,CACpChC,YADGgC,EAAGhC,YAENC,UAFG+B,EAAgB/B,aAIpBjB,OACC,SAAAmK,EAAAI,GAAA,IAC8C6E,EAD9CjF,EACmClJ,UAClBA,EAAAA,EAAAA,UACX,MAAA,CACJD,YAJFmJ,EACInJ,YAG4BF,IAJhCyJ,EAEIvJ,aAGFC,UAAWmO,EAAetO,IAAIG,KAEhC,CACED,YAAajD,EAASA,UAACC,KAAK,GAC5BiD,UAAWlD,YAAUC,KAAK,MAUrBqR,EAAkC,SAC7C1C,EAES/B,GAAA,IAAA0E,EAAA1E,EADP0E,YAAaC,EACN3E,EADM2E,UAEf,GAAID,EAAY5Q,GAAG,IAAM6Q,EAAU7Q,GAAG,GACpC,OAAOiO,EAIT,MAAoB4C,EACjB5N,IAAI2N,GACJrN,IbtGiC,KauGjCC,IAAIqN,GAEP,MAAO,CACLjN,WACKqK,EAAAA,GAAAA,EAAMrK,WACTM,CAAAA,MAAO+J,EAAMrK,WAAWM,MAAM3C,IAAI,SAACC,GAAD,OAAAW,EAAA,GAC7BX,EAD6B,CAEhCc,YAAauN,EACXrO,EAAKc,YACLwN,GACAH,WACFpN,UAAWsN,EAAoBrO,EAAKe,UAAWuN,GAAaH,eAE9DvL,cAAe6J,EAAMrK,WAAWQ,cAAc7C,IAAI,SAACC,GAC9CA,OAAAA,EAAAA,GAAAA,EACHc,CAAAA,YAAauN,EACXrO,EAAKc,YACLwN,GACAH,WACFpN,UAAWsN,EAAoBrO,EAAKe,UAAWuN,GAAaH,iBAGhEmB,UAAW7C,EAAM6C,YAUsBC,EAAG,SAC5C9C,EAMS+C,GAAA,IAHPJ,EAAAA,EAAAA,YACAC,EAAAA,EAAAA,UAGiBI,EAAG5R,EAASA,UAACC,KADvB0R,EAJPE,aAOF,GAAID,EAAcE,IAAI,GACpB,MAAM,IAAAzH,MAAU,wCAGlB,MAAiBhG,EAAuBuK,GAEpC4C,EAAU7Q,GAAG,KACf6Q,EAAYO,GAId,IAAMC,EAAqCR,EACxC5N,IAAI2N,GACJrN,Ib9JiC,Ka+JjCC,IAAIqN,GAGqBS,EAAGL,EAC5B1N,IbnKiC,KaoKjCC,IAAI4N,GAKDtB,EAAcuB,EAAmC5O,GACrD6O,GAEEA,EACAD,EAEJ,MAAO,CACLzN,WAAUzB,EAAA,GACL8L,EAAMrK,WACTM,CAAAA,MAAO+J,EAAMrK,WAAWM,MAAM3C,IAAI,SAACC,GAAD,OAAAW,EAAA,GAC7BX,EACHc,CAAAA,YAAauN,EACXrO,EAAKc,YACLwN,GACAH,WACFpN,UAAWsN,EAAoBrO,EAAKe,UAAWuN,GAAaH,eAE9DvL,cAAe6J,EAAMrK,WAAWQ,cAAc7C,IAAI,SAACC,GAC9CA,OAAAA,EAAAA,GAAAA,EACHc,CAAAA,YAAauN,EACXrO,EAAKc,YACLwN,GACAH,WACFpN,UAAWsN,EAAoBrO,EAAKe,UAAWuN,GAAaH,iBAGhEmB,UAAW7C,EAAM6C,YLzGfS,UAGHpT,EAASkC,SAHiCyI,EAAA,IAIxC3K,EAASqC,QAASnC,EAAoBmT,gBAJE1I,EAKxC3K,EAASwC,SAAUtC,EAAoBoT,iBALC3I,GAAAG,EAO1C9K,EAASqC,UACPrC,EAAAA,IAAAA,EAASiC,QAAS/B,EAAoBqT,cACtCvT,EAAAA,EAASkC,OAAQhC,EAAoBsT,gBAEvCxT,GAAAA,EAAAA,EAASwC,WAXiCqI,EAAA,IAYxC7K,EAASiC,QAAS/B,EAAoBuT,iBACtCzT,EAASkC,OAAQhC,EAAoBwT,gCAgT1BC,EACd7D,EACA8D,GAEA,IAAQC,EAAqDD,EAArDC,YAAaC,EAAwCF,EAAxCE,YAAarB,EAA2BmB,EAA3BnB,YAAaC,EAAckB,EAAdlB,UAE/C,GAAIA,EAAUpO,GAAG,IAAMmO,EAAYpN,IAAIqN,GAAW7Q,GAAG,GACnD,MAAU0J,IAAAA,MAAM,yDAGlB,GAAIuI,EACF,MAAUvI,IAAAA,MAAM,oDAGlB,OAAIsI,EAEK,CAAEpO,WAAUzB,EAAA,GAAO8L,EAAMrK,YAAckN,UAAW,QA6ThDoB,IAAAA,GAAuC,SAClDjE,EACAiD,GAGA,MAAiBxN,EAAuBuK,KAClB5O,YAAUC,KAAK4R,GAG/BiB,EAAWxS,EAAIsR,EAAeG,GAOpC,MAAO,CAAEgB,UALSlB,EACdD,EAAczN,IAAI2O,GAClB9S,EAAAA,UAAUC,KAAK,GAGC+S,YAFAnB,EAAcE,EAAS5N,IAAI2O,GAAY9S,EAAAA,UAAUC,KAAK,6CM1uB1E,SACEgT,EAAAA,EAOqBlM,GAAA,IAAAmM,EAAA1Q,EAAA2Q,EAAA/J,OAAA,IAAArC,EAAF,GALjBoB,EAAAA,EAAAA,EAAAA,cAEAiL,iCAAAA,OAAmC,IAAAC,EAAA,UACnCC,wCAAAA,OAEmB,IAAAC,GADnBC,EAAAA,EAAAA,EAAAA,yBAzBGnM,cA0BgB,EAAApB,KAxBfgN,cAwBe,EAAAhN,KAlBfwE,uBAEAgJ,EAAAA,KAAAA,YAEAC,EAAAA,KAAAA,8BAkXDC,aAAe,SAACC,GACrB,IAQuBC,EAAG7C,EAAMA,OAAC8C,MAAMtE,UACrCwB,EAAAA,OAAO8C,MAAMC,YARb,iHAUgC/C,EAAMA,OAAC8C,MAAMtE,UAC7CwB,SAAO8C,MAAMC,YATb,yIAWiBC,EAAGhD,EAAAA,OAAO8C,MAAMtE,UACjCwB,EAAMA,OAAC8C,MAAMC,YATYE,ucAYrBC,EAAYlD,EAAAA,OAAO8C,MAAMtE,UAC7B,KACEoE,EAAgB/O,MACb3C,IAAI,SAACiS,GACJ,OAAanD,EAAAA,OAAC8C,MACXtE,UACC,KACE,CACEqE,EAAkBlE,MAAM,GACxBwE,EAAUrT,SAASwP,WAAWV,SAAS,GAAI,KAC3CuE,EAAUtR,MAAM8M,MAAM,GAAGC,SAAS,GAAI,KACtCoB,EAAMA,OAAChR,UAAUC,KAAKkU,EAAUzR,sBAC7BgN,cACAC,MAAM,GACNC,SAAS,GAAI,KAChBoB,EAAMA,OAAChR,UAAUC,KAAKkU,EAAUlR,aAC7ByM,cACAC,MAAM,GACNC,SAAS,GAAI,KAChBoB,EAAMA,OAAChR,UAAUC,KAAKkU,EAAUjR,WAC7BwM,cACAC,MAAM,GACNC,SAAS,GAAI,MAChBwE,KAAK,KAEVzE,MAAM,KAEVyE,KAAK,KAGWC,EAAGrD,SAAO8C,MAAMtE,UACrC,KACEoE,EAAgB7O,cACb7C,IAAI,SAACoS,GACJ,OAAatD,EAAAA,OAAC8C,MACXtE,UACC,KACE,CACE+E,EAA0B5E,MAAM,GAChC2E,EAAkBxT,SAASwP,WAAWV,SAAS,GAAI,KACnD0E,EAAkBzR,MAAM8M,MAAM,GAAGC,SAAS,GAAI,KAC9CoB,EAAAA,OAAOhR,UAAUC,KACfqU,EAAkB5R,sBAEjBgN,cACAC,MAAM,GACNC,SAAS,GAAI,KAChBoB,EAAAA,OAAOhR,UAAUC,KAAKqU,EAAkBrR,aACrCyM,cACAC,MAAM,GACNC,SAAS,GAAI,KAChBoB,EAAAA,OAAOhR,UAAUC,KAAKqU,EAAkBpR,WACrCwM,cACAC,MAAM,GACNC,SAAS,GAAI,KAChB0E,EAAkBE,UAAU7E,MAAM,GAAGC,SAAS,GAAI,MAClDwE,KAAK,KAEVzE,MAAM,KAEVyE,KAAK,KA8BZ,OA3ByBpD,EAAAA,OAAO8C,MAAMtE,UACpC,KACE,CACEwE,EAAcrE,MAAM,GACpBiE,EAAgBa,QAAQ9E,MAAM,GAAGC,SAAS,GAAI,KAC9CgE,EAAgBc,KAAK/E,MAAM,GAAGC,SAAS,GAAI,KAC3CsE,EAAUvE,MAAM,GAChB0E,EAAkB1E,MAAM,GACxBiE,EAAgBe,UAAUrE,WAAWV,SAAS,GAAI,KAClDoB,EAAAA,OAAOhR,UAAUC,KAAK2T,EAAgBnQ,WACnCiM,cACAC,MAAM,GACNC,SAAS,GAAI,KAChBoB,EAAAA,OAAOhR,UAAUC,KAAK2T,EAAgBlQ,SACnCgM,cACAC,MAAM,GACNC,SAAS,GAAI,KAChBgE,EAAgBgB,SAASjF,MAAM,GAC/BiE,EAAgBiB,KAAKlF,MAAM,GAAGC,SAAS,GAAI,KAC3CgE,EAAgBkB,WAAWnF,MAAM,GAAGC,SAAS,GAAI,KACjDoB,EAAMA,OAAChR,UAAUC,KAAK2T,EAAgBmB,SACnCrF,cACAC,MAAM,GACNC,SAAS,GAAI,MAChBwE,KAAK,MA5cXnO,KAAKgN,SAAWA,EAChBhN,KAAKwE,kBAAoB,IAAIuK,EAAAA,UAAmBC,kBAAkBhC,GAElEhN,KAAKoB,SAAW,MAAAmC,SAAA,OACdrB,EAAAA,MAAAA,OAAAA,EAAAA,EAAW+M,iBADGhC,EdblB,6CceIjU,EACAgH,KAAKwE,mBAGPxE,KAAKwN,OAAS,CACZL,iCAAAA,EACAE,wCAAAA,EACAE,oBACKrT,EAAAA,GAAAA,UACFD,GAAa+F,KAAKoB,SAAS8N,QAFX3S,GAGdgR,IAIPvN,KAAKyN,yBAALP,EAAyBhL,MAAAA,OAAAA,EAAAA,EAAWuL,qBAAqBxT,EAjD7D,IA4DUkV,EAAAA,EAAAA,UA5DV,OA4DUA,EAAAA,8BAAA,SAG2D5K,GAAA,IADjE6K,EACiE7K,EADjE6K,iBAEA,OAHAC,EAAAA,oBAKMzW,EAAU0W,mBACV1W,EAAU2W,aAGOH,EAAGxW,EAAU4W,gBAAkB5W,EAAU6W,WA4BrDhP,EAAAA,YAcXiP,SAAAA,EAAAA,WAZEb,WAAAA,OAAa,IAAAc,EAAAvP,MAAKqN,kBAClBgB,EAAAA,EAAAA,EAAAA,KAAAA,aAAO1D,EAAMA,OAACC,UAAUC,YACxBzN,EAAAA,EAAAA,EAAAA,UAAAA,aAAYoS,KAAKC,MAAMC,KAAKC,MAAQ,KAAM1F,WAC1C5M,EAAAA,EAAAA,EAAAA,QAAAA,OAvGN,IAAAuS,EAuGgBlW,EAAQuQ,WAvGxB2F,EAwGMpR,EAAAA,EAAAA,MACAE,EAzGN/B,EAyGM+B,cACAgQ,EAAAA,EAAAA,QACAO,IAAAA,kBACAD,EA5GNrS,EA4GMqS,iBACAa,EAAAA,EAAAA,SACArB,KAAAA,OA9GN,IAAAsB,EDoNE,KAAY1G,OAAOxP,KAAK+Q,EAAMA,OAAC8C,MAAMsC,YAAY,KAAK9F,SAAS,OCpNjE6F,EAAA,IAoGmB,IAAAE,EAAApQ,4BAcMoQ,EAAKpD,SAASqD,UAAUX,kBAAvC5M,GAFiB,OAAA/B,QAAAC,QAGD8B,EAAOwN,cAHN1Q,KAAA,SAGjB4O,GACN,IAAgB+B,EAAG3R,EAAM3C,IAAIwO,KAExB3L,GAAAA,OAAAA,EAAc7C,IAAI,SAAC6C,qBACjB2L,EAAwB3L,IAC3ByP,UAAsCC,OAA7BgC,EAAE1R,EAAcyP,WAAaC,EAAAA,OAI1C,IACGtD,EAAqB,CACpBtM,MAAO2R,EACPzR,cAAe2R,IAGjB,MAAUrM,IAAAA,MACR,2DAIJ,MAAmB,GAAA5B,OAAI+N,EAAeE,GAAoBzN,OACxDpI,KAG0B8V,EAAiBvF,KAE5BiF,EAAK5C,OAAOD,oBAAoBsB,GA7B1B,uBA+B+B9N,QAAQgC,IAAI,CAAA,MAChE+L,EAAAA,EAAWsB,EAAKO,WAAWnC,GAC3BnK,EAAwB,CACtBC,MAAOkK,EACP/S,MAAO8U,EACPzU,UAAW,GACX0I,kBAAmB4L,EAAK5L,kBACxBpB,SAAAA,OAtCmBxD,KAAA,SAAA/D,GAAA,IAAA+U,EAAAC,EAAAhV,EAAA,GA+BCiI,EA0DlBgN,EAAAA,GAAAA,SAAAA,EAAAA,GAIN,MAmBoBA,GAAAA,OAAAA,EAAiBC,CAnBX,CACxB3X,KAAM,SACN4X,iBAAkB,WAChB,OAAOZ,EAAKa,kBAAkBC,EAAiBL,IAEjDpQ,YAAwB,WAAA,IAAA,OAAAM,QAAAC,QACEoP,EAAKe,UAC3BD,EACAL,EACArC,IAJoB5O,KAAA,SAChB4L,GAMN,MAAO,CACLlN,WAAiB4S,EAAAA,GAAAA,GAAiBpC,QAAS+B,IAC3CrF,UAAAA,KATO,MAAArL,GAAA,OAAAY,QAAAG,OAAAf,QAgBb,MAAO,CACLG,QAAAA,EACAD,kBAAmB,kBACA+Q,EAAC9Q,KA3EtB,IAAMoO,EAAY0B,EAAKjB,8BAA8B,CACnDE,kBAAAA,EACAD,iBAAAA,MAIGiC,GAAAA,ODrLiB,SACxB5V,EACAwU,GAEA,IAAKA,EACH,OAAOxU,EAGT,MAAyBwU,EAAKjU,OAC5B,SAACsV,EAAgBC,GAAjB,OAAuCD,EAAGC,EAAI/G,aAC9C,GAGF,OAAY/O,EAACQ,IAAI,SAACC,GAAD,OAAAW,EAAA,GACZX,EADY,CAEfc,YAAapC,EAAesB,GACxBnC,YAAUC,KAAKkC,EAAKc,aACjBW,IAAI4M,EAAoBrO,EAAKc,YAAawU,IAC1CnH,WACHnO,EAAKc,YACTC,UAAWrC,EAAesB,GACtBnC,YAAUC,KAAKkC,EAAKe,WACjBU,IAAI4M,EAAoBrO,EAAKe,UAAWuU,IACxCnH,WACHnO,EAAKe,cC6JJoU,CAAWZ,EAAoBR,GAC9B9E,EAAWzM,QAAX,OAAAkS,EAAA,MACAX,OADA,EACAA,EAAMhU,IAAI,SAACsV,GACTE,OD9M0B,SAUdtO,GAAA,MATtBoO,EAAAA,IACA3U,EAAAA,EAAAA,MACA8U,EAAAA,EAAAA,WACAC,EAAAA,EAAAA,cAAAA,OAAgBD,IAAAA,EAAAA,IAOhB,MAAO,CACL7W,SACE+B,IAAUmO,SAAOC,UAAUC,YAAcpS,EAASiC,OAASjC,EAASkC,MACtE6B,MAAAA,EACAH,qBAAsB,IACtBO,YAAauN,EAAoBmH,EAAYH,EAAI/G,aAAaH,WAC9DpN,UAAWsN,EAAoBoH,EAAeJ,EAAI/G,aAAaH,WAC/DkE,UAAWgD,EAAIhD,WC4LPkD,CAAuB,CACrBF,IAAAA,EACA3U,MAAOuO,EAAW,GAAGvO,MACrB8U,WAAYE,EAAoB5U,YAChC2U,cAAeC,EAAoB3U,eANvC2T,EASA,IAGAM,EAAmC,CACvC1C,QAAAA,EACAC,KAAAA,EAEAE,SAAUkD,EAAmBA,oBAAChB,EAAgBxG,YAC9C7M,UAAAA,EACAC,QAAAA,EACAiR,UAAAA,EACA9P,MAAO2R,EACPzR,cAAegT,EACfC,gCAAiCD,EAA2BpT,OAC5DkQ,KAAAA,EACAC,WAAAA,GAGImD,EACJ5B,EAAK5C,OAAOH,wCAEaxK,EAAGmP,EAC1BrL,EAAkC,CAChC/H,MAAO2R,EACPzU,UAAW,GACXgI,qBAAAA,EACAgD,4BAA6BkL,EAC7B5O,SAAAA,IAEF,GAvFmB,OAAA4O,EAAAjR,QAAAC,QA0Fb4B,EAAmBC,EAAuBC,cAChD,UA3MR,MAAA3C,GAAA,OAAAY,QAAAG,OAAAf,KAAA8J,EA6OgBgI,eAAc,WAAA,IAAA,IAAAC,EACAlS,KADA,OAAAe,QAAAC,QACAkR,EAAKlF,SAASmF,+BAExC,MAAO,CACLhZ,Kd7S+B,Uc8S/BiZ,Qd7SkC,Mc8SlCC,QANwBhU,EAClBgU,QAMNC,kBAAmBJ,EAAK9Q,SAAS8N,WApPvC,MAAA/O,GAAA,OAAAY,QAAAG,OAAAf,KAAA8J,EA8PgBgH,kBA9PhB,SA+PIC,EACApC,GAAe,IAEU,OAAA/N,QAAAC,QAAAhB,KAAKiS,gCAAxBM,GAEN,IAAM5E,OACDuD,EADgB,CAEnBpC,QAAAA,IAGF,OAAO0D,KAAKC,UACVC,EAAiBA,kBAACC,WAChBJ,EACA7Y,EACAiU,MA7QR,sCAyRewD,UAzRf,SA0RID,EACApC,EACAY,GAAuB,IAAA,IAEX5M,EAAG9C,KAAKgN,SAASqD,UAAUX,GAFhB,OAIE3O,QAAAC,QAFVhB,KAEeiS,kBAJPrS,KAAA,SAIjB2S,GAEN,IAAqB5E,EAAA9Q,EAAA,GAChBqU,EACHpC,CAAAA,QAAAA,IARqB,OAAA/N,QAAAC,QAWC8B,EAAO8P,eAC7BL,EACA7Y,EACAiU,kBAHInC,GAON,OAAOT,EAAAA,OAAO8C,MAAMgF,eAAerH,GAAWsH,YA9SlD,sCAwTSC,aAAA,SACL1K,EACAqH,GAEA,IAAM5M,EAAS9C,KAAKgN,SAASqD,UAAUX,GAEvC,SAA6B1P,KAAKoB,SAASiC,QAAQP,GAAS,SAAU,CACpEuF,KA/TN4B,EAwUS+I,iBAAA,SACLxE,GAIA,MAAexO,KAAKgN,SAASqD,UAAU7B,GAEvC,SACExO,KAAKoB,SAASiC,QAAQP,GACtB,mBACA,OAWGmQ,SAAA,SACL5K,EACAqH,GAEA,MAAe1P,KAAKgN,SAASqD,UAAUX,GAEvC,SAA6B1P,KAAKoB,SAASiC,QAAQP,GAAS,WAAY,CACtEuF,KApWN4B,EA6WSiJ,eAAA,SAAeC,GACpB,OAAOnT,KAAKoB,SAAS8R,eAAeC,IA9WxClJ,EAsXS0G,WAAA,SAAWnC,GAChB,OAAOxO,KAAKoB,SACTuP,WAAWnC,GACX5O,KAAK,SAACkP,UAAmBA,EAACsE,cAyIlBC,EAAAA,6BAlgBf1K,EAAA3J,EAmgBI2J,MACAiD,EAAAA,EAAAA,YACAzE,EAAAA,EAAAA,cAAAA,OArgBJ,IAAAmM,EAqgBoB,GArgBpBA,EAAAC,EAAAvU,EAsgBIoI,sBAAAA,aAAwB,GAtgB5BmM,EAAAC,EAAAxU,EAugBIyU,KAAAA,OAAO,IAAAD,EAAA,SACPE,UAAAA,OAxgBJ,IAAAC,EAwgBgB,KACZjE,EAAAA,EAAAA,EAAAA,mBACAb,WAAAA,OA1gBJ,IAAA+E,EA0gBiBC,OAAKpG,kBA1gBtBmG,EAAAE,EAAA9U,EA2gBI+U,iBAAAA,OAAmBhJ,IAAAA,EAAAA,EAAAA,OAAOC,UAAUC,YA3gBxC6I,EAAA,IA0gBiB,IAAAE,EAAAhU,KAsBOkR,EAAoBvI,EAAhCrK,WACRkQ,EAA0C0C,EAAlC1C,QAAS5P,EAAyBsS,EAAzBtS,MAAOE,EAAkBoS,EAAlBpS,cAXzB,OAayBiC,QAAAC,QAAAgT,EAAKhH,SAASqD,UAAUX,IAbjD9P,KAAA,SAaOqU,GAEyBA,OAAAA,QAAAA,QAAAA,EAAU3D,cAAnC4D,KAAAA,SAAAA,GAEN,IAAM1M,EACJwM,EAAKxG,OAAOD,oBAAoB2D,EAAgBrC,YAE5CvH,EAAoB0M,EAAKxG,OAAOD,oBAAoBsB,GApB3D,OAAA9N,QAAAC,QA2BWD,QAAQgC,IAAI,CACpBsB,EAAwB,CACtBC,MAAOkK,EACP/S,MAAOmD,EACP9C,UAAWqL,EACX3C,kBAAmBwP,EAAKxP,kBACxBpB,SAAUoE,IAIZnD,EAAwB,CACtBC,MAAO4P,EACPzY,MAAWmD,GAAAA,OAAAA,EAAUE,GACrBhD,UAAeqL,GAAAA,OAAAA,EAAkBC,GACjC5C,kBAAmBwP,EAAKxP,kBACxBpB,SAAUkE,IAEZ0M,EAAKxP,kBAAkB2P,SAAS,UAChCH,EAAKd,eAAec,EAAKtG,aAAawD,OAtBtC3J,KAAAA,SAAAA,GAAAA,IAAAA,OACAF,EAxBHlB,EAAA,GA0BGsG,EAsBFtG,EAAA,GAA2B7I,EAhD5B6I,EAAA,GAgD4CiO,UAEnC9I,EAA2BmB,EAA3BnB,YAAaC,EAAckB,EAAdlB,UAEf8I,EAAiB7H,EACrB7D,EACA8D,GAGI/Q,EAAsB,CAC1B8B,UAAW6W,EAAe/V,WAAWd,UACrCC,QAAS4W,EAAe/V,WAAWb,QACnCH,sBAAAA,EACAC,+BACEyW,EAAKxG,OAAOL,kCAGWmH,EAAGb,EAAKxX,IAAI,SAACsY,eACnC9J,EAAwB8J,IAC3BhG,UAAWgG,EAAIhG,cAnElB,OA2EI3C,GALqBmI,IAAqBhJ,EAAMA,OAACC,UAAUC,aNrlB7B,SAAA9H,EAEnCmI,OACE1M,EAAAuE,EAFAvE,MAAOE,EAAAA,EAAAA,cAAe0P,IAAAA,QAIxB,IAAKlD,EAAY5Q,GAAG,GAClB,OACD,EAGD,GAAIkE,EAAMF,OAAS,GAA8B,IAAzBI,EAAcJ,OACpC,OAAO,EAGT,IAAM8V,EAAe5V,GAAAA,OAAAA,EAAUE,KAElB0V,EAASxR,OAAO,YAAA,MAC3B,CAACnK,EAASqC,OAAQrC,EAASwC,SAASL,SADTuJ,EAAG1J,YAIV4Z,EAAGD,EAASxR,OAAO,SAAAjG,GACvCxB,OAAAA,EADuCwB,EAAGlC,YAO5C,GAHkD+D,EAAM,GJrFnB/D,WACxBhC,EAASiC,OIwFpB,OAAO,EAIT,GAAoB,IAAhB4Z,EAAKhW,QAA4C,IAA5B+V,EAAiB/V,OACxC,SAIF,IAAKwM,EAAqB,CAAEtM,MAAAA,EAAOE,cAAAA,IACjC,OACD,EAOD,GAJmC0V,EAASG,KAC1C,SAAA9Y,GAAA,OAAGmB,EAAAA,cAAHnB,EAAgBoB,YAIhB,OACD,EAED,IAAA2X,EAAmD9V,EAArB+V,GAAAA,EAAqB/V,WAMnD,GAFE8V,EAAmBrG,UAAUrK,gBAAkBsK,EAAQtK,cAGvD,OAAO,EAOT,GACEpF,EAAcJ,OAAS,GACvBmW,EAAkBhT,MAAM,SAAC3F,GAASA,OAAAA,EAAKrB,WAAa+D,EAAM,GAAG/D,YAC7D6V,EAAiBmE,GAAmB5X,UAAUE,GAAGyB,EAAM,GAAG3B,WAE1D,SAGF,IAAgBkO,EAAGqJ,EAASxR,OAAOpI,GAI7Bka,EAA8B3J,EACjCnI,OAAO,SAAGnI,GAAH,SAAGA,WAA4BhC,EAASiC,SAC/C+G,MAAM,SAAA7C,GAAepC,OAAfoC,EAAGpC,QAAsBmO,EAAMA,OAACC,UAAUC,gBAEhBE,EAAWtJ,MAC5C,SAAGpF,GAAH,OAAuC1C,EAAAA,UAACC,OAArCyC,sBAAgE/B,GAAG,KAG5Cqa,EAAGL,EAC5B1R,OAAO,SAAAuD,GAAkB1L,OAAlB0L,EAAG1L,WAA4BhC,EAASqC,SAC/C2G,MAAM,YAAA,MAAiC,MAAjC+E,EAAG3J,YAEZ,OACE6X,GACAE,GACAD,EMigBEE,CAAsBZ,EAAe/V,WAAYgN,GN5ejC4J,gBAAtBvM,EAAA+C,EACE/C,MACAwM,EAAAA,EAAAA,gBACA5N,IAAAA,4BACAF,EAJFqE,EAIErE,8BACA3L,IAAAA,oBACA8L,EAAAA,EAAAA,gBACAF,IAAAA,kBACAxE,EARF4I,EAQE5I,OACA2Q,EAAAA,EAAAA,KAAAA,aAAO,GATT2B,EAAAC,EAAA3J,EAUEmD,WAAAA,aAAa5U,EAVfob,EAAA,IA6BE,IAAAC,EAAAC,EAAAC,EAAiC7M,EAAMrK,WAA/BM,IAAAA,QAC+BE,GAAAA,OADvC0W,EAAe1W,cAC0C2U,KAEvC7U,EAAM,GACxB6W,EAAiDC,EAA3BC,GAAAA,EAA2BD,EAAjDhM,MAAA,GAEyBkM,EAAA,OAAAN,EACvBrJ,EAAwCiC,EAAUrT,gBAD3B,EACvBya,EACEG,EAAW5a,UAGf,QAA4B6G,IAAxBkU,EACF,MAAM,IAAAxR,MACJ,gEAIJ,IAAMyR,EAAuBF,EAAwB1Z,IACnD,YAAA,MAAiC,CAC/BmK,OADFc,EAAGlK,YAEDuR,YAFcA,aAMqBuH,EAAGJ,EAA2B1S,OACnE,SAAC9G,GAAD,SAAerB,WAAa+D,EAAM,GAAG/D,WAGhBkb,EAAA,OAAAR,EAAG/Z,EAAmC,CAC3DC,MAAOqa,EACPha,UAAW,GACXJ,oBAAmBmB,EAAA,GACdnB,EADc,CAEjB2B,qBAAqB,MAEtB0N,EAAMA,OAACC,UAAUC,mBAPG,EAAGsK,EAOS,GAER1S,ECc2B,SAcA6I,GAAA,IAAA9M,EAAA8M,EAbtD9M,MACAE,EAYsD4M,EAZtD5M,cAEAuI,EAAAA,EAAAA,8BACA3L,EAAAA,EAAAA,oBAEA4L,EAOsDoE,EAPtDpE,kBAQAX,EAAkC,CAChC/H,MAAAA,EACA9C,UAAW,GACXgI,qBAJoD4H,EAXtDnE,4BAgBE7L,oBAAAA,EACAqL,8BAA8B,EAC9B3D,SAPoDsI,EARtDlE,kBAkBA,IAAuCsO,EAAGhX,EAAckE,OACtD,SAAC9G,GAAD,OAAcA,EAACrB,WAAa+D,EAAM,GAAG/D,WAIrC6K,EAAAA,EAAyC,CACvC5B,qBAAsBuD,EACtBxB,0BAA2BrK,EAAmC,CAC5DC,MAAOqa,EACPha,UAAW,GACXJ,oBACKA,EAAAA,GAAAA,EACH2B,CAAAA,qBAAqB,MAGzB+F,SAAUkE,IAXgBzE,EAAAA,EAAAA,sBAc9B,GAdQ6D,EAAAA,qBAciBhI,OAAS,EAChC,MAAM,IAAA0F,MACJ,+DAIJ,OACDvB,ED/D+BmT,CAAyC,CACrEpX,MAAAA,EACAE,cAAe4W,EACfnO,4BAAAA,EACAF,8BAAAA,EACA3L,oBAAAA,EACA8L,gBAAAA,EACAF,kBAAAA,IAGI2O,EAAmD,CACvDzH,QAAS7F,EAAMrK,WAAWkQ,QAC1B0H,kBAAmBvN,EAAMrK,WAAWuQ,WACpCJ,KAAM9F,EAAMrK,WAAWmQ,KAKvB0H,eAAgBxN,EAAMrK,WAAWoQ,UAAY,EAAIkH,EACjDQ,WAAYlI,EAAUtR,MACtByZ,gBAAiBnI,EAAUzR,qBAC3B6Z,YAAapI,EAAUjR,UACvBsZ,mBAAoBd,EAAW7Y,MAC/B4Z,wBAAyBf,EAAWhZ,qBACpCga,oBAAqBhB,EAAWxY,UAChCO,UAAWmL,EAAMrK,WAAWd,UAC5BC,QAASkL,EAAMrK,WAAWb,QAC1BmR,KAAMjG,EAAMrK,WAAWsQ,KACvB8H,kCACE/N,EAAMrK,WAAWQ,cAAcJ,OAAS,EAC1C8M,UAAW7C,EAAM6C,UACjBmL,oBAAqB9H,EACrBgH,qBAAAA,EACAlH,SAAUhG,EAAMrK,WAAWqQ,YAGJ,CAAEpP,MAAOwW,GAhFnC,OAAAhV,QAAAC,QAkF+B4B,EAC5BC,EACAC,IApFHlD,KAAA,SAkFOkR,GAKN,IAAoB8F,EAAG,CACrBxd,KAAM,WACNsH,mBAAoBS,EAClBgU,EAAgB9R,QAAQP,GACxB,oBACA,CAACmT,EAAsBY,OAIP/F,GAAAA,OAAAA,EAAiB8F,CAAAA,IAErC,MAAO,CACLtW,QAAAA,EACAD,kBAAmB,kBACA+Q,EAAC9Q,OA3HxB,MArLAH,GAAA,OAAAY,QAAAG,OAAAf,IMoqBa+U,CAAkB,CACvBvM,MAAO0L,EACPc,gBAAiBnB,EAAK5S,SACtBmG,4BAAAA,EACAF,8BAAAA,EACA3L,oBAAAA,EACAmT,WAAAA,EACArH,gBAAAA,EACAF,kBAAAA,EACAxE,OAAQmR,EACRR,KAAMa,aN1Xd1M,GAAA,MACEe,EAAAA,UACAiD,YAAAA,OAFF,IAAAkL,EAEgB,EACdvL,EAAAA,EAAAA,EAAAA,UACAD,EAJF1D,EAIE0D,YACAnE,EAAAA,EAAAA,cACAC,EANFQ,EAMER,sBACAqM,EAAAA,EAAAA,KAAAA,aAAO,GAPTsD,EAQErD,EARF9L,EAQE8L,UACAyB,EAAAA,EAAAA,gBACA5N,EAVFK,EAUEL,4BACAF,IAAAA,8BACAG,EAZFI,EAYEJ,gBACAF,EAAAA,EAAAA,kBACA5L,EAdFkM,EAcElM,oBACAmT,EAAAA,EAAAA,WACAkF,EAhBFnM,EAgBEmM,iBACAjR,EAAAA,EAAAA,WA+BA,IAAAkU,EAYAC,GAZ+BrL,EAC3BH,EAA+B9C,EAAO,CACpCiD,YAAAA,EACAN,YAAAA,EACAC,UAAAA,IAGFF,EAAgC1C,EAAO,CACrC2C,YAAAA,EACAC,UAAAA,KAIJjN,WAAcM,IAAAA,MAAOE,EADvBmY,EACuBnY,gBAGgBA,GAAAA,OAAAA,EAAkB2U,KAE9B7U,EAAMoE,OAAO,SAAGnI,UAC3BU,EAD2BV,EAAAA,YAIXkO,EAAG2M,EAA2B1S,OAC5D,SAAAiF,GAAkB1M,OAAAA,EAAfV,EAAAA,YAGiBqc,EACpBxO,EAAmBhK,OAAS,GAAKqK,EAA2BrK,OAAS,EAEvE,GACEgK,EAAmBhK,SAAWyI,EAAczI,QAC5CqK,EAA2BrK,SAAW0I,EAAsB1I,OAE5D,MAAU0F,IAAAA,MACR,sEAIJ,IAAM2R,EAAoB,SAAAva,EAAmC,CAC3DC,MAAOia,EACP5Z,UAAWsL,EACX1L,oBACKA,EAAAA,GAAAA,GACH2B,qBAAqB,MAEtB0N,SAAOC,UAAUC,mBAPM,EAAA+L,EAOS,GAE7BnU,EAAwBoE,EAA4C,CACxErI,MAAAA,EACAE,cAAe4W,EACfvO,cAAAA,EACAC,sBAAAA,EACAG,4BAAAA,EACAF,8BAAAA,EACA3L,oBAAAA,EACA8L,gBAAAA,EACAF,kBAAAA,IAGoBuP,EAAG,CAAEtX,MAAOwW,GAvEnC,OAyE+BnT,QAAAA,QAAAA,EAC5BC,EACAC,kBAFIgO,GAKN,IAAMqG,EAASpD,IAAqBhJ,EAAMA,OAACC,UAAUC,YAE/CmM,EAAcC,QAAQzL,IAAgBsL,GAAoBC,EAEpCG,EAAAza,EAAA,GACvB8L,EACHrK,CAAAA,gBACKqK,EAAMrK,WADD,CAERQ,cAAmB6J,GAAAA,OAAAA,EAAMrK,WAAWQ,cAAkB2U,GACtD1B,gCAAiCjT,EAAcJ,WAIhBkO,EAAAA,GACjCjE,EACAiD,GAFMkB,EAARyK,EAAQzK,UAAWC,EAAAA,EAAAA,YAKb6J,EAAiB,CACrBxd,KAAM,WACNsH,mBAAoB0W,EAChBjW,EACEgU,EAAgB9R,QAAQP,GACxB,uBACA,MAEOwU,EAFP,CAGIxK,UAAAA,EACAC,YAAAA,EACA2G,UAAS,MAAEA,EAAAA,EAAa,OAE1BwD,EACI9O,EAA0B,CACxBC,OAAQ,CAACM,GACTJ,eAAgB,CAACpB,GACjBsB,uBAAwB,CAACrB,KAE3B,GACJyH,EACAkF,EACA8C,IAGJ1V,EAAsBgU,EAAgB9R,QAAQP,GAAS,eAAgB,CACrEwU,EACAzI,EACAgI,KAIKvW,EAAA,GAAAkC,OAAOsO,EAAiB8F,CAAAA,IAErC,MAAO,CACLtW,QAAAA,EACAD,kBAAmB,WAAA,OACA+Q,EAAC9Q,OAzKxB,MA/HAH,GAAA,OAAAY,QAAAG,OAAAf,IM8fWqX,CAAqB,CAC1B7O,MAAO0L,EACPzI,YAAAA,EACAN,YAAAA,EACAC,UAAWA,EAAU7Q,GAAG,GACpB0D,EAAuBiW,GACvB9I,EACJpE,cAAAA,EACAC,sBAAAA,EACAqM,KAAMa,EACNZ,UAAAA,EACAyB,gBAAiBnB,EAAK5S,SACtBmG,4BAAAA,EACAF,8BAAAA,EACA3L,oBAAAA,EACAmT,WAAAA,EACA/L,OAAQmR,EACRzM,gBAAAA,EACAF,kBAAAA,EACAyM,iBAAAA,UAxoBN,MAupBe0D,GAAAA,OAAAA,QAAAA,OAAAA,KAAAA,EAAAA,8BAvpBfC,EAAAnR,EAwpBImR,oBACAhI,EAAAA,EAAAA,mBACAb,WAAAA,OAAa,IAAA8I,EAAAC,QAAKnK,kBA1pBtBkK,EAAAE,EAAAtR,EA2pBIwN,iBAAAA,OAAmBhJ,IAAAA,EAAAA,EAAAA,OAAOC,UAAUC,YA3pBxC4M,EAAA,UA0pBiB7X,KAcd,OAAAe,QAAAC,QACyB8W,EAAK9K,SAASqD,UAAUX,kBAA1CuE,GADP,OAAAlT,QAAAC,QAGgCiT,EAAU3D,cAH1C1Q,KAAA,SAGOsU,GAEN,IAAyB6D,EAAGL,EAAoBzb,IAC9C,SAAG0M,UACI6E,EAAAA,OAAOD,oBADX5E,EAAAA,MACqCrK,WAAWuQ,cAG9BvH,EAAGwQ,EAAKtK,OAAOD,oBAAoBsB,GAEpDmJ,EAAgBN,EAAoB3Y,QACxC,YAAe4J,OAAf+C,EAAG/C,MAAkBrK,WAAWM,QAGPqZ,EAAGP,EAAoB3Y,QAChD,SAAAmI,GAAeyB,OAAfzB,EAAGyB,MAAkBrK,WAAWQ,gBAEZoZ,EAAGR,EAAoB3Y,QAC3C,SAAA6I,GAAA,IAAAuQ,EAAAvQ,EAAGT,cAAH,kBAAmB,GAAnBgR,IAE4BC,EAAGV,EAAoB3Y,QACnD,SAAAsZ,GAAA,IAAAC,EAAAD,EAAGjR,sBAAH,kBAA2B,GAA3BkR,IAvBH,OAAAvX,QAAAC,QA+BWD,QAAQgC,IAAI,CACpBhC,QAAQgC,IACN2U,EAAoBzb,IAAI,WAAgCwC,GAAhC,MAAGkK,EAAAA,MAAOxB,EAAAA,EAAAA,cAAV,SACE,CACtB7C,MAAOqE,EAAMrK,WAAWkQ,QACxB/S,MAAOkN,EAAMrK,WAAWM,MACxB9C,eAJoB,IAAAyc,EAA0B,GAA1BA,EAKpBnV,SAAU2U,EAAoBtZ,GAC9B+F,kBAAmBsT,EAAKtT,uBAM9BH,EAAwB,CACtBC,MAAO4P,EACPzY,MAAK,GAAA+G,OAAMwV,EAAkBC,GAC7Bnc,UAAS,GAAA0G,OAAM0V,EAAqBE,GACpChV,SAAUkE,EACV9C,kBAAmBsT,EAAKtT,oBAE1BsT,EAAKtT,kBAAkB2P,SAAS,UAChCpT,QAAQgC,IACN2U,EAAoBzb,IAAI,SAAG0M,UACpBuK,EAAAA,eAAe4E,EAAKpK,aADA/E,EAAAA,MACmBrK,mBAvDnDsB,KAAA,SAAA4Y,GAAA,MA4BGnR,EAAAA,GAAAA,OACAoR,EA7BHD,EAAA,GA8BGE,EA9BHF,EAAA,GA8EC,ONjTkBG,SACpBC,GAAAA,IAAAA,IAAAA,eACAzD,EAFF0D,EAEE1D,gBACA9N,EAAAA,EAAAA,8BACAC,EAJFuR,EAIEvR,kBACAhK,EAAAA,EAAAA,sBACAC,IAAAA,+BACAsR,EAPFgK,EAOEhK,WACA/L,IAAAA,OACAiR,EAAAA,EAAAA,iBAWD,IAUC,IAA6B+E,EAAGF,EAAe3c,IAAI,SAAC8c,GAAD,OAAAlc,EAAA,GAC9Ckc,EACHpQ,CAAAA,MAAO6D,EACLuM,EAAcpQ,MACdoQ,EAActM,iBAIZuM,EAAkCF,EAAwB7c,IAC9D,SAAC8c,GAAD,OAAAlc,EAAA,GACKkc,EAGHpQ,CAAAA,MAAOoQ,EAAcnN,YACjBH,EAA+BsN,EAAcpQ,MAAO,CAClDiD,YAAamN,EAAcnN,YAC3BN,YAAayN,EAActM,YAAYnB,YACvCC,UAAWwN,EAActM,YAAYlB,YAGvCF,EAAgC0N,EAAcpQ,MAAO,CACnD2C,YAAayN,EAActM,YAAYnB,YACvCC,UAAWwN,EAActM,YAAYlB,gBAK3CwK,EAAoBhc,EAASA,UAACC,KAAK,GACjCif,EAAoD,GAiB1DD,EAAgCjR,QAC9B,SAAAyQ,GACE7P,IAAAA,EAAAA,EAAAA,IAAAA,MAEAxB,EAIGqR,EAJHrR,cACAC,EAAAA,EAAAA,sBACAG,IAAAA,4BACAC,EACGgR,EADHhR,kBAGKmB,GAAAA,OAAAA,EAAMrK,WAAWQ,cAPtB2U,EAAAA,MAWM/X,EAAsB,CAC1B8B,UAAWmL,EAAMrK,WAAWd,UAC5BC,QAASkL,EAAMrK,WAAWb,QAC1BH,sBAAAA,EACAC,+BAAAA,EACAF,qBAAqB,GAGvB0Y,EAAoBA,EAAkBjZ,IAKO/C,OALzBmf,EAAA,OAAAC,EAClB3d,EAAmC,CACjCC,MAAOia,EACP5Z,UAAWsL,EACX1L,oBAAAA,IACCqP,EAAAA,OAAOC,UAAUC,mBALF,EAClBkO,EAImC,IAAQpf,EAAAA,YAAUC,KAAK,IAG5D,MAA8BiN,EAC5B,CACErI,MAAO+J,EAAMrK,WAAWM,MACxBE,cAAe4W,EACfvO,cAAAA,EACAC,sBAAAA,EACAG,4BAAAA,EACAF,8BAAAA,EACA3L,oBAAAA,EACA8L,gBAAAA,EACAF,kBAAAA,IAIEoB,EAAqBC,EAAMrK,WAAWM,MAAMoE,OAAO,SAAAoW,UACzC7d,EAD4CV,EAAAA,YAItDkO,EAA6B2M,EAA2B1S,OAC5D,YAAkBzH,OAAAA,EAAlB8d,EAAGxe,YAGL,GACE6N,EAAmBhK,SAAWyI,EAAczI,QAC5CqK,EAA2BrK,SAAW0I,EAAsB1I,OAE5D,MAAM,UACJ,sEAIgBmE,EAxEKkF,QAAQ,SAACuR,GAE/BL,EAA2BlV,KAC1B,SAACd,GAAaA,OAAAA,EAASrG,QAAU0c,EAAqB1c,SAGxDqc,EAA2BM,KAAKD,OAsEtC,IAAMzC,EAAmB,CAAEtX,MAAOwW,GAxHnC,OAAAhV,QAAAC,QA0H+B4B,EAC5BqW,EACAnW,IAFIgO,KAAAA,SAAAA,GAKN,MAAgDgI,EAAwB7c,IACtE,YAAG0M,IAAAA,EAAAA,EAAAA,UAAOiD,YAAiB6H,EAAAA,EAAAA,KAAMC,EAAe8F,EAAf9F,UAC/B+F,EAAmC7M,GACjCjE,OAF4C,IAAA+Q,EAAxB,EAAGjG,GACjB3G,EAAAA,EAAAA,UAAWC,EAAnB0M,EAAmB1M,YAKa2I,EAAA,GAAAlT,OAC3BmG,EAAMrK,WAAWQ,cACjB2U,GAEL,OACK9K,EAAAA,GAAAA,EACHrK,CAAAA,gBACKqK,EAAMrK,WADD,CAERQ,cAAe4W,EACf3D,gCACEpJ,EAAMrK,WAAWQ,cAAcJ,SAEnCoO,UAAAA,EACAC,YAAAA,EACA2G,UAAAA,MAMJiG,EAuCYA,SACdf,GAKA,MAAyB,SACvBgB,GAAAA,IADuBC,EAAAC,EAEvB1W,SAQOwW,SATPA,8BACW,IAAAC,EAAA,GACXjd,GAHuB,MAGvBA,MAOmDD,IAV5Bmd,EAIvBnd,YAQ+Bod,EAG7B,GAEqCC,EAGrC,GAoDJ,OAlDApB,EAAe7Q,QACb,SAA4Ca,EAAAA,GAAzCD,IAAAA,EAAAA,EAAAA,MAAOnB,EAAgDyS,EAAhDzS,kBACe5L,EACrB+M,EAAMrK,WAAWM,MAFMuI,EAAAA,eAMzB,OAAYwB,EAACrK,WAAWM,MAAMmJ,QAAQ,SAAC7L,EAAMge,aACrCC,EAAkBC,GAAAA,EAAiB,CACvCR,oBAAqBjR,EAAMrK,WAAWkQ,QACtCpL,SAAUoE,EACV5K,MAAOV,EAAKU,MACZD,oBAAU,SACRhB,EAAee,IAAIR,SADX,EACRE,EAA0BO,cAAcT,EAAKO,wBAE5CxB,EAAaiB,EAAKrB,UAAYqf,EAAY,IAE/CH,EAA4BI,GAA5B,GAAA3X,OACmD,OADnD6X,EACMN,EAA4BI,IAAiBE,EAAA,GACjD,CAAA,CAAEzR,WAAAA,EAAYsR,UAAAA,SAMtBtB,EAAe7Q,QACb,SAAyCa,EAAAA,GAAc,MAApDD,EAAAA,MAA8B8K,EAAsB6G,EAAtB7G,OACR7X,EACrB+M,EAAMrK,WAAWQ,gBAFXsI,uBAKR,MAAO,GAAIuB,OAAAA,EAAMrK,WAAWQ,cAAkB2U,GAAM1L,QAClD,SAAC7L,EAAMge,GACL,IAAAK,EAAAC,EAAAC,EAAkBN,EAAA,GAAMC,EAAiB,CACvCR,oBAAqB1d,EAAKqS,UAC1B3R,MAAOV,EAAKU,MACZD,oBAAU,SACRhB,EAAee,IAAIR,SADX,EACRse,EAA0B7d,cAAcT,EAAKO,wBAE5CxB,EAAaiB,EAAKrB,UAAYqf,EAAY,IAE/CF,EAAoCG,GAApC,GAAA3X,OAC2D,OAD3DiY,EACMT,EAAoCG,IAAiBM,EAAA,GACzD,CAAA,CAAE7R,WAAAA,EAAYsR,UAAAA,SAOjB,CACLQ,kBAAmB/Y,OAAOgZ,OAAOZ,GACjCa,0BAA2BjZ,OAAOgZ,OAChCX,IAxHFL,CAAkCf,GAD5B8B,IAAAA,kBAAmBE,EAA3BC,EAA2BD,4BAGJ,CACrBxhB,KAAM,WACNsH,mBAAoBS,EAClBgU,EAAgB9R,QAAQP,GACxB,iCACA,CACEgY,EAWI,GACJJ,EACAE,EACA/L,EACAkF,EACA+G,EAAuBpc,OACvBmY,KAKOvW,EAAA,GAAAkC,OAAOsO,EAAiB8F,CAAAA,IAErC,MAAO,CACLtW,QAAAA,EACAD,kBAAmB,WACjBA,OAAAA,EAAkBC,OAjNxB,MAAAH,GAAA,OAAAY,QAAAG,OAAAf,IMiTWwY,CAAuB,CAC5BC,eAnB4ClB,EAAoBzb,IAChE,SAAC8e,EAAc7X,GAAW,IAAA8X,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,MAAA,CACxBzS,MAAOoS,EAAapS,MACpBiD,YAAamP,EAAanP,YAC1Ba,YAAaiM,EAAcxV,GAC3BiE,cAA6C,SAA9B4T,EAAa5T,eAAiB6T,EAAA,GAC7C5T,sBAAqB,SAAE2T,EAAa3T,uBAAf6T,EAAwC,GAC7DxH,KAIS,OAHPsH,EADE,OACFA,EAAAA,EAAatH,WADX,EACF0H,EAAmBlf,IAAI,SAACsY,GACnB9J,OAAAA,EAAAA,GAAAA,EAAwB8J,GAC3BhG,CAAAA,UAAWgG,EAAIhG,eACV2M,EAAA,GACTxH,UAAqC,OAA5B0H,EAAEL,EAAarH,WAAa0H,EAAA,KACrC7T,4BAA6B8T,EAA6BnY,GAC1DsE,gBAAiBuQ,EAAoB7U,MAMvCiS,gBAAiB2C,EAAK1W,SACtBiG,8BAAAA,EACA/J,sBAAuBmb,EAAarE,UACpC7W,+BACEua,EAAKtK,OAAOL,iCACd7F,kBAAAA,EACAxE,OAAQmR,EACRpF,WAAAA,EACAkF,iBAAAA,UAhwBN,MA+wBSuH,GAAAA,OAAAA,QAAAA,OAAAA,KAAAA,EAAAA,YAAA,SAAAlC,OAUN/Q,EAAA+Q,EATC/Q,OACAkT,IAAAA,aACArZ,EAODkX,EAPClX,UAUMY,EAAS9C,KAAKgN,SAASqD,UAT7BX,EAAAA,gBAWA,OAAOvO,EAAsBnB,KAAKoB,SAASiC,QAAQP,GAAS,cAAe,CACzEuF,EACAkT,EACArZ,KAjyBNsZ"}
|