diff --git a/.github/workflows/node_docker_build.yml b/.github/workflows/node_docker_build.yml index e31af9a5..e536ddd7 100644 --- a/.github/workflows/node_docker_build.yml +++ b/.github/workflows/node_docker_build.yml @@ -119,6 +119,16 @@ jobs: ${{ needs.build.outputs.digest-amd64 }} \ ${{ needs.build.outputs.digest-arm64 }} + - name: Tag with commit SHA + run: | + SHORT_SHA="${{ github.sha }}" + SHORT_SHA=${SHORT_SHA:0:7} + SHA_TAG="sha-${SHORT_SHA}" + docker buildx imagetools create \ + -t ${DOCKER_REGISTRY}/${DOCKER_REPOSITORY_STAGING}:${SHA_TAG} \ + ${{ needs.build.outputs.digest-amd64 }} \ + ${{ needs.build.outputs.digest-arm64 }} + - name: Setup ORAS uses: oras-project/setup-oras@v1 @@ -128,12 +138,14 @@ jobs: - name: Determine tags to promote id: promote-tags run: | + SHORT_SHA="${{ github.sha }}" + SHORT_SHA=${SHORT_SHA:0:7} + SHA_TAG="sha-${SHORT_SHA}" if [[ "${{ github.ref }}" == refs/tags/* ]]; then VERSION=${GITHUB_REF#refs/tags/} - BASE_VERSION=${VERSION%} - echo "TAGS=latest $BASE_VERSION" >> $GITHUB_ENV + echo "TAGS=$VERSION $SHA_TAG" >> $GITHUB_ENV else - echo "TAGS=latest" >> $GITHUB_ENV + echo "TAGS=latest $SHA_TAG" >> $GITHUB_ENV fi - name: Login to Dockerhub registry with ORAS @@ -144,12 +156,16 @@ jobs: - name: Promote to Dockerhub Production run: | + set -e for tag in $TAGS; do echo "Current tag: $tag" source_image="${DOCKER_REGISTRY}/${DOCKER_REPOSITORY_STAGING}:${tag}" prod_image="${DOCKER_PUBLIC_REGISTRY}/${DOCKER_PUBLIC_REPOSITORY}:${tag}" echo "Promoting ${source_image} to ${prod_image}" - oras cp -r "${source_image}" "${prod_image}" + if ! oras cp -r "${source_image}" "${prod_image}"; then + echo "Error: Failed to promote tag ${tag}" >&2 + exit 1 + fi done - name: Summary diff --git a/common/src/l2/taiko_driver/models.rs b/common/src/l2/taiko_driver/models.rs index 506a1a29..8e1715c0 100644 --- a/common/src/l2/taiko_driver/models.rs +++ b/common/src/l2/taiko_driver/models.rs @@ -14,6 +14,7 @@ pub struct BuildPreconfBlockRequestBody { pub struct BuildPreconfBlockResponse { pub number: u64, pub hash: B256, + pub state_root: B256, pub parent_hash: B256, } @@ -28,6 +29,7 @@ impl BuildPreconfBlockResponse { ) .ok()?, hash: Self::to_b256(header.get("hash")?.as_str()?)?, + state_root: Self::to_b256(header.get("stateRoot")?.as_str()?)?, parent_hash: Self::to_b256(header.get("parentHash")?.as_str()?)?, }) } diff --git a/shasta/src/l1/abi/Multicall.json b/shasta/src/l1/abi/Multicall.json new file mode 100644 index 00000000..53b423ce --- /dev/null +++ b/shasta/src/l1/abi/Multicall.json @@ -0,0 +1,44 @@ +{ + "abi": [ + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "multicall", + "inputs": [ + { + "name": "calls", + "type": "tuple[]", + "internalType": "struct Multicall.Call[]", + "components": [ + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "outputs": [ + { + "name": "results", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "payable" + } + ] +} \ No newline at end of file diff --git a/shasta/src/l1/abi/SurgeInbox.json b/shasta/src/l1/abi/SurgeInbox.json new file mode 100644 index 00000000..a6dd5209 --- /dev/null +++ b/shasta/src/l1/abi/SurgeInbox.json @@ -0,0 +1,1743 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "_config", + "type": "tuple", + "internalType": "struct IInbox.Config", + "components": [ + { + "name": "proofVerifier", + "type": "address", + "internalType": "address" + }, + { + "name": "proposerChecker", + "type": "address", + "internalType": "address" + }, + { + "name": "proverWhitelist", + "type": "address", + "internalType": "address" + }, + { + "name": "signalService", + "type": "address", + "internalType": "address" + }, + { + "name": "bondToken", + "type": "address", + "internalType": "address" + }, + { + "name": "minBond", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "livenessBond", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "withdrawalDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "provingWindow", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "maxProofSubmissionDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "ringBufferSize", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basefeeSharingPctg", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "minForcedInclusionCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "forcedInclusionDelay", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "forcedInclusionFeeInGwei", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "forcedInclusionFeeDoubleThreshold", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "minCheckpointDelay", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "permissionlessInclusionMultiplier", + "type": "uint8", + "internalType": "uint8" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "acceptOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "activate", + "inputs": [ + { + "name": "_lastPacayaBlockHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "activationTimestamp", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cancelWithdrawal", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "decodeProposeInput", + "inputs": [ + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "input_", + "type": "tuple", + "internalType": "struct IInbox.ProposeInput", + "components": [ + { + "name": "deadline", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "blobReference", + "type": "tuple", + "internalType": "struct LibBlobs.BlobReference", + "components": [ + { + "name": "blobStartIndex", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "numBlobs", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "offset", + "type": "uint24", + "internalType": "uint24" + } + ] + }, + { + "name": "numForcedInclusions", + "type": "uint8", + "internalType": "uint8" + } + ] + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "decodeProveInput", + "inputs": [ + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "input_", + "type": "tuple", + "internalType": "struct IInbox.ProveInput", + "components": [ + { + "name": "commitment", + "type": "tuple", + "internalType": "struct IInbox.Commitment", + "components": [ + { + "name": "firstProposalId", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "firstProposalParentBlockHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "lastProposalHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "actualProver", + "type": "address", + "internalType": "address" + }, + { + "name": "endBlockNumber", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "endStateRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "transitions", + "type": "tuple[]", + "internalType": "struct IInbox.Transition[]", + "components": [ + { + "name": "proposer", + "type": "address", + "internalType": "address" + }, + { + "name": "timestamp", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "blockHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ] + }, + { + "name": "forceCheckpointSync", + "type": "bool", + "internalType": "bool" + } + ] + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "deposit", + "inputs": [ + { + "name": "_amount", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "depositTo", + "inputs": [ + { + "name": "_recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "_amount", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "encodeProposeInput", + "inputs": [ + { + "name": "_input", + "type": "tuple", + "internalType": "struct IInbox.ProposeInput", + "components": [ + { + "name": "deadline", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "blobReference", + "type": "tuple", + "internalType": "struct LibBlobs.BlobReference", + "components": [ + { + "name": "blobStartIndex", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "numBlobs", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "offset", + "type": "uint24", + "internalType": "uint24" + } + ] + }, + { + "name": "numForcedInclusions", + "type": "uint8", + "internalType": "uint8" + } + ] + } + ], + "outputs": [ + { + "name": "encoded_", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "encodeProveInput", + "inputs": [ + { + "name": "_input", + "type": "tuple", + "internalType": "struct IInbox.ProveInput", + "components": [ + { + "name": "commitment", + "type": "tuple", + "internalType": "struct IInbox.Commitment", + "components": [ + { + "name": "firstProposalId", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "firstProposalParentBlockHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "lastProposalHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "actualProver", + "type": "address", + "internalType": "address" + }, + { + "name": "endBlockNumber", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "endStateRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "transitions", + "type": "tuple[]", + "internalType": "struct IInbox.Transition[]", + "components": [ + { + "name": "proposer", + "type": "address", + "internalType": "address" + }, + { + "name": "timestamp", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "blockHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ] + }, + { + "name": "forceCheckpointSync", + "type": "bool", + "internalType": "bool" + } + ] + } + ], + "outputs": [ + { + "name": "encoded_", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "getBond", + "inputs": [ + { + "name": "_address", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "bond_", + "type": "tuple", + "internalType": "struct IBondManager.Bond", + "components": [ + { + "name": "balance", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "withdrawalRequestedAt", + "type": "uint48", + "internalType": "uint48" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getConfig", + "inputs": [], + "outputs": [ + { + "name": "config_", + "type": "tuple", + "internalType": "struct IInbox.Config", + "components": [ + { + "name": "proofVerifier", + "type": "address", + "internalType": "address" + }, + { + "name": "proposerChecker", + "type": "address", + "internalType": "address" + }, + { + "name": "proverWhitelist", + "type": "address", + "internalType": "address" + }, + { + "name": "signalService", + "type": "address", + "internalType": "address" + }, + { + "name": "bondToken", + "type": "address", + "internalType": "address" + }, + { + "name": "minBond", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "livenessBond", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "withdrawalDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "provingWindow", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "maxProofSubmissionDelay", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "ringBufferSize", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "basefeeSharingPctg", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "minForcedInclusionCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "forcedInclusionDelay", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "forcedInclusionFeeInGwei", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "forcedInclusionFeeDoubleThreshold", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "minCheckpointDelay", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "permissionlessInclusionMultiplier", + "type": "uint8", + "internalType": "uint8" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCoreState", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IInbox.CoreState", + "components": [ + { + "name": "nextProposalId", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "lastProposalBlockId", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "lastFinalizedProposalId", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "lastFinalizedTimestamp", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "lastCheckpointTimestamp", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "lastFinalizedBlockHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCurrentForcedInclusionFee", + "inputs": [], + "outputs": [ + { + "name": "feeInGwei_", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getForcedInclusionState", + "inputs": [], + "outputs": [ + { + "name": "head_", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "tail_", + "type": "uint48", + "internalType": "uint48" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getForcedInclusions", + "inputs": [ + { + "name": "_start", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "_maxCount", + "type": "uint48", + "internalType": "uint48" + } + ], + "outputs": [ + { + "name": "inclusions_", + "type": "tuple[]", + "internalType": "struct IForcedInclusionStore.ForcedInclusion[]", + "components": [ + { + "name": "feeInGwei", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "blobSlice", + "type": "tuple", + "internalType": "struct LibBlobs.BlobSlice", + "components": [ + { + "name": "blobHashes", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "offset", + "type": "uint24", + "internalType": "uint24" + }, + { + "name": "timestamp", + "type": "uint48", + "internalType": "uint48" + } + ] + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getProposalHash", + "inputs": [ + { + "name": "_proposalId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hashCommitment", + "inputs": [ + { + "name": "_commitment", + "type": "tuple", + "internalType": "struct IInbox.Commitment", + "components": [ + { + "name": "firstProposalId", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "firstProposalParentBlockHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "lastProposalHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "actualProver", + "type": "address", + "internalType": "address" + }, + { + "name": "endBlockNumber", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "endStateRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "transitions", + "type": "tuple[]", + "internalType": "struct IInbox.Transition[]", + "components": [ + { + "name": "proposer", + "type": "address", + "internalType": "address" + }, + { + "name": "timestamp", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "blockHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "hashProposal", + "inputs": [ + { + "name": "_proposal", + "type": "tuple", + "internalType": "struct IInbox.Proposal", + "components": [ + { + "name": "id", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "timestamp", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "endOfSubmissionWindowTimestamp", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "proposer", + "type": "address", + "internalType": "address" + }, + { + "name": "parentProposalHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "originBlockNumber", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "originBlockHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "basefeeSharingPctg", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "sources", + "type": "tuple[]", + "internalType": "struct IInbox.DerivationSource[]", + "components": [ + { + "name": "isForcedInclusion", + "type": "bool", + "internalType": "bool" + }, + { + "name": "blobSlice", + "type": "tuple", + "internalType": "struct LibBlobs.BlobSlice", + "components": [ + { + "name": "blobHashes", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "offset", + "type": "uint24", + "internalType": "uint24" + }, + { + "name": "timestamp", + "type": "uint48", + "internalType": "uint48" + } + ] + } + ] + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "impl", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "inNonReentrant", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "init", + "inputs": [ + { + "name": "_owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pause", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "paused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "propose", + "inputs": [ + { + "name": "_lookahead", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proposeWithProof", + "inputs": [ + { + "name": "_lookahead", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "_proof", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "prove", + "inputs": [ + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "_proof", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "requestWithdrawal", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resolver", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "saveForcedInclusion", + "inputs": [ + { + "name": "_blobReference", + "type": "tuple", + "internalType": "struct LibBlobs.BlobReference", + "components": [ + { + "name": "blobStartIndex", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "numBlobs", + "type": "uint16", + "internalType": "uint16" + }, + { + "name": "offset", + "type": "uint24", + "internalType": "uint24" + } + ] + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unpause", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeTo", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "withdraw", + "inputs": [ + { + "name": "_to", + "type": "address", + "internalType": "address" + }, + { + "name": "_amount", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AdminChanged", + "inputs": [ + { + "name": "previousAdmin", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newAdmin", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BeaconUpgraded", + "inputs": [ + { + "name": "beacon", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BondDeposited", + "inputs": [ + { + "name": "depositor", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BondWithdrawn", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ForcedInclusionSaved", + "inputs": [ + { + "name": "forcedInclusion", + "type": "tuple", + "indexed": false, + "internalType": "struct IForcedInclusionStore.ForcedInclusion", + "components": [ + { + "name": "feeInGwei", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "blobSlice", + "type": "tuple", + "internalType": "struct LibBlobs.BlobSlice", + "components": [ + { + "name": "blobHashes", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "offset", + "type": "uint24", + "internalType": "uint24" + }, + { + "name": "timestamp", + "type": "uint48", + "internalType": "uint48" + } + ] + } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "InboxActivated", + "inputs": [ + { + "name": "lastPacayaBlockHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LivenessBondSettled", + "inputs": [ + { + "name": "payer", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "payee", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "livenessBond", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "credited", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "slashed", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferStarted", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Paused", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Proposed", + "inputs": [ + { + "name": "id", + "type": "uint48", + "indexed": true, + "internalType": "uint48" + }, + { + "name": "proposer", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "parentProposalHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "endOfSubmissionWindowTimestamp", + "type": "uint48", + "indexed": false, + "internalType": "uint48" + }, + { + "name": "basefeeSharingPctg", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + }, + { + "name": "sources", + "type": "tuple[]", + "indexed": false, + "internalType": "struct IInbox.DerivationSource[]", + "components": [ + { + "name": "isForcedInclusion", + "type": "bool", + "internalType": "bool" + }, + { + "name": "blobSlice", + "type": "tuple", + "internalType": "struct LibBlobs.BlobSlice", + "components": [ + { + "name": "blobHashes", + "type": "bytes32[]", + "internalType": "bytes32[]" + }, + { + "name": "offset", + "type": "uint24", + "internalType": "uint24" + }, + { + "name": "timestamp", + "type": "uint48", + "internalType": "uint48" + } + ] + } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Proved", + "inputs": [ + { + "name": "firstProposalId", + "type": "uint48", + "indexed": false, + "internalType": "uint48" + }, + { + "name": "firstNewProposalId", + "type": "uint48", + "indexed": false, + "internalType": "uint48" + }, + { + "name": "lastProposalId", + "type": "uint48", + "indexed": false, + "internalType": "uint48" + }, + { + "name": "actualProver", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "checkpointSynced", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Unpaused", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "WithdrawalCancelled", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "WithdrawalRequested", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "withdrawableAt", + "type": "uint48", + "indexed": false, + "internalType": "uint48" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ACCESS_DENIED", + "inputs": [] + }, + { + "type": "error", + "name": "ActivationRequired", + "inputs": [] + }, + { + "type": "error", + "name": "BlobNotFound", + "inputs": [] + }, + { + "type": "error", + "name": "CannotProposeInCurrentBlock", + "inputs": [] + }, + { + "type": "error", + "name": "CheckpointDelayHasPassed", + "inputs": [] + }, + { + "type": "error", + "name": "DeadlineExceeded", + "inputs": [] + }, + { + "type": "error", + "name": "ETH_TRANSFER_FAILED", + "inputs": [] + }, + { + "type": "error", + "name": "EmptyBatch", + "inputs": [] + }, + { + "type": "error", + "name": "FUNC_NOT_IMPLEMENTED", + "inputs": [] + }, + { + "type": "error", + "name": "FirstProposalIdTooLarge", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PAUSE_STATUS", + "inputs": [] + }, + { + "type": "error", + "name": "IncorrectProposalCount", + "inputs": [] + }, + { + "type": "error", + "name": "InsufficientBond", + "inputs": [] + }, + { + "type": "error", + "name": "InsufficientETH", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidAddress", + "inputs": [] + }, + { + "type": "error", + "name": "LastProposalAlreadyFinalized", + "inputs": [] + }, + { + "type": "error", + "name": "LastProposalHashMismatch", + "inputs": [] + }, + { + "type": "error", + "name": "LastProposalIdTooLarge", + "inputs": [] + }, + { + "type": "error", + "name": "LengthExceedsUint16", + "inputs": [] + }, + { + "type": "error", + "name": "MustMaintainMinBond", + "inputs": [] + }, + { + "type": "error", + "name": "NoBlobs", + "inputs": [] + }, + { + "type": "error", + "name": "NoBondToWithdraw", + "inputs": [] + }, + { + "type": "error", + "name": "NoWithdrawalRequested", + "inputs": [] + }, + { + "type": "error", + "name": "NotEnoughCapacity", + "inputs": [] + }, + { + "type": "error", + "name": "ParentBlockHashMismatch", + "inputs": [] + }, + { + "type": "error", + "name": "ProverNotWhitelisted", + "inputs": [] + }, + { + "type": "error", + "name": "REENTRANT_CALL", + "inputs": [] + }, + { + "type": "error", + "name": "UnprocessedForcedInclusionIsDue", + "inputs": [] + }, + { + "type": "error", + "name": "WithdrawalAlreadyRequested", + "inputs": [] + }, + { + "type": "error", + "name": "ZERO_ADDRESS", + "inputs": [] + }, + { + "type": "error", + "name": "ZERO_VALUE", + "inputs": [] + } + ] +} \ No newline at end of file diff --git a/shasta/src/l1/abi/UserOpsSubmitter.json b/shasta/src/l1/abi/UserOpsSubmitter.json new file mode 100644 index 00000000..0934ef2a --- /dev/null +++ b/shasta/src/l1/abi/UserOpsSubmitter.json @@ -0,0 +1,179 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "_owner", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "executeBatch", + "inputs": [ + { + "name": "_ops", + "type": "tuple[]", + "internalType": "struct UserOpsSubmitter.UserOp[]", + "components": [ + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "_signature", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getDigest", + "inputs": [ + { + "name": "_ops", + "type": "tuple[]", + "internalType": "struct UserOpsSubmitter.UserOp[]", + "components": [ + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "outputs": [ + { + "name": "digest_", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "BatchExecuted", + "inputs": [ + { + "name": "executor", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "opsCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OperationExecuted", + "inputs": [ + { + "name": "index", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "target", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "success", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "EMPTY_BATCH", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_OWNER", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_SIGNATURE", + "inputs": [] + }, + { + "type": "error", + "name": "OPERATION_FAILED", + "inputs": [ + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ] +} \ No newline at end of file diff --git a/shasta/src/l1/bindings.rs b/shasta/src/l1/bindings.rs new file mode 100644 index 00000000..459aecf3 --- /dev/null +++ b/shasta/src/l1/bindings.rs @@ -0,0 +1,25 @@ +#![allow(clippy::too_many_arguments)] + +use alloy::sol; + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + #[derive(Debug)] + UserOpsSubmitter, + "src/l1/abi/UserOpsSubmitter.json" +); + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + SurgeInbox, + "src/l1/abi/SurgeInbox.json" +); + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + Multicall, + "src/l1/abi/Multicall.json" +); diff --git a/shasta/src/l1/config.rs b/shasta/src/l1/config.rs index 475a894b..41f13702 100644 --- a/shasta/src/l1/config.rs +++ b/shasta/src/l1/config.rs @@ -8,10 +8,14 @@ use alloy::primitives::Address; pub struct ContractAddresses { pub shasta_inbox: Address, pub proposer_checker: Address, + pub proposer_multicall: Address, + pub bridge: Address, } pub struct EthereumL1Config { pub shasta_inbox: Address, + pub proposer_multicall: Address, + pub bridge: Address, } impl TryFrom for EthereumL1Config { @@ -20,6 +24,8 @@ impl TryFrom for EthereumL1Config { fn try_from(config: ShastaConfig) -> Result { Ok(EthereumL1Config { shasta_inbox: config.shasta_inbox, + proposer_multicall: config.proposer_multicall, + bridge: config.bridge, }) } } diff --git a/shasta/src/l1/execution_layer.rs b/shasta/src/l1/execution_layer.rs index 4238431f..86345a13 100644 --- a/shasta/src/l1/execution_layer.rs +++ b/shasta/src/l1/execution_layer.rs @@ -1,14 +1,26 @@ use super::config::EthereumL1Config; use super::proposal_tx_builder::ProposalTxBuilder; use super::protocol_config::ProtocolConfig; -use crate::l1::config::ContractAddresses; +use crate::node::proposal_manager::proposal::Proposal; +use crate::shared_abi::bindings::{Bridge::MessageSent, IBridge::Message, SignalSent}; +use crate::{ + l1::{bindings::UserOpsSubmitter, config::ContractAddresses}, + node::proposal_manager::bridge_handler::UserOpData, +}; use alloy::{ - eips::BlockNumberOrTag, - primitives::{Address, U256, aliases::U48}, - providers::DynProvider, + eips::{BlockId, BlockNumberOrTag}, + primitives::{Address, FixedBytes, U256, aliases::U48}, + providers::{DynProvider, ext::DebugApi}, + rpc::types::{ + TransactionRequest, + trace::geth::{ + GethDebugBuiltInTracerType, GethDebugTracerType, GethDebugTracingCallOptions, + GethDebugTracingOptions, + }, + }, + sol_types::SolEvent, }; use anyhow::{Error, anyhow}; -use common::shared::l2_block_v2::L2BlockV2; use common::{ l1::{ traits::{ELTrait, PreconferProvider}, @@ -37,6 +49,8 @@ pub struct ExecutionLayer { pub transaction_monitor: TransactionMonitor, contract_addresses: ContractAddresses, inbox_instance: InboxInstance, + // Surge: For signing the state checkpoints sent as proof with proposal + checkpoint_signer: alloy::signers::local::PrivateKeySigner, } impl ELTrait for ExecutionLayer { @@ -75,13 +89,15 @@ impl ELTrait for ExecutionLayer { .map_err(|e| anyhow::anyhow!("Failed to call getConfig for Inbox: {e}"))?; tracing::info!( - "Shasta inbox: {}, Proposer checker {}", + "Shasta inbox: {}, Proposer checker: {}", specific_config.shasta_inbox, - shasta_config.proposerChecker + shasta_config.proposerChecker, ); let contract_addresses = ContractAddresses { shasta_inbox: specific_config.shasta_inbox, proposer_checker: shasta_config.proposerChecker, + proposer_multicall: specific_config.proposer_multicall, + bridge: specific_config.bridge, }; Ok(Self { @@ -91,6 +107,12 @@ impl ELTrait for ExecutionLayer { transaction_monitor, contract_addresses, inbox_instance, + // Surge: Hard coding the private key for the POC + // (This is the first private key from foundry anvil) + checkpoint_signer: alloy::signers::local::PrivateKeySigner::from_bytes( + &"0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + .parse::>()?, + )?, }) } @@ -163,26 +185,24 @@ impl PreconfOperator for ExecutionLayer { } impl ExecutionLayer { - pub async fn send_batch_to_l1( - &self, - l2_blocks: Vec, - num_forced_inclusion: u8, - ) -> Result<(), Error> { + pub async fn send_batch_to_l1(&self, batch: Proposal) -> Result<(), Error> { info!( "📦 Proposing with {} blocks | num_forced_inclusion: {}", - l2_blocks.len(), - num_forced_inclusion, + batch.l2_blocks.len(), + batch.num_forced_inclusion, ); // Build propose transaction // TODO fill extra gas percentege from config - let builder = ProposalTxBuilder::new(self.provider.clone(), 10); + let builder = + ProposalTxBuilder::new(self.provider.clone(), 10, self.checkpoint_signer.clone()); + + // Surge: This is now a multicall containing user ops and L1 calls let tx = builder .build_propose_tx( - l2_blocks, + batch, self.preconfer_address, - self.contract_addresses.shasta_inbox, - num_forced_inclusion, + self.contract_addresses.clone(), ) .await?; @@ -323,3 +343,104 @@ impl common::l1::traits::PreconferBondProvider for ExecutionLayer { Ok(U256::from(bond.balance)) } } + +// Surge: L1 EL ops for Bridge Handler + +pub trait L1BridgeHandlerOps { + // Surge: This can be made to retrieve multiple signal slots + async fn find_message_and_signal_slot( + &self, + user_op_data: UserOpData, + ) -> Result)>, anyhow::Error>; +} + +// Surge: Please beward of these limitations +// - Target contracts are not verified in log checks +impl L1BridgeHandlerOps for ExecutionLayer { + async fn find_message_and_signal_slot( + &self, + user_op_data: UserOpData, + ) -> Result)>, anyhow::Error> { + // Build the call to executeBatch with a single user op + let submitter = UserOpsSubmitter::new(user_op_data.user_op_submitter, &self.provider); + let call = + submitter.executeBatch(vec![user_op_data.user_op], user_op_data.user_op_signature); + + // Create transaction request for simulation + let tx_request = TransactionRequest::default() + .from(self.preconfer_address) + .to(user_op_data.user_op_submitter) + .input(call.calldata().clone().into()); + + // Configure call tracer with logs enabled + let mut tracer_config = serde_json::Map::new(); + tracer_config.insert("withLog".to_string(), serde_json::Value::Bool(true)); + + let tracing_options = GethDebugTracingOptions { + tracer: Some(GethDebugTracerType::BuiltInTracer( + GethDebugBuiltInTracerType::CallTracer, + )), + tracer_config: serde_json::Value::Object(tracer_config).into(), + ..Default::default() + }; + + let call_options = GethDebugTracingCallOptions { + tracing_options, + ..Default::default() + }; + + // Execute the trace call simulation + let trace_result = self + .provider + .debug_trace_call( + tx_request, + BlockId::Number(BlockNumberOrTag::Latest), + call_options, + ) + .await + .map_err(|e| anyhow!("Failed to simulate executeBatch on L1: {e}"))?; + + let mut message: Option = None; + let mut slot: Option> = None; + + // Look for logs in the trace result and decode MessageSent and SignalSent events + if let alloy::rpc::types::trace::geth::GethTrace::CallTracer(call_frame) = trace_result { + for log in call_frame.logs { + // Check if this is a MessageSent or SignalSent event by matching the topic + if let Some(topics) = &log.topics { + if !topics.is_empty() { + if topics[0] == MessageSent::SIGNATURE_HASH { + // Decode the MessageSent event + let log_data = alloy::primitives::LogData::new_unchecked( + topics.clone(), + log.data.clone().unwrap_or_default(), + ); + let decoded = MessageSent::decode_log_data(&log_data).map_err(|e| { + anyhow!("Failed to decode MessageSent event L1: {e}") + })?; + + message = Some(decoded.message); + } else if topics[0] == SignalSent::SIGNATURE_HASH { + // Decode the SignalSent event + let log_data = alloy::primitives::LogData::new_unchecked( + topics.clone(), + log.data.clone().unwrap_or_default(), + ); + let decoded = SignalSent::decode_log_data(&log_data).map_err(|e| { + anyhow!("Failed to decode SignalSent event L1: {e}") + })?; + + slot = Some(decoded.slot); + } + } + } + } + } + + if let (Some(message), Some(slot)) = (message, slot) { + return Ok(Some((message, slot))); + } + + Ok(None) + } +} diff --git a/shasta/src/l1/mod.rs b/shasta/src/l1/mod.rs index a69869fe..7bcc9c57 100644 --- a/shasta/src/l1/mod.rs +++ b/shasta/src/l1/mod.rs @@ -1,3 +1,4 @@ +pub mod bindings; pub mod config; pub mod execution_layer; pub mod proposal_tx_builder; diff --git a/shasta/src/l1/proposal_tx_builder.rs b/shasta/src/l1/proposal_tx_builder.rs index 98d62815..4f2f0e09 100644 --- a/shasta/src/l1/proposal_tx_builder.rs +++ b/shasta/src/l1/proposal_tx_builder.rs @@ -1,19 +1,30 @@ +use crate::l1::{ + bindings::{ + IInbox::ProposeInput, LibBlobs::BlobReference, Multicall, SurgeInbox, UserOpsSubmitter, + }, + config::ContractAddresses, +}; +use crate::l2::bindings::ICheckpointStore::Checkpoint; +use crate::node::proposal_manager::{ + bridge_handler::{L1Call, UserOpData}, + proposal::Proposal, +}; +use crate::shared_abi::bindings::Bridge; use alloy::{ consensus::SidecarBuilder, eips::eip4844::BlobTransactionSidecar, - network::{TransactionBuilder, TransactionBuilder4844}, primitives::{ - Address, Bytes, + Address, Bytes, U256, aliases::{U24, U48}, }, providers::{DynProvider, Provider}, rpc::types::TransactionRequest, + signers::Signer, + sol_types::SolValue, }; use alloy_json_rpc::RpcError; use anyhow::Error; use common::l1::{fees_per_gas::FeesPerGas, tools, transaction_error::TransactionError}; -use common::shared::l2_block_v2::L2BlockV2; -use taiko_bindings::inbox::{IInbox::ProposeInput, Inbox, LibBlobs::BlobReference}; use taiko_protocol::shasta::{ BlobCoder, manifest::{BlockManifest, DerivationSourceManifest}, @@ -23,26 +34,31 @@ use tracing::warn; pub struct ProposalTxBuilder { provider: DynProvider, extra_gas_percentage: u64, + checkpoint_signer: alloy::signers::local::PrivateKeySigner, } impl ProposalTxBuilder { - pub fn new(provider: DynProvider, extra_gas_percentage: u64) -> Self { + pub fn new( + provider: DynProvider, + extra_gas_percentage: u64, + checkpoint_signer: alloy::signers::local::PrivateKeySigner, + ) -> Self { Self { provider, extra_gas_percentage, + checkpoint_signer, } } #[allow(clippy::too_many_arguments)] pub async fn build_propose_tx( &self, - l2_blocks: Vec, + batch: Proposal, from: Address, - to: Address, - num_forced_inclusion: u8, + contract_addresses: ContractAddresses, ) -> Result { let tx_blob = self - .build_propose_blob(l2_blocks, from, to, num_forced_inclusion) + .build_propose_blob(batch, from, contract_addresses) .await?; let tx_blob_gas = match self.provider.estimate_gas(tx_blob.clone()).await { Ok(gas) => gas, @@ -83,13 +99,84 @@ impl ProposalTxBuilder { #[allow(clippy::too_many_arguments)] pub async fn build_propose_blob( &self, - l2_blocks: Vec, + batch: Proposal, from: Address, - to: Address, - num_forced_inclusion: u8, + contract_addresses: ContractAddresses, ) -> Result { - let mut block_manifests = >::with_capacity(l2_blocks.len()); - for l2_block in &l2_blocks { + let mut multicalls: Vec = vec![]; + + // Add user op to multicall + // Note: Only adding the first call, since more calls are not expected for the POC + if !batch.user_ops.is_empty() { + multicalls.push(self.build_user_op_call(batch.user_ops.first().unwrap().clone())); + } + + // Add the proposal to the multicall + // This must always follow the user ops + multicalls.push( + self.build_propose_call(&batch, contract_addresses.shasta_inbox) + .await?, + ); + + // Add L1 calls initiated by L2 blocks in the proposal + if !batch.l1_calls.is_empty() { + multicalls.push(self.build_l1_call_call( + batch.l1_calls.first().unwrap().clone(), + contract_addresses.bridge, + )); + } + + // Build the multicall transaction request + let multicall = Multicall::new(contract_addresses.proposer_multicall, &self.provider); + let call = multicall.multicall(multicalls); + + let tx = TransactionRequest::default() + .to(contract_addresses.proposer_multicall) + .from(from) + .input(call.calldata().clone().into()); + + Ok(tx) + } + + // Surge: builds the 161-byte proof data + // [0..96: ABI-encoded checkpoint][96..161: signed checkpoint digest] + async fn build_proof_data(&self, checkpoint: &Checkpoint) -> Result { + let checkpoint_encoded = checkpoint.abi_encode(); + let checkpoint_digest = alloy::primitives::keccak256(&checkpoint_encoded); + let signature = self.checkpoint_signer.sign_hash(&checkpoint_digest).await?; + + let mut signature_bytes = [0_u8; 65]; + signature_bytes[..32].copy_from_slice(signature.r().to_be_bytes::<32>().as_slice()); + signature_bytes[32..64].copy_from_slice(signature.s().to_be_bytes::<32>().as_slice()); + signature_bytes[64] = (signature.v() as u8) + 27; + + let mut proof_data = Vec::with_capacity(161); + proof_data.extend_from_slice(&checkpoint_encoded); + proof_data.extend_from_slice(&signature_bytes); + Ok(Bytes::from(proof_data)) + } + + // Surge: Multicall builders + + fn build_user_op_call(&self, user_op_data: UserOpData) -> Multicall::Call { + let submitter = UserOpsSubmitter::new(user_op_data.user_op_submitter, &self.provider); + let call = + submitter.executeBatch(vec![user_op_data.user_op], user_op_data.user_op_signature); + + Multicall::Call { + target: user_op_data.user_op_submitter, + value: U256::ZERO, + data: call.calldata().clone(), + } + } + + async fn build_propose_call( + &self, + batch: &Proposal, + inbox_address: Address, + ) -> Result { + let mut block_manifests = >::with_capacity(batch.l2_blocks.len()); + for l2_block in &batch.l2_blocks { // Build the block manifests. block_manifests.push(BlockManifest { timestamp: l2_block.timestamp_sec, @@ -125,21 +212,31 @@ impl ProposalTxBuilder { numBlobs: sidecar.blobs.len().try_into()?, offset: U24::ZERO, }, - numForcedInclusions: u16::from(num_forced_inclusion), // TODO SHASTA: receive this as u16 parameter + numForcedInclusions: u8::from(batch.num_forced_inclusion), }; - let inbox = Inbox::new(to, self.provider.clone()); + let inbox = SurgeInbox::new(inbox_address, self.provider.clone()); let encoded_proposal_input = inbox.encodeProposeInput(input).call().await?; - let tx = TransactionRequest::default() - .with_from(from) - .with_to(to) - .with_blob_sidecar(sidecar) - .with_call(&Inbox::proposeCall { - _lookahead: Bytes::new(), - _data: encoded_proposal_input, - }); + // Surge: using `proposeWithProof(..)` in Surge Inbox + let proof_data = self.build_proof_data(&batch.checkpoint).await?; + let call = inbox.proposeWithProof(Bytes::new(), encoded_proposal_input, proof_data); - Ok(tx) + Ok(Multicall::Call { + target: inbox_address, + value: U256::ZERO, + data: call.calldata().clone(), + }) + } + + fn build_l1_call_call(&self, l1_call: L1Call, bridge_address: Address) -> Multicall::Call { + let bridge = Bridge::new(bridge_address, &self.provider); + let call = bridge.processMessage(l1_call.message_from_l2, l1_call.signal_slot_proof); + + Multicall::Call { + target: bridge_address, + value: U256::ZERO, + data: call.calldata().clone(), + } } } diff --git a/shasta/src/l2/abi/Anchor.json b/shasta/src/l2/abi/Anchor.json new file mode 100644 index 00000000..d15338fb --- /dev/null +++ b/shasta/src/l2/abi/Anchor.json @@ -0,0 +1,705 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "_checkpointStore", + "type": "address", + "internalType": "contract ICheckpointStore" + }, + { + "name": "_l1ChainId", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "ANCHOR_GAS_LIMIT", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "GOLDEN_TOUCH_ADDRESS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "acceptOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "anchorV4", + "inputs": [ + { + "name": "_checkpoint", + "type": "tuple", + "internalType": "struct ICheckpointStore.Checkpoint", + "components": [ + { + "name": "blockNumber", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "blockHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "stateRoot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "anchorV4WithSignalSlots", + "inputs": [ + { + "name": "_checkpoint", + "type": "tuple", + "internalType": "struct ICheckpointStore.Checkpoint", + "components": [ + { + "name": "blockNumber", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "blockHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "stateRoot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "name": "_signalSlots", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "anchorV5", + "inputs": [ + { + "name": "_proposalParams", + "type": "tuple", + "internalType": "struct Anchor.ProposalParams", + "components": [ + { + "name": "submissionWindowEnd", + "type": "uint48", + "internalType": "uint48" + } + ] + }, + { + "name": "_blockParams", + "type": "tuple", + "internalType": "struct Anchor.BlockParams", + "components": [ + { + "name": "anchorBlockNumber", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "anchorBlockHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "anchorStateRoot", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "rawTxListHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "blockHashes", + "inputs": [ + { + "name": "blockNumber", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "blockHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "checkpointStore", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ICheckpointStore" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBlockState", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct Anchor.BlockState", + "components": [ + { + "name": "anchorBlockNumber", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "ancestorsHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPreconfMetadata", + "inputs": [ + { + "name": "_blockNumber", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct Anchor.PreconfMetadata", + "components": [ + { + "name": "anchorBlockNumber", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "submissionWindowEnd", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "parentSubmissionWindowEnd", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "rawTxListHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "parentRawTxListHash", + "type": "bytes32", + "internalType": "bytes32" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "impl", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "inNonReentrant", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "init", + "inputs": [ + { + "name": "_owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "l1ChainId", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pause", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "paused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resolver", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unpause", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeTo", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "withdraw", + "inputs": [ + { + "name": "_token", + "type": "address", + "internalType": "address" + }, + { + "name": "_to", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AdminChanged", + "inputs": [ + { + "name": "previousAdmin", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newAdmin", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Anchored", + "inputs": [ + { + "name": "prevAnchorBlockNumber", + "type": "uint48", + "indexed": false, + "internalType": "uint48" + }, + { + "name": "anchorBlockNumber", + "type": "uint48", + "indexed": false, + "internalType": "uint48" + }, + { + "name": "ancestorsHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BeaconUpgraded", + "inputs": [ + { + "name": "beacon", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferStarted", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Paused", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Unpaused", + "inputs": [ + { + "name": "account", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Withdrawn", + "inputs": [ + { + "name": "token", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ACCESS_DENIED", + "inputs": [] + }, + { + "type": "error", + "name": "AncestorsHashMismatch", + "inputs": [] + }, + { + "type": "error", + "name": "ETH_TRANSFER_FAILED", + "inputs": [] + }, + { + "type": "error", + "name": "FUNC_NOT_IMPLEMENTED", + "inputs": [] + }, + { + "type": "error", + "name": "INVALID_PAUSE_STATUS", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidAddress", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidBlockNumber", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidL1ChainId", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidL2ChainId", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidSender", + "inputs": [] + }, + { + "type": "error", + "name": "REENTRANT_CALL", + "inputs": [] + }, + { + "type": "error", + "name": "ZERO_ADDRESS", + "inputs": [] + }, + { + "type": "error", + "name": "ZERO_VALUE", + "inputs": [] + } + ] +} \ No newline at end of file diff --git a/shasta/src/l2/abi/Bridge.json b/shasta/src/l2/abi/Bridge.json deleted file mode 100644 index 60f86e2d..00000000 --- a/shasta/src/l2/abi/Bridge.json +++ /dev/null @@ -1 +0,0 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"_resolver","type":"address","internalType":"address"},{"name":"_signalService","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"GAS_OVERHEAD","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"GAS_RESERVE","inputs":[],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"view"},{"type":"function","name":"RELAYER_MAX_PROOF_BYTES","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"acceptOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"context","inputs":[],"outputs":[{"name":"ctx_","type":"tuple","internalType":"struct IBridge.Context","components":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"}]}],"stateMutability":"view"},{"type":"function","name":"failMessage","inputs":[{"name":"_message","type":"tuple","internalType":"struct IBridge.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"fee","type":"uint64","internalType":"uint64"},{"name":"gasLimit","type":"uint32","internalType":"uint32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"},{"name":"srcOwner","type":"address","internalType":"address"},{"name":"destChainId","type":"uint64","internalType":"uint64"},{"name":"destOwner","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getMessageMinGasLimit","inputs":[{"name":"dataLength","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint32","internalType":"uint32"}],"stateMutability":"pure"},{"type":"function","name":"hashMessage","inputs":[{"name":"_message","type":"tuple","internalType":"struct IBridge.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"fee","type":"uint64","internalType":"uint64"},{"name":"gasLimit","type":"uint32","internalType":"uint32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"},{"name":"srcOwner","type":"address","internalType":"address"},{"name":"destChainId","type":"uint64","internalType":"uint64"},{"name":"destOwner","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"impl","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"inNonReentrant","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"init","inputs":[{"name":"_owner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"init2","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isDestChainEnabled","inputs":[{"name":"_chainId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"enabled_","type":"bool","internalType":"bool"},{"name":"destBridge_","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"isMessageFailed","inputs":[{"name":"_message","type":"tuple","internalType":"struct IBridge.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"fee","type":"uint64","internalType":"uint64"},{"name":"gasLimit","type":"uint32","internalType":"uint32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"},{"name":"srcOwner","type":"address","internalType":"address"},{"name":"destChainId","type":"uint64","internalType":"uint64"},{"name":"destOwner","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]},{"name":"_proof","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isMessageReceived","inputs":[{"name":"_message","type":"tuple","internalType":"struct IBridge.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"fee","type":"uint64","internalType":"uint64"},{"name":"gasLimit","type":"uint32","internalType":"uint32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"},{"name":"srcOwner","type":"address","internalType":"address"},{"name":"destChainId","type":"uint64","internalType":"uint64"},{"name":"destOwner","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]},{"name":"_proof","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isMessageSent","inputs":[{"name":"_message","type":"tuple","internalType":"struct IBridge.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"fee","type":"uint64","internalType":"uint64"},{"name":"gasLimit","type":"uint32","internalType":"uint32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"},{"name":"srcOwner","type":"address","internalType":"address"},{"name":"destChainId","type":"uint64","internalType":"uint64"},{"name":"destOwner","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"messageStatus","inputs":[{"name":"msgHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"status","type":"uint8","internalType":"enum IBridge.Status"}],"stateMutability":"view"},{"type":"function","name":"nextMessageId","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"pause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"paused","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"pendingOwner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"processMessage","inputs":[{"name":"_message","type":"tuple","internalType":"struct IBridge.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"fee","type":"uint64","internalType":"uint64"},{"name":"gasLimit","type":"uint32","internalType":"uint32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"},{"name":"srcOwner","type":"address","internalType":"address"},{"name":"destChainId","type":"uint64","internalType":"uint64"},{"name":"destOwner","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]},{"name":"_proof","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"status_","type":"uint8","internalType":"enum IBridge.Status"},{"name":"reason_","type":"uint8","internalType":"enum IBridge.StatusReason"}],"stateMutability":"nonpayable"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recallMessage","inputs":[{"name":"_message","type":"tuple","internalType":"struct IBridge.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"fee","type":"uint64","internalType":"uint64"},{"name":"gasLimit","type":"uint32","internalType":"uint32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"},{"name":"srcOwner","type":"address","internalType":"address"},{"name":"destChainId","type":"uint64","internalType":"uint64"},{"name":"destOwner","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]},{"name":"_proof","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resolver","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"retryMessage","inputs":[{"name":"_message","type":"tuple","internalType":"struct IBridge.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"fee","type":"uint64","internalType":"uint64"},{"name":"gasLimit","type":"uint32","internalType":"uint32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"},{"name":"srcOwner","type":"address","internalType":"address"},{"name":"destChainId","type":"uint64","internalType":"uint64"},{"name":"destOwner","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]},{"name":"_isLastAttempt","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sendMessage","inputs":[{"name":"_message","type":"tuple","internalType":"struct IBridge.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"fee","type":"uint64","internalType":"uint64"},{"name":"gasLimit","type":"uint32","internalType":"uint32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"},{"name":"srcOwner","type":"address","internalType":"address"},{"name":"destChainId","type":"uint64","internalType":"uint64"},{"name":"destOwner","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"msgHash_","type":"bytes32","internalType":"bytes32"},{"name":"message_","type":"tuple","internalType":"struct IBridge.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"fee","type":"uint64","internalType":"uint64"},{"name":"gasLimit","type":"uint32","internalType":"uint32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"},{"name":"srcOwner","type":"address","internalType":"address"},{"name":"destChainId","type":"uint64","internalType":"uint64"},{"name":"destOwner","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]}],"stateMutability":"payable"},{"type":"function","name":"signalForFailedMessage","inputs":[{"name":"_msgHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"signalService","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ISignalService"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeTo","inputs":[{"name":"newImplementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"AdminChanged","inputs":[{"name":"previousAdmin","type":"address","indexed":false,"internalType":"address"},{"name":"newAdmin","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"BeaconUpgraded","inputs":[{"name":"beacon","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"MessageProcessed","inputs":[{"name":"msgHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"message","type":"tuple","indexed":false,"internalType":"struct IBridge.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"fee","type":"uint64","internalType":"uint64"},{"name":"gasLimit","type":"uint32","internalType":"uint32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"},{"name":"srcOwner","type":"address","internalType":"address"},{"name":"destChainId","type":"uint64","internalType":"uint64"},{"name":"destOwner","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]},{"name":"stats","type":"tuple","indexed":false,"internalType":"struct Bridge.ProcessingStats","components":[{"name":"gasUsedInFeeCalc","type":"uint32","internalType":"uint32"},{"name":"proofSize","type":"uint32","internalType":"uint32"},{"name":"numCacheOps","type":"uint32","internalType":"uint32"},{"name":"processedByRelayer","type":"bool","internalType":"bool"}]}],"anonymous":false},{"type":"event","name":"MessageSent","inputs":[{"name":"msgHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"message","type":"tuple","indexed":false,"internalType":"struct IBridge.Message","components":[{"name":"id","type":"uint64","internalType":"uint64"},{"name":"fee","type":"uint64","internalType":"uint64"},{"name":"gasLimit","type":"uint32","internalType":"uint32"},{"name":"from","type":"address","internalType":"address"},{"name":"srcChainId","type":"uint64","internalType":"uint64"},{"name":"srcOwner","type":"address","internalType":"address"},{"name":"destChainId","type":"uint64","internalType":"uint64"},{"name":"destOwner","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}]}],"anonymous":false},{"type":"event","name":"MessageStatusChanged","inputs":[{"name":"msgHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"status","type":"uint8","indexed":false,"internalType":"enum IBridge.Status"}],"anonymous":false},{"type":"event","name":"OwnershipTransferStarted","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"account","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"ACCESS_DENIED","inputs":[]},{"type":"error","name":"B_INSUFFICIENT_GAS","inputs":[]},{"type":"error","name":"B_INVALID_CHAINID","inputs":[]},{"type":"error","name":"B_INVALID_CONTEXT","inputs":[]},{"type":"error","name":"B_INVALID_FEE","inputs":[]},{"type":"error","name":"B_INVALID_GAS_LIMIT","inputs":[]},{"type":"error","name":"B_INVALID_STATUS","inputs":[]},{"type":"error","name":"B_INVALID_VALUE","inputs":[]},{"type":"error","name":"B_MESSAGE_NOT_SENT","inputs":[]},{"type":"error","name":"B_PERMISSION_DENIED","inputs":[]},{"type":"error","name":"B_PROOF_TOO_LARGE","inputs":[]},{"type":"error","name":"B_RETRY_FAILED","inputs":[]},{"type":"error","name":"B_SIGNAL_NOT_RECEIVED","inputs":[]},{"type":"error","name":"ETH_TRANSFER_FAILED","inputs":[]},{"type":"error","name":"FUNC_NOT_IMPLEMENTED","inputs":[]},{"type":"error","name":"INVALID_PAUSE_STATUS","inputs":[]},{"type":"error","name":"REENTRANT_CALL","inputs":[]},{"type":"error","name":"RESOLVER_NOT_FOUND","inputs":[]},{"type":"error","name":"ZERO_ADDRESS","inputs":[]},{"type":"error","name":"ZERO_VALUE","inputs":[]}],"bytecode":{"object":"0x60e060405230608052348015610013575f5ffd5b5060405161379838038061379883398101604081905261003291610151565b8161003b61007a565b6001600160a01b03811661006257604051634b6f57f560e01b815260040160405180910390fd5b6001600160a01b0390811660a0521660c05250610182565b5f54610100900460ff16156100e55760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610134575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b038116811461014c575f5ffd5b919050565b5f5f60408385031215610162575f5ffd5b61016b83610136565b915061017960208401610136565b90509250929050565b60805160a05160c05161357c61021c5f395f8181610439015281816107310152818161085901528181610d0401528181610f0a01528181610f530152818161149401528181611514015281816117b7015281816118bb0152818161194e0152611abb01525f818161022f015261252d01525f81816111e9015281816112290152818161130b0152818161134b01526113c2015261357c5ff3fe6080604052600436106101fc575f3560e01c8063715018a611610113578063a730cdfb1161009d578063d0496d6a1161006d578063d0496d6a146105e2578063d1aaa5df1461062a578063e30c39781461064a578063eefbf17e14610667578063f2fde38b146106a5575f5ffd5b8063a730cdfb14610578578063b8acae0e1461058e578063be880c81146105ad578063c012fa77146105c3575f5ffd5b80638abf6077116100e35780638abf6077146104cb5780638da5cb5b146104df5780638e3881a9146104fc578063913b16cb1461053a5780639efc7a2e14610559575f5ffd5b8063715018a61461045b57806379ba50971461046f5780637cbadfaa146104835780638456cb59146104b7575f5ffd5b80633c6cf4731161019457806352d1902d1161016457806352d1902d146103b65780635862f6e1146103ca5780635c975abb146103e957806360620c6b1461040957806362d0945314610428575f5ffd5b80633c6cf473146103305780633f4ba83a1461036b578063422770fa1461037f5780634f1ef286146103a3575f5ffd5b80631bdb0037116101cf5780631bdb00371461029f5780632035065e146102c05780633075db56146102ed5780633659cfe614610311575f5ffd5b80630432873c1461020057806304f3bcec14610221578063069489a21461026c57806319ab453c14610280575b5f5ffd5b34801561020b575f5ffd5b5061021f61021a3660046129c9565b6106c4565b005b34801561022c575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020015b60405180910390f35b348015610277575f5ffd5b5061021f6108fc565b34801561028b575f5ffd5b5061021f61029a366004612a3b565b6109b3565b6102b26102ad366004612a56565b610a79565b604051610263929190612be2565b3480156102cb575f5ffd5b506102df6102da366004612bfa565b610d8b565b604051610263929190612cb7565b3480156102f8575f5ffd5b506103016111c7565b6040519015158152602001610263565b34801561031c575f5ffd5b5061021f61032b366004612a3b565b6111df565b34801561033b575f5ffd5b5061035e61034a366004612ce2565b60fc6020525f908152604090205460ff1681565b6040516102639190612cf9565b348015610376575f5ffd5b5061021f6112a6565b34801561038a575f5ffd5b5061039562030d4081565b604051908152602001610263565b61021f6103b1366004612dcd565b611301565b3480156103c1575f5ffd5b506103956113b6565b3480156103d5575f5ffd5b506103016103e4366004612bfa565b611468565b3480156103f4575f5ffd5b5061030160c954610100900460ff1660021490565b348015610414575f5ffd5b50610301610423366004612a56565b6114e3565b348015610433575f5ffd5b5061024f7f000000000000000000000000000000000000000000000000000000000000000081565b348015610466575f5ffd5b5061021f6115b7565b34801561047a575f5ffd5b5061021f6115c8565b34801561048e575f5ffd5b506104a261049d366004612ce2565b61163f565b60405163ffffffff9091168152602001610263565b3480156104c2575f5ffd5b5061021f61165d565b3480156104d6575f5ffd5b5061024f6116b2565b3480156104ea575f5ffd5b506033546001600160a01b031661024f565b348015610507575f5ffd5b5061051b610516366004612e2f565b6116c0565b6040805192151583526001600160a01b03909116602083015201610263565b348015610545575f5ffd5b5061021f610554366004612a56565b6116ec565b348015610564575f5ffd5b5061021f610573366004612bfa565b61183a565b348015610583575f5ffd5b506104a26201d4c081565b348015610599575f5ffd5b506103016105a8366004612bfa565b611a8f565b3480156105b8575f5ffd5b506104a2620c350081565b3480156105ce575f5ffd5b506103956105dd366004612f48565b611af6565b3480156105ed575f5ffd5b506105f6611b25565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610263565b348015610635575f5ffd5b50610395610644366004612ce2565b60031890565b348015610655575f5ffd5b506065546001600160a01b031661024f565b348015610672575f5ffd5b5060fb5461068d90600160401b90046001600160401b031681565b6040516001600160401b039091168152602001610263565b3480156106b0575f5ffd5b5061021f6106bf366004612a3b565b611bcc565b6106d460e0830160c08401612e2f565b6106dd81611c3d565b6106ed60a0840160808501612e2f565b6106f681611c66565b6106fe611ca2565b610706611cd4565b6107106002611d03565b5f61071d6105dd86612f79565b905061072a816001611d19565b5f610755867f0000000000000000000000000000000000000000000000000000000000000000611d6b565b156107a0576107998661012001356188b860405180602001604052805f8152508960e00160208101906107889190612a3b565b6001600160a01b0316929190611e62565b905061081a565b6107b06060870160408801612f84565b63ffffffff1615806107bf5750845b80156107ed57506107d7610100870160e08801612a3b565b6001600160a01b0316336001600160a01b031614155b1561080b576040516372b6e1c360e11b815260040160405180910390fd5b61081786835a5f611e9f565b90505b80156108305761082b826002611fc3565b6108ea565b84156108d157610841826003611fc3565b60405163019b28af60e61b81526003831860048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906366ca2bc0906024016020604051808303815f875af11580156108a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108cb9190612f9d565b506108ea565b60405163161e3ead60e01b815260040160405180910390fd5b50506108f66001611d03565b50505050565b610904612080565b5f54600290610100900460ff1615801561092457505f5460ff8083169116105b6109495760405162461bcd60e51b815260040161094090612fb4565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156109d157505f54600160ff909116105b806109ea5750303b1580156109ea57505f5460ff166001145b610a065760405162461bcd60e51b815260040161094090612fb4565b5f805460ff191660011790558015610a27575f805461ff0019166101001790555b610a30826120da565b8015610a75575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610adf60c0840160a08501612a3b565b610ae881612138565b610af9610100850160e08601612a3b565b610b0281612138565b610b1461012086016101008701612a3b565b610b1d81612138565b610b2d60e0870160c08801612e2f565b610b3681611c66565b610b3e611ca2565b610b46611cd4565b610b506002611d03565b610b606060880160408901612f84565b63ffffffff165f03610ba857610b7c6040880160208901612e2f565b6001600160401b031615610ba35760405163c9f5178760e01b815260040160405180910390fd5b610bd0565b610bb18761215f565b5f03610bd0576040516308c2ad5360e01b815260040160405180910390fd5b5f610be461051660e08a0160c08b01612e2f565b50905080610c0557604051631c6c777560e31b815260040160405180910390fd5b34610c1660408a0160208b01612e2f565b610c2e906001600160401b03166101208b0135613016565b14610c4c57604051634ac2abdf60e11b815260040160405180910390fd5b610c5588612f79565b60fb8054919750600160401b9091046001600160401b0316906008610c7983613029565b82546101009290920a6001600160401b03818102199093169183160217909155908116875233606088015246166080870152610cb486611af6565b9650867fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351787604051610ce69190613053565b60405180910390a260405163019b28af60e61b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906366ca2bc0906024016020604051808303815f875af1158015610d52573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d769190612f9d565b5050610d826001611d03565b50505050915091565b5f5f610d95611ca2565b610d9d611cd4565b610da76002611d03565b5f5a905046610dbc60e0880160c08901612e2f565b6001600160401b031614610de357604051631c6c777560e31b815260040160405180910390fd5b610df360a0870160808801612e2f565b6001600160401b03161580610e1f575046610e1460a0880160808901612e2f565b6001600160401b0316145b15610e3d57604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610e71610100880160e08901612a3b565b6001600160a01b0316331480156060830152610ee057610e976060880160408901612f84565b63ffffffff165f03610ebc576040516372b6e1c360e11b815260040160405180910390fd5b62030d40851115610ee057604051631e3b03c960e01b815260040160405180910390fd5b5f610eed6105dd89612f79565b9050610ef9815f611d19565b63ffffffff86166020830152610f417f000000000000000000000000000000000000000000000000000000000000000082610f3a60a08c0160808d01612e2f565b8a8a6121b2565b63ffffffff1660408301525f610f77897f0000000000000000000000000000000000000000000000000000000000000000611d6b565b15610f9057506002945060019350610120880135610fd7565b5f8360600151610fa0575a610fa9565b610fa98a61215f565b9050610fbb8a84838760600151611e9f565b15610fcc57600296505f9550610fd5565b60019650600295505b505b610fe760408a0160208b01612e2f565b6001600160401b0316156111455761100560408a0160208b01612e2f565b611018906001600160401b031682613016565b90508260600151801561103f575061103660608a0160408b01612f84565b63ffffffff1615155b1561114557604083015163ffffffff16614e20025a61107c6110656101408d018d613065565b6020601f909101819004026101a00160041b919050565b63ffffffff9081168701919091036201d4c00181168086525f9183916110a59183919061225d16565b0390505f6110b960608d0160408e01612f84565b63ffffffff166110cf60408e0160208f01612e2f565b6001600160401b03168302816110e7576110e76130ae565b0490505f48830290505f61112b8e60200160208101906111079190612e2f565b6001600160401b0316848410156111235784840160011c611125565b845b90612272565b9586900395905061113f33826188b8612286565b50505050505b61116d816188b861115d6101008d0160e08e01612a3b565b6001600160a01b03169190612286565b6111778287611fc3565b817f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8a856040516111a9929190613246565b60405180910390a2505050506111bf6001611d03565b935093915050565b5f60026111d660c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036112275760405162461bcd60e51b81526004016109409061329a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112596122c9565b6001600160a01b03161461127f5760405162461bcd60e51b8152600401610940906132e6565b611288816122e4565b604080515f808252602082019092526112a3918391906122ec565b50565b6112ae612456565b6112c260c9805461ff001916610100179055565b6040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9060200160405180910390a16112ff335f612487565b565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036113495760405162461bcd60e51b81526004016109409061329a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661137b6122c9565b6001600160a01b0316146113a15760405162461bcd60e51b8152600401610940906132e6565b6113aa826122e4565b610a75828260016122ec565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114555760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610940565b505f5160206135005f395f51905f525b90565b5f4661147a60a0860160808701612e2f565b6001600160401b03161461148f57505f6114dc565b6114d97f00000000000000000000000000000000000000000000000000000000000000006114c26106446105dd88612f79565b6114d260e0880160c08901612e2f565b868661248f565b90505b9392505050565b5f466114f560a0840160808501612e2f565b6001600160401b03161461150a57505f919050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166332676bc6306115466105dd86612f79565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561158d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b19190613332565b92915050565b6115bf612080565b6112ff5f612511565b60655433906001600160a01b031681146116365760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610940565b6112a381612511565b5f6115b1620c35006101a06020601f8601819004020160041b61334d565b611665611ca2565b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200160405180910390a16112ff336001612487565b5f6116bb6122c9565b905090565b5f5f6116d7836562726964676560d01b600161252a565b6001600160a01b038116151594909350915050565b6116fc60e0820160c08301612e2f565b61170581611c3d565b61171560a0830160808401612e2f565b61171e81611c66565b611726611ca2565b61172e611cd4565b6117386002611d03565b611749610100840160e08501612a3b565b6001600160a01b0316336001600160a01b03161461177a576040516372b6e1c360e11b815260040160405180910390fd5b5f6117876105dd85612f79565b9050611794816001611d19565b61179f816003611fc3565b60405163019b28af60e61b81526003821860048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906366ca2bc0906024016020604051808303815f875af1158015611805573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118299190612f9d565b50506118356001611d03565b505050565b61184a60a0840160808501612e2f565b61185381611c3d565b61186360e0850160c08601612e2f565b61186c81611c66565b611874611ca2565b61187c611cd4565b6118866002611d03565b5f6118936105dd87612f79565b905061189f815f611d19565b604051631933b5e360e11b8152306004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906332676bc690604401602060405180830381865afa158015611908573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192c9190613332565b6119495760405163ab035ad560e01b815260040160405180910390fd5b6119887f00000000000000000000000000000000000000000000000000000000000000006003831861198160e08a0160c08b01612e2f565b88886121b2565b50611994816004611fc3565b6119bd62bc399d60e11b6119ae6080890160608a01612a3b565b6001600160a01b0316906125cc565b15611a61576119dc81306119d760a08a0160808b01612e2f565b61269c565b6119ec6080870160608801612a3b565b6001600160a01b0316630178733a87610120013588846040518463ffffffff1660e01b8152600401611a1f929190613369565b5f604051808303818588803b158015611a36575f5ffd5b505af1158015611a48573d5f5f3e3d5ffd5b5050505050611a5c5f195f1b5f198061269c565b611a7d565b611a7d6101208701356188b861115d60c08a0160a08b01612a3b565b50611a886001611d03565b5050505050565b5f46611aa160e0860160c08701612e2f565b6001600160401b031614611ab657505f6114dc565b6114d97f0000000000000000000000000000000000000000000000000000000000000000611ae66105dd87612f79565b6114d260a0880160808901612e2f565b5f81604051602001611b08919061338a565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611b9c604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611bae575080515f19145b1561146557604051635ceed17360e01b815260040160405180910390fd5b611bd4612080565b606580546001600160a01b0383166001600160a01b03199091168117909155611c056033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b46816001600160401b0316146112a357604051631c6c777560e31b815260040160405180910390fd5b6001600160401b0381161580611c84575046816001600160401b0316145b156112a357604051631c6c777560e31b815260040160405180910390fd5b611cb660c954610100900460ff1660021490565b156112ff5760405163bae6e2a960e01b815260040160405180910390fd5b6002611ce260c95460ff1690565b60ff16036112ff5760405163dfc60d8560e01b815260040160405180910390fd5b60c9805460ff191660ff92909216919091179055565b806004811115611d2b57611d2b612c8f565b5f83815260fc602052604090205460ff166004811115611d4d57611d4d612c8f565b14610a75576040516319d893ad60e21b815260040160405180910390fd5b5f80611d7f61012085016101008601612a3b565b6001600160a01b031603611d95575060016115b1565b30611da861012085016101008601612a3b565b6001600160a01b031603611dbe575060016115b1565b6001600160a01b038216611dda61012085016101008601612a3b565b6001600160a01b031603611df0575060016115b1565b6004611e00610140850185613065565b905010158015611e375750637f07c94760e01b611e21610140850185613065565b611e2a916133c0565b6001600160e01b03191614155b80156114dc57506114dc611e5361012085016101008601612a3b565b6001600160a01b03163b151590565b5f6001600160a01b038516611e8a57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f30611eb16080870160608801612a3b565b6001600160a01b031603611ec757611ec76133f8565b610120850135158015611ee75750611ee3610140860186613065565b1590505b15611ef457506001611fbb565b825f03611f0257505f611fbb565b611f2684611f166080880160608901612a3b565b6119d760a0890160808a01612e2f565b5f611f3961012087016101008801612a3b565b90506101208601355f611f50610140890189613065565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a90508515611faa57611faa81886126f1565b611fb65f19808061269c565b505050505b949350505050565b806004811115611fd557611fd5612c8f565b5f83815260fc602052604090205460ff166004811115611ff757611ff7612c8f565b03612015576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff1916600183600481111561203f5761203f612c8f565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516120749190612cf9565b60405180910390a25050565b6033546001600160a01b031633146112ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610940565b5f54610100900460ff166121005760405162461bcd60e51b81526004016109409061340c565b612108612705565b6121266001600160a01b038216156121205781612511565b33612511565b5060c9805461ff001916610100179055565b6001600160a01b0381166112a35760405163538ba4f960e01b815260040160405180910390fd5b5f80612179612172610140850185613065565b905061163f565b63ffffffff169050806121aa6121956060860160408701612f84565b63ffffffff168361225d90919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856121d7876562726964676560d01b5f61252a565b8887876040518663ffffffff1660e01b81526004016121fa959493929190613457565b6020604051808303815f875af1925050508015612234575060408051601f3d908101601f1916820190925261223191810190612f9d565b60015b612251576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f81831161226b57816114dc565b5090919050565b5f81831161228057826114dc565b50919050565b815f0361229257505050565b6122ac83838360405180602001604052805f815250611e62565b61183557604051634c67134d60e11b815260040160405180910390fd5b5f5160206135005f395f51905f52546001600160a01b031690565b6112a3612080565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561231f576118358361272b565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612379575060408051601f3d908101601f1916820190925261237691810190612f9d565b60015b6123dc5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610940565b5f5160206135005f395f51905f52811461244a5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610940565b506118358383836127c6565b61246a60c954610100900460ff1660021490565b6112ff5760405163bae6e2a960e01b815260040160405180910390fd5b610a75612080565b5f856001600160a01b031663ce9d0820856124b4876562726964676560d01b5f61252a565b8887876040518663ffffffff1660e01b81526004016124d7959493929190613457565b5f6040518083038186803b1580156124ed575f5ffd5b505afa9250505080156124fe575060015b61250957505f612254565b506001612254565b606580546001600160a01b03191690556112a3816127ea565b5f7f0000000000000000000000000000000000000000000000000000000000000000604051633632b1fb60e11b81526001600160401b03861660048201526024810185905283151560448201526001600160a01b039190911690636c6563f690606401602060405180830381865afa1580156125a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114d99190613498565b6040516001600160e01b0319821660248201525f90819081906001600160a01b0386169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525161262891906134b3565b5f60405180830381855afa9150503d805f8114612660576040519150601f19603f3d011682016040523d82523d5f602084013e612665565b606091505b5091509150818015612678575080516020145b1561269457808060200190518101906126919190613332565b92505b505092915050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b6126fc603f826134ce565b821015610a7557fe5b5f54610100900460ff166112ff5760405162461bcd60e51b81526004016109409061340c565b6001600160a01b0381163b6127985760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610940565b5f5160206135005f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6127cf8361283b565b5f825111806127db5750805b15611835576108f6838361287a565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6128448161272b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606114dc83836040518060600160405280602781526020016135206027913960605f5f856001600160a01b0316856040516128b691906134b3565b5f60405180830381855af49150503d805f81146128ee576040519150601f19603f3d011682016040523d82523d5f602084013e6128f3565b606091505b50915091506129048683838761290e565b9695505050505050565b6060831561297c5782515f03612975576001600160a01b0385163b6129755760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610940565b5081611fbb565b611fbb83838151156129915781518083602001fd5b8060405162461bcd60e51b815260040161094091906134ed565b5f6101608284031215612280575f5ffd5b80151581146112a3575f5ffd5b5f5f604083850312156129da575f5ffd5b82356001600160401b038111156129ef575f5ffd5b6129fb858286016129ab565b9250506020830135612a0c816129bc565b809150509250929050565b6001600160a01b03811681146112a3575f5ffd5b8035612a3681612a17565b919050565b5f60208284031215612a4b575f5ffd5b81356114dc81612a17565b5f60208284031215612a66575f5ffd5b81356001600160401b03811115612a7b575f5ffd5b611fbb848285016129ab565b5f5b83811015612aa1578181015183820152602001612a89565b50505f910152565b5f8151808452612ac0816020860160208601612a87565b601f01601f19169290920160200192915050565b80516001600160401b031682525f6020820151612afc60208501826001600160401b03169052565b506040820151612b14604085018263ffffffff169052565b506060820151612b2f60608501826001600160a01b03169052565b506080820151612b4a60808501826001600160401b03169052565b5060a0820151612b6560a08501826001600160a01b03169052565b5060c0820151612b8060c08501826001600160401b03169052565b5060e0820151612b9b60e08501826001600160a01b03169052565b50610100820151612bb86101008501826001600160a01b03169052565b50610120820151610120840152610140820151610160610140850152611fbb610160850182612aa9565b828152604060208201525f6114d96040830184612ad4565b5f5f5f60408486031215612c0c575f5ffd5b83356001600160401b03811115612c21575f5ffd5b612c2d868287016129ab565b93505060208401356001600160401b03811115612c48575f5ffd5b8401601f81018613612c58575f5ffd5b80356001600160401b03811115612c6d575f5ffd5b866020828401011115612c7e575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b60058110612cb357612cb3612c8f565b9052565b60408101612cc58285612ca3565b60048310612cd557612cd5612c8f565b8260208301529392505050565b5f60208284031215612cf2575f5ffd5b5035919050565b602081016115b18284612ca3565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b0381118282101715612d3e57612d3e612d07565b60405290565b5f82601f830112612d53575f5ffd5b81356001600160401b03811115612d6c57612d6c612d07565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612d9a57612d9a612d07565b604052818152838201602001851015612db1575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215612dde575f5ffd5b8235612de981612a17565b915060208301356001600160401b03811115612e03575f5ffd5b612e0f85828601612d44565b9150509250929050565b80356001600160401b0381168114612a36575f5ffd5b5f60208284031215612e3f575f5ffd5b6114dc82612e19565b803563ffffffff81168114612a36575f5ffd5b5f6101608284031215612e6c575f5ffd5b612e74612d1b565b9050612e7f82612e19565b8152612e8d60208301612e19565b6020820152612e9e60408301612e48565b6040820152612eaf60608301612a2b565b6060820152612ec060808301612e19565b6080820152612ed160a08301612a2b565b60a0820152612ee260c08301612e19565b60c0820152612ef360e08301612a2b565b60e0820152612f056101008301612a2b565b61010082015261012082810135908201526101408201356001600160401b03811115612f2f575f5ffd5b612f3b84828501612d44565b6101408301525092915050565b5f60208284031215612f58575f5ffd5b81356001600160401b03811115612f6d575f5ffd5b611fbb84828501612e5b565b5f6115b13683612e5b565b5f60208284031215612f94575f5ffd5b6114dc82612e48565b5f60208284031215612fad575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156115b1576115b1613002565b5f6001600160401b0382166001600160401b03810361304a5761304a613002565b60010192915050565b602081525f6114dc6020830184612ad4565b5f5f8335601e1984360301811261307a575f5ffd5b8301803591506001600160401b03821115613093575f5ffd5b6020019150368190038213156130a7575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e198436030181126130d7575f5ffd5b83016020810192503590506001600160401b038111156130f5575f5ffd5b8036038213156130a7575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6131458261313883612e19565b6001600160401b03169052565b5f61315260208301612e19565b6001600160401b0316602084015261316c60408301612e48565b63ffffffff16604084015261318360608301612a2b565b6001600160a01b0316606084015261319d60808301612e19565b6001600160401b031660808401526131b760a08301612a2b565b6001600160a01b031660a08401526131d160c08301612e19565b6001600160401b031660c08401526131eb60e08301612a2b565b6001600160a01b031660e08401526132066101008301612a2b565b6001600160a01b0316610100840152610120828101359084015261322e6101408301836130c2565b61016061014086015261269161016086018284613103565b60a081525f61325860a083018561312b565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f60208284031215613342575f5ffd5b81516114dc816129bc565b63ffffffff81811683821601908111156115b1576115b1613002565b604081525f61337b604083018561312b565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f6114dc6080830184612ad4565b80356001600160e01b031981169060048410156133f1576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f61348d608083018486613103565b979650505050505050565b5f602082840312156134a8575f5ffd5b81516114dc81612a17565b5f82516134c4818460208701612a87565b9190910192915050565b5f826134e857634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6114dc6020830184612aa956fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d82c8f7c970681ddfa323cbf4b55420679e492c19c2d89df90bab3191259c47f64736f6c634300081e0033","sourceMap":"643:25624:9:-:0;;;1088:4:84;1045:48;;3630:189:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3741:9;4375:22:12;:20;:22::i;:::-;-1:-1:-1;;;;;1688:23:13;;1680:54;;;;-1:-1:-1;;;1680:54:13;;;;;;;;;;;;-1:-1:-1;;;;;1744:22:13;;;;;3766:46:9::1;;::::0;-1:-1:-1;643:25624:9;;5939:280:48;6007:13;;;;;;;6006:14;5998:66;;;;-1:-1:-1;;;5998:66:48;;696:2:150;5998:66:48;;;678:21:150;735:2;715:18;;;708:30;774:34;754:18;;;747:62;-1:-1:-1;;;825:18:150;;;818:37;872:19;;5998:66:48;;;;;;;;6078:12;;6094:15;6078:12;;;:31;6074:139;;6125:12;:30;;-1:-1:-1;;6125:30:48;6140:15;6125:30;;;;;;6174:28;;1044:36:150;;;6174:28:48;;1032:2:150;1017:18;6174:28:48;;;;;;;6074:139;5939:280::o;14:177:150:-;93:13;;-1:-1:-1;;;;;135:31:150;;125:42;;115:70;;181:1;178;171:12;115:70;14:177;;;:::o;196:293::-;275:6;283;336:2;324:9;315:7;311:23;307:32;304:52;;;352:1;349;342:12;304:52;375:40;405:9;375:40;:::i;:::-;365:50;;434:49;479:2;468:9;464:18;434:49;:::i;:::-;424:59;;196:293;;;;;:::o;902:184::-;643:25624:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101fc575f3560e01c8063715018a611610113578063a730cdfb1161009d578063d0496d6a1161006d578063d0496d6a146105e2578063d1aaa5df1461062a578063e30c39781461064a578063eefbf17e14610667578063f2fde38b146106a5575f5ffd5b8063a730cdfb14610578578063b8acae0e1461058e578063be880c81146105ad578063c012fa77146105c3575f5ffd5b80638abf6077116100e35780638abf6077146104cb5780638da5cb5b146104df5780638e3881a9146104fc578063913b16cb1461053a5780639efc7a2e14610559575f5ffd5b8063715018a61461045b57806379ba50971461046f5780637cbadfaa146104835780638456cb59146104b7575f5ffd5b80633c6cf4731161019457806352d1902d1161016457806352d1902d146103b65780635862f6e1146103ca5780635c975abb146103e957806360620c6b1461040957806362d0945314610428575f5ffd5b80633c6cf473146103305780633f4ba83a1461036b578063422770fa1461037f5780634f1ef286146103a3575f5ffd5b80631bdb0037116101cf5780631bdb00371461029f5780632035065e146102c05780633075db56146102ed5780633659cfe614610311575f5ffd5b80630432873c1461020057806304f3bcec14610221578063069489a21461026c57806319ab453c14610280575b5f5ffd5b34801561020b575f5ffd5b5061021f61021a3660046129c9565b6106c4565b005b34801561022c575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020015b60405180910390f35b348015610277575f5ffd5b5061021f6108fc565b34801561028b575f5ffd5b5061021f61029a366004612a3b565b6109b3565b6102b26102ad366004612a56565b610a79565b604051610263929190612be2565b3480156102cb575f5ffd5b506102df6102da366004612bfa565b610d8b565b604051610263929190612cb7565b3480156102f8575f5ffd5b506103016111c7565b6040519015158152602001610263565b34801561031c575f5ffd5b5061021f61032b366004612a3b565b6111df565b34801561033b575f5ffd5b5061035e61034a366004612ce2565b60fc6020525f908152604090205460ff1681565b6040516102639190612cf9565b348015610376575f5ffd5b5061021f6112a6565b34801561038a575f5ffd5b5061039562030d4081565b604051908152602001610263565b61021f6103b1366004612dcd565b611301565b3480156103c1575f5ffd5b506103956113b6565b3480156103d5575f5ffd5b506103016103e4366004612bfa565b611468565b3480156103f4575f5ffd5b5061030160c954610100900460ff1660021490565b348015610414575f5ffd5b50610301610423366004612a56565b6114e3565b348015610433575f5ffd5b5061024f7f000000000000000000000000000000000000000000000000000000000000000081565b348015610466575f5ffd5b5061021f6115b7565b34801561047a575f5ffd5b5061021f6115c8565b34801561048e575f5ffd5b506104a261049d366004612ce2565b61163f565b60405163ffffffff9091168152602001610263565b3480156104c2575f5ffd5b5061021f61165d565b3480156104d6575f5ffd5b5061024f6116b2565b3480156104ea575f5ffd5b506033546001600160a01b031661024f565b348015610507575f5ffd5b5061051b610516366004612e2f565b6116c0565b6040805192151583526001600160a01b03909116602083015201610263565b348015610545575f5ffd5b5061021f610554366004612a56565b6116ec565b348015610564575f5ffd5b5061021f610573366004612bfa565b61183a565b348015610583575f5ffd5b506104a26201d4c081565b348015610599575f5ffd5b506103016105a8366004612bfa565b611a8f565b3480156105b8575f5ffd5b506104a2620c350081565b3480156105ce575f5ffd5b506103956105dd366004612f48565b611af6565b3480156105ed575f5ffd5b506105f6611b25565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610263565b348015610635575f5ffd5b50610395610644366004612ce2565b60031890565b348015610655575f5ffd5b506065546001600160a01b031661024f565b348015610672575f5ffd5b5060fb5461068d90600160401b90046001600160401b031681565b6040516001600160401b039091168152602001610263565b3480156106b0575f5ffd5b5061021f6106bf366004612a3b565b611bcc565b6106d460e0830160c08401612e2f565b6106dd81611c3d565b6106ed60a0840160808501612e2f565b6106f681611c66565b6106fe611ca2565b610706611cd4565b6107106002611d03565b5f61071d6105dd86612f79565b905061072a816001611d19565b5f610755867f0000000000000000000000000000000000000000000000000000000000000000611d6b565b156107a0576107998661012001356188b860405180602001604052805f8152508960e00160208101906107889190612a3b565b6001600160a01b0316929190611e62565b905061081a565b6107b06060870160408801612f84565b63ffffffff1615806107bf5750845b80156107ed57506107d7610100870160e08801612a3b565b6001600160a01b0316336001600160a01b031614155b1561080b576040516372b6e1c360e11b815260040160405180910390fd5b61081786835a5f611e9f565b90505b80156108305761082b826002611fc3565b6108ea565b84156108d157610841826003611fc3565b60405163019b28af60e61b81526003831860048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906366ca2bc0906024016020604051808303815f875af11580156108a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108cb9190612f9d565b506108ea565b60405163161e3ead60e01b815260040160405180910390fd5b50506108f66001611d03565b50505050565b610904612080565b5f54600290610100900460ff1615801561092457505f5460ff8083169116105b6109495760405162461bcd60e51b815260040161094090612fb4565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156109d157505f54600160ff909116105b806109ea5750303b1580156109ea57505f5460ff166001145b610a065760405162461bcd60e51b815260040161094090612fb4565b5f805460ff191660011790558015610a27575f805461ff0019166101001790555b610a30826120da565b8015610a75575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610adf60c0840160a08501612a3b565b610ae881612138565b610af9610100850160e08601612a3b565b610b0281612138565b610b1461012086016101008701612a3b565b610b1d81612138565b610b2d60e0870160c08801612e2f565b610b3681611c66565b610b3e611ca2565b610b46611cd4565b610b506002611d03565b610b606060880160408901612f84565b63ffffffff165f03610ba857610b7c6040880160208901612e2f565b6001600160401b031615610ba35760405163c9f5178760e01b815260040160405180910390fd5b610bd0565b610bb18761215f565b5f03610bd0576040516308c2ad5360e01b815260040160405180910390fd5b5f610be461051660e08a0160c08b01612e2f565b50905080610c0557604051631c6c777560e31b815260040160405180910390fd5b34610c1660408a0160208b01612e2f565b610c2e906001600160401b03166101208b0135613016565b14610c4c57604051634ac2abdf60e11b815260040160405180910390fd5b610c5588612f79565b60fb8054919750600160401b9091046001600160401b0316906008610c7983613029565b82546101009290920a6001600160401b03818102199093169183160217909155908116875233606088015246166080870152610cb486611af6565b9650867fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351787604051610ce69190613053565b60405180910390a260405163019b28af60e61b8152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906366ca2bc0906024016020604051808303815f875af1158015610d52573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d769190612f9d565b5050610d826001611d03565b50505050915091565b5f5f610d95611ca2565b610d9d611cd4565b610da76002611d03565b5f5a905046610dbc60e0880160c08901612e2f565b6001600160401b031614610de357604051631c6c777560e31b815260040160405180910390fd5b610df360a0870160808801612e2f565b6001600160401b03161580610e1f575046610e1460a0880160808901612e2f565b6001600160401b0316145b15610e3d57604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610e71610100880160e08901612a3b565b6001600160a01b0316331480156060830152610ee057610e976060880160408901612f84565b63ffffffff165f03610ebc576040516372b6e1c360e11b815260040160405180910390fd5b62030d40851115610ee057604051631e3b03c960e01b815260040160405180910390fd5b5f610eed6105dd89612f79565b9050610ef9815f611d19565b63ffffffff86166020830152610f417f000000000000000000000000000000000000000000000000000000000000000082610f3a60a08c0160808d01612e2f565b8a8a6121b2565b63ffffffff1660408301525f610f77897f0000000000000000000000000000000000000000000000000000000000000000611d6b565b15610f9057506002945060019350610120880135610fd7565b5f8360600151610fa0575a610fa9565b610fa98a61215f565b9050610fbb8a84838760600151611e9f565b15610fcc57600296505f9550610fd5565b60019650600295505b505b610fe760408a0160208b01612e2f565b6001600160401b0316156111455761100560408a0160208b01612e2f565b611018906001600160401b031682613016565b90508260600151801561103f575061103660608a0160408b01612f84565b63ffffffff1615155b1561114557604083015163ffffffff16614e20025a61107c6110656101408d018d613065565b6020601f909101819004026101a00160041b919050565b63ffffffff9081168701919091036201d4c00181168086525f9183916110a59183919061225d16565b0390505f6110b960608d0160408e01612f84565b63ffffffff166110cf60408e0160208f01612e2f565b6001600160401b03168302816110e7576110e76130ae565b0490505f48830290505f61112b8e60200160208101906111079190612e2f565b6001600160401b0316848410156111235784840160011c611125565b845b90612272565b9586900395905061113f33826188b8612286565b50505050505b61116d816188b861115d6101008d0160e08e01612a3b565b6001600160a01b03169190612286565b6111778287611fc3565b817f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8a856040516111a9929190613246565b60405180910390a2505050506111bf6001611d03565b935093915050565b5f60026111d660c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036112275760405162461bcd60e51b81526004016109409061329a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112596122c9565b6001600160a01b03161461127f5760405162461bcd60e51b8152600401610940906132e6565b611288816122e4565b604080515f808252602082019092526112a3918391906122ec565b50565b6112ae612456565b6112c260c9805461ff001916610100179055565b6040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9060200160405180910390a16112ff335f612487565b565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036113495760405162461bcd60e51b81526004016109409061329a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661137b6122c9565b6001600160a01b0316146113a15760405162461bcd60e51b8152600401610940906132e6565b6113aa826122e4565b610a75828260016122ec565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114555760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610940565b505f5160206135005f395f51905f525b90565b5f4661147a60a0860160808701612e2f565b6001600160401b03161461148f57505f6114dc565b6114d97f00000000000000000000000000000000000000000000000000000000000000006114c26106446105dd88612f79565b6114d260e0880160c08901612e2f565b868661248f565b90505b9392505050565b5f466114f560a0840160808501612e2f565b6001600160401b03161461150a57505f919050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166332676bc6306115466105dd86612f79565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa15801561158d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b19190613332565b92915050565b6115bf612080565b6112ff5f612511565b60655433906001600160a01b031681146116365760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610940565b6112a381612511565b5f6115b1620c35006101a06020601f8601819004020160041b61334d565b611665611ca2565b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200160405180910390a16112ff336001612487565b5f6116bb6122c9565b905090565b5f5f6116d7836562726964676560d01b600161252a565b6001600160a01b038116151594909350915050565b6116fc60e0820160c08301612e2f565b61170581611c3d565b61171560a0830160808401612e2f565b61171e81611c66565b611726611ca2565b61172e611cd4565b6117386002611d03565b611749610100840160e08501612a3b565b6001600160a01b0316336001600160a01b03161461177a576040516372b6e1c360e11b815260040160405180910390fd5b5f6117876105dd85612f79565b9050611794816001611d19565b61179f816003611fc3565b60405163019b28af60e61b81526003821860048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906366ca2bc0906024016020604051808303815f875af1158015611805573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118299190612f9d565b50506118356001611d03565b505050565b61184a60a0840160808501612e2f565b61185381611c3d565b61186360e0850160c08601612e2f565b61186c81611c66565b611874611ca2565b61187c611cd4565b6118866002611d03565b5f6118936105dd87612f79565b905061189f815f611d19565b604051631933b5e360e11b8152306004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906332676bc690604401602060405180830381865afa158015611908573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192c9190613332565b6119495760405163ab035ad560e01b815260040160405180910390fd5b6119887f00000000000000000000000000000000000000000000000000000000000000006003831861198160e08a0160c08b01612e2f565b88886121b2565b50611994816004611fc3565b6119bd62bc399d60e11b6119ae6080890160608a01612a3b565b6001600160a01b0316906125cc565b15611a61576119dc81306119d760a08a0160808b01612e2f565b61269c565b6119ec6080870160608801612a3b565b6001600160a01b0316630178733a87610120013588846040518463ffffffff1660e01b8152600401611a1f929190613369565b5f604051808303818588803b158015611a36575f5ffd5b505af1158015611a48573d5f5f3e3d5ffd5b5050505050611a5c5f195f1b5f198061269c565b611a7d565b611a7d6101208701356188b861115d60c08a0160a08b01612a3b565b50611a886001611d03565b5050505050565b5f46611aa160e0860160c08701612e2f565b6001600160401b031614611ab657505f6114dc565b6114d97f0000000000000000000000000000000000000000000000000000000000000000611ae66105dd87612f79565b6114d260a0880160808901612e2f565b5f81604051602001611b08919061338a565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611b9c604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611bae575080515f19145b1561146557604051635ceed17360e01b815260040160405180910390fd5b611bd4612080565b606580546001600160a01b0383166001600160a01b03199091168117909155611c056033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b46816001600160401b0316146112a357604051631c6c777560e31b815260040160405180910390fd5b6001600160401b0381161580611c84575046816001600160401b0316145b156112a357604051631c6c777560e31b815260040160405180910390fd5b611cb660c954610100900460ff1660021490565b156112ff5760405163bae6e2a960e01b815260040160405180910390fd5b6002611ce260c95460ff1690565b60ff16036112ff5760405163dfc60d8560e01b815260040160405180910390fd5b60c9805460ff191660ff92909216919091179055565b806004811115611d2b57611d2b612c8f565b5f83815260fc602052604090205460ff166004811115611d4d57611d4d612c8f565b14610a75576040516319d893ad60e21b815260040160405180910390fd5b5f80611d7f61012085016101008601612a3b565b6001600160a01b031603611d95575060016115b1565b30611da861012085016101008601612a3b565b6001600160a01b031603611dbe575060016115b1565b6001600160a01b038216611dda61012085016101008601612a3b565b6001600160a01b031603611df0575060016115b1565b6004611e00610140850185613065565b905010158015611e375750637f07c94760e01b611e21610140850185613065565b611e2a916133c0565b6001600160e01b03191614155b80156114dc57506114dc611e5361012085016101008601612a3b565b6001600160a01b03163b151590565b5f6001600160a01b038516611e8a57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f30611eb16080870160608801612a3b565b6001600160a01b031603611ec757611ec76133f8565b610120850135158015611ee75750611ee3610140860186613065565b1590505b15611ef457506001611fbb565b825f03611f0257505f611fbb565b611f2684611f166080880160608901612a3b565b6119d760a0890160808a01612e2f565b5f611f3961012087016101008801612a3b565b90506101208601355f611f50610140890189613065565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a90508515611faa57611faa81886126f1565b611fb65f19808061269c565b505050505b949350505050565b806004811115611fd557611fd5612c8f565b5f83815260fc602052604090205460ff166004811115611ff757611ff7612c8f565b03612015576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff1916600183600481111561203f5761203f612c8f565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516120749190612cf9565b60405180910390a25050565b6033546001600160a01b031633146112ff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610940565b5f54610100900460ff166121005760405162461bcd60e51b81526004016109409061340c565b612108612705565b6121266001600160a01b038216156121205781612511565b33612511565b5060c9805461ff001916610100179055565b6001600160a01b0381166112a35760405163538ba4f960e01b815260040160405180910390fd5b5f80612179612172610140850185613065565b905061163f565b63ffffffff169050806121aa6121956060860160408701612f84565b63ffffffff168361225d90919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856121d7876562726964676560d01b5f61252a565b8887876040518663ffffffff1660e01b81526004016121fa959493929190613457565b6020604051808303815f875af1925050508015612234575060408051601f3d908101601f1916820190925261223191810190612f9d565b60015b612251576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f81831161226b57816114dc565b5090919050565b5f81831161228057826114dc565b50919050565b815f0361229257505050565b6122ac83838360405180602001604052805f815250611e62565b61183557604051634c67134d60e11b815260040160405180910390fd5b5f5160206135005f395f51905f52546001600160a01b031690565b6112a3612080565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561231f576118358361272b565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612379575060408051601f3d908101601f1916820190925261237691810190612f9d565b60015b6123dc5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610940565b5f5160206135005f395f51905f52811461244a5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610940565b506118358383836127c6565b61246a60c954610100900460ff1660021490565b6112ff5760405163bae6e2a960e01b815260040160405180910390fd5b610a75612080565b5f856001600160a01b031663ce9d0820856124b4876562726964676560d01b5f61252a565b8887876040518663ffffffff1660e01b81526004016124d7959493929190613457565b5f6040518083038186803b1580156124ed575f5ffd5b505afa9250505080156124fe575060015b61250957505f612254565b506001612254565b606580546001600160a01b03191690556112a3816127ea565b5f7f0000000000000000000000000000000000000000000000000000000000000000604051633632b1fb60e11b81526001600160401b03861660048201526024810185905283151560448201526001600160a01b039190911690636c6563f690606401602060405180830381865afa1580156125a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114d99190613498565b6040516001600160e01b0319821660248201525f90819081906001600160a01b0386169060440160408051601f198184030181529181526020820180516001600160e01b03166301ffc9a760e01b1790525161262891906134b3565b5f60405180830381855afa9150503d805f8114612660576040519150601f19603f3d011682016040523d82523d5f602084013e612665565b606091505b5091509150818015612678575080516020145b1561269457808060200190518101906126919190613332565b92505b505092915050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b6126fc603f826134ce565b821015610a7557fe5b5f54610100900460ff166112ff5760405162461bcd60e51b81526004016109409061340c565b6001600160a01b0381163b6127985760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610940565b5f5160206135005f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6127cf8361283b565b5f825111806127db5750805b15611835576108f6838361287a565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6128448161272b565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606114dc83836040518060600160405280602781526020016135206027913960605f5f856001600160a01b0316856040516128b691906134b3565b5f60405180830381855af49150503d805f81146128ee576040519150601f19603f3d011682016040523d82523d5f602084013e6128f3565b606091505b50915091506129048683838761290e565b9695505050505050565b6060831561297c5782515f03612975576001600160a01b0385163b6129755760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610940565b5081611fbb565b611fbb83838151156129915781518083602001fd5b8060405162461bcd60e51b815260040161094091906134ed565b5f6101608284031215612280575f5ffd5b80151581146112a3575f5ffd5b5f5f604083850312156129da575f5ffd5b82356001600160401b038111156129ef575f5ffd5b6129fb858286016129ab565b9250506020830135612a0c816129bc565b809150509250929050565b6001600160a01b03811681146112a3575f5ffd5b8035612a3681612a17565b919050565b5f60208284031215612a4b575f5ffd5b81356114dc81612a17565b5f60208284031215612a66575f5ffd5b81356001600160401b03811115612a7b575f5ffd5b611fbb848285016129ab565b5f5b83811015612aa1578181015183820152602001612a89565b50505f910152565b5f8151808452612ac0816020860160208601612a87565b601f01601f19169290920160200192915050565b80516001600160401b031682525f6020820151612afc60208501826001600160401b03169052565b506040820151612b14604085018263ffffffff169052565b506060820151612b2f60608501826001600160a01b03169052565b506080820151612b4a60808501826001600160401b03169052565b5060a0820151612b6560a08501826001600160a01b03169052565b5060c0820151612b8060c08501826001600160401b03169052565b5060e0820151612b9b60e08501826001600160a01b03169052565b50610100820151612bb86101008501826001600160a01b03169052565b50610120820151610120840152610140820151610160610140850152611fbb610160850182612aa9565b828152604060208201525f6114d96040830184612ad4565b5f5f5f60408486031215612c0c575f5ffd5b83356001600160401b03811115612c21575f5ffd5b612c2d868287016129ab565b93505060208401356001600160401b03811115612c48575f5ffd5b8401601f81018613612c58575f5ffd5b80356001600160401b03811115612c6d575f5ffd5b866020828401011115612c7e575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b60058110612cb357612cb3612c8f565b9052565b60408101612cc58285612ca3565b60048310612cd557612cd5612c8f565b8260208301529392505050565b5f60208284031215612cf2575f5ffd5b5035919050565b602081016115b18284612ca3565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b0381118282101715612d3e57612d3e612d07565b60405290565b5f82601f830112612d53575f5ffd5b81356001600160401b03811115612d6c57612d6c612d07565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612d9a57612d9a612d07565b604052818152838201602001851015612db1575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215612dde575f5ffd5b8235612de981612a17565b915060208301356001600160401b03811115612e03575f5ffd5b612e0f85828601612d44565b9150509250929050565b80356001600160401b0381168114612a36575f5ffd5b5f60208284031215612e3f575f5ffd5b6114dc82612e19565b803563ffffffff81168114612a36575f5ffd5b5f6101608284031215612e6c575f5ffd5b612e74612d1b565b9050612e7f82612e19565b8152612e8d60208301612e19565b6020820152612e9e60408301612e48565b6040820152612eaf60608301612a2b565b6060820152612ec060808301612e19565b6080820152612ed160a08301612a2b565b60a0820152612ee260c08301612e19565b60c0820152612ef360e08301612a2b565b60e0820152612f056101008301612a2b565b61010082015261012082810135908201526101408201356001600160401b03811115612f2f575f5ffd5b612f3b84828501612d44565b6101408301525092915050565b5f60208284031215612f58575f5ffd5b81356001600160401b03811115612f6d575f5ffd5b611fbb84828501612e5b565b5f6115b13683612e5b565b5f60208284031215612f94575f5ffd5b6114dc82612e48565b5f60208284031215612fad575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156115b1576115b1613002565b5f6001600160401b0382166001600160401b03810361304a5761304a613002565b60010192915050565b602081525f6114dc6020830184612ad4565b5f5f8335601e1984360301811261307a575f5ffd5b8301803591506001600160401b03821115613093575f5ffd5b6020019150368190038213156130a7575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e198436030181126130d7575f5ffd5b83016020810192503590506001600160401b038111156130f5575f5ffd5b8036038213156130a7575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6131458261313883612e19565b6001600160401b03169052565b5f61315260208301612e19565b6001600160401b0316602084015261316c60408301612e48565b63ffffffff16604084015261318360608301612a2b565b6001600160a01b0316606084015261319d60808301612e19565b6001600160401b031660808401526131b760a08301612a2b565b6001600160a01b031660a08401526131d160c08301612e19565b6001600160401b031660c08401526131eb60e08301612a2b565b6001600160a01b031660e08401526132066101008301612a2b565b6001600160a01b0316610100840152610120828101359084015261322e6101408301836130c2565b61016061014086015261269161016086018284613103565b60a081525f61325860a083018561312b565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f60208284031215613342575f5ffd5b81516114dc816129bc565b63ffffffff81811683821601908111156115b1576115b1613002565b604081525f61337b604083018561312b565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f6114dc6080830184612ad4565b80356001600160e01b031981169060048410156133f1576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f61348d608083018486613103565b979650505050505050565b5f602082840312156134a8575f5ffd5b81516114dc81612a17565b5f82516134c4818460208701612a87565b9190910192915050565b5f826134e857634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f6114dc6020830184612aa956fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d82c8f7c970681ddfa323cbf4b55420679e492c19c2d89df90bab3191259c47f64736f6c634300081e0033","sourceMap":"643:25624:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11832:1159;;;;;;;;;;-1:-1:-1;11832:1159:9;;;;;:::i;:::-;;:::i;:::-;;5694:92:12;;;;;;;;;;-1:-1:-1;5769:10:12;5694:92;;;-1:-1:-1;;;;;1061:32:150;;;1043:51;;1031:2;1016:18;5694:92:12;;;;;;;;4320:196:9;;;;;;;;;;;;;:::i;4142:92::-;;;;;;;;;;-1:-1:-1;4142:92:9;;;;;:::i;:::-;;:::i;4550:1319::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;7586:4212::-;;;;;;;;;;-1:-1:-1;7586:4212:9;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;5484:104:12:-;;;;;;;;;;;;;:::i;:::-;;;5930:14:150;;5923:22;5905:41;;5893:2;5878:18;5484:104:12;5765:187:150;3143:195:84;;;;;;;;;;-1:-1:-1;3143:195:84;;;;;:::i;:::-;;:::i;2641:62:9:-;;;;;;;;;;-1:-1:-1;2641:62:9;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;4911:245:12:-;;;;;;;;;;;;;:::i;1713:57:9:-;;;;;;;;;;;;1763:7;1713:57;;;;;6495:25:150;;;6483:2;6468:18;1713:57:9;6349:177:150;3657:220:84;;;;;;:::i;:::-;;:::i;2762:131::-;;;;;;;;;;;;;:::i;14121:410:9:-;;;;;;;;;;-1:-1:-1;14121:410:9;;;;;:::i;:::-;;:::i;5384:94:12:-;;;;;;;;;;;;5454:8;;;;;:17;:8;650:1;5454:17;;5384:94;13578:250:9;;;;;;;;;;-1:-1:-1;13578:250:9;;;;;:::i;:::-;;:::i;2372:45::-;;;;;;;;;;;;;;;2085:101:43;;;;;;;;;;;;;:::i;2031:212:42:-;;;;;;;;;;;;;:::i;16688:150:9:-;;;;;;;;;;-1:-1:-1;16688:150:9;;;;;:::i;:::-;;:::i;:::-;;;8946:10:150;8934:23;;;8916:42;;8904:2;8889:18;16688:150:9;8772:192:150;4625:241:12;;;;;;;;;;;;;:::i;5162:90::-;;;;;;;;;;;;;:::i;1462:85:43:-;;;;;;;;;;-1:-1:-1;1534:6:43;;-1:-1:-1;;;;;1534:6:43;1462:85;;15412:249:9;;;;;;;;;;-1:-1:-1;15412:249:9;;;;;:::i;:::-;;:::i;:::-;;;;9527:14:150;;9520:22;9502:41;;-1:-1:-1;;;;;9579:32:150;;;9574:2;9559:18;;9552:60;9475:18;15412:249:9;9334:284:150;13025:519:9;;;;;;;;;;-1:-1:-1;13025:519:9;;;;;:::i;:::-;;:::i;5903:1380::-;;;;;;;;;;-1:-1:-1;5903:1380:9;;;;;:::i;:::-;;:::i;1584:45::-;;;;;;;;;;;;1622:7;1584:45;;14835:329;;;;;;;;;;-1:-1:-1;14835:329:9;;;;;:::i;:::-;;:::i;1354:44::-;;;;;;;;;;;;1391:7;1354:44;;15996:148;;;;;;;;;;-1:-1:-1;15996:148:9;;;;;:::i;:::-;;:::i;15737:225::-;;;;;;;;;;;;;:::i;:::-;;;;11466:13:150;;11448:32;;11540:4;11528:17;;;11522:24;-1:-1:-1;;;;;11518:50:150;11496:20;;;11489:80;11617:17;;;11611:24;-1:-1:-1;;;;;11607:49:150;11585:20;;;11578:79;11436:2;11421:18;15737:225:9;11252:411:150;16325:146:9;;;;;;;;;;-1:-1:-1;16325:146:9;;;;;:::i;:::-;16449:13;16422:42;;16325:146;1144:99:42;;;;;;;;;;-1:-1:-1;1223:13:42;;-1:-1:-1;;;;;1223:13:42;1144:99;;2514:27:9;;;;;;;;;;-1:-1:-1;2514:27:9;;;;-1:-1:-1;;;2514:27:9;;-1:-1:-1;;;;;2514:27:9;;;;;;-1:-1:-1;;;;;11830:31:150;;;11812:50;;11800:2;11785:18;2514:27:9;11668:200:150;1436:178:42;;;;;;;;;;-1:-1:-1;1436:178:42;;;;;:::i;:::-;;:::i;11832:1159:9:-;11959:20;;;;;;;;:::i;:::-;3486:25;3502:8;3486:15;:25::i;:::-;11999:19:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;3581:25;3597:8;3581:15;:25::i;:::-;2739:17:12::2;:15;:17::i;:::-;2345:18:::3;:16;:18::i;:::-;2373:24;650:1;2373:17;:24::i;:::-;12077:15:9::4;12095:21;;12107:8:::0;12095:21:::4;:::i;:::-;12077:39;;12126;12139:7;12148:16;12126:12;:39::i;:::-;12176:14;12204:51;12231:8;12241:13;12204:26;:51::i;:::-;12200:472;;;12283:71;12312:8;:14;;;2230:6;12283:71;;;;;;;;;;;::::0;:8:::4;:18;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12283:28:9::4;::::0;:71;;:28:::4;:71::i;:::-;12271:83;;12200:472;;;12390:17;::::0;;;::::4;::::0;::::4;;:::i;:::-;:22;;::::0;;:40:::4;;;12416:14;12390:40;12389:78;;;;-1:-1:-1::0;12449:18:9::4;::::0;;;::::4;::::0;::::4;;:::i;:::-;-1:-1:-1::0;;;;;12435:32:9::4;:10;-1:-1:-1::0;;;;;12435:32:9::4;;;12389:78;12385:145;;;12494:21;;-1:-1:-1::0;;;12494:21:9::4;;;;;;;;;;;12385:145;12606:55;12625:8;12635:7;12644:9;12655:5;12606:18;:55::i;:::-;12594:67;;12200:472;12686:9;12682:303;;;12711:42;12732:7;12741:11;12711:20;:42::i;:::-;12682:303;;;12774:14;12770:215;;;12804:44;12825:7;12834:13;12804:20;:44::i;:::-;12863:57;::::0;-1:-1:-1;;;12863:57:9;;16449:13;16422:42;;12863:57:::4;::::0;::::4;6495:25:150::0;12863:13:9::4;-1:-1:-1::0;;;;;12863:24:9::4;::::0;::::4;::::0;6468:18:150;;12863:57:9::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12770:215;;;12958:16;;-1:-1:-1::0;;;12958:16:9::4;;;;;;;;;;;12770:215;12067:924;;2418:25:12::3;611:1;2418:17;:25::i;:::-;3521:1:9::1;11832:1159:::0;;;:::o;4320:196::-;1355:13:43;:11;:13::i;:::-;4882::48::1;::::0;4370:1:9::1;::::0;4882:13:48::1;::::0;::::1;;;4881:14;:40:::0;::::1;;;-1:-1:-1::0;4899:12:48::1;::::0;:22:::1;::::0;;::::1;:12:::0;::::1;:22;4881:40;4873:99;;;;-1:-1:-1::0;;;4873:99:48::1;;;;;;;:::i;:::-;;;;;;;;;4982:12;:22:::0;;4444:11:9::2;:15:::0;;-1:-1:-1;;4444:15:9::2;::::0;;4982:22:48::1;4469:15:9::0;;;4982:22:48::1;4494:15:9::0;;;-1:-1:-1;;4982:22:48;;::::1;-1:-1:-1::0;;5014:20:48;;;;;::::1;5055:21;::::0;;;5091:20:::1;::::0;13006:36:150;;;5091:20:48::1;::::0;12994:2:150;12979:18;5091:20:48::1;;;;;;;1378:1:43;4320:196:9:o:0;4142:92::-;3279:19:48;3302:13;;;;;;3301:14;;3347:34;;;;-1:-1:-1;3365:12:48;;3380:1;3365:12;;;;:16;3347:34;3346:108;;;-1:-1:-1;3426:4:48;1713:19:64;:23;;;3387:66:48;;-1:-1:-1;3436:12:48;;;;;:17;3387:66;3325:201;;;;-1:-1:-1;;;3325:201:48;;;;;;;:::i;:::-;3536:12;:16;;-1:-1:-1;;3536:16:48;3551:1;3536:16;;;3562:65;;;;3596:13;:20;;-1:-1:-1;;3596:20:48;;;;;3562:65;4203:24:9::1;4220:6;4203:16;:24::i;:::-;3651:14:48::0;3647:99;;;3697:5;3681:21;;-1:-1:-1;;3681:21:48;;;3721:14;;-1:-1:-1;13006:36:150;;3721:14:48;;12994:2:150;12979:18;3721:14:48;;;;;;;3647:99;3269:483;4142:92:9;:::o;4550:1319::-;-1:-1:-1;;;;;;;;4860:16:9;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4668:17:9;;;;;;;;:::i;:::-;2950:24:12;2968:5;2950:17;:24::i;:::-;4707:18:9::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;2950:24:12;2968:5;2950:17;:24::i;:::-;4747:11:9::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;2950:24:12;2968:5;2950:17;:24::i;:::-;4778:20:9::3;::::0;;;::::3;::::0;::::3;;:::i;:::-;3581:25;3597:8;3581:15;:25::i;:::-;2739:17:12::4;:15;:17::i;:::-;2345:18:::5;:16;:18::i;:::-;2373:24;650:1;2373:17;:24::i;:::-;4921:17:9::6;::::0;;;::::6;::::0;::::6;;:::i;:::-;:22;;4942:1;4921:22:::0;4917:197:::6;;4963:12;::::0;;;::::6;::::0;::::6;;:::i;:::-;-1:-1:-1::0;;;;;4963:17:9::6;::::0;4959:45:::6;;4989:15;;-1:-1:-1::0;;;4989:15:9::6;;;;;;;;;;;4959:45;4917:197;;;5025:29;5045:8;5025:19;:29::i;:::-;5058:1;5025:34:::0;5021:93:::6;;5082:21;;-1:-1:-1::0;;;5082:21:9::6;;;;;;;;;;;5021:93;5179:21;5205:40;5224:20;::::0;;;::::6;::::0;::::6;;:::i;5205:40::-;5178:67;;;5298:16;5293:49;;5323:19;;-1:-1:-1::0;;;5323:19:9::6;;;;;;;;;;;5293:49;5452:9;5436:12;::::0;;;::::6;::::0;::::6;;:::i;:::-;5419:29;::::0;-1:-1:-1;;;;;5419:29:9::6;:14;::::0;::::6;;:29;:::i;:::-;:42;5415:72;;5470:17;;-1:-1:-1::0;;;5470:17:9::6;;;;;;;;;;;5415:72;5498:19;5509:8:::0;5498:19:::6;:::i;:::-;5624:13;:15:::0;;5498:19;;-1:-1:-1;;;;5624:15:9;;::::6;-1:-1:-1::0;;;;;5624:15:9::6;::::0;:13:::6;:15;::::0;::::6;:::i;:::-;::::0;;::::6;::::0;;;::::6;-1:-1:-1::0;;;;;5624:15:9;;::::6;;::::0;;::::6;::::0;;::::6;;;::::0;;;5610:29;;::::6;::::0;;5665:10:::6;5649:13;::::0;::::6;:26:::0;5714:13:::6;5685:43;:19;::::0;::::6;:43:::0;5750:21:::6;5610:29:::0;5750:11:::6;:21::i;:::-;5739:32;;5799:8;5787:31;5809:8;5787:31;;;;;;:::i;:::-;;;;;;;;5828:34;::::0;-1:-1:-1;;;5828:34:9;;::::6;::::0;::::6;6495:25:150::0;;;5828:13:9::6;-1:-1:-1::0;;;;;5828:24:9::6;::::0;::::6;::::0;6468:18:150;;5828:34:9::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4907:962;2418:25:12::5;611:1;2418:17;:25::i;:::-;2984:1:::3;::::2;::::1;4550:1319:9::0;;;;:::o;7586:4212::-;7759:14;7775:20;2739:17:12;:15;:17::i;:::-;2345:18:::1;:16;:18::i;:::-;2373:24;650:1;2373:17;:24::i;:::-;7811:16:9::2;7830:9;7811:28:::0;-1:-1:-1;7958:13:9::2;7934:20;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;7934:37:9::2;;7930:69;;7980:19;;-1:-1:-1::0;;;7980:19:9::2;;;;;;;;;;;7930:69;8093:19;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;8093:24:9::2;::::0;;:64:::2;;-1:-1:-1::0;8144:13:9::2;8121:19;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;8121:36:9::2;;8093:64;8089:121;;;8180:19;;-1:-1:-1::0;;;8180:19:9::2;;;;;;;;;;;8089:121;-1:-1:-1::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8299:18:9::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;8285:32:9::2;:10;:32;::::0;::::2;8258:24;::::0;::::2;:59:::0;8412:196:::2;;8460:17;::::0;;;::::2;::::0;::::2;;:::i;:::-;:22;;8481:1;8460:22:::0;8456:56:::2;;8491:21;;-1:-1:-1::0;;;8491:21:9::2;;;;;;;;;;;8456:56;1763:7;8530:39:::0;::::2;8526:71;;;8578:19;;-1:-1:-1::0;;;8578:19:9::2;;;;;;;;;;;8526:71;8618:15;8636:21;;8648:8:::0;8636:21:::2;:::i;:::-;8618:39;;8668:33;8681:7;8690:10;8668:12;:33::i;:::-;8712:39;::::0;::::2;:15;::::0;::::2;:39:::0;8793:73:::2;8814:13;8829:7:::0;8838:19:::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;8859:6;;8793:20;:73::i;:::-;8761:105;;:17;::::0;::::2;:105:::0;8877:20:::2;8911:51;8938:8:::0;8948:13:::2;8911:26;:51::i;:::-;8907:829;;;-1:-1:-1::0;9214:11:9::2;::::0;-1:-1:-1;9249:34:9::2;::::0;-1:-1:-1;9176:14:9::2;::::0;::::2;;8907:829;;;9314:16;9333:5;:24;;;:68;;9392:9;9333:68;;;9360:29;9380:8;9360:19;:29::i;:::-;9314:87;;9420:73;9439:8;9449:7;9458:8;9468:5;:24;;;9420:18;:73::i;:::-;9416:310;;;9523:11;9513:21;;9562:26;9552:36;;9416:310;;;9637:16;9627:26;;9681:30;9671:40;;9416:310;9300:436;8907:829;9750:12;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;9750:17:9::2;::::0;9746:1855:::2;;9799:12;::::0;;;::::2;::::0;::::2;;:::i;:::-;9783:28;::::0;-1:-1:-1;;;;;9783:28:9::2;::::0;::::2;:::i;:::-;;;9830:5;:24;;;:50;;;;-1:-1:-1::0;9858:17:9::2;::::0;;;::::2;::::0;::::2;;:::i;:::-;:22;;::::0;::::2;9830:50;9826:1765;;;10616:17;::::0;::::2;::::0;:51:::2;;1906:6;10616:51;11037:9;10964:42;10985:13;;::::0;::::2;:8:::0;:13:::2;:::i;:::-;22623:2:::0;22617;22604:15;;;22603:22;;;:27;22633:3;22603:33;22641:1;22602:40;;;-1:-1:-1;22056:604:9;10964:42:::2;10938:68;::::0;;::::2;::::0;;:108;;;;1622:7:::2;10938:108:::0;10881:187;::::2;::::0;;;:22:::2;::::0;11149:6;;11112:34:::2;::::0;11149:6;;10881:187;11112:10:::2;:34;:::i;:::-;:43;::::0;-1:-1:-1;11177:14:9::2;11222:17;::::0;;;::::2;::::0;::::2;;:::i;:::-;11194:45;;11207:12;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;11194:25:9::2;:10;:25;:45;;;;;:::i;:::-;;11177:62;;11261:15;11292:13;11279:10;:26;11261:44;;11327:11;11365:72;11424:8;:12;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11365:72:9::2;11377:6;11366:7;:17;;:52;;11396:16:::0;;::::2;11417:1;11395:23;11366:52;;;11386:6;11366:52;11365:58:::0;::::2;:72::i;:::-;11460:19:::0;;;::::2;::::0;11327:110;-1:-1:-1;11501:57:9::2;:10;11327:110:::0;2230:6:::2;11501:29;:57::i;:::-;9900:1677;;;;;9826:1765;11611:74;11649:12:::0;2230:6:::2;11611:18;::::0;;;::::2;::::0;::::2;;:::i;:::-;-1:-1:-1::0;;;;;11611:37:9::2;::::0;:74;:37:::2;:74::i;:::-;11696:38;11717:7;11726;11696:20;:38::i;:::-;11766:7;11749:42;11775:8;11785:5;11749:42;;;;;;;:::i;:::-;;;;;;;;7801:3997;;;;2418:25:12::1;611:1;2418:17;:25::i;:::-;7586:4212:9::0;;;;;;:::o;5484:104:12:-;5531:4;650:1;5554:18;6882:9;;;;;6786:112;5554:18;:27;;;5547:34;;5484:104;:::o;3143:195:84:-;-1:-1:-1;;;;;1654:6:84;1637:23;1645:4;1637:23;1629:80;;;;-1:-1:-1;;;1629:80:84;;;;;;;:::i;:::-;1751:6;-1:-1:-1;;;;;1727:30:84;:20;:18;:20::i;:::-;-1:-1:-1;;;;;1727:30:84;;1719:87;;;;-1:-1:-1;;;1719:87:84;;;;;;;:::i;:::-;3224:36:::1;3242:17;3224;:36::i;:::-;3311:12;::::0;;3321:1:::1;3311:12:::0;;;::::1;::::0;::::1;::::0;;;3270:61:::1;::::0;3292:17;;3311:12;3270:21:::1;:61::i;:::-;3143:195:::0;:::o;4911:245:12:-;2575:14;:12;:14::i;:::-;4958:10:::1;6435:8:::0;:17;;-1:-1:-1;;6435:17:12;;;;;6388:71;4958:10:::1;4983:20;::::0;4992:10:::1;1043:51:150::0;;4983:20:12::1;::::0;1031:2:150;1016:18;4983:20:12::1;;;;;;;5115:34;5131:10;5143:5;5115:15;:34::i;:::-;4911:245::o:0;3657:220:84:-;-1:-1:-1;;;;;1654:6:84;1637:23;1645:4;1637:23;1629:80;;;;-1:-1:-1;;;1629:80:84;;;;;;;:::i;:::-;1751:6;-1:-1:-1;;;;;1727:30:84;:20;:18;:20::i;:::-;-1:-1:-1;;;;;1727:30:84;;1719:87;;;;-1:-1:-1;;;1719:87:84;;;;;;;:::i;:::-;3772:36:::1;3790:17;3772;:36::i;:::-;3818:52;3840:17;3859:4;3865;3818:21;:52::i;2762:131::-:0;2840:7;2080:4;-1:-1:-1;;;;;2089:6:84;2072:23;;2064:92;;;;-1:-1:-1;;;2064:92:84;;18600:2:150;2064:92:84;;;18582:21:150;18639:2;18619:18;;;18612:30;18678:34;18658:18;;;18651:62;18749:26;18729:18;;;18722:54;18793:19;;2064:92:84;18398:420:150;2064:92:84;-1:-1:-1;;;;;;;;;;;;2166:1:84::1;2762:131:::0;:::o;14121:410:9:-;14265:4;14312:13;14289:19;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14289:36:9;;14285:54;;-1:-1:-1;14334:5:9;14327:12;;14285:54;14357:167;14388:13;14415:45;14438:21;;14450:8;14438:21;:::i;14415:45::-;14474:20;;;;;;;;:::i;:::-;14508:6;;14357:17;:167::i;:::-;14350:174;;14121:410;;;;;;:::o;13578:250::-;13651:4;13694:13;13671:19;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13671:36:9;;13667:54;;-1:-1:-1;13716:5:9;;13578:250;-1:-1:-1;13578:250:9:o;13667:54::-;-1:-1:-1;;;;;13738:13:9;:26;;13781:4;13797:21;;13809:8;13797:21;:::i;:::-;13738:83;;-1:-1:-1;;;;;;13738:83:9;;;;;;;-1:-1:-1;;;;;19015:32:150;;;13738:83:9;;;18997:51:150;19064:18;;;19057:34;18970:18;;13738:83:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13731:90;13578:250;-1:-1:-1;;13578:250:9:o;2085:101:43:-;1355:13;:11;:13::i;:::-;2149:30:::1;2176:1;2149:18;:30::i;2031:212:42:-:0;1223:13;;965:10:65;;-1:-1:-1;;;;;1223:13:42;2130:24;;2122:78;;;;-1:-1:-1;;;2122:78:42;;19554:2:150;2122:78:42;;;19536:21:150;19593:2;19573:18;;;19566:30;19632:34;19612:18;;;19605:62;-1:-1:-1;;;19683:18:150;;;19676:39;19732:19;;2122:78:42;19352:405:150;2122:78:42;2210:26;2229:6;2210:18;:26::i;16688:150:9:-;16760:6;16785:46;1391:7;22633:3;22623:2;22617;22604:15;;22603:22;;;:27;:33;22641:1;22602:40;16785:46;:::i;4625:241:12:-;2739:17;:15;:17::i;:::-;6359:8;:16;;-1:-1:-1;;6359:16:12;;;;;4696:18:::1;::::0;4703:10:::1;1043:51:150::0;;4696:18:12::1;::::0;1031:2:150;1016:18;4696::12::1;;;;;;;4826:33;4842:10;4854:4;4826:15;:33::i;5162:90::-:0;5199:7;5225:20;:18;:20::i;:::-;5218:27;;5162:90;:::o;15412:249:9:-;15502:13;15517:19;15566:42;15574:8;-1:-1:-1;;;15603:4:9;15566:7;:42::i;:::-;-1:-1:-1;;;;;15629:25:9;;;;;15552:56;;-1:-1:-1;15412:249:9;-1:-1:-1;;15412:249:9:o;13025:519::-;13108:20;;;;;;;;:::i;:::-;3486:25;3502:8;3486:15;:25::i;:::-;13148:19:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;3581:25;3597:8;3581:15;:25::i;:::-;2739:17:12::2;:15;:17::i;:::-;2345:18:::3;:16;:18::i;:::-;2373:24;650:1;2373:17;:24::i;:::-;13244:18:9::4;::::0;;;::::4;::::0;::::4;;:::i;:::-;-1:-1:-1::0;;;;;13230:32:9::4;:10;-1:-1:-1::0;;;;;13230:32:9::4;;13226:91;;13285:21;;-1:-1:-1::0;;;13285:21:9::4;;;;;;;;;;;13226:91;13327:15;13345:21;;13357:8:::0;13345:21:::4;:::i;:::-;13327:39;;13376;13389:7;13398:16;13376:12;:39::i;:::-;13426:44;13447:7;13456:13;13426:20;:44::i;:::-;13480:57;::::0;-1:-1:-1;;;13480:57:9;;16449:13;16422:42;;13480:57:::4;::::0;::::4;6495:25:150::0;13480:13:9::4;-1:-1:-1::0;;;;;13480:24:9::4;::::0;::::4;::::0;6468:18:150;;13480:57:9::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13216:328;2418:25:12::3;611:1;2418:17;:25::i;:::-;3521:1:9::1;13025:519:::0;;:::o;5903:1380::-;6033:19;;;;;;;;:::i;:::-;3486:25;3502:8;3486:15;:25::i;:::-;6072:20:::1;::::0;;;::::1;::::0;::::1;;:::i;:::-;3581:25;3597:8;3581:15;:25::i;:::-;2739:17:12::2;:15;:17::i;:::-;2345:18:::3;:16;:18::i;:::-;2373:24;650:1;2373:17;:24::i;:::-;6151:15:9::4;6169:21;;6181:8:::0;6169:21:::4;:::i;:::-;6151:39;;6200:33;6213:7;6222:10;6200:12;:33::i;:::-;6249:50;::::0;-1:-1:-1;;;6249:50:9;;6284:4:::4;6249:50;::::0;::::4;18997:51:150::0;19064:18;;;19057:34;;;6249:13:9::4;-1:-1:-1::0;;;;;6249:26:9::4;::::0;::::4;::::0;18970:18:150;;6249:50:9::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6244:109;;6322:20;;-1:-1:-1::0;;;6322:20:9::4;;;;;;;;;;;6244:109;6363:120;6397:13;16449::::0;16422:42;;6445:20:::4;::::0;;;::::4;::::0;::::4;;:::i;:::-;6467:6;;6363:20;:120::i;:::-;;6494:46;6515:7;6524:15;6494:20;:46::i;:::-;6670:68;-1:-1:-1::0;;;6670:13:9::4;::::0;;;::::4;::::0;::::4;;:::i;:::-;-1:-1:-1::0;;;;;6670:31:9::4;::::0;::::4;:68::i;:::-;6666:611;;;6754:58;6768:7:::0;6785:4:::4;6792:19;::::0;;;::::4;::::0;::::4;;:::i;:::-;6754:13;:58::i;:::-;6875:13;::::0;;;::::4;::::0;::::4;;:::i;:::-;-1:-1:-1::0;;;;;6857:63:9::4;;6929:8;:14;;;6946:8;6956:7;6857:107;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7040:120;-1:-1:-1::0;;7071:21:9::4;;-1:-1:-1::0;;2348:17:9;7040:13:::4;:120::i;:::-;6666:611;;;7191:75;7228:14;::::0;::::4;;2230:6;7191:17;::::0;;;::::4;::::0;::::4;;:::i;:75::-;6141:1142;2418:25:12::3;611:1;2418:17;:25::i;:::-;3521:1:9::1;5903:1380:::0;;;;:::o;14835:329::-;14981:4;15029:13;15005:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15005:37:9;;15001:55;;-1:-1:-1;15051:5:9;15044:12;;15001:55;15073:84;15091:13;15106:21;;15118:8;15106:21;:::i;:::-;15129:19;;;;;;;;:::i;15996:148::-;16063:7;16127:8;16099:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;16089:48;;;;;;16082:55;;15996:148;;;:::o;15737:225::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;15817:14:9;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;20226:12:9;;;;;;;;20233:5;20226:12;;;;;-1:-1:-1;;;;;20226:12:9;;;;;;-1:-1:-1;;;20226:12:9;;-1:-1:-1;;;;;20226:12:9;;;;;;;;;20145:100;15817:14;15845:12;;15810:21;;-1:-1:-1;15845:17:9;;:58;;-1:-1:-1;15866:12:9;;-1:-1:-1;;15866:37:9;15845:58;15841:115;;;15926:19;;-1:-1:-1;;;15926:19:9;;;;;;;;;;;1436:178:42;1355:13:43;:11;:13::i;:::-;1525::42::1;:24:::0;;-1:-1:-1;;;;;1525:24:42;::::1;-1:-1:-1::0;;;;;;1525:24:42;;::::1;::::0;::::1;::::0;;;1589:7:::1;1534:6:43::0;;-1:-1:-1;;;;;1534:6:43;;1462:85;1589:7:42::1;-1:-1:-1::0;;;;;1564:43:42::1;;;;;;;;;;;1436:178:::0;:::o;25982:130:9:-;26064:13;26052:8;-1:-1:-1;;;;;26052:25:9;;26048:57;;26086:19;;-1:-1:-1;;;26086:19:9;;;;;;;;;;;26118:147;-1:-1:-1;;;;;26188:13:9;;;;:42;;;26217:13;26205:8;-1:-1:-1;;;;;26205:25:9;;26188:42;26184:74;;;26239:19;;-1:-1:-1;;;26239:19:9;;;;;;;;;;;7435:99:12;7494:8;5454;;;;;:17;:8;650:1;5454:17;;5384:94;7494:8;7493:9;7485:42;;;;-1:-1:-1;;;7485:42:12;;;;;;;;;;;7216:112;650:1;7275:18;6882:9;;;;;6786:112;7275:18;:27;;;7267:54;;;;-1:-1:-1;;;7267:54:12;;;;;;;;;;;6653:97;6723:9;:20;;-1:-1:-1;;6723:20:12;;;;;;;;;;;;6653:97::o;21073:167:9:-;21191:15;21164:42;;;;;;;;:::i;:::-;:23;;;;:13;:23;;;;;;;;:42;;;;;;;;:::i;:::-;;21160:73;;21215:18;;-1:-1:-1;;;21215:18:9;;;;;;;;;;;21246:521;21408:4;;21432:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21432:25:9;;21428:42;;-1:-1:-1;21466:4:9;21459:11;;21428:42;21507:4;21484:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21484:28:9;;21480:45;;-1:-1:-1;21521:4:9;21514:11;;21480:45;-1:-1:-1;;;;;21539:38:9;;:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21539:38:9;;21535:55;;-1:-1:-1;21586:4:9;21579:11;;21535:55;21632:1;21608:13;;;;:8;:13;:::i;:::-;:20;;:25;;:112;;;;-1:-1:-1;;;;21656:13:9;;;;:8;:13;:::i;:::-;21649:21;;;:::i;:::-;-1:-1:-1;;;;;;21649:71:9;;;21608:112;:152;;;;-1:-1:-1;21736:24:9;:11;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21736:22:9;1713:19:64;:23;;;1423:320;810:850:19;974:13;-1:-1:-1;;;;;1058:17:19;;1050:49;;;;-1:-1:-1;;;1050:49:19;;;;;;;;;;;;1619:1;1590;1553:9;1547:16;1515:4;1504:9;1500:20;1460:7;1426:3;1392:9;1370:274;1358:286;810:850;-1:-1:-1;;;;;810:850:19:o;17315:949:9:-;17509:13;17570:4;17545:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17545:30:9;;17538:38;;;;:::i;:::-;17591:14;;;;:19;:48;;;;-1:-1:-1;17614:13:9;;;;:8;:13;:::i;:::-;:25;;-1:-1:-1;17591:48:9;17587:65;;;-1:-1:-1;17648:4:9;17641:11;;17587:65;17667:9;17680:1;17667:14;17663:32;;-1:-1:-1;17690:5:9;17683:12;;17663:32;17706:59;17720:8;17730:13;;;;;;;;:::i;:::-;17745:19;;;;;;;;:::i;17706:59::-;17776:10;17789:11;;;;;;;;:::i;:::-;17776:24;-1:-1:-1;17826:14:9;;;;17810:13;17870;;;;17826:8;17870:13;:::i;:::-;17850:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17998:11:9;;17850:33;;-1:-1:-1;17850:33:9;;;-1:-1:-1;17850:33:9;;-1:-1:-1;17998:11:9;-1:-1:-1;17991:4:9;17981:15;;17974:5;17970:2;17959:9;17954:62;17942:74;;18040:5;18029:16;;18069:24;18065:93;;;18109:38;18128:7;18137:9;18109:18;:38::i;:::-;18167:90;-1:-1:-1;;2348:17:9;;18167:13;:90::i;:::-;17528:736;;;;17315:949;;;;;;;:::o;18568:251::-;18681:7;18654:34;;;;;;;;:::i;:::-;:23;;;;:13;:23;;;;;;;;:34;;;;;;;;:::i;:::-;;18650:65;;18697:18;;-1:-1:-1;;;18697:18:9;;;;;;;;;;;18650:65;18725:23;;;;:13;:23;;;;;:33;;18751:7;;18725:23;-1:-1:-1;;18725:33:9;;18751:7;18725:33;;;;;;;;:::i;:::-;;;;;;18794:8;18773:39;18804:7;18773:39;;;;;;:::i;:::-;;;;;;;;18568:251;;:::o;1620:130:43:-;1534:6;;-1:-1:-1;;;;;1534:6:43;965:10:65;1683:23:43;1675:68;;;;-1:-1:-1;;;1675:68:43;;21454:2:150;1675:68:43;;;21436:21:150;;;21473:18;;;21466:30;21532:34;21512:18;;;21505:62;21584:18;;1675:68:43;21252:356:150;6100:208:12;5374:13:48;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:48;;;;;;;:::i;:::-;6186:16:12::1;:14;:16::i;:::-;6212:62;-1:-1:-1::0;;;;;6231:20:12;::::1;::::0;:42:::1;;6267:6;6212:18;:62::i;6231:42::-;6254:10;6212:18;:62::i;:::-;-1:-1:-1::0;6284:8:12::1;:17:::0;;-1:-1:-1;;6284:17:12::1;;;::::0;;6100:208::o;7540:116::-;-1:-1:-1;;;;;7613:19:12;;7605:44;;;;-1:-1:-1;;;7605:44:12;;;;;;;;;;;21773:277:9;21851:7;;21895:43;21917:13;;;;:8;:13;:::i;:::-;:20;;21895:21;:43::i;:::-;21870:68;;;-1:-1:-1;21870:68:9;21979:37;21998:17;;;;;;;;:::i;:::-;21979:37;;:14;:18;;:37;;;;:::i;:::-;:54;;21773:277;-1:-1:-1;;;21773:277:9:o;19512:536::-;19701:19;19740:14;-1:-1:-1;;;;;19740:34:9;;19788:8;19798:43;19806:8;-1:-1:-1;;;19835:5:9;19798:7;:43::i;:::-;19843:7;19852:6;;19740:128;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19740:128:9;;;;;;;;-1:-1:-1;;19740:128:9;;;;;;;;;;;;:::i;:::-;;;19736:306;;20008:23;;-1:-1:-1;;;20008:23:9;;;;;;;;;;;19736:306;19957:11;-1:-1:-1;19736:306:9;19512:536;;;;;;;:::o;731:110:22:-;791:7;822:2;817;:7;:17;;832:2;817:17;;;-1:-1:-1;827:2:22;;731:110;-1:-1:-1;731:110:22:o;416:::-;476:7;507:2;502;:7;:17;;517:2;502:17;;;-1:-1:-1;512:2:22;416:110;-1:-1:-1;416:110:22:o;1939:207:19:-;2039:7;2050:1;2039:12;2035:25;;1939:207;;;:::o;2035:25::-;2077:38;2087:3;2092:7;2101:9;2077:38;;;;;;;;;;;;:9;:38::i;:::-;2069:70;;;;-1:-1:-1;;;2069:70:19;;;;;;;;;;;1175:140:80;-1:-1:-1;;;;;;;;;;;1254:54:80;-1:-1:-1;;;;;1254:54:80;;1175:140::o;6465:75:12:-;1355:13:43;:11;:13::i;2494:922:80:-;689:66;2910:48;;;2906:504;;;2974:37;2993:17;2974:18;:37::i;2906:504::-;3064:17;-1:-1:-1;;;;;3046:50:80;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3046:52:80;;;;;;;;-1:-1:-1;;3046:52:80;;;;;;;;;;;;:::i;:::-;;;3042:291;;3262:56;;-1:-1:-1;;;3262:56:80;;22929:2:150;3262:56:80;;;22911:21:150;22968:2;22948:18;;;22941:30;23007:34;22987:18;;;22980:62;-1:-1:-1;;;23058:18:150;;;23051:44;23112:19;;3262:56:80;22727:410:150;3042:291:80;-1:-1:-1;;;;;;;;;;;3148:28:80;;3140:82;;;;-1:-1:-1;;;3140:82:80;;23344:2:150;3140:82:80;;;23326:21:150;23383:2;23363:18;;;23356:30;23422:34;23402:18;;;23395:62;-1:-1:-1;;;23473:18:150;;;23466:39;23522:19;;3140:82:80;23142:405:150;3140:82:80;3099:138;3346:53;3364:17;3383:4;3389:9;3346:17;:53::i;7334:95:12:-;7389:8;5454;;;;;:17;:8;650:1;5454:17;;5384:94;7389:8;7381:41;;;;-1:-1:-1;;;7381:41:12;;;;;;;;;;;6546:70;1355:13:43;:11;:13::i;20628:439:9:-;20827:4;20851:14;-1:-1:-1;;;;;20851:35:9;;20900:8;20910:43;20918:8;-1:-1:-1;;;20947:5:9;20910:7;:43::i;:::-;20955:7;20964:6;;20851:129;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20847:214;;-1:-1:-1;21045:5:9;21038:12;;20847:214;-1:-1:-1;21002:4:9;20995:11;;1798:153:42;1887:13;1880:20;;-1:-1:-1;;;;;;1880:20:42;;;1910:34;1935:8;1910:24;:34::i;2232:252:13:-;2382:7;5769:10:12;2412:65:13;;-1:-1:-1;;;2412:65:13;;-1:-1:-1;;;;;23765:31:150;;2412:65:13;;;23747:50:150;23813:18;;;23806:34;;;23883:14;;23876:22;23856:18;;;23849:50;-1:-1:-1;;;;;2412:29:13;;;;;;;23720:18:150;;2412:65:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2485:392:19:-;2710:57;;-1:-1:-1;;;;;;24328:33:150;;2710:57:19;;;24310:52:150;2617:12:19;;;;;;-1:-1:-1;;;;;2693:16:19;;;24283:18:150;;2710:57:19;;;-1:-1:-1;;2710:57:19;;;;;;;;;;;;;;-1:-1:-1;;;;;2710:57:19;-1:-1:-1;;;2710:57:19;;;2693:75;;;2710:57;2693:75;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2645:123;;;;2782:7;:28;;;;;2793:4;:11;2808:2;2793:17;2782:28;2778:93;;;2847:4;2836:24;;;;;;;;;;;;:::i;:::-;2826:34;;2778:93;2635:242;;2485:392;;;;:::o;18998:155:9:-;19109:37;;;;;;;;;;;-1:-1:-1;;;;;19109:37:9;;;;;;;;;-1:-1:-1;;;;;19109:37:9;;;;;;;;19101:5;:45;;;;;;;-1:-1:-1;;;19101:45:9;;;-1:-1:-1;;;;;;19101:45:9;;;;;;;;;18998:155::o;23684:2292::-;25512:18;25528:2;25512:13;:18;:::i;:::-;25501:8;:29;25497:473;;;25937:9;747:59:65;5374:13:48;;;;;;;5366:69;;;;-1:-1:-1;;;5366:69:48;;;;;;;:::i;1406:259:80:-;-1:-1:-1;;;;;1713:19:64;;;1479:95:80;;;;-1:-1:-1;;;1479:95:80;;25089:2:150;1479:95:80;;;25071:21:150;25128:2;25108:18;;;25101:30;25167:34;25147:18;;;25140:62;-1:-1:-1;;;25218:18:150;;;25211:43;25271:19;;1479:95:80;24887:409:150;1479:95:80;-1:-1:-1;;;;;;;;;;;1584:74:80;;-1:-1:-1;;;;;;1584:74:80;-1:-1:-1;;;;;1584:74:80;;;;;;;;;;1406:259::o;2057:265::-;2165:29;2176:17;2165:10;:29::i;:::-;2222:1;2208:4;:11;:15;:28;;;;2227:9;2208:28;2204:112;;;2252:53;2281:17;2300:4;2252:28;:53::i;2687:187:43:-;2779:6;;;-1:-1:-1;;;;;2795:17:43;;;-1:-1:-1;;;;;;2795:17:43;;;;;;;2827:40;;2779:6;;;2795:17;2779:6;;2827:40;;2760:16;;2827:40;2750:124;2687:187;:::o;1771:152:80:-;1837:37;1856:17;1837:18;:37::i;:::-;1889:27;;-1:-1:-1;;;;;1889:27:80;;;;;;;;1771:152;:::o;6674:198:94:-;6757:12;6788:77;6809:6;6817:4;6788:77;;;;;;;;;;;;;;;;;7199:12;7224;7238:23;7265:6;-1:-1:-1;;;;;7265:19:94;7285:4;7265:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7223:67;;;;7307:69;7334:6;7342:7;7351:10;7363:12;7307:26;:69::i;:::-;7300:76;7058:325;-1:-1:-1;;;;;;7058:325:94:o;7671:628::-;7851:12;7879:7;7875:418;;;7906:10;:17;7927:1;7906:22;7902:286;;-1:-1:-1;;;;;1713:19:64;;;8113:60:94;;;;-1:-1:-1;;;8113:60:94;;25503:2:150;8113:60:94;;;25485:21:150;25542:2;25522:18;;;25515:30;25581:31;25561:18;;;25554:59;25630:18;;8113:60:94;25301:353:150;8113:60:94;-1:-1:-1;8208:10:94;8201:17;;7875:418;8249:33;8257:10;8269:12;8980:17;;:21;8976:379;;9208:10;9202:17;9264:15;9251:10;9247:2;9243:19;9236:44;8976:379;9331:12;9324:20;;-1:-1:-1;;;9324:20:94;;;;;;;;:::i;14:156:150:-;74:5;119:3;110:6;105:3;101:16;97:26;94:46;;;136:1;133;126:12;175:118;261:5;254:13;247:21;240:5;237:32;227:60;;283:1;280;273:12;298:485;390:6;398;451:2;439:9;430:7;426:23;422:32;419:52;;;467:1;464;457:12;419:52;507:9;494:23;-1:-1:-1;;;;;532:6:150;529:30;526:50;;;572:1;569;562:12;526:50;595:67;654:7;645:6;634:9;630:22;595:67;:::i;:::-;585:77;;;712:2;701:9;697:18;684:32;725:28;747:5;725:28;:::i;:::-;772:5;762:15;;;298:485;;;;;:::o;1105:131::-;-1:-1:-1;;;;;1180:31:150;;1170:42;;1160:70;;1226:1;1223;1216:12;1241:134;1309:20;;1338:31;1309:20;1338:31;:::i;:::-;1241:134;;;:::o;1380:247::-;1439:6;1492:2;1480:9;1471:7;1467:23;1463:32;1460:52;;;1508:1;1505;1498:12;1460:52;1547:9;1534:23;1566:31;1591:5;1566:31;:::i;1632:356::-;1718:6;1771:2;1759:9;1750:7;1746:23;1742:32;1739:52;;;1787:1;1784;1777:12;1739:52;1827:9;1814:23;-1:-1:-1;;;;;1852:6:150;1849:30;1846:50;;;1892:1;1889;1882:12;1846:50;1915:67;1974:7;1965:6;1954:9;1950:22;1915:67;:::i;2199:250::-;2284:1;2294:113;2308:6;2305:1;2302:13;2294:113;;;2384:11;;;2378:18;2365:11;;;2358:39;2330:2;2323:10;2294:113;;;-1:-1:-1;;2441:1:150;2423:16;;2416:27;2199:250::o;2454:270::-;2495:3;2533:5;2527:12;2560:6;2555:3;2548:19;2576:76;2645:6;2638:4;2633:3;2629:14;2622:4;2615:5;2611:16;2576:76;:::i;:::-;2706:2;2685:15;-1:-1:-1;;2681:29:150;2672:39;;;;2713:4;2668:50;;2454:270;-1:-1:-1;;2454:270:150:o;2729:1233::-;2815:12;;-1:-1:-1;;;;;2058:30:150;2046:43;;2779:3;2879:4;2872:5;2868:16;2862:23;2894:47;2935:4;2930:3;2926:14;2912:12;-1:-1:-1;;;;;2058:30:150;2046:43;;1993:102;2894:47;;2989:4;2982:5;2978:16;2972:23;3004:49;3047:4;3042:3;3038:14;3022;2176:10;2165:22;2153:35;;2100:94;3004:49;;3101:4;3094:5;3090:16;3084:23;3116:50;3160:4;3155:3;3151:14;3135;-1:-1:-1;;;;;854:31:150;842:44;;788:104;3116:50;;3214:4;3207:5;3203:16;3197:23;3229:49;3272:4;3267:3;3263:14;3247;-1:-1:-1;;;;;2058:30:150;2046:43;;1993:102;3229:49;;3326:4;3319:5;3315:16;3309:23;3341:50;3385:4;3380:3;3376:14;3360;-1:-1:-1;;;;;854:31:150;842:44;;788:104;3341:50;;3439:4;3432:5;3428:16;3422:23;3454:49;3497:4;3492:3;3488:14;3472;-1:-1:-1;;;;;2058:30:150;2046:43;;1993:102;3454:49;;3551:4;3544:5;3540:16;3534:23;3566:50;3610:4;3605:3;3601:14;3585;-1:-1:-1;;;;;854:31:150;842:44;;788:104;3566:50;;3664:6;3657:5;3653:18;3647:25;3681:52;3725:6;3720:3;3716:16;3700:14;-1:-1:-1;;;;;854:31:150;842:44;;788:104;3681:52;;3784:6;3777:5;3773:18;3767:25;3758:6;3753:3;3749:16;3742:51;3841:6;3834:5;3830:18;3824:25;3883:6;3874;3869:3;3865:16;3858:32;3906:50;3948:6;3943:3;3939:16;3923:14;3906:50;:::i;3967:329::-;4174:6;4163:9;4156:25;4217:2;4212;4201:9;4197:18;4190:30;4137:4;4237:53;4286:2;4275:9;4271:18;4263:6;4237:53;:::i;4301:836::-;4407:6;4415;4423;4476:2;4464:9;4455:7;4451:23;4447:32;4444:52;;;4492:1;4489;4482:12;4444:52;4532:9;4519:23;-1:-1:-1;;;;;4557:6:150;4554:30;4551:50;;;4597:1;4594;4587:12;4551:50;4620:67;4679:7;4670:6;4659:9;4655:22;4620:67;:::i;:::-;4610:77;;;4740:2;4729:9;4725:18;4712:32;-1:-1:-1;;;;;4759:8:150;4756:32;4753:52;;;4801:1;4798;4791:12;4753:52;4824:24;;4879:4;4871:13;;4867:27;-1:-1:-1;4857:55:150;;4908:1;4905;4898:12;4857:55;4948:2;4935:16;-1:-1:-1;;;;;4966:6:150;4963:30;4960:50;;;5006:1;5003;4996:12;4960:50;5051:7;5046:2;5037:6;5033:2;5029:15;5025:24;5022:37;5019:57;;;5072:1;5069;5062:12;5019:57;4301:836;;5103:2;5095:11;;;;;-1:-1:-1;5125:6:150;;-1:-1:-1;;;4301:836:150:o;5142:127::-;5203:10;5198:3;5194:20;5191:1;5184:31;5234:4;5231:1;5224:15;5258:4;5255:1;5248:15;5274:137;5352:1;5345:5;5342:12;5332:46;;5358:18;;:::i;:::-;5387;;5274:137::o;5416:344::-;5602:2;5587:18;;5614:41;5591:9;5637:6;5614:41;:::i;:::-;5685:1;5677:6;5674:13;5664:47;;5691:18;;:::i;:::-;5747:6;5742:2;5731:9;5727:18;5720:34;5416:344;;;;;:::o;5957:180::-;6016:6;6069:2;6057:9;6048:7;6044:23;6040:32;6037:52;;;6085:1;6082;6075:12;6037:52;-1:-1:-1;6108:23:150;;5957:180;-1:-1:-1;5957:180:150:o;6142:202::-;6285:2;6270:18;;6297:41;6274:9;6320:6;6297:41;:::i;6531:127::-;6592:10;6587:3;6583:20;6580:1;6573:31;6623:4;6620:1;6613:15;6647:4;6644:1;6637:15;6663:250;6730:2;6724:9;6772:6;6760:19;;-1:-1:-1;;;;;6794:34:150;;6830:22;;;6791:62;6788:88;;;6856:18;;:::i;:::-;6892:2;6885:22;6663:250;:::o;6918:745::-;6960:5;7013:3;7006:4;6998:6;6994:17;6990:27;6980:55;;7031:1;7028;7021:12;6980:55;7071:6;7058:20;-1:-1:-1;;;;;7093:6:150;7090:30;7087:56;;;7123:18;;:::i;:::-;7192:2;7186:9;7284:2;7246:17;;-1:-1:-1;;7242:31:150;;;7275:2;7238:40;7234:54;7222:67;;-1:-1:-1;;;;;7304:34:150;;7340:22;;;7301:62;7298:88;;;7366:18;;:::i;:::-;7402:2;7395:22;7426;;;7467:19;;;7488:4;7463:30;7460:39;-1:-1:-1;7457:59:150;;;7512:1;7509;7502:12;7457:59;7576:6;7569:4;7561:6;7557:17;7550:4;7542:6;7538:17;7525:58;7631:1;7603:19;;;7624:4;7599:30;7592:41;;;;7607:6;6918:745;-1:-1:-1;;;6918:745:150:o;7668:455::-;7745:6;7753;7806:2;7794:9;7785:7;7781:23;7777:32;7774:52;;;7822:1;7819;7812:12;7774:52;7861:9;7848:23;7880:31;7905:5;7880:31;:::i;:::-;7930:5;-1:-1:-1;7986:2:150;7971:18;;7958:32;-1:-1:-1;;;;;8002:30:150;;7999:50;;;8045:1;8042;8035:12;7999:50;8068:49;8109:7;8100:6;8089:9;8085:22;8068:49;:::i;:::-;8058:59;;;7668:455;;;;;:::o;8969:171::-;9036:20;;-1:-1:-1;;;;;9085:30:150;;9075:41;;9065:69;;9130:1;9127;9120:12;9145:184;9203:6;9256:2;9244:9;9235:7;9231:23;9227:32;9224:52;;;9272:1;9269;9262:12;9224:52;9295:28;9313:9;9295:28;:::i;9623:163::-;9690:20;;9750:10;9739:22;;9729:33;;9719:61;;9776:1;9773;9766:12;9791:1106;9845:5;9893:6;9881:9;9876:3;9872:19;9868:32;9865:52;;;9913:1;9910;9903:12;9865:52;9935:17;;:::i;:::-;9926:26;;9975:28;9993:9;9975:28;:::i;:::-;9968:5;9961:43;10036:37;10069:2;10058:9;10054:18;10036:37;:::i;:::-;10031:2;10024:5;10020:14;10013:61;10106:37;10139:2;10128:9;10124:18;10106:37;:::i;:::-;10101:2;10094:5;10090:14;10083:61;10176:38;10210:2;10199:9;10195:18;10176:38;:::i;:::-;10171:2;10164:5;10160:14;10153:62;10248:38;10281:3;10270:9;10266:19;10248:38;:::i;:::-;10242:3;10235:5;10231:15;10224:63;10320:39;10354:3;10343:9;10339:19;10320:39;:::i;:::-;10314:3;10307:5;10303:15;10296:64;10393:38;10426:3;10415:9;10411:19;10393:38;:::i;:::-;10387:3;10380:5;10376:15;10369:63;10465:39;10499:3;10488:9;10484:19;10465:39;:::i;:::-;10459:3;10452:5;10448:15;10441:64;10538:39;10572:3;10561:9;10557:19;10538:39;:::i;:::-;10532:3;10521:15;;10514:64;10651:3;10636:19;;;10623:33;10672:15;;;10665:32;10748:3;10733:19;;10720:33;-1:-1:-1;;;;;10765:30:150;;10762:50;;;10808:1;10805;10798:12;10762:50;10845:45;10886:3;10877:6;10866:9;10862:22;10845:45;:::i;:::-;10839:3;10832:5;10828:15;10821:70;;9791:1106;;;;:::o;10902:345::-;10986:6;11039:2;11027:9;11018:7;11014:23;11010:32;11007:52;;;11055:1;11052;11045:12;11007:52;11095:9;11082:23;-1:-1:-1;;;;;11120:6:150;11117:30;11114:50;;;11160:1;11157;11150:12;11114:50;11183:58;11233:7;11224:6;11213:9;11209:22;11183:58;:::i;11873:193::-;11975:9;12012:48;12045:14;12038:5;12012:48;:::i;12071:184::-;12129:6;12182:2;12170:9;12161:7;12157:23;12153:32;12150:52;;;12198:1;12195;12188:12;12150:52;12221:28;12239:9;12221:28;:::i;12260:184::-;12330:6;12383:2;12371:9;12362:7;12358:23;12354:32;12351:52;;;12399:1;12396;12389:12;12351:52;-1:-1:-1;12422:16:150;;12260:184;-1:-1:-1;12260:184:150:o;12449:410::-;12651:2;12633:21;;;12690:2;12670:18;;;12663:30;12729:34;12724:2;12709:18;;12702:62;-1:-1:-1;;;12795:2:150;12780:18;;12773:44;12849:3;12834:19;;12449:410::o;13252:127::-;13313:10;13308:3;13304:20;13301:1;13294:31;13344:4;13341:1;13334:15;13368:4;13365:1;13358:15;13384:125;13449:9;;;13470:10;;;13467:36;;;13483:18;;:::i;13514:204::-;13552:3;-1:-1:-1;;;;;13589:5:150;13585:30;-1:-1:-1;;;;;13630:7:150;13627:31;13624:57;;13661:18;;:::i;:::-;13710:1;13697:15;;13514:204;-1:-1:-1;;13514:204:150:o;13723:258::-;13902:2;13891:9;13884:21;13865:4;13922:53;13971:2;13960:9;13956:18;13948:6;13922:53;:::i;13986:521::-;14063:4;14069:6;14129:11;14116:25;14223:2;14219:7;14208:8;14192:14;14188:29;14184:43;14164:18;14160:68;14150:96;;14242:1;14239;14232:12;14150:96;14269:33;;14321:20;;;-1:-1:-1;;;;;;14353:30:150;;14350:50;;;14396:1;14393;14386:12;14350:50;14429:4;14417:17;;-1:-1:-1;14460:14:150;14456:27;;;14446:38;;14443:58;;;14497:1;14494;14487:12;14443:58;13986:521;;;;;:::o;14512:127::-;14573:10;14568:3;14564:20;14561:1;14554:31;14604:4;14601:1;14594:15;14628:4;14625:1;14618:15;14644:500;14702:5;14709:6;14769:3;14756:17;14855:2;14851:7;14840:8;14824:14;14820:29;14816:43;14796:18;14792:68;14782:96;;14874:1;14871;14864:12;14782:96;14902:33;;15006:4;14993:18;;;-1:-1:-1;14954:21:150;;-1:-1:-1;;;;;;15023:30:150;;15020:50;;;15066:1;15063;15056:12;15020:50;15113:6;15097:14;15093:27;15086:5;15082:39;15079:59;;;15134:1;15131;15124:12;15149:266;15237:6;15232:3;15225:19;15289:6;15282:5;15275:4;15270:3;15266:14;15253:43;-1:-1:-1;15341:1:150;15316:16;;;15334:4;15312:27;;;15305:38;;;;15397:2;15376:15;;;-1:-1:-1;;15372:29:150;15363:39;;;15359:50;;15149:266::o;15420:1482::-;15497:48;15541:3;15515:24;15533:5;15515:24;:::i;:::-;-1:-1:-1;;;;;2058:30:150;2046:43;;1993:102;15497:48;15479:3;15574:35;15603:4;15596:5;15592:16;15574:35;:::i;:::-;-1:-1:-1;;;;;2058:30:150;15659:4;15650:14;;2046:43;15696:35;15725:4;15714:16;;15696:35;:::i;:::-;2176:10;2165:22;15783:4;15774:14;;2153:35;15820:36;15850:4;15839:16;;15820:36;:::i;:::-;-1:-1:-1;;;;;854:31:150;15909:4;15900:14;;842:44;15946:35;15975:4;15964:16;;15946:35;:::i;:::-;-1:-1:-1;;;;;2058:30:150;16033:4;16024:14;;2046:43;16070:36;16100:4;16089:16;;16070:36;:::i;:::-;-1:-1:-1;;;;;854:31:150;16159:4;16150:14;;842:44;16196:35;16225:4;16214:16;;16196:35;:::i;:::-;-1:-1:-1;;;;;2058:30:150;16283:4;16274:14;;2046:43;16320:36;16350:4;16339:16;;16320:36;:::i;:::-;-1:-1:-1;;;;;854:31:150;16409:4;16400:14;;842:44;16446:38;16476:6;16465:18;;16446:38;:::i;:::-;-1:-1:-1;;;;;854:31:150;16537:6;16528:16;;842:44;16614:6;16603:18;;;16590:32;16638:16;;;16631:33;16709:57;16758:6;16747:18;;16603;16709:57;:::i;:::-;16800:6;16791;16786:3;16782:16;16775:32;16823:73;16888:6;16883:3;16879:16;16865:12;16849:14;16823:73;:::i;16907:660::-;17182:3;17171:9;17164:22;17145:4;17203:63;17261:3;17250:9;17246:19;17238:6;17203:63;:::i;:::-;17195:71;;17321:10;17312:6;17306:13;17302:30;17297:2;17286:9;17282:18;17275:58;17397:10;17391:2;17383:6;17379:15;17373:22;17369:39;17364:2;17353:9;17349:18;17342:67;17473:10;17467:2;17459:6;17455:15;17449:22;17445:39;17440:2;17429:9;17425:18;17418:67;17554:2;17546:6;17542:15;17536:22;17529:30;17522:38;17516:3;17505:9;17501:19;17494:67;16907:660;;;;;:::o;17572:408::-;17774:2;17756:21;;;17813:2;17793:18;;;17786:30;17852:34;17847:2;17832:18;;17825:62;-1:-1:-1;;;17918:2:150;17903:18;;17896:42;17970:3;17955:19;;17572:408::o;17985:::-;18187:2;18169:21;;;18226:2;18206:18;;;18199:30;18265:34;18260:2;18245:18;;18238:62;-1:-1:-1;;;18331:2:150;18316:18;;18309:42;18383:3;18368:19;;17985:408::o;19102:245::-;19169:6;19222:2;19210:9;19201:7;19197:23;19193:32;19190:52;;;19238:1;19235;19228:12;19190:52;19270:9;19264:16;19289:28;19311:5;19289:28;:::i;19762:167::-;19857:10;19830:18;;;19850;;;19826:43;;19881:19;;19878:45;;;19903:18;;:::i;19934:340::-;20143:2;20132:9;20125:21;20106:4;20163:62;20221:2;20210:9;20206:18;20198:6;20163:62;:::i;:::-;20155:70;;20261:6;20256:2;20245:9;20241:18;20234:34;19934:340;;;;;:::o;20279:493::-;20559:2;20548:9;20541:21;20598:2;20593;20582:9;20578:18;20571:30;-1:-1:-1;;;20632:2:150;20621:9;20617:18;20610:43;20691:3;20684:4;20673:9;20669:20;20662:33;20522:4;20712:54;20761:3;20750:9;20746:19;20738:6;20712:54;:::i;20777:338::-;20897:19;;-1:-1:-1;;;;;;20934:29:150;;;20983:1;20975:10;;20972:137;;;-1:-1:-1;;;;;;21044:1:150;21040:11;;;21037:1;21033:19;21029:46;;;21021:55;;21017:82;;-1:-1:-1;20972:137:150;;20777:338;;;;:::o;21120:127::-;21181:10;21176:3;21172:20;21169:1;21162:31;21212:4;21209:1;21202:15;21236:4;21233:1;21226:15;21613:407;21815:2;21797:21;;;21854:2;21834:18;;;21827:30;21893:34;21888:2;21873:18;;21866:62;-1:-1:-1;;;21959:2:150;21944:18;;21937:41;22010:3;21995:19;;21613:407::o;22025:508::-;-1:-1:-1;;;;;22268:6:150;22264:31;22253:9;22246:50;22361:1;22357;22352:3;22348:11;22344:19;22336:6;22332:32;22327:2;22316:9;22312:18;22305:60;22401:6;22396:2;22385:9;22381:18;22374:34;22444:3;22439:2;22428:9;22424:18;22417:31;22227:4;22465:62;22522:3;22511:9;22507:19;22499:6;22491;22465:62;:::i;:::-;22457:70;22025:508;-1:-1:-1;;;;;;;22025:508:150:o;23910:251::-;23980:6;24033:2;24021:9;24012:7;24008:23;24004:32;24001:52;;;24049:1;24046;24039:12;24001:52;24081:9;24075:16;24100:31;24125:5;24100:31;:::i;24373:287::-;24502:3;24540:6;24534:13;24556:66;24615:6;24610:3;24603:4;24595:6;24591:17;24556:66;:::i;:::-;24638:16;;;;;24373:287;-1:-1:-1;;24373:287:150:o;24665:217::-;24705:1;24731;24721:132;;24775:10;24770:3;24766:20;24763:1;24756:31;24810:4;24807:1;24800:15;24838:4;24835:1;24828:15;24721:132;-1:-1:-1;24867:9:150;;24665:217::o;25659:219::-;25808:2;25797:9;25790:21;25771:4;25828:44;25868:2;25857:9;25853:18;25845:6;25828:44;:::i","linkReferences":{},"immutableReferences":{"20913":[{"start":4585,"length":32},{"start":4649,"length":32},{"start":4875,"length":32},{"start":4939,"length":32},{"start":5058,"length":32}],"2530":[{"start":1081,"length":32},{"start":1841,"length":32},{"start":2137,"length":32},{"start":3332,"length":32},{"start":3850,"length":32},{"start":3923,"length":32},{"start":5268,"length":32},{"start":5396,"length":32},{"start":6071,"length":32},{"start":6331,"length":32},{"start":6478,"length":32},{"start":6843,"length":32}],"4312":[{"start":559,"length":32},{"start":9517,"length":32}]}},"methodIdentifiers":{"GAS_OVERHEAD()":"a730cdfb","GAS_RESERVE()":"be880c81","RELAYER_MAX_PROOF_BYTES()":"422770fa","acceptOwnership()":"79ba5097","context()":"d0496d6a","failMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))":"913b16cb","getMessageMinGasLimit(uint256)":"7cbadfaa","hashMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))":"c012fa77","impl()":"8abf6077","inNonReentrant()":"3075db56","init(address)":"19ab453c","init2()":"069489a2","isDestChainEnabled(uint64)":"8e3881a9","isMessageFailed((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)":"5862f6e1","isMessageReceived((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)":"b8acae0e","isMessageSent((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))":"60620c6b","messageStatus(bytes32)":"3c6cf473","nextMessageId()":"eefbf17e","owner()":"8da5cb5b","pause()":"8456cb59","paused()":"5c975abb","pendingOwner()":"e30c3978","processMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)":"2035065e","proxiableUUID()":"52d1902d","recallMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)":"9efc7a2e","renounceOwnership()":"715018a6","resolver()":"04f3bcec","retryMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bool)":"0432873c","sendMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))":"1bdb0037","signalForFailedMessage(bytes32)":"d1aaa5df","signalService()":"62d09453","transferOwnership(address)":"f2fde38b","unpause()":"3f4ba83a","upgradeTo(address)":"3659cfe6","upgradeToAndCall(address,bytes)":"4f1ef286"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_resolver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_signalService\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ACCESS_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INSUFFICIENT_GAS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_CHAINID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_CONTEXT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_FEE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_GAS_LIMIT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_INVALID_VALUE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_MESSAGE_NOT_SENT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_PERMISSION_DENIED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_PROOF_TOO_LARGE\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_RETRY_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"B_SIGNAL_NOT_RECEIVED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ETH_TRANSFER_FAILED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FUNC_NOT_IMPLEMENTED\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"INVALID_PAUSE_STATUS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"REENTRANT_CALL\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RESOLVER_NOT_FOUND\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZERO_ADDRESS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZERO_VALUE\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"fee\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"srcOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"destOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct IBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"gasUsedInFeeCalc\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"proofSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"numCacheOps\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"processedByRelayer\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct Bridge.ProcessingStats\",\"name\":\"stats\",\"type\":\"tuple\"}],\"name\":\"MessageProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"fee\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"srcOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"destOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct IBridge.Message\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enum IBridge.Status\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"MessageStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"GAS_OVERHEAD\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAS_RESERVE\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"RELAYER_MAX_PROOF_BYTES\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"context\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"}],\"internalType\":\"struct IBridge.Context\",\"name\":\"ctx_\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"fee\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"srcOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"destOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"name\":\"failMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dataLength\",\"type\":\"uint256\"}],\"name\":\"getMessageMinGasLimit\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"fee\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"srcOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"destOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"name\":\"hashMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"impl\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inNonReentrant\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"init2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainId\",\"type\":\"uint64\"}],\"name\":\"isDestChainEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"enabled_\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"destBridge_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"fee\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"srcOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"destOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"isMessageFailed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"fee\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"srcOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"destOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"isMessageReceived\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"fee\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"srcOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"destOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"name\":\"isMessageSent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"messageStatus\",\"outputs\":[{\"internalType\":\"enum IBridge.Status\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextMessageId\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"fee\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"srcOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"destOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"processMessage\",\"outputs\":[{\"internalType\":\"enum IBridge.Status\",\"name\":\"status_\",\"type\":\"uint8\"},{\"internalType\":\"enum IBridge.StatusReason\",\"name\":\"reason_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"fee\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"srcOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"destOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"recallMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolver\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"fee\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"srcOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"destOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_isLastAttempt\",\"type\":\"bool\"}],\"name\":\"retryMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"fee\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"srcOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"destOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IBridge.Message\",\"name\":\"_message\",\"type\":\"tuple\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"msgHash_\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"fee\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"srcChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"srcOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"destOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct IBridge.Message\",\"name\":\"message_\",\"type\":\"tuple\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_msgHash\",\"type\":\"bytes32\"}],\"name\":\"signalForFailedMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signalService\",\"outputs\":[{\"internalType\":\"contract ISignalService\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"custom:security-contact\":\"security@taiko.xyz\",\"details\":\"Labeled in address resolver as \\\"bridge\\\". Additionally, the code hash for the same address on L1 and L2 may be different.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is changed.\"},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"MessageProcessed(bytes32,(uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),(uint32,uint32,uint32,bool))\":{\"details\":\"A debug event for fine-tuning gas related constants in the future.\"},\"MessageSent(bytes32,(uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))\":{\"params\":{\"message\":\"The message.\",\"msgHash\":\"The hash of the message.\"}},\"MessageStatusChanged(bytes32,uint8)\":{\"params\":{\"msgHash\":\"The hash of the message.\",\"status\":\"The new status of the message.\"}},\"Paused(address)\":{\"params\":{\"account\":\"The account that paused the contract.\"}},\"Unpaused(address)\":{\"params\":{\"account\":\"The account that unpaused the contract.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"context()\":{\"returns\":{\"ctx_\":\"The context of the current bridge operation.\"}},\"failMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))\":{\"details\":\"This function can only be called by `message.destOwner`.\",\"params\":{\"_message\":\"The message to fail. message.\"}},\"getMessageMinGasLimit(uint256)\":{\"params\":{\"dataLength\":\"The length of message.data.\"},\"returns\":{\"_0\":\"The minimal gas limit required for sending this message.\"}},\"hashMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))\":{\"params\":{\"_message\":\"The message struct variable to be hashed.\"},\"returns\":{\"_0\":\"The message's hash.\"}},\"init(address)\":{\"params\":{\"_owner\":\"The owner of this contract. msg.sender will be used if this value is zero.\"}},\"isDestChainEnabled(uint64)\":{\"params\":{\"_chainId\":\"The destination chain ID.\"},\"returns\":{\"destBridge_\":\"The bridge of the destination chain.\",\"enabled_\":\"True if the destination chain is enabled.\"}},\"isMessageFailed((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)\":{\"params\":{\"_message\":\"The message.\",\"_proof\":\"The merkle inclusion proof.\"},\"returns\":{\"_0\":\"true if the message has failed, false otherwise.\"}},\"isMessageReceived((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)\":{\"params\":{\"_message\":\"The message.\",\"_proof\":\"The merkle inclusion proof.\"},\"returns\":{\"_0\":\"true if the message has been received, false otherwise.\"}},\"isMessageSent((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))\":{\"params\":{\"_message\":\"The message.\"},\"returns\":{\"_0\":\"true if the message was sent.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"returns\":{\"_0\":\"true if paused, false otherwise.\"}},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"processMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)\":{\"details\":\"To ensure successful execution, we recommend this transaction's gas limit not to be smaller than: `(message.gasLimit - GAS_RESERVE) * 64 / 63 + GAS_RESERVE`, Or we can use a simplified rule: `tx.gaslimit = message.gaslimit * 102%`.\",\"params\":{\"_message\":\"The message to be processed.\",\"_proof\":\"The merkle inclusion proof.\"},\"returns\":{\"status_\":\"The message's status after processing and the reason for the change.\"}},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"recallMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)\":{\"details\":\"Verifies via proof that the message was marked FAILED on the destination chain's Bridge, then releases the associated Ether or tokens on the source chain.\",\"params\":{\"_message\":\"The message whose associated Ether should be released.\",\"_proof\":\"The merkle inclusion proof.\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"resolver()\":{\"returns\":{\"_0\":\"The address of this contract.\"}},\"retryMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bool)\":{\"details\":\"This function can be called by any address, including the `message.destOwner`. It attempts to invoke the messageCall and updates the message status accordingly.\",\"params\":{\"_isLastAttempt\":\"Specifies if this is the last attempt to retry the message.\",\"_message\":\"The message to retry.\"}},\"sendMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))\":{\"params\":{\"_message\":\"The message to be sent.\"},\"returns\":{\"message_\":\"The updated message sent.\",\"msgHash_\":\"The hash of the sent message.\"}},\"signalForFailedMessage(bytes32)\":{\"params\":{\"_msgHash\":\"The message hash.\"},\"returns\":{\"_0\":\"The failed representation of it as bytes32.\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"stateVariables\":{\"GAS_OVERHEAD\":{\"details\":\"The gas overhead for both receiving and invoking a message, as well as the proof calldata cost. This value should be fine-tuned with production data.\"},\"GAS_RESERVE\":{\"details\":\"The amount of gas that will be deducted from message.gasLimit before calculating the invocation gas limit. This value should be fine-tuned with production data.\"},\"RELAYER_MAX_PROOF_BYTES\":{\"details\":\"The max proof size for a message to be processable by a relayer.\"},\"_GAS_REFUND_PER_CACHE_OPERATION\":{\"details\":\"The amount of gas not to charge fee per cache operation.\"},\"_PLACEHOLDER\":{\"details\":\"Place holder value when not using transient storage\"},\"_SEND_ETHER_GAS_LIMIT\":{\"details\":\"Gas limit for sending Ether.\"},\"__ctx\":{\"details\":\"Slots 3 and 4\"},\"__reserved1\":{\"details\":\"Slot 1.\"},\"__reserved2\":{\"details\":\"Slot 5.\"},\"__reserved3\":{\"details\":\"Slot 6.\"},\"messageStatus\":{\"details\":\"Slot 2.\"},\"nextMessageId\":{\"return\":\"A unique id\",\"returns\":{\"_0\":\"A unique id\"}}},\"title\":\"Bridge\",\"version\":1},\"userdoc\":{\"events\":{\"MessageSent(bytes32,(uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))\":{\"notice\":\"Emitted when a message is sent.\"},\"MessageStatusChanged(bytes32,uint8)\":{\"notice\":\"Emitted when the status of a message changes.\"},\"Paused(address)\":{\"notice\":\"Emitted when the contract is paused.\"},\"Unpaused(address)\":{\"notice\":\"Emitted when the contract is unpaused.\"}},\"kind\":\"user\",\"methods\":{\"context()\":{\"notice\":\"Gets the current context.\"},\"failMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))\":{\"notice\":\"Mark a message as failed if the message is currently retriable.\"},\"getMessageMinGasLimit(uint256)\":{\"notice\":\"Returns the minimal gas limit required for sending a given message.\"},\"hashMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))\":{\"notice\":\"Hash the message\"},\"init(address)\":{\"notice\":\"Initializes the contract.\"},\"init2()\":{\"notice\":\"This function shall be called by previously deployed contracts.\"},\"isDestChainEnabled(uint64)\":{\"notice\":\"Checks if the destination chain is enabled.\"},\"isMessageFailed((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)\":{\"notice\":\"Checks if a msgHash has failed on its destination chain. This is the 'readonly' version of proveMessageFailed.\"},\"isMessageReceived((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)\":{\"notice\":\"Checks if a msgHash has been received on its source chain. This is the 'readonly' version of proveMessageReceived.\"},\"isMessageSent((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))\":{\"notice\":\"Checks if the message was sent.\"},\"messageStatus(bytes32)\":{\"notice\":\"Mapping to store the status of a message from its hash.\"},\"nextMessageId()\":{\"notice\":\"Returns the unique id of the next bridge message\"},\"pause()\":{\"notice\":\"Pauses the contract.\"},\"paused()\":{\"notice\":\"Returns true if the contract is paused, and false otherwise.\"},\"processMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)\":{\"notice\":\"Processes a bridge message on the destination chain. This function is callable by any address, including the `message.destOwner`.\"},\"recallMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)\":{\"notice\":\"Recalls a message on its source chain after it has failed on the destination chain, releasing associated assets on the source chain.\"},\"resolver()\":{\"notice\":\"Returns the address of this contract.\"},\"retryMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bool)\":{\"notice\":\"Retries to invoke the messageCall after releasing associated Ether and tokens.\"},\"sendMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))\":{\"notice\":\"Sends a message to the destination chain and takes custody of Ether required in this contract.\"},\"signalForFailedMessage(bytes32)\":{\"notice\":\"Returns a signal representing a failed/recalled message.\"},\"unpause()\":{\"notice\":\"Unpauses the contract.\"}},\"notice\":\"See the documentation for {IBridge}.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/shared/bridge/Bridge.sol\":\"Bridge\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@eth-fabric/urc/=node_modules/urc/src/\",\":@openzeppelin-upgrades/contracts/=node_modules/@openzeppelin/contracts-upgradeable/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@optimism/=node_modules/optimism/\",\":@p256-verifier/contracts/=node_modules/p256-verifier/src/\",\":@risc0/contracts/=node_modules/risc0-ethereum/contracts/src/\",\":@solady/=node_modules/solady/\",\":@sp1-contracts/=node_modules/sp1-contracts/contracts/\",\":ds-test/=node_modules/ds-test/\",\":forge-std/=node_modules/forge-std/\",\":openzeppelin/=node_modules/@openzeppelin/\",\":optimism/=node_modules/optimism/\",\":p256-verifier/=node_modules/p256-verifier/\",\":risc0-ethereum/=node_modules/risc0-ethereum/\",\":script/=script/\",\":solady/src/=node_modules/solady/src/\",\":solady/utils/=node_modules/solady/src/utils/\",\":sp1-contracts/=node_modules/sp1-contracts/\",\":src/=contracts/\",\":test/=test/\",\":urc/=node_modules/urc/\"]},\"sources\":{\"contracts/shared/bridge/Bridge.sol\":{\"keccak256\":\"0x58d4c542b77fe23d3078c3b9de781db54f1f318ed817d18af39cf915c3100c1e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7482d1d403d37f1a925b5ae979cdb7fba1463b87cfa882cafa54454f9868283d\",\"dweb:/ipfs/QmdhKFvapFkQD11AanqR1v28CRC8ZrMRu4dnVw8QoqGqNR\"]},\"contracts/shared/bridge/IBridge.sol\":{\"keccak256\":\"0x6b200a3471c7d1e2150c7a2f07f9fc4e619b93c72e61a937ecaf2f659f17a6e1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51633f9d1c2799a6943d94324c7a4630adfbf46aad0639670870835a08ea563e\",\"dweb:/ipfs/Qmbt7P6LSkvgKomUkD5E85128t35kc6QUPXCWSEGrG5n9W\"]},\"contracts/shared/common/EssentialContract.sol\":{\"keccak256\":\"0x23f5e92e919911e82b308b25cf5c06050fd7c7799d44156d8492c2879a12c0a6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://800f8bc7c8a362c8c684906e20c060d893cd4e8badf74cf12026e0cc159c846f\",\"dweb:/ipfs/QmPbre9Skvfz5K7TWVHYTGGnec99VMnY9EUFbB6VqMsd9C\"]},\"contracts/shared/common/EssentialResolverContract.sol\":{\"keccak256\":\"0x5736a30fa45c48e3ff6d53170d980942ad42b788de81f5542a66397fb572b457\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://06d2dcf4d83335d05a12272507991ca23d23ed5a893fd2f97e75324135858ed2\",\"dweb:/ipfs/QmfWRCDnq6TXg8uwv2odpeLFguRSeLKuhL3VPMmGyyh9Eh\"]},\"contracts/shared/common/IResolver.sol\":{\"keccak256\":\"0x01273635aa0be2ad8d6218ad520f824f2003eab82be1d14c46da58f2516a48dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://122dd3456077cf0be42bb974954c9918dca296415b076faeba0336ecee33de8e\",\"dweb:/ipfs/QmSr4WQEFDJwqyqpextmY8Fp3b7Z96SBHgAEKsvXe6dEZV\"]},\"contracts/shared/libs/LibAddress.sol\":{\"keccak256\":\"0x06e39ae119af22feb19ebf8cbd9ee8514118b84388ef93c4650779fd10da8538\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0284aa60ade3d0f87134e6f39c181cca41c345af766b2f8f72c6de50ccf9841\",\"dweb:/ipfs/QmYNcjXmgVVPForNL34yrcZ97H2hKef4jL1DaQy6oNFhmY\"]},\"contracts/shared/libs/LibMath.sol\":{\"keccak256\":\"0x3e2ce1ccb5a4d94c6f97e09ebdb1e731c0bae466981be52147f15063b3742d69\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3530b4db00c1f357562d2dbab8978613c09b30ce1a6312de864399c7af82f9c7\",\"dweb:/ipfs/Qmbp9HeWwPAx5Krcjuu8UCJB3so6rZu4TUTPD6vRKDDBjg\"]},\"contracts/shared/libs/LibNames.sol\":{\"keccak256\":\"0x1227d014ad714497f4779b334da558a7da409860a6139b8ba88e53044bf8fb17\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f743c99518df4f1b1a8cdcbcdcc9a60357b81684e40f68573d4b9eef230d67ee\",\"dweb:/ipfs/QmapJMW5WhFjg8FK598gRitW3EwzkRn6TQ9fLuGjoMcaMP\"]},\"contracts/shared/libs/LibNetwork.sol\":{\"keccak256\":\"0xb5c6769cffcf864f725f8a76f98806f668f94a516125b854faa983b29d8f91ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://de4a9c2ae643272308f42ec150bae3b2a88145357e78eac074e8f68ff3d04595\",\"dweb:/ipfs/QmWNdKbTUvpR33nDunSjzKtR3ZQPPkFDD538fqhr9m6VY1\"]},\"contracts/shared/signal/ICheckpointStore.sol\":{\"keccak256\":\"0x82d7e6a1a6297ee7126ab7a83039900e453f76c9a0dff367be5699c742312067\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1db8501e9b6cadfdefd1ca1bb0cc9d241c9643abab73ec68d12e17aa8e543679\",\"dweb:/ipfs/QmVMFkLduiSeYoZ3NynDNoAcxZi53Lt6Gct7TtXXTyY4LE\"]},\"contracts/shared/signal/ISignalService.sol\":{\"keccak256\":\"0xda39e5766d2a3cc48e19aa0bd8c1235dd7e44bf6df18f0025999e08e25ad0639\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://71d6bb884be8db07e4b89f792aa8e3ad69c1045912be23cfb114935572fe6274\",\"dweb:/ipfs/QmZBuTtCSs4HtKVWo1zsKdU2WndsVDKX8H9VBwyCYbCGeN\"]},\"node_modules/@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"keccak256\":\"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75267b14b60dc216d01d596a4008189a6c44d3314e53eded0edb1e757d95be16\",\"dweb:/ipfs/QmQoMaxTRT6V7uQj9USfdQH9jh1crywB9auVjThzUSAbG2\"]},\"node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e89863421b4014b96a4b62be76eb3b9f0a8afe9684664a6f389124c0964bfe5c\",\"dweb:/ipfs/Qmbk7xr1irpDuU1WdxXgxELBXxs61rHhCgod7heVcvFx16\"]},\"node_modules/@openzeppelin/contracts-upgradeable/governance/utils/IVotesUpgradeable.sol\":{\"keccak256\":\"0x2d600bbef9320309cd2a86c1d087eb9d6dbcc00430713ee54bbc5c5a2a11ba31\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://52a5380b861d676adef15f33f8f643e236a1acb2d9456beb4065307eaa22bc2a\",\"dweb:/ipfs/QmdwSfxrafQubVvCoQCU5T7bbPR8JDWU1WotSDXSiUdm33\"]},\"node_modules/@openzeppelin/contracts-upgradeable/interfaces/IERC5267Upgradeable.sol\":{\"keccak256\":\"0xe562dab443278837fa50faddb76743399e942181881db8dccaea3bd1712994db\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://79ebe0e661396045cefe94f4256398cf632756d779a6871319db374c9eb128c9\",\"dweb:/ipfs/QmfCTCivb9fFhyCX8hzushzcKunvKL2N9RDsnRNdvbd11M\"]},\"node_modules/@openzeppelin/contracts-upgradeable/interfaces/IERC5805Upgradeable.sol\":{\"keccak256\":\"0x19848eec9045c8b91f1ab6b1853966443e3e36bcbc307593ed37a9f0df179d69\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a07972c1330ee99a5d051b393260e01412ac4c14c7bc4d75d80b7cce291a6412\",\"dweb:/ipfs/QmQx1ZiAo4AbSobN41c1xUEtyX1QejydWCmY7Sj3H5aDNv\"]},\"node_modules/@openzeppelin/contracts-upgradeable/interfaces/IERC6372Upgradeable.sol\":{\"keccak256\":\"0x3026befd6d69d1b46960bdc35a2ad37c0e1352f26983ee3728dd61fd32aa308a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2001b7209fd4920ec7674f194db7fe163dfea7a7af2dd25fe6c0e5a94dc595c\",\"dweb:/ipfs/QmXX2zTFyiNWoDxivV3trKcKWifAENMqNAB34NgjWq5feX\"]},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f103ee2e4aecd37aac6ceefe670709cdd7613dee25fa2d4d9feaf7fc0aaa155e\",\"dweb:/ipfs/QmRiNZLoJk5k3HPMYGPGjZFd2ke1ZxjhJZkM45Ec9GH9hv\"]},\"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0xa9311aeb22f459e57d4dac77ee76cf43fb28ad3215278456211b5852b0e9e970\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebdf0d3e42bd25223e45a213311d6d7e177d56a2c541a78b58c0c9d10bbdfbf9\",\"dweb:/ipfs/QmfMyehJ6pxHrh7yL4793J6i7dofXnS2zH3cTtC8JdQMV9\"]},\"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c25f742ff154998d19a669e2508c3597b363e123ce9144cd0fcf6521229f401f\",\"dweb:/ipfs/QmQXRuFzStEWqeEPbhQU6cAg9PaSowxJVo4PDKyRod7dco\"]},\"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x3d159b9049d4ef465c1fb41f7ff7620f18f52bf6f8f3018bae4ed95c2df537d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38f7cfa624d878eec3c97e30dac64c6c00a79c65aa2799cebbf683e74488cd27\",\"dweb:/ipfs/QmdtMH3xSGXNqvBcndsxWCUfmjta6kebnUYwKasJZucTfP\"]},\"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20VotesUpgradeable.sol\":{\"keccak256\":\"0x82d5c2e8d5c7209f5cd2e7a40807ba264cb8bc577db1b121eda5f14f62d609c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://024b99222ec16e75ff1b719c8f0dacf2d8e26250b3c076bd184ac1dadae47492\",\"dweb:/ipfs/QmP11f3Dumw3CYg4ZtBLJrh8juULgodSuQfCqqgX5DqpJE\"]},\"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol\":{\"keccak256\":\"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d\",\"dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ\"]},\"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fed09b97ccb0ff9ba9b6a94224f1d489026bf6b4b7279bfe64fb6e8749dee4d\",\"dweb:/ipfs/QmcRAzaSP1UnGr4vrGkfJmB2L9aiTYoXfV1Lg9gqrVRWn8\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://310136ad60820af4177a11a61d77a3686faf5fca4942b600e08fc940db38396b\",\"dweb:/ipfs/QmbCzMNSTL7Zi7M4UCSqBrkHtp4jjxUnGbkneCZKdR1qeq\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8b06267c5f80bad727af3e48b1382333d591dad51376399ef2f6b0ee6d58bf95\",\"dweb:/ipfs/QmdU5La1agcQvghnfMpWZGDPz2TUDTCxUwTLKmuMRXBpAx\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol\":{\"keccak256\":\"0x798741e231b22b81e2dd2eddaaf8832dee4baf5cd8e2dbaa5c1dd12a1c053c4d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c41e8a7a906b8f362c8b760a44edadc61782008ea2ecf377ac5b5325bf6c3912\",\"dweb:/ipfs/QmcXr19zuH3YLzD6RZNE6UTzvsKSckdxZQnagPoDGkCHu2\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"keccak256\":\"0xb96dc79b65b7c37937919dcdb356a969ce0aa2e8338322bf4dc027a3c9c9a7eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f8613145881436fc0480fff22da4868d611e2b0c0c3da083334eb4362ce1945a\",\"dweb:/ipfs/QmPqpP3YeRbBdTJRe6Gv2eGsUaANf4J6RwTNRW36iYahfV\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/cryptography/ECDSAUpgradeable.sol\":{\"keccak256\":\"0xa014f65d84b02827055d99993ccdbfb4b56b2c9e91eb278d82a93330659d06e4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://50a7e716a74f3d48a7f549086faa94afcd58b9f18ac8e9f74af4571f3a1d8d5c\",\"dweb:/ipfs/QmTkDNWkq5o9Cv2jS7s6JvSmsPBkeunZhPe7Z2njGL31wo\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol\":{\"keccak256\":\"0x7077d7f3369b21f286840c0d69b09a8a6d3d6e522fff67bfc240fd0a6cdf178c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f59e7a19530bd6ee236285f9a87c930d27b73464f6b7398e29a6f4cfc2670ac\",\"dweb:/ipfs/QmVfN4gHvJNac7KiuhLhtgtbdDo5a6Mw5hMcwJkzYugq5R\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol\":{\"keccak256\":\"0x2bc0007987c229ae7624eb29be6a9b84f6a6a5872f76248b15208b131ea41c4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2b2835c737d073ef8b82a4cc246495a9740f43e7ff2cf130906b2449ff9bfb91\",\"dweb:/ipfs/QmSCWfNoSvvTN57ic7o1RW6NqSxxGAqbBTnLKc7QHe27qB\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol\":{\"keccak256\":\"0xcef50f95b43b038aa40aed25b62fc45906c681a5c1d504a4fdcf3bc6330a8d4b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef883699a00970d5469e502514e2854704cd53d7a49825078aa807a2f056315c\",\"dweb:/ipfs/QmRjpN9oxgw6zHCVjfWNB9MzaYpNPPgqu7Rrwqwabmhpis\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/math/SignedMathUpgradeable.sol\":{\"keccak256\":\"0x88f6b7bba3ee33eeb741f9a0f5bc98b6e6e352d0fe4905377bb328590f84095a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88ace2d60f265752f18903d839910be4e4e104340b2957678585b812447825d4\",\"dweb:/ipfs/QmXFkNxMc3AAGzhs2wUEZyErWQjsvoTGyYjuU5oZkFki5Z\"]},\"node_modules/@openzeppelin/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8fa670c3bdce78e642cc6ae11c4cb38b133499cdce5e1990a9979d424703263\",\"dweb:/ipfs/QmVxeCUk4jL2pXQyhsoNJwyU874wRufS2WvGe8TgPKPqhE\"]},\"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688\",\"dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr\"]},\"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol\":{\"keccak256\":\"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2db8e18505e86e02526847005d7287a33e397ed7fb9eaba3fd4a4a197add16e2\",\"dweb:/ipfs/QmW9BSuKTzHWHBNSHF4L8XfVuU1uJrP2vLg84YtBd8mL82\"]},\"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"node_modules/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xc6619957bcc6641fe8984bfaf9ff11a9e4b97d8149c0495f608f9a2416d7c5cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://543be67f7fa43b1b932637c1c7f12035f0f4b0f7ee2bd3c33841186f79c165c1\",\"dweb:/ipfs/QmSBPM2UVKbmJqWfD9i6hSiqbaE8TV4TSqfuiivziRRLKM\"]},\"node_modules/@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931\",\"dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm\"]},\"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e26daf81e2252dc1fe1ce0e4b55c2eb7c6d1ee84ae6558d1a9554432ea1d32da\",\"dweb:/ipfs/Qmb1UANWiWq5pCKbmHSu772hd4nt374dVaghGmwSVNuk8Q\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.30+commit.73712a01"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_resolver","type":"address"},{"internalType":"address","name":"_signalService","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ACCESS_DENIED"},{"inputs":[],"type":"error","name":"B_INSUFFICIENT_GAS"},{"inputs":[],"type":"error","name":"B_INVALID_CHAINID"},{"inputs":[],"type":"error","name":"B_INVALID_CONTEXT"},{"inputs":[],"type":"error","name":"B_INVALID_FEE"},{"inputs":[],"type":"error","name":"B_INVALID_GAS_LIMIT"},{"inputs":[],"type":"error","name":"B_INVALID_STATUS"},{"inputs":[],"type":"error","name":"B_INVALID_VALUE"},{"inputs":[],"type":"error","name":"B_MESSAGE_NOT_SENT"},{"inputs":[],"type":"error","name":"B_PERMISSION_DENIED"},{"inputs":[],"type":"error","name":"B_PROOF_TOO_LARGE"},{"inputs":[],"type":"error","name":"B_RETRY_FAILED"},{"inputs":[],"type":"error","name":"B_SIGNAL_NOT_RECEIVED"},{"inputs":[],"type":"error","name":"ETH_TRANSFER_FAILED"},{"inputs":[],"type":"error","name":"FUNC_NOT_IMPLEMENTED"},{"inputs":[],"type":"error","name":"INVALID_PAUSE_STATUS"},{"inputs":[],"type":"error","name":"REENTRANT_CALL"},{"inputs":[],"type":"error","name":"RESOLVER_NOT_FOUND"},{"inputs":[],"type":"error","name":"ZERO_ADDRESS"},{"inputs":[],"type":"error","name":"ZERO_VALUE"},{"inputs":[{"internalType":"address","name":"previousAdmin","type":"address","indexed":false},{"internalType":"address","name":"newAdmin","type":"address","indexed":false}],"type":"event","name":"AdminChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"beacon","type":"address","indexed":true}],"type":"event","name":"BeaconUpgraded","anonymous":false},{"inputs":[{"internalType":"uint8","name":"version","type":"uint8","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32","indexed":true},{"internalType":"struct IBridge.Message","name":"message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"fee","type":"uint64"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"},{"internalType":"address","name":"srcOwner","type":"address"},{"internalType":"uint64","name":"destChainId","type":"uint64"},{"internalType":"address","name":"destOwner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"indexed":false},{"internalType":"struct Bridge.ProcessingStats","name":"stats","type":"tuple","components":[{"internalType":"uint32","name":"gasUsedInFeeCalc","type":"uint32"},{"internalType":"uint32","name":"proofSize","type":"uint32"},{"internalType":"uint32","name":"numCacheOps","type":"uint32"},{"internalType":"bool","name":"processedByRelayer","type":"bool"}],"indexed":false}],"type":"event","name":"MessageProcessed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32","indexed":true},{"internalType":"struct IBridge.Message","name":"message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"fee","type":"uint64"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"},{"internalType":"address","name":"srcOwner","type":"address"},{"internalType":"uint64","name":"destChainId","type":"uint64"},{"internalType":"address","name":"destOwner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"indexed":false}],"type":"event","name":"MessageSent","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32","indexed":true},{"internalType":"enum IBridge.Status","name":"status","type":"uint8","indexed":false}],"type":"event","name":"MessageStatusChanged","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferStarted","anonymous":false},{"inputs":[{"internalType":"address","name":"previousOwner","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Paused","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":false}],"type":"event","name":"Unpaused","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"GAS_OVERHEAD","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"GAS_RESERVE","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"RELAYER_MAX_PROOF_BYTES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"context","outputs":[{"internalType":"struct IBridge.Context","name":"ctx_","type":"tuple","components":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"}]}]},{"inputs":[{"internalType":"struct IBridge.Message","name":"_message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"fee","type":"uint64"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"},{"internalType":"address","name":"srcOwner","type":"address"},{"internalType":"uint64","name":"destChainId","type":"uint64"},{"internalType":"address","name":"destOwner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"failMessage"},{"inputs":[{"internalType":"uint256","name":"dataLength","type":"uint256"}],"stateMutability":"pure","type":"function","name":"getMessageMinGasLimit","outputs":[{"internalType":"uint32","name":"","type":"uint32"}]},{"inputs":[{"internalType":"struct IBridge.Message","name":"_message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"fee","type":"uint64"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"},{"internalType":"address","name":"srcOwner","type":"address"},{"internalType":"uint64","name":"destChainId","type":"uint64"},{"internalType":"address","name":"destOwner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]}],"stateMutability":"pure","type":"function","name":"hashMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"impl","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"inNonReentrant","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"init"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"init2"},{"inputs":[{"internalType":"uint64","name":"_chainId","type":"uint64"}],"stateMutability":"view","type":"function","name":"isDestChainEnabled","outputs":[{"internalType":"bool","name":"enabled_","type":"bool"},{"internalType":"address","name":"destBridge_","type":"address"}]},{"inputs":[{"internalType":"struct IBridge.Message","name":"_message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"fee","type":"uint64"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"},{"internalType":"address","name":"srcOwner","type":"address"},{"internalType":"uint64","name":"destChainId","type":"uint64"},{"internalType":"address","name":"destOwner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]},{"internalType":"bytes","name":"_proof","type":"bytes"}],"stateMutability":"view","type":"function","name":"isMessageFailed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct IBridge.Message","name":"_message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"fee","type":"uint64"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"},{"internalType":"address","name":"srcOwner","type":"address"},{"internalType":"uint64","name":"destChainId","type":"uint64"},{"internalType":"address","name":"destOwner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]},{"internalType":"bytes","name":"_proof","type":"bytes"}],"stateMutability":"view","type":"function","name":"isMessageReceived","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct IBridge.Message","name":"_message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"fee","type":"uint64"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"},{"internalType":"address","name":"srcOwner","type":"address"},{"internalType":"uint64","name":"destChainId","type":"uint64"},{"internalType":"address","name":"destOwner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]}],"stateMutability":"view","type":"function","name":"isMessageSent","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"messageStatus","outputs":[{"internalType":"enum IBridge.Status","name":"status","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"nextMessageId","outputs":[{"internalType":"uint64","name":"","type":"uint64"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pause"},{"inputs":[],"stateMutability":"view","type":"function","name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"struct IBridge.Message","name":"_message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"fee","type":"uint64"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"},{"internalType":"address","name":"srcOwner","type":"address"},{"internalType":"uint64","name":"destChainId","type":"uint64"},{"internalType":"address","name":"destOwner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]},{"internalType":"bytes","name":"_proof","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"processMessage","outputs":[{"internalType":"enum IBridge.Status","name":"status_","type":"uint8"},{"internalType":"enum IBridge.StatusReason","name":"reason_","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct IBridge.Message","name":"_message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"fee","type":"uint64"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"},{"internalType":"address","name":"srcOwner","type":"address"},{"internalType":"uint64","name":"destChainId","type":"uint64"},{"internalType":"address","name":"destOwner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]},{"internalType":"bytes","name":"_proof","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"recallMessage"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"renounceOwnership"},{"inputs":[],"stateMutability":"view","type":"function","name":"resolver","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"struct IBridge.Message","name":"_message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"fee","type":"uint64"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"},{"internalType":"address","name":"srcOwner","type":"address"},{"internalType":"uint64","name":"destChainId","type":"uint64"},{"internalType":"address","name":"destOwner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]},{"internalType":"bool","name":"_isLastAttempt","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"retryMessage"},{"inputs":[{"internalType":"struct IBridge.Message","name":"_message","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"fee","type":"uint64"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"},{"internalType":"address","name":"srcOwner","type":"address"},{"internalType":"uint64","name":"destChainId","type":"uint64"},{"internalType":"address","name":"destOwner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"sendMessage","outputs":[{"internalType":"bytes32","name":"msgHash_","type":"bytes32"},{"internalType":"struct IBridge.Message","name":"message_","type":"tuple","components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"uint64","name":"fee","type":"uint64"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint64","name":"srcChainId","type":"uint64"},{"internalType":"address","name":"srcOwner","type":"address"},{"internalType":"uint64","name":"destChainId","type":"uint64"},{"internalType":"address","name":"destOwner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}]}]},{"inputs":[{"internalType":"bytes32","name":"_msgHash","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"signalForFailedMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"signalService","outputs":[{"internalType":"contract ISignalService","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"unpause"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"upgradeTo"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"}],"devdoc":{"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"context()":{"returns":{"ctx_":"The context of the current bridge operation."}},"failMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))":{"details":"This function can only be called by `message.destOwner`.","params":{"_message":"The message to fail. message."}},"getMessageMinGasLimit(uint256)":{"params":{"dataLength":"The length of message.data."},"returns":{"_0":"The minimal gas limit required for sending this message."}},"hashMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))":{"params":{"_message":"The message struct variable to be hashed."},"returns":{"_0":"The message's hash."}},"init(address)":{"params":{"_owner":"The owner of this contract. msg.sender will be used if this value is zero."}},"isDestChainEnabled(uint64)":{"params":{"_chainId":"The destination chain ID."},"returns":{"destBridge_":"The bridge of the destination chain.","enabled_":"True if the destination chain is enabled."}},"isMessageFailed((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)":{"params":{"_message":"The message.","_proof":"The merkle inclusion proof."},"returns":{"_0":"true if the message has failed, false otherwise."}},"isMessageReceived((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)":{"params":{"_message":"The message.","_proof":"The merkle inclusion proof."},"returns":{"_0":"true if the message has been received, false otherwise."}},"isMessageSent((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))":{"params":{"_message":"The message."},"returns":{"_0":"true if the message was sent."}},"owner()":{"details":"Returns the address of the current owner."},"paused()":{"returns":{"_0":"true if paused, false otherwise."}},"pendingOwner()":{"details":"Returns the address of the pending owner."},"processMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)":{"details":"To ensure successful execution, we recommend this transaction's gas limit not to be smaller than: `(message.gasLimit - GAS_RESERVE) * 64 / 63 + GAS_RESERVE`, Or we can use a simplified rule: `tx.gaslimit = message.gaslimit * 102%`.","params":{"_message":"The message to be processed.","_proof":"The merkle inclusion proof."},"returns":{"status_":"The message's status after processing and the reason for the change."}},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"recallMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)":{"details":"Verifies via proof that the message was marked FAILED on the destination chain's Bridge, then releases the associated Ether or tokens on the source chain.","params":{"_message":"The message whose associated Ether should be released.","_proof":"The merkle inclusion proof."}},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"resolver()":{"returns":{"_0":"The address of this contract."}},"retryMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bool)":{"details":"This function can be called by any address, including the `message.destOwner`. It attempts to invoke the messageCall and updates the message status accordingly.","params":{"_isLastAttempt":"Specifies if this is the last attempt to retry the message.","_message":"The message to retry."}},"sendMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))":{"params":{"_message":"The message to be sent."},"returns":{"message_":"The updated message sent.","msgHash_":"The hash of the sent message."}},"signalForFailedMessage(bytes32)":{"params":{"_msgHash":"The message hash."},"returns":{"_0":"The failed representation of it as bytes32."}},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."},"upgradeTo(address)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"context()":{"notice":"Gets the current context."},"failMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))":{"notice":"Mark a message as failed if the message is currently retriable."},"getMessageMinGasLimit(uint256)":{"notice":"Returns the minimal gas limit required for sending a given message."},"hashMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))":{"notice":"Hash the message"},"init(address)":{"notice":"Initializes the contract."},"init2()":{"notice":"This function shall be called by previously deployed contracts."},"isDestChainEnabled(uint64)":{"notice":"Checks if the destination chain is enabled."},"isMessageFailed((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)":{"notice":"Checks if a msgHash has failed on its destination chain. This is the 'readonly' version of proveMessageFailed."},"isMessageReceived((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)":{"notice":"Checks if a msgHash has been received on its source chain. This is the 'readonly' version of proveMessageReceived."},"isMessageSent((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))":{"notice":"Checks if the message was sent."},"messageStatus(bytes32)":{"notice":"Mapping to store the status of a message from its hash."},"nextMessageId()":{"notice":"Returns the unique id of the next bridge message"},"pause()":{"notice":"Pauses the contract."},"paused()":{"notice":"Returns true if the contract is paused, and false otherwise."},"processMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)":{"notice":"Processes a bridge message on the destination chain. This function is callable by any address, including the `message.destOwner`."},"recallMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bytes)":{"notice":"Recalls a message on its source chain after it has failed on the destination chain, releasing associated assets on the source chain."},"resolver()":{"notice":"Returns the address of this contract."},"retryMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes),bool)":{"notice":"Retries to invoke the messageCall after releasing associated Ether and tokens."},"sendMessage((uint64,uint64,uint32,address,uint64,address,uint64,address,address,uint256,bytes))":{"notice":"Sends a message to the destination chain and takes custody of Ether required in this contract."},"signalForFailedMessage(bytes32)":{"notice":"Returns a signal representing a failed/recalled message."},"unpause()":{"notice":"Unpauses the contract."}},"version":1}},"settings":{"remappings":["@eth-fabric/urc/=node_modules/urc/src/","@openzeppelin-upgrades/contracts/=node_modules/@openzeppelin/contracts-upgradeable/","@openzeppelin/=node_modules/@openzeppelin/","@optimism/=node_modules/optimism/","@p256-verifier/contracts/=node_modules/p256-verifier/src/","@risc0/contracts/=node_modules/risc0-ethereum/contracts/src/","@solady/=node_modules/solady/","@sp1-contracts/=node_modules/sp1-contracts/contracts/","ds-test/=node_modules/ds-test/","forge-std/=node_modules/forge-std/","openzeppelin/=node_modules/@openzeppelin/","optimism/=node_modules/optimism/","p256-verifier/=node_modules/p256-verifier/","risc0-ethereum/=node_modules/risc0-ethereum/","script/=script/","solady/src/=node_modules/solady/src/","solady/utils/=node_modules/solady/src/utils/","sp1-contracts/=node_modules/sp1-contracts/","src/=contracts/","test/=test/","urc/=node_modules/urc/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/shared/bridge/Bridge.sol":"Bridge"},"evmVersion":"shanghai","libraries":{}},"sources":{"contracts/shared/bridge/Bridge.sol":{"keccak256":"0x58d4c542b77fe23d3078c3b9de781db54f1f318ed817d18af39cf915c3100c1e","urls":["bzz-raw://7482d1d403d37f1a925b5ae979cdb7fba1463b87cfa882cafa54454f9868283d","dweb:/ipfs/QmdhKFvapFkQD11AanqR1v28CRC8ZrMRu4dnVw8QoqGqNR"],"license":"MIT"},"contracts/shared/bridge/IBridge.sol":{"keccak256":"0x6b200a3471c7d1e2150c7a2f07f9fc4e619b93c72e61a937ecaf2f659f17a6e1","urls":["bzz-raw://51633f9d1c2799a6943d94324c7a4630adfbf46aad0639670870835a08ea563e","dweb:/ipfs/Qmbt7P6LSkvgKomUkD5E85128t35kc6QUPXCWSEGrG5n9W"],"license":"MIT"},"contracts/shared/common/EssentialContract.sol":{"keccak256":"0x23f5e92e919911e82b308b25cf5c06050fd7c7799d44156d8492c2879a12c0a6","urls":["bzz-raw://800f8bc7c8a362c8c684906e20c060d893cd4e8badf74cf12026e0cc159c846f","dweb:/ipfs/QmPbre9Skvfz5K7TWVHYTGGnec99VMnY9EUFbB6VqMsd9C"],"license":"MIT"},"contracts/shared/common/EssentialResolverContract.sol":{"keccak256":"0x5736a30fa45c48e3ff6d53170d980942ad42b788de81f5542a66397fb572b457","urls":["bzz-raw://06d2dcf4d83335d05a12272507991ca23d23ed5a893fd2f97e75324135858ed2","dweb:/ipfs/QmfWRCDnq6TXg8uwv2odpeLFguRSeLKuhL3VPMmGyyh9Eh"],"license":"MIT"},"contracts/shared/common/IResolver.sol":{"keccak256":"0x01273635aa0be2ad8d6218ad520f824f2003eab82be1d14c46da58f2516a48dd","urls":["bzz-raw://122dd3456077cf0be42bb974954c9918dca296415b076faeba0336ecee33de8e","dweb:/ipfs/QmSr4WQEFDJwqyqpextmY8Fp3b7Z96SBHgAEKsvXe6dEZV"],"license":"MIT"},"contracts/shared/libs/LibAddress.sol":{"keccak256":"0x06e39ae119af22feb19ebf8cbd9ee8514118b84388ef93c4650779fd10da8538","urls":["bzz-raw://e0284aa60ade3d0f87134e6f39c181cca41c345af766b2f8f72c6de50ccf9841","dweb:/ipfs/QmYNcjXmgVVPForNL34yrcZ97H2hKef4jL1DaQy6oNFhmY"],"license":"MIT"},"contracts/shared/libs/LibMath.sol":{"keccak256":"0x3e2ce1ccb5a4d94c6f97e09ebdb1e731c0bae466981be52147f15063b3742d69","urls":["bzz-raw://3530b4db00c1f357562d2dbab8978613c09b30ce1a6312de864399c7af82f9c7","dweb:/ipfs/Qmbp9HeWwPAx5Krcjuu8UCJB3so6rZu4TUTPD6vRKDDBjg"],"license":"MIT"},"contracts/shared/libs/LibNames.sol":{"keccak256":"0x1227d014ad714497f4779b334da558a7da409860a6139b8ba88e53044bf8fb17","urls":["bzz-raw://f743c99518df4f1b1a8cdcbcdcc9a60357b81684e40f68573d4b9eef230d67ee","dweb:/ipfs/QmapJMW5WhFjg8FK598gRitW3EwzkRn6TQ9fLuGjoMcaMP"],"license":"MIT"},"contracts/shared/libs/LibNetwork.sol":{"keccak256":"0xb5c6769cffcf864f725f8a76f98806f668f94a516125b854faa983b29d8f91ee","urls":["bzz-raw://de4a9c2ae643272308f42ec150bae3b2a88145357e78eac074e8f68ff3d04595","dweb:/ipfs/QmWNdKbTUvpR33nDunSjzKtR3ZQPPkFDD538fqhr9m6VY1"],"license":"MIT"},"contracts/shared/signal/ICheckpointStore.sol":{"keccak256":"0x82d7e6a1a6297ee7126ab7a83039900e453f76c9a0dff367be5699c742312067","urls":["bzz-raw://1db8501e9b6cadfdefd1ca1bb0cc9d241c9643abab73ec68d12e17aa8e543679","dweb:/ipfs/QmVMFkLduiSeYoZ3NynDNoAcxZi53Lt6Gct7TtXXTyY4LE"],"license":"MIT"},"contracts/shared/signal/ISignalService.sol":{"keccak256":"0xda39e5766d2a3cc48e19aa0bd8c1235dd7e44bf6df18f0025999e08e25ad0639","urls":["bzz-raw://71d6bb884be8db07e4b89f792aa8e3ad69c1045912be23cfb114935572fe6274","dweb:/ipfs/QmZBuTtCSs4HtKVWo1zsKdU2WndsVDKX8H9VBwyCYbCGeN"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol":{"keccak256":"0x9140dabc466abab21b48b72dbda26736b1183a310d0e677d3719d201df026510","urls":["bzz-raw://75267b14b60dc216d01d596a4008189a6c44d3314e53eded0edb1e757d95be16","dweb:/ipfs/QmQoMaxTRT6V7uQj9USfdQH9jh1crywB9auVjThzUSAbG2"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol":{"keccak256":"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e","urls":["bzz-raw://e89863421b4014b96a4b62be76eb3b9f0a8afe9684664a6f389124c0964bfe5c","dweb:/ipfs/Qmbk7xr1irpDuU1WdxXgxELBXxs61rHhCgod7heVcvFx16"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/governance/utils/IVotesUpgradeable.sol":{"keccak256":"0x2d600bbef9320309cd2a86c1d087eb9d6dbcc00430713ee54bbc5c5a2a11ba31","urls":["bzz-raw://52a5380b861d676adef15f33f8f643e236a1acb2d9456beb4065307eaa22bc2a","dweb:/ipfs/QmdwSfxrafQubVvCoQCU5T7bbPR8JDWU1WotSDXSiUdm33"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/interfaces/IERC5267Upgradeable.sol":{"keccak256":"0xe562dab443278837fa50faddb76743399e942181881db8dccaea3bd1712994db","urls":["bzz-raw://79ebe0e661396045cefe94f4256398cf632756d779a6871319db374c9eb128c9","dweb:/ipfs/QmfCTCivb9fFhyCX8hzushzcKunvKL2N9RDsnRNdvbd11M"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/interfaces/IERC5805Upgradeable.sol":{"keccak256":"0x19848eec9045c8b91f1ab6b1853966443e3e36bcbc307593ed37a9f0df179d69","urls":["bzz-raw://a07972c1330ee99a5d051b393260e01412ac4c14c7bc4d75d80b7cce291a6412","dweb:/ipfs/QmQx1ZiAo4AbSobN41c1xUEtyX1QejydWCmY7Sj3H5aDNv"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/interfaces/IERC6372Upgradeable.sol":{"keccak256":"0x3026befd6d69d1b46960bdc35a2ad37c0e1352f26983ee3728dd61fd32aa308a","urls":["bzz-raw://c2001b7209fd4920ec7674f194db7fe163dfea7a7af2dd25fe6c0e5a94dc595c","dweb:/ipfs/QmXX2zTFyiNWoDxivV3trKcKWifAENMqNAB34NgjWq5feX"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"keccak256":"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794","urls":["bzz-raw://f103ee2e4aecd37aac6ceefe670709cdd7613dee25fa2d4d9feaf7fc0aaa155e","dweb:/ipfs/QmRiNZLoJk5k3HPMYGPGjZFd2ke1ZxjhJZkM45Ec9GH9hv"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0xa9311aeb22f459e57d4dac77ee76cf43fb28ad3215278456211b5852b0e9e970","urls":["bzz-raw://ebdf0d3e42bd25223e45a213311d6d7e177d56a2c541a78b58c0c9d10bbdfbf9","dweb:/ipfs/QmfMyehJ6pxHrh7yL4793J6i7dofXnS2zH3cTtC8JdQMV9"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol":{"keccak256":"0x0e1f0f5f62f67a881cd1a9597acbc0a5e4071f3c2c10449a183b922ae7272e3f","urls":["bzz-raw://c25f742ff154998d19a669e2508c3597b363e123ce9144cd0fcf6521229f401f","dweb:/ipfs/QmQXRuFzStEWqeEPbhQU6cAg9PaSowxJVo4PDKyRod7dco"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol":{"keccak256":"0x3d159b9049d4ef465c1fb41f7ff7620f18f52bf6f8f3018bae4ed95c2df537d3","urls":["bzz-raw://38f7cfa624d878eec3c97e30dac64c6c00a79c65aa2799cebbf683e74488cd27","dweb:/ipfs/QmdtMH3xSGXNqvBcndsxWCUfmjta6kebnUYwKasJZucTfP"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20VotesUpgradeable.sol":{"keccak256":"0x82d5c2e8d5c7209f5cd2e7a40807ba264cb8bc577db1b121eda5f14f62d609c2","urls":["bzz-raw://024b99222ec16e75ff1b719c8f0dacf2d8e26250b3c076bd184ac1dadae47492","dweb:/ipfs/QmP11f3Dumw3CYg4ZtBLJrh8juULgodSuQfCqqgX5DqpJE"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol":{"keccak256":"0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb","urls":["bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d","dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20PermitUpgradeable.sol":{"keccak256":"0x07e881de3b9f6d2c07909f193f24b96c7fe4ea60013260f3f25aecd8bab3c2f8","urls":["bzz-raw://1fed09b97ccb0ff9ba9b6a94224f1d489026bf6b4b7279bfe64fb6e8749dee4d","dweb:/ipfs/QmcRAzaSP1UnGr4vrGkfJmB2L9aiTYoXfV1Lg9gqrVRWn8"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol":{"keccak256":"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422","urls":["bzz-raw://310136ad60820af4177a11a61d77a3686faf5fca4942b600e08fc940db38396b","dweb:/ipfs/QmbCzMNSTL7Zi7M4UCSqBrkHtp4jjxUnGbkneCZKdR1qeq"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol":{"keccak256":"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef","urls":["bzz-raw://8b06267c5f80bad727af3e48b1382333d591dad51376399ef2f6b0ee6d58bf95","dweb:/ipfs/QmdU5La1agcQvghnfMpWZGDPz2TUDTCxUwTLKmuMRXBpAx"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol":{"keccak256":"0x798741e231b22b81e2dd2eddaaf8832dee4baf5cd8e2dbaa5c1dd12a1c053c4d","urls":["bzz-raw://c41e8a7a906b8f362c8b760a44edadc61782008ea2ecf377ac5b5325bf6c3912","dweb:/ipfs/QmcXr19zuH3YLzD6RZNE6UTzvsKSckdxZQnagPoDGkCHu2"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol":{"keccak256":"0xb96dc79b65b7c37937919dcdb356a969ce0aa2e8338322bf4dc027a3c9c9a7eb","urls":["bzz-raw://f8613145881436fc0480fff22da4868d611e2b0c0c3da083334eb4362ce1945a","dweb:/ipfs/QmPqpP3YeRbBdTJRe6Gv2eGsUaANf4J6RwTNRW36iYahfV"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/cryptography/ECDSAUpgradeable.sol":{"keccak256":"0xa014f65d84b02827055d99993ccdbfb4b56b2c9e91eb278d82a93330659d06e4","urls":["bzz-raw://50a7e716a74f3d48a7f549086faa94afcd58b9f18ac8e9f74af4571f3a1d8d5c","dweb:/ipfs/QmTkDNWkq5o9Cv2jS7s6JvSmsPBkeunZhPe7Z2njGL31wo"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/cryptography/EIP712Upgradeable.sol":{"keccak256":"0x7077d7f3369b21f286840c0d69b09a8a6d3d6e522fff67bfc240fd0a6cdf178c","urls":["bzz-raw://0f59e7a19530bd6ee236285f9a87c930d27b73464f6b7398e29a6f4cfc2670ac","dweb:/ipfs/QmVfN4gHvJNac7KiuhLhtgtbdDo5a6Mw5hMcwJkzYugq5R"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/math/MathUpgradeable.sol":{"keccak256":"0x2bc0007987c229ae7624eb29be6a9b84f6a6a5872f76248b15208b131ea41c4e","urls":["bzz-raw://2b2835c737d073ef8b82a4cc246495a9740f43e7ff2cf130906b2449ff9bfb91","dweb:/ipfs/QmSCWfNoSvvTN57ic7o1RW6NqSxxGAqbBTnLKc7QHe27qB"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/math/SafeCastUpgradeable.sol":{"keccak256":"0xcef50f95b43b038aa40aed25b62fc45906c681a5c1d504a4fdcf3bc6330a8d4b","urls":["bzz-raw://ef883699a00970d5469e502514e2854704cd53d7a49825078aa807a2f056315c","dweb:/ipfs/QmRjpN9oxgw6zHCVjfWNB9MzaYpNPPgqu7Rrwqwabmhpis"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/math/SignedMathUpgradeable.sol":{"keccak256":"0x88f6b7bba3ee33eeb741f9a0f5bc98b6e6e352d0fe4905377bb328590f84095a","urls":["bzz-raw://88ace2d60f265752f18903d839910be4e4e104340b2957678585b812447825d4","dweb:/ipfs/QmXFkNxMc3AAGzhs2wUEZyErWQjsvoTGyYjuU5oZkFki5Z"],"license":"MIT"},"node_modules/@openzeppelin/contracts/interfaces/IERC1967.sol":{"keccak256":"0x3cbef5ebc24b415252e2f8c0c9254555d30d9f085603b4b80d9b5ed20ab87e90","urls":["bzz-raw://e8fa670c3bdce78e642cc6ae11c4cb38b133499cdce5e1990a9979d424703263","dweb:/ipfs/QmVxeCUk4jL2pXQyhsoNJwyU874wRufS2WvGe8TgPKPqhE"],"license":"MIT"},"node_modules/@openzeppelin/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff","urls":["bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688","dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr"],"license":"MIT"},"node_modules/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol":{"keccak256":"0x3b21ae06bf5957f73fa16754b0669c77b7abd8ba6c072d35c3281d446fdb86c2","urls":["bzz-raw://2db8e18505e86e02526847005d7287a33e397ed7fb9eaba3fd4a4a197add16e2","dweb:/ipfs/QmW9BSuKTzHWHBNSHF4L8XfVuU1uJrP2vLg84YtBd8mL82"],"license":"MIT"},"node_modules/@openzeppelin/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61","urls":["bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354","dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce"],"license":"MIT"},"node_modules/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0xc6619957bcc6641fe8984bfaf9ff11a9e4b97d8149c0495f608f9a2416d7c5cf","urls":["bzz-raw://543be67f7fa43b1b932637c1c7f12035f0f4b0f7ee2bd3c33841186f79c165c1","dweb:/ipfs/QmSBPM2UVKbmJqWfD9i6hSiqbaE8TV4TSqfuiivziRRLKM"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/Address.sol":{"keccak256":"0x006dd67219697fe68d7fbfdea512e7c4cb64a43565ed86171d67e844982da6fa","urls":["bzz-raw://2455248c8ddd9cc6a7af76a13973cddf222072427e7b0e2a7d1aff345145e931","dweb:/ipfs/QmfYjnjRbWqYpuxurqveE6HtzsY1Xx323J428AKQgtBJZm"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/StorageSlot.sol":{"keccak256":"0xf09e68aa0dc6722a25bc46490e8d48ed864466d17313b8a0b254c36b54e49899","urls":["bzz-raw://e26daf81e2252dc1fe1ce0e4b55c2eb7c6d1ee84ae6558d1a9554432ea1d32da","dweb:/ipfs/Qmb1UANWiWq5pCKbmHSu772hd4nt374dVaghGmwSVNuk8Q"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1","urls":["bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f","dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":11586,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":11589,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":16420,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":11331,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":11451,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":11224,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"_pendingOwner","offset":0,"slot":"101","type":"t_address"},{"astId":11318,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":4316,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"__gapFromOldAddressResolver","offset":0,"slot":"151","type":"t_array(t_uint256)50_storage"},{"astId":4319,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"__reentry","offset":0,"slot":"201","type":"t_uint8"},{"astId":4321,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"__paused","offset":1,"slot":"201","type":"t_uint8"},{"astId":4325,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"__gap","offset":0,"slot":"202","type":"t_array(t_uint256)49_storage"},{"astId":2533,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"__reserved1","offset":0,"slot":"251","type":"t_uint64"},{"astId":2535,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"nextMessageId","offset":8,"slot":"251","type":"t_uint64"},{"astId":2541,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"messageStatus","offset":0,"slot":"252","type":"t_mapping(t_bytes32,t_enum(Status)4018)"},{"astId":2545,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"__ctx","offset":0,"slot":"253","type":"t_struct(Context)4053_storage"},{"astId":2548,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"__reserved2","offset":0,"slot":"255","type":"t_uint256"},{"astId":2551,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"__reserved3","offset":0,"slot":"256","type":"t_uint256"},{"astId":2555,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"__gap","offset":0,"slot":"257","type":"t_array(t_uint256)44_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)44_storage":{"encoding":"inplace","label":"uint256[44]","numberOfBytes":"1408","base":"t_uint256"},"t_array(t_uint256)49_storage":{"encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568","base":"t_uint256"},"t_array(t_uint256)50_storage":{"encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_enum(Status)4018":{"encoding":"inplace","label":"enum IBridge.Status","numberOfBytes":"1"},"t_mapping(t_bytes32,t_enum(Status)4018)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => enum IBridge.Status)","numberOfBytes":"32","value":"t_enum(Status)4018"},"t_struct(Context)4053_storage":{"encoding":"inplace","label":"struct IBridge.Context","numberOfBytes":"64","members":[{"astId":4048,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"msgHash","offset":0,"slot":"0","type":"t_bytes32"},{"astId":4050,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"from","offset":0,"slot":"1","type":"t_address"},{"astId":4052,"contract":"contracts/shared/bridge/Bridge.sol:Bridge","label":"srcChainId","offset":20,"slot":"1","type":"t_uint64"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint64":{"encoding":"inplace","label":"uint64","numberOfBytes":"8"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"ast":{"absolutePath":"contracts/shared/bridge/Bridge.sol","id":4010,"exportedSymbols":{"Address":[22766],"Bridge":[4009],"ContextUpgradeable":[16421],"CountersUpgradeable":[16495],"ECDSAUpgradeable":[17090],"EIP712Upgradeable":[17375],"ERC1967Upgrade":[20512],"ERC20PermitUpgradeable":[14110],"ERC20Upgradeable":[13840],"ERC20VotesUpgradeable":[14865],"EssentialContract":[4802],"EssentialResolverContract":[5017],"IBeacon":[20574],"IBridge":[4153],"ICheckpointStore":[6185],"IERC165":[23513],"IERC1822Proxiable":[20171],"IERC1967":[20161],"IERC20MetadataUpgradeable":[14890],"IERC20PermitUpgradeable":[14926],"IERC20Upgradeable":[13918],"IERC5267Upgradeable":[11555],"IERC5805Upgradeable":[11564],"IERC6372Upgradeable":[11579],"IMessageInvocable":[4172],"IRecallableSender":[4164],"IResolver":[5035],"ISignalService":[6277],"IVotesUpgradeable":[11530],"Initializable":[11748],"LibAddress":[5555],"LibMath":[5787],"LibNames":[5845],"LibNetwork":[6029],"MathUpgradeable":[18298],"Ownable2StepUpgradeable":[11319],"OwnableUpgradeable":[11452],"SafeCastUpgradeable":[19839],"SignedMathUpgradeable":[19944],"StorageSlot":[22906],"StringsUpgradeable":[16724],"UUPSUpgradeable":[21013]},"nodeType":"SourceUnit","src":"32:26236:9","nodes":[{"id":2454,"nodeType":"PragmaDirective","src":"32:24:9","nodes":[],"literals":["solidity","^","0.8",".24"]},{"id":2455,"nodeType":"ImportDirective","src":"58:49:9","nodes":[],"absolutePath":"contracts/shared/common/EssentialResolverContract.sol","file":"../common/EssentialResolverContract.sol","nameLocation":"-1:-1:-1","scope":4010,"sourceUnit":5018,"symbolAliases":[],"unitAlias":""},{"id":2456,"nodeType":"ImportDirective","src":"108:32:9","nodes":[],"absolutePath":"contracts/shared/libs/LibAddress.sol","file":"../libs/LibAddress.sol","nameLocation":"-1:-1:-1","scope":4010,"sourceUnit":5556,"symbolAliases":[],"unitAlias":""},{"id":2457,"nodeType":"ImportDirective","src":"141:29:9","nodes":[],"absolutePath":"contracts/shared/libs/LibMath.sol","file":"../libs/LibMath.sol","nameLocation":"-1:-1:-1","scope":4010,"sourceUnit":5788,"symbolAliases":[],"unitAlias":""},{"id":2458,"nodeType":"ImportDirective","src":"171:30:9","nodes":[],"absolutePath":"contracts/shared/libs/LibNames.sol","file":"../libs/LibNames.sol","nameLocation":"-1:-1:-1","scope":4010,"sourceUnit":5846,"symbolAliases":[],"unitAlias":""},{"id":2459,"nodeType":"ImportDirective","src":"202:32:9","nodes":[],"absolutePath":"contracts/shared/libs/LibNetwork.sol","file":"../libs/LibNetwork.sol","nameLocation":"-1:-1:-1","scope":4010,"sourceUnit":6030,"symbolAliases":[],"unitAlias":""},{"id":2460,"nodeType":"ImportDirective","src":"235:38:9","nodes":[],"absolutePath":"contracts/shared/signal/ISignalService.sol","file":"../signal/ISignalService.sol","nameLocation":"-1:-1:-1","scope":4010,"sourceUnit":6278,"symbolAliases":[],"unitAlias":""},{"id":2461,"nodeType":"ImportDirective","src":"274:23:9","nodes":[],"absolutePath":"contracts/shared/bridge/IBridge.sol","file":"./IBridge.sol","nameLocation":"-1:-1:-1","scope":4010,"sourceUnit":4173,"symbolAliases":[],"unitAlias":""},{"id":2462,"nodeType":"ImportDirective","src":"298:94:9","nodes":[],"absolutePath":"node_modules/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20VotesUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20VotesUpgradeable.sol","nameLocation":"-1:-1:-1","scope":4010,"sourceUnit":14866,"symbolAliases":[],"unitAlias":""},{"id":4009,"nodeType":"ContractDefinition","src":"643:25624:9","nodes":[{"id":2470,"nodeType":"UsingForDirective","src":"703:26:9","nodes":[],"global":false,"libraryName":{"id":2468,"name":"Address","nameLocations":["709:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":22766,"src":"709:7:9"},"typeName":{"id":2469,"name":"address","nodeType":"ElementaryTypeName","src":"721:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":2473,"nodeType":"UsingForDirective","src":"734:26:9","nodes":[],"global":false,"libraryName":{"id":2471,"name":"LibMath","nameLocations":["740:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":5787,"src":"740:7:9"},"typeName":{"id":2472,"name":"uint256","nodeType":"ElementaryTypeName","src":"752:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"id":2476,"nodeType":"UsingForDirective","src":"765:29:9","nodes":[],"global":false,"libraryName":{"id":2474,"name":"LibAddress","nameLocations":["771:10:9"],"nodeType":"IdentifierPath","referencedDeclaration":5555,"src":"771:10:9"},"typeName":{"id":2475,"name":"address","nodeType":"ElementaryTypeName","src":"786:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"id":2479,"nodeType":"UsingForDirective","src":"799:37:9","nodes":[],"global":false,"libraryName":{"id":2477,"name":"LibAddress","nameLocations":["805:10:9"],"nodeType":"IdentifierPath","referencedDeclaration":5555,"src":"805:10:9"},"typeName":{"id":2478,"name":"address","nodeType":"ElementaryTypeName","src":"820:15:9","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}},{"id":2488,"nodeType":"StructDefinition","src":"842:150:9","nodes":[],"canonicalName":"Bridge.ProcessingStats","members":[{"constant":false,"id":2481,"mutability":"mutable","name":"gasUsedInFeeCalc","nameLocation":"882:16:9","nodeType":"VariableDeclaration","scope":2488,"src":"875:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2480,"name":"uint32","nodeType":"ElementaryTypeName","src":"875:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2483,"mutability":"mutable","name":"proofSize","nameLocation":"915:9:9","nodeType":"VariableDeclaration","scope":2488,"src":"908:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2482,"name":"uint32","nodeType":"ElementaryTypeName","src":"908:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2485,"mutability":"mutable","name":"numCacheOps","nameLocation":"941:11:9","nodeType":"VariableDeclaration","scope":2488,"src":"934:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2484,"name":"uint32","nodeType":"ElementaryTypeName","src":"934:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2487,"mutability":"mutable","name":"processedByRelayer","nameLocation":"967:18:9","nodeType":"VariableDeclaration","scope":2488,"src":"962:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2486,"name":"bool","nodeType":"ElementaryTypeName","src":"962:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"ProcessingStats","nameLocation":"849:15:9","scope":4009,"visibility":"public"},{"id":2499,"nodeType":"EventDefinition","src":"1078:88:9","nodes":[],"anonymous":false,"documentation":{"id":2489,"nodeType":"StructuredDocumentation","src":"998:75:9","text":"@dev A debug event for fine-tuning gas related constants in the future."},"eventSelector":"8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d","name":"MessageProcessed","nameLocation":"1084:16:9","parameters":{"id":2498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2491,"indexed":true,"mutability":"mutable","name":"msgHash","nameLocation":"1117:7:9","nodeType":"VariableDeclaration","scope":2499,"src":"1101:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2490,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1101:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2494,"indexed":false,"mutability":"mutable","name":"message","nameLocation":"1134:7:9","nodeType":"VariableDeclaration","scope":2499,"src":"1126:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":2493,"nodeType":"UserDefinedTypeName","pathNode":{"id":2492,"name":"Message","nameLocations":["1126:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"1126:7:9"},"referencedDeclaration":4046,"src":"1126:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"},{"constant":false,"id":2497,"indexed":false,"mutability":"mutable","name":"stats","nameLocation":"1159:5:9","nodeType":"VariableDeclaration","scope":2499,"src":"1143:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats"},"typeName":{"id":2496,"nodeType":"UserDefinedTypeName","pathNode":{"id":2495,"name":"ProcessingStats","nameLocations":["1143:15:9"],"nodeType":"IdentifierPath","referencedDeclaration":2488,"src":"1143:15:9"},"referencedDeclaration":2488,"src":"1143:15:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_storage_ptr","typeString":"struct Bridge.ProcessingStats"}},"visibility":"internal"}],"src":"1100:65:9"}},{"id":2503,"nodeType":"VariableDeclaration","src":"1354:44:9","nodes":[],"constant":true,"documentation":{"id":2500,"nodeType":"StructuredDocumentation","src":"1172:177:9","text":"@dev The amount of gas that will be deducted from message.gasLimit before calculating the\n invocation gas limit. This value should be fine-tuned with production data."},"functionSelector":"be880c81","mutability":"constant","name":"GAS_RESERVE","nameLocation":"1377:11:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2501,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"value":{"hexValue":"3830305f303030","id":2502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1391:7:9","typeDescriptions":{"typeIdentifier":"t_rational_800000_by_1","typeString":"int_const 800000"},"value":"800_000"},"visibility":"public"},{"id":2507,"nodeType":"VariableDeclaration","src":"1584:45:9","nodes":[],"constant":true,"documentation":{"id":2504,"nodeType":"StructuredDocumentation","src":"1405:174:9","text":"@dev The gas overhead for both receiving and invoking a message, as well as the proof\n calldata cost.\n This value should be fine-tuned with production data."},"functionSelector":"a730cdfb","mutability":"constant","name":"GAS_OVERHEAD","nameLocation":"1607:12:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2505,"name":"uint32","nodeType":"ElementaryTypeName","src":"1584:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"value":{"hexValue":"3132305f303030","id":2506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1622:7:9","typeDescriptions":{"typeIdentifier":"t_rational_120000_by_1","typeString":"int_const 120000"},"value":"120_000"},"visibility":"public"},{"id":2511,"nodeType":"VariableDeclaration","src":"1713:57:9","nodes":[],"constant":true,"documentation":{"id":2508,"nodeType":"StructuredDocumentation","src":"1636:72:9","text":"@dev The max proof size for a message to be processable by a relayer."},"functionSelector":"422770fa","mutability":"constant","name":"RELAYER_MAX_PROOF_BYTES","nameLocation":"1737:23:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2509,"name":"uint256","nodeType":"ElementaryTypeName","src":"1713:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3230305f303030","id":2510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1763:7:9","typeDescriptions":{"typeIdentifier":"t_rational_200000_by_1","typeString":"int_const 200000"},"value":"200_000"},"visibility":"public"},{"id":2515,"nodeType":"VariableDeclaration","src":"1847:65:9","nodes":[],"constant":true,"documentation":{"id":2512,"nodeType":"StructuredDocumentation","src":"1777:65:9","text":"@dev The amount of gas not to charge fee per cache operation."},"mutability":"constant","name":"_GAS_REFUND_PER_CACHE_OPERATION","nameLocation":"1872:31:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2513,"name":"uint256","nodeType":"ElementaryTypeName","src":"1847:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32305f303030","id":2514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1906:6:9","typeDescriptions":{"typeIdentifier":"t_rational_20000_by_1","typeString":"int_const 20000"},"value":"20_000"},"visibility":"private"},{"id":2519,"nodeType":"VariableDeclaration","src":"2181:55:9","nodes":[],"constant":true,"documentation":{"id":2516,"nodeType":"StructuredDocumentation","src":"1919:37:9","text":"@dev Gas limit for sending Ether."},"mutability":"constant","name":"_SEND_ETHER_GAS_LIMIT","nameLocation":"2206:21:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2517,"name":"uint256","nodeType":"ElementaryTypeName","src":"2181:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"33355f303030","id":2518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2230:6:9","typeDescriptions":{"typeIdentifier":"t_rational_35000_by_1","typeString":"int_const 35000"},"value":"35_000"},"visibility":"private"},{"id":2527,"nodeType":"VariableDeclaration","src":"2308:57:9","nodes":[],"constant":true,"documentation":{"id":2520,"nodeType":"StructuredDocumentation","src":"2243:60:9","text":"@dev Place holder value when not using transient storage"},"mutability":"constant","name":"_PLACEHOLDER","nameLocation":"2333:12:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2521,"name":"uint256","nodeType":"ElementaryTypeName","src":"2308:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"expression":{"arguments":[{"id":2524,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2353:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2523,"name":"uint256","nodeType":"ElementaryTypeName","src":"2353:7:9","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":2522,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2348:4:9","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":2525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2348:13:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":2526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2362:3:9","memberName":"max","nodeType":"MemberAccess","src":"2348:17:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":2530,"nodeType":"VariableDeclaration","src":"2372:45:9","nodes":[],"constant":false,"functionSelector":"62d09453","mutability":"immutable","name":"signalService","nameLocation":"2404:13:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"},"typeName":{"id":2529,"nodeType":"UserDefinedTypeName","pathNode":{"id":2528,"name":"ISignalService","nameLocations":["2372:14:9"],"nodeType":"IdentifierPath","referencedDeclaration":6277,"src":"2372:14:9"},"referencedDeclaration":6277,"src":"2372:14:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"visibility":"public"},{"id":2533,"nodeType":"VariableDeclaration","src":"2482:26:9","nodes":[],"constant":false,"documentation":{"id":2531,"nodeType":"StructuredDocumentation","src":"2424:53:9","text":"@notice The next message ID.\n @dev Slot 1."},"mutability":"mutable","name":"__reserved1","nameLocation":"2497:11:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":2532,"name":"uint64","nodeType":"ElementaryTypeName","src":"2482:6:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"private"},{"id":2535,"nodeType":"VariableDeclaration","src":"2514:27:9","nodes":[],"baseFunctions":[4143],"constant":false,"functionSelector":"eefbf17e","mutability":"mutable","name":"nextMessageId","nameLocation":"2528:13:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":2534,"name":"uint64","nodeType":"ElementaryTypeName","src":"2514:6:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"public"},{"id":2541,"nodeType":"VariableDeclaration","src":"2641:62:9","nodes":[],"constant":false,"documentation":{"id":2536,"nodeType":"StructuredDocumentation","src":"2548:88:9","text":"@notice Mapping to store the status of a message from its hash.\n @dev Slot 2."},"functionSelector":"3c6cf473","mutability":"mutable","name":"messageStatus","nameLocation":"2690:13:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_Status_$4018_$","typeString":"mapping(bytes32 => enum IBridge.Status)"},"typeName":{"id":2540,"keyName":"msgHash","keyNameLocation":"2657:7:9","keyType":{"id":2537,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2649:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"2641:41:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_Status_$4018_$","typeString":"mapping(bytes32 => enum IBridge.Status)"},"valueName":"status","valueNameLocation":"2675:6:9","valueType":{"id":2539,"nodeType":"UserDefinedTypeName","pathNode":{"id":2538,"name":"Status","nameLocations":["2668:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":4018,"src":"2668:6:9"},"referencedDeclaration":4018,"src":"2668:6:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}}},"visibility":"public"},{"id":2545,"nodeType":"VariableDeclaration","src":"2737:21:9","nodes":[],"constant":false,"documentation":{"id":2542,"nodeType":"StructuredDocumentation","src":"2710:22:9","text":"@dev Slots 3 and 4"},"mutability":"mutable","name":"__ctx","nameLocation":"2753:5:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_storage","typeString":"struct IBridge.Context"},"typeName":{"id":2544,"nodeType":"UserDefinedTypeName","pathNode":{"id":2543,"name":"Context","nameLocations":["2737:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4053,"src":"2737:7:9"},"referencedDeclaration":4053,"src":"2737:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_storage_ptr","typeString":"struct IBridge.Context"}},"visibility":"private"},{"id":2548,"nodeType":"VariableDeclaration","src":"2786:27:9","nodes":[],"constant":false,"documentation":{"id":2546,"nodeType":"StructuredDocumentation","src":"2765:16:9","text":"@dev Slot 5."},"mutability":"mutable","name":"__reserved2","nameLocation":"2802:11:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2547,"name":"uint256","nodeType":"ElementaryTypeName","src":"2786:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":2551,"nodeType":"VariableDeclaration","src":"2841:27:9","nodes":[],"constant":false,"documentation":{"id":2549,"nodeType":"StructuredDocumentation","src":"2820:16:9","text":"@dev Slot 6."},"mutability":"mutable","name":"__reserved3","nameLocation":"2857:11:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2550,"name":"uint256","nodeType":"ElementaryTypeName","src":"2841:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"id":2555,"nodeType":"VariableDeclaration","src":"2875:25:9","nodes":[],"constant":false,"mutability":"mutable","name":"__gap","nameLocation":"2895:5:9","scope":4009,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$44_storage","typeString":"uint256[44]"},"typeName":{"baseType":{"id":2552,"name":"uint256","nodeType":"ElementaryTypeName","src":"2875:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2554,"length":{"hexValue":"3434","id":2553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2883:2:9","typeDescriptions":{"typeIdentifier":"t_rational_44_by_1","typeString":"int_const 44"},"value":"44"},"nodeType":"ArrayTypeName","src":"2875:11:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$44_storage_ptr","typeString":"uint256[44]"}},"visibility":"private"},{"id":2557,"nodeType":"ErrorDefinition","src":"2907:26:9","nodes":[],"errorSelector":"e363bba8","name":"B_INVALID_CHAINID","nameLocation":"2913:17:9","parameters":{"id":2556,"nodeType":"ParameterList","parameters":[],"src":"2930:2:9"}},{"id":2559,"nodeType":"ErrorDefinition","src":"2938:26:9","nodes":[],"errorSelector":"5ceed173","name":"B_INVALID_CONTEXT","nameLocation":"2944:17:9","parameters":{"id":2558,"nodeType":"ParameterList","parameters":[],"src":"2961:2:9"}},{"id":2561,"nodeType":"ErrorDefinition","src":"2969:22:9","nodes":[],"errorSelector":"c9f51787","name":"B_INVALID_FEE","nameLocation":"2975:13:9","parameters":{"id":2560,"nodeType":"ParameterList","parameters":[],"src":"2988:2:9"}},{"id":2563,"nodeType":"ErrorDefinition","src":"2996:28:9","nodes":[],"errorSelector":"08c2ad53","name":"B_INVALID_GAS_LIMIT","nameLocation":"3002:19:9","parameters":{"id":2562,"nodeType":"ParameterList","parameters":[],"src":"3021:2:9"}},{"id":2565,"nodeType":"ErrorDefinition","src":"3029:25:9","nodes":[],"errorSelector":"67624eb4","name":"B_INVALID_STATUS","nameLocation":"3035:16:9","parameters":{"id":2564,"nodeType":"ParameterList","parameters":[],"src":"3051:2:9"}},{"id":2567,"nodeType":"ErrorDefinition","src":"3059:24:9","nodes":[],"errorSelector":"958557be","name":"B_INVALID_VALUE","nameLocation":"3065:15:9","parameters":{"id":2566,"nodeType":"ParameterList","parameters":[],"src":"3080:2:9"}},{"id":2569,"nodeType":"ErrorDefinition","src":"3088:27:9","nodes":[],"errorSelector":"5fbdff73","name":"B_INSUFFICIENT_GAS","nameLocation":"3094:18:9","parameters":{"id":2568,"nodeType":"ParameterList","parameters":[],"src":"3112:2:9"}},{"id":2571,"nodeType":"ErrorDefinition","src":"3120:27:9","nodes":[],"errorSelector":"ab035ad5","name":"B_MESSAGE_NOT_SENT","nameLocation":"3126:18:9","parameters":{"id":2570,"nodeType":"ParameterList","parameters":[],"src":"3144:2:9"}},{"id":2573,"nodeType":"ErrorDefinition","src":"3152:28:9","nodes":[],"errorSelector":"e56dc386","name":"B_PERMISSION_DENIED","nameLocation":"3158:19:9","parameters":{"id":2572,"nodeType":"ParameterList","parameters":[],"src":"3177:2:9"}},{"id":2575,"nodeType":"ErrorDefinition","src":"3185:26:9","nodes":[],"errorSelector":"1e3b03c9","name":"B_PROOF_TOO_LARGE","nameLocation":"3191:17:9","parameters":{"id":2574,"nodeType":"ParameterList","parameters":[],"src":"3208:2:9"}},{"id":2577,"nodeType":"ErrorDefinition","src":"3216:23:9","nodes":[],"errorSelector":"161e3ead","name":"B_RETRY_FAILED","nameLocation":"3222:14:9","parameters":{"id":2576,"nodeType":"ParameterList","parameters":[],"src":"3236:2:9"}},{"id":2579,"nodeType":"ErrorDefinition","src":"3244:30:9","nodes":[],"errorSelector":"a2826398","name":"B_SIGNAL_NOT_RECEIVED","nameLocation":"3250:21:9","parameters":{"id":2578,"nodeType":"ParameterList","parameters":[],"src":"3271:2:9"}},{"id":2589,"nodeType":"ModifierDefinition","src":"3440:89:9","nodes":[],"body":{"id":2588,"nodeType":"Block","src":"3476:53:9","nodes":[],"statements":[{"expression":{"arguments":[{"id":2584,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2581,"src":"3502:8:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":2583,"name":"_checkSameChain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3990,"src":"3486:15:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint64_$returns$__$","typeString":"function (uint64) view"}},"id":2585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3486:25:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2586,"nodeType":"ExpressionStatement","src":"3486:25:9"},{"id":2587,"nodeType":"PlaceholderStatement","src":"3521:1:9"}]},"name":"sameChain","nameLocation":"3449:9:9","parameters":{"id":2582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2581,"mutability":"mutable","name":"_chainId","nameLocation":"3466:8:9","nodeType":"VariableDeclaration","scope":2589,"src":"3459:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":2580,"name":"uint64","nodeType":"ElementaryTypeName","src":"3459:6:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"3458:17:9"},"virtual":false,"visibility":"internal"},{"id":2599,"nodeType":"ModifierDefinition","src":"3535:89:9","nodes":[],"body":{"id":2598,"nodeType":"Block","src":"3571:53:9","nodes":[],"statements":[{"expression":{"arguments":[{"id":2594,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2591,"src":"3597:8:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":2593,"name":"_checkDiffChain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4008,"src":"3581:15:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint64_$returns$__$","typeString":"function (uint64) view"}},"id":2595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3581:25:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2596,"nodeType":"ExpressionStatement","src":"3581:25:9"},{"id":2597,"nodeType":"PlaceholderStatement","src":"3616:1:9"}]},"name":"diffChain","nameLocation":"3544:9:9","parameters":{"id":2592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2591,"mutability":"mutable","name":"_chainId","nameLocation":"3561:8:9","nodeType":"VariableDeclaration","scope":2599,"src":"3554:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":2590,"name":"uint64","nodeType":"ElementaryTypeName","src":"3554:6:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"3553:17:9"},"virtual":false,"visibility":"internal"},{"id":2616,"nodeType":"FunctionDefinition","src":"3630:189:9","nodes":[],"body":{"id":2615,"nodeType":"Block","src":"3756:63:9","nodes":[],"statements":[{"expression":{"id":2613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2609,"name":"signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"3766:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2611,"name":"_signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2603,"src":"3797:14:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2610,"name":"ISignalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6277,"src":"3782:14:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISignalService_$6277_$","typeString":"type(contract ISignalService)"}},"id":2612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3782:30:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"src":"3766:46:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"id":2614,"nodeType":"ExpressionStatement","src":"3766:46:9"}]},"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":2606,"name":"_resolver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2601,"src":"3741:9:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":2607,"kind":"baseConstructorSpecifier","modifierName":{"id":2605,"name":"EssentialResolverContract","nameLocations":["3715:25:9"],"nodeType":"IdentifierPath","referencedDeclaration":5017,"src":"3715:25:9"},"nodeType":"ModifierInvocation","src":"3715:36:9"}],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":2604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2601,"mutability":"mutable","name":"_resolver","nameLocation":"3659:9:9","nodeType":"VariableDeclaration","scope":2616,"src":"3651:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2600,"name":"address","nodeType":"ElementaryTypeName","src":"3651:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2603,"mutability":"mutable","name":"_signalService","nameLocation":"3686:14:9","nodeType":"VariableDeclaration","scope":2616,"src":"3678:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2602,"name":"address","nodeType":"ElementaryTypeName","src":"3678:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3641:65:9"},"returnParameters":{"id":2608,"nodeType":"ParameterList","parameters":[],"src":"3756:0:9"},"scope":4009,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":2629,"nodeType":"FunctionDefinition","src":"4142:92:9","nodes":[],"body":{"id":2628,"nodeType":"Block","src":"4193:41:9","nodes":[],"statements":[{"expression":{"arguments":[{"id":2625,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2619,"src":"4220:6:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2624,"name":"__Essential_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4585,"src":"4203:16:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4203:24:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2627,"nodeType":"ExpressionStatement","src":"4203:24:9"}]},"documentation":{"id":2617,"nodeType":"StructuredDocumentation","src":"4003:134:9","text":"@notice Initializes the contract.\n @param _owner The owner of this contract. msg.sender will be used if this value is zero."},"functionSelector":"19ab453c","implemented":true,"kind":"function","modifiers":[{"id":2622,"kind":"modifierInvocation","modifierName":{"id":2621,"name":"initializer","nameLocations":["4181:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":11650,"src":"4181:11:9"},"nodeType":"ModifierInvocation","src":"4181:11:9"}],"name":"init","nameLocation":"4151:4:9","parameters":{"id":2620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2619,"mutability":"mutable","name":"_owner","nameLocation":"4164:6:9","nodeType":"VariableDeclaration","scope":2629,"src":"4156:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2618,"name":"address","nodeType":"ElementaryTypeName","src":"4156:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4155:16:9"},"returnParameters":{"id":2623,"nodeType":"ParameterList","parameters":[],"src":"4193:0:9"},"scope":4009,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2651,"nodeType":"FunctionDefinition","src":"4320:196:9","nodes":[],"body":{"id":2650,"nodeType":"Block","src":"4373:143:9","nodes":[],"statements":[{"expression":{"id":2640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2638,"name":"__reserved1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2533,"src":"4444:11:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":2639,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4458:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4444:15:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":2641,"nodeType":"ExpressionStatement","src":"4444:15:9"},{"expression":{"id":2644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2642,"name":"__reserved2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"4469:11:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":2643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4483:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4469:15:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2645,"nodeType":"ExpressionStatement","src":"4469:15:9"},{"expression":{"id":2648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2646,"name":"__reserved3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2551,"src":"4494:11:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":2647,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4508:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4494:15:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2649,"nodeType":"ExpressionStatement","src":"4494:15:9"}]},"documentation":{"id":2630,"nodeType":"StructuredDocumentation","src":"4240:75:9","text":"@notice This function shall be called by previously deployed contracts."},"functionSelector":"069489a2","implemented":true,"kind":"function","modifiers":[{"id":2633,"kind":"modifierInvocation","modifierName":{"id":2632,"name":"onlyOwner","nameLocations":["4346:9:9"],"nodeType":"IdentifierPath","referencedDeclaration":11366,"src":"4346:9:9"},"nodeType":"ModifierInvocation","src":"4346:9:9"},{"arguments":[{"hexValue":"32","id":2635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4370:1:9","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"id":2636,"kind":"modifierInvocation","modifierName":{"id":2634,"name":"reinitializer","nameLocations":["4356:13:9"],"nodeType":"IdentifierPath","referencedDeclaration":11683,"src":"4356:13:9"},"nodeType":"ModifierInvocation","src":"4356:16:9"}],"name":"init2","nameLocation":"4329:5:9","parameters":{"id":2631,"nodeType":"ParameterList","parameters":[],"src":"4334:2:9"},"returnParameters":{"id":2637,"nodeType":"ParameterList","parameters":[],"src":"4373:0:9"},"scope":4009,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":2779,"nodeType":"FunctionDefinition","src":"4550:1319:9","nodes":[],"body":{"id":2778,"nodeType":"Block","src":"4907:962:9","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":2687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2684,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"4921:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4930:8:9","memberName":"gasLimit","nodeType":"MemberAccess","referencedDeclaration":4029,"src":"4921:17:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4942:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4921:22:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2698,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"5045:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}],"id":2697,"name":"_invocationGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3933,"src":"5025:19:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$4046_calldata_ptr_$returns$_t_uint256_$","typeString":"function (struct IBridge.Message calldata) pure returns (uint256)"}},"id":2699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5025:29:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2700,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5058:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5025:34:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2706,"nodeType":"IfStatement","src":"5021:93:9","trueBody":{"id":2705,"nodeType":"Block","src":"5061:53:9","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2702,"name":"B_INVALID_GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2563,"src":"5082:19:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5082:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2704,"nodeType":"RevertStatement","src":"5075:28:9"}]}},"id":2707,"nodeType":"IfStatement","src":"4917:197:9","trueBody":{"id":2696,"nodeType":"Block","src":"4945:70:9","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":2691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2688,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"4963:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4972:3:9","memberName":"fee","nodeType":"MemberAccess","referencedDeclaration":4027,"src":"4963:12:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4979:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4963:17:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2695,"nodeType":"IfStatement","src":"4959:45:9","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2692,"name":"B_INVALID_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2561,"src":"4989:13:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4989:15:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2694,"nodeType":"RevertStatement","src":"4982:22:9"}}]}},{"assignments":[2709,null],"declarations":[{"constant":false,"id":2709,"mutability":"mutable","name":"destChainEnabled","nameLocation":"5184:16:9","nodeType":"VariableDeclaration","scope":2778,"src":"5179:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2708,"name":"bool","nodeType":"ElementaryTypeName","src":"5179:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":2714,"initialValue":{"arguments":[{"expression":{"id":2711,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"5224:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5233:11:9","memberName":"destChainId","nodeType":"MemberAccess","referencedDeclaration":4037,"src":"5224:20:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":2710,"name":"isDestChainEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3503,"src":"5205:18:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint64_$returns$_t_bool_$_t_address_$","typeString":"function (uint64) view returns (bool,address)"}},"id":2713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5205:40:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_address_$","typeString":"tuple(bool,address)"}},"nodeType":"VariableDeclarationStatement","src":"5178:67:9"},{"condition":{"id":2716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5297:17:9","subExpression":{"id":2715,"name":"destChainEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2709,"src":"5298:16:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2720,"nodeType":"IfStatement","src":"5293:49:9","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2717,"name":"B_INVALID_CHAINID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2557,"src":"5323:17:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5323:19:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2719,"nodeType":"RevertStatement","src":"5316:26:9"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2721,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"5419:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5428:5:9","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4043,"src":"5419:14:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":2723,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"5436:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5445:3:9","memberName":"fee","nodeType":"MemberAccess","referencedDeclaration":4027,"src":"5436:12:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"5419:29:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":2726,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5452:3:9","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5456:5:9","memberName":"value","nodeType":"MemberAccess","src":"5452:9:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5419:42:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2732,"nodeType":"IfStatement","src":"5415:72:9","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2729,"name":"B_INVALID_VALUE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2567,"src":"5470:15:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5470:17:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2731,"nodeType":"RevertStatement","src":"5463:24:9"}},{"expression":{"id":2735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2733,"name":"message_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2682,"src":"5498:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2734,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"5509:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"src":"5498:19:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message memory"}},"id":2736,"nodeType":"ExpressionStatement","src":"5498:19:9"},{"expression":{"id":2742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2737,"name":"message_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2682,"src":"5610:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message memory"}},"id":2739,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5619:2:9","memberName":"id","nodeType":"MemberAccess","referencedDeclaration":4025,"src":"5610:11:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5624:15:9","subExpression":{"id":2740,"name":"nextMessageId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2535,"src":"5624:13:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"5610:29:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":2743,"nodeType":"ExpressionStatement","src":"5610:29:9"},{"expression":{"id":2749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2744,"name":"message_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2682,"src":"5649:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message memory"}},"id":2746,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5658:4:9","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":4031,"src":"5649:13:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":2747,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5665:3:9","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5669:6:9","memberName":"sender","nodeType":"MemberAccess","src":"5665:10:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5649:26:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2750,"nodeType":"ExpressionStatement","src":"5649:26:9"},{"expression":{"id":2759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2751,"name":"message_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2682,"src":"5685:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message memory"}},"id":2753,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5694:10:9","memberName":"srcChainId","nodeType":"MemberAccess","referencedDeclaration":4033,"src":"5685:19:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":2756,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5714:5:9","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":2757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5720:7:9","memberName":"chainid","nodeType":"MemberAccess","src":"5714:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2755,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5707:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":2754,"name":"uint64","nodeType":"ElementaryTypeName","src":"5707:6:9","typeDescriptions":{}}},"id":2758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5707:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"5685:43:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":2760,"nodeType":"ExpressionStatement","src":"5685:43:9"},{"expression":{"id":2765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2761,"name":"msgHash_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"5739:8:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2763,"name":"message_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2682,"src":"5762:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message memory"}],"id":2762,"name":"hashMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3551,"src":"5750:11:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$4046_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct IBridge.Message memory) pure returns (bytes32)"}},"id":2764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5750:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5739:32:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2766,"nodeType":"ExpressionStatement","src":"5739:32:9"},{"eventCall":{"arguments":[{"id":2768,"name":"msgHash_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"5799:8:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2769,"name":"message_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2682,"src":"5809:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message memory"}],"id":2767,"name":"MessageSent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4061,"src":"5787:11:9","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_struct$_Message_$4046_memory_ptr_$returns$__$","typeString":"function (bytes32,struct IBridge.Message memory)"}},"id":2770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5787:31:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2771,"nodeType":"EmitStatement","src":"5782:36:9"},{"expression":{"arguments":[{"id":2775,"name":"msgHash_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"5853:8:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":2772,"name":"signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"5828:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"id":2774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5842:10:9","memberName":"sendSignal","nodeType":"MemberAccess","referencedDeclaration":6232,"src":"5828:24:9","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) external returns (bytes32)"}},"id":2776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5828:34:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2777,"nodeType":"ExpressionStatement","src":"5828:34:9"}]},"baseFunctions":[4081],"documentation":{"id":2652,"nodeType":"StructuredDocumentation","src":"4522:23:9","text":"@inheritdoc IBridge"},"functionSelector":"1bdb0037","implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":2659,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"4668:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4677:8:9","memberName":"srcOwner","nodeType":"MemberAccess","referencedDeclaration":4035,"src":"4668:17:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":2661,"kind":"modifierInvocation","modifierName":{"id":2658,"name":"nonZeroAddr","nameLocations":["4656:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":4409,"src":"4656:11:9"},"nodeType":"ModifierInvocation","src":"4656:30:9"},{"arguments":[{"expression":{"id":2663,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"4707:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4716:9:9","memberName":"destOwner","nodeType":"MemberAccess","referencedDeclaration":4039,"src":"4707:18:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":2665,"kind":"modifierInvocation","modifierName":{"id":2662,"name":"nonZeroAddr","nameLocations":["4695:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":4409,"src":"4695:11:9"},"nodeType":"ModifierInvocation","src":"4695:31:9"},{"arguments":[{"expression":{"id":2667,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"4747:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4756:2:9","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":4041,"src":"4747:11:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":2669,"kind":"modifierInvocation","modifierName":{"id":2666,"name":"nonZeroAddr","nameLocations":["4735:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":4409,"src":"4735:11:9"},"nodeType":"ModifierInvocation","src":"4735:24:9"},{"arguments":[{"expression":{"id":2671,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2655,"src":"4778:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4787:11:9","memberName":"destChainId","nodeType":"MemberAccess","referencedDeclaration":4037,"src":"4778:20:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"id":2673,"kind":"modifierInvocation","modifierName":{"id":2670,"name":"diffChain","nameLocations":["4768:9:9"],"nodeType":"IdentifierPath","referencedDeclaration":2599,"src":"4768:9:9"},"nodeType":"ModifierInvocation","src":"4768:31:9"},{"id":2675,"kind":"modifierInvocation","modifierName":{"id":2674,"name":"whenNotPaused","nameLocations":["4808:13:9"],"nodeType":"IdentifierPath","referencedDeclaration":4398,"src":"4808:13:9"},"nodeType":"ModifierInvocation","src":"4808:13:9"},{"id":2677,"kind":"modifierInvocation","modifierName":{"id":2676,"name":"nonReentrant","nameLocations":["4830:12:9"],"nodeType":"IdentifierPath","referencedDeclaration":4382,"src":"4830:12:9"},"nodeType":"ModifierInvocation","src":"4830:12:9"}],"name":"sendMessage","nameLocation":"4559:11:9","overrides":{"id":2657,"nodeType":"OverrideSpecifier","overrides":[],"src":"4639:8:9"},"parameters":{"id":2656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2655,"mutability":"mutable","name":"_message","nameLocation":"4588:8:9","nodeType":"VariableDeclaration","scope":2779,"src":"4571:25:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":2654,"nodeType":"UserDefinedTypeName","pathNode":{"id":2653,"name":"Message","nameLocations":["4571:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"4571:7:9"},"referencedDeclaration":4046,"src":"4571:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"}],"src":"4570:27:9"},"returnParameters":{"id":2683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2679,"mutability":"mutable","name":"msgHash_","nameLocation":"4868:8:9","nodeType":"VariableDeclaration","scope":2779,"src":"4860:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2678,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4860:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2682,"mutability":"mutable","name":"message_","nameLocation":"4893:8:9","nodeType":"VariableDeclaration","scope":2779,"src":"4878:23:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":2681,"nodeType":"UserDefinedTypeName","pathNode":{"id":2680,"name":"Message","nameLocations":["4878:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"4878:7:9"},"referencedDeclaration":4046,"src":"4878:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"}],"src":"4859:43:9"},"scope":4009,"stateMutability":"payable","virtual":false,"visibility":"external"},{"id":2904,"nodeType":"FunctionDefinition","src":"5903:1380:9","nodes":[],"body":{"id":2903,"nodeType":"Block","src":"6141:1142:9","nodes":[],"statements":[{"assignments":[2801],"declarations":[{"constant":false,"id":2801,"mutability":"mutable","name":"msgHash","nameLocation":"6159:7:9","nodeType":"VariableDeclaration","scope":2903,"src":"6151:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2800,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6151:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2805,"initialValue":{"arguments":[{"id":2803,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"6181:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}],"id":2802,"name":"hashMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3551,"src":"6169:11:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$4046_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct IBridge.Message memory) pure returns (bytes32)"}},"id":2804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6169:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6151:39:9"},{"expression":{"arguments":[{"id":2807,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2801,"src":"6213:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2808,"name":"Status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"6222:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Status_$4018_$","typeString":"type(enum IBridge.Status)"}},"id":2809,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6229:3:9","memberName":"NEW","nodeType":"MemberAccess","referencedDeclaration":4013,"src":"6222:10:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}],"id":2806,"name":"_checkStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"6200:12:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_enum$_Status_$4018_$returns$__$","typeString":"function (bytes32,enum IBridge.Status) view"}},"id":2810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6200:33:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2811,"nodeType":"ExpressionStatement","src":"6200:33:9"},{"condition":{"id":2820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6248:51:9","subExpression":{"arguments":[{"arguments":[{"id":2816,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6284:4:9","typeDescriptions":{"typeIdentifier":"t_contract$_Bridge_$4009","typeString":"contract Bridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Bridge_$4009","typeString":"contract Bridge"}],"id":2815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6276:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2814,"name":"address","nodeType":"ElementaryTypeName","src":"6276:7:9","typeDescriptions":{}}},"id":2817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6276:13:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2818,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2801,"src":"6291:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":2812,"name":"signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"6249:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"id":2813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6263:12:9","memberName":"isSignalSent","nodeType":"MemberAccess","referencedDeclaration":6268,"src":"6249:26:9","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_bytes32_$returns$_t_bool_$","typeString":"function (address,bytes32) view external returns (bool)"}},"id":2819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6249:50:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2825,"nodeType":"IfStatement","src":"6244:109:9","trueBody":{"id":2824,"nodeType":"Block","src":"6301:52:9","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2821,"name":"B_MESSAGE_NOT_SENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2571,"src":"6322:18:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6322:20:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2823,"nodeType":"RevertStatement","src":"6315:27:9"}]}},{"expression":{"arguments":[{"id":2827,"name":"signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"6397:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},{"arguments":[{"id":2829,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2801,"src":"6435:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":2828,"name":"signalForFailedMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3571,"src":"6412:22:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":2830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6412:31:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2831,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"6445:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6454:11:9","memberName":"destChainId","nodeType":"MemberAccess","referencedDeclaration":4037,"src":"6445:20:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":2833,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2785,"src":"6467:6:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":2826,"name":"_proveSignalReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3779,"src":"6363:20:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_ISignalService_$6277_$_t_bytes32_$_t_uint64_$_t_bytes_calldata_ptr_$returns$_t_uint32_$","typeString":"function (contract ISignalService,bytes32,uint64,bytes calldata) returns (uint32)"}},"id":2834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6363:120:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":2835,"nodeType":"ExpressionStatement","src":"6363:120:9"},{"expression":{"arguments":[{"id":2837,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2801,"src":"6515:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2838,"name":"Status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"6524:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Status_$4018_$","typeString":"type(enum IBridge.Status)"}},"id":2839,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6531:8:9","memberName":"RECALLED","nodeType":"MemberAccess","referencedDeclaration":4017,"src":"6524:15:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}],"id":2836,"name":"_updateMessageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3714,"src":"6494:20:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_enum$_Status_$4018_$returns$__$","typeString":"function (bytes32,enum IBridge.Status)"}},"id":2840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6494:46:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2841,"nodeType":"ExpressionStatement","src":"6494:46:9"},{"condition":{"arguments":[{"expression":{"arguments":[{"id":2846,"name":"IRecallableSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4164,"src":"6707:17:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRecallableSender_$4164_$","typeString":"type(contract IRecallableSender)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IRecallableSender_$4164_$","typeString":"type(contract IRecallableSender)"}],"id":2845,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6702:4:9","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":2847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6702:23:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IRecallableSender_$4164","typeString":"type(contract IRecallableSender)"}},"id":2848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6726:11:9","memberName":"interfaceId","nodeType":"MemberAccess","src":"6702:35:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"expression":{"id":2842,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"6670:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6679:4:9","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":4031,"src":"6670:13:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6684:17:9","memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":5554,"src":"6670:31:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes4_$returns$_t_bool_$attached_to$_t_address_$","typeString":"function (address,bytes4) view returns (bool)"}},"id":2849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6670:68:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2901,"nodeType":"Block","src":"7177:100:9","statements":[{"expression":{"arguments":[{"expression":{"id":2896,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"7228:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7237:5:9","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4043,"src":"7228:14:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2898,"name":"_SEND_ETHER_GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2519,"src":"7244:21:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":2891,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"7191:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7200:8:9","memberName":"srcOwner","nodeType":"MemberAccess","referencedDeclaration":4035,"src":"7191:17:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":2895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7209:18:9","memberName":"sendEtherAndVerify","nodeType":"MemberAccess","referencedDeclaration":5495,"src":"7191:36:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$attached_to$_t_address_$","typeString":"function (address,uint256,uint256)"}},"id":2899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7191:75:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2900,"nodeType":"ExpressionStatement","src":"7191:75:9"}]},"id":2902,"nodeType":"IfStatement","src":"6666:611:9","trueBody":{"id":2890,"nodeType":"Block","src":"6740:431:9","statements":[{"expression":{"arguments":[{"id":2851,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2801,"src":"6768:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":2854,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6785:4:9","typeDescriptions":{"typeIdentifier":"t_contract$_Bridge_$4009","typeString":"contract Bridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Bridge_$4009","typeString":"contract Bridge"}],"id":2853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6777:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2852,"name":"address","nodeType":"ElementaryTypeName","src":"6777:7:9","typeDescriptions":{}}},"id":2855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6777:13:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":2856,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"6792:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6801:10:9","memberName":"srcChainId","nodeType":"MemberAccess","referencedDeclaration":4033,"src":"6792:19:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":2850,"name":"_storeContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3733,"src":"6754:13:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint64_$returns$__$","typeString":"function (bytes32,address,uint64)"}},"id":2858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6754:58:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2859,"nodeType":"ExpressionStatement","src":"6754:58:9"},{"expression":{"arguments":[{"id":2868,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"6946:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},{"id":2869,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2801,"src":"6956:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"expression":{"id":2861,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"6875:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6884:4:9","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":4031,"src":"6875:13:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2860,"name":"IRecallableSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4164,"src":"6857:17:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRecallableSender_$4164_$","typeString":"type(contract IRecallableSender)"}},"id":2863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6857:32:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRecallableSender_$4164","typeString":"contract IRecallableSender"}},"id":2864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6903:17:9","memberName":"onMessageRecalled","nodeType":"MemberAccess","referencedDeclaration":4163,"src":"6857:63:9","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_struct$_Message_$4046_memory_ptr_$_t_bytes32_$returns$__$","typeString":"function (struct IBridge.Message memory,bytes32) payable external"}},"id":2867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"expression":{"id":2865,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"6929:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6938:5:9","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4043,"src":"6929:14:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"6857:88:9","typeDescriptions":{"typeIdentifier":"t_function_external_payable$_t_struct$_Message_$4046_memory_ptr_$_t_bytes32_$returns$__$value","typeString":"function (struct IBridge.Message memory,bytes32) payable external"}},"id":2870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6857:107:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2871,"nodeType":"ExpressionStatement","src":"6857:107:9"},{"expression":{"arguments":[{"arguments":[{"id":2875,"name":"_PLACEHOLDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"7079:12:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2874,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7071:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":2873,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7071:7:9","typeDescriptions":{}}},"id":2876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7071:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"id":2881,"name":"_PLACEHOLDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"7110:12:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2880,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7102:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":2879,"name":"uint160","nodeType":"ElementaryTypeName","src":"7102:7:9","typeDescriptions":{}}},"id":2882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7102:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":2878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7094:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2877,"name":"address","nodeType":"ElementaryTypeName","src":"7094:7:9","typeDescriptions":{}}},"id":2883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7094:30:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":2886,"name":"_PLACEHOLDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"7133:12:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2885,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7126:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":2884,"name":"uint64","nodeType":"ElementaryTypeName","src":"7126:6:9","typeDescriptions":{}}},"id":2887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7126:20:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":2872,"name":"_storeContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3733,"src":"7040:13:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint64_$returns$__$","typeString":"function (bytes32,address,uint64)"}},"id":2888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7040:120:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2889,"nodeType":"ExpressionStatement","src":"7040:120:9"}]}}]},"baseFunctions":[4090],"documentation":{"id":2780,"nodeType":"StructuredDocumentation","src":"5875:23:9","text":"@inheritdoc IBridge"},"functionSelector":"9efc7a2e","implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":2788,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"6033:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6042:10:9","memberName":"srcChainId","nodeType":"MemberAccess","referencedDeclaration":4033,"src":"6033:19:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"id":2790,"kind":"modifierInvocation","modifierName":{"id":2787,"name":"sameChain","nameLocations":["6023:9:9"],"nodeType":"IdentifierPath","referencedDeclaration":2589,"src":"6023:9:9"},"nodeType":"ModifierInvocation","src":"6023:30:9"},{"arguments":[{"expression":{"id":2792,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"6072:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6081:11:9","memberName":"destChainId","nodeType":"MemberAccess","referencedDeclaration":4037,"src":"6072:20:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"id":2794,"kind":"modifierInvocation","modifierName":{"id":2791,"name":"diffChain","nameLocations":["6062:9:9"],"nodeType":"IdentifierPath","referencedDeclaration":2599,"src":"6062:9:9"},"nodeType":"ModifierInvocation","src":"6062:31:9"},{"id":2796,"kind":"modifierInvocation","modifierName":{"id":2795,"name":"whenNotPaused","nameLocations":["6102:13:9"],"nodeType":"IdentifierPath","referencedDeclaration":4398,"src":"6102:13:9"},"nodeType":"ModifierInvocation","src":"6102:13:9"},{"id":2798,"kind":"modifierInvocation","modifierName":{"id":2797,"name":"nonReentrant","nameLocations":["6124:12:9"],"nodeType":"IdentifierPath","referencedDeclaration":4382,"src":"6124:12:9"},"nodeType":"ModifierInvocation","src":"6124:12:9"}],"name":"recallMessage","nameLocation":"5912:13:9","parameters":{"id":2786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2783,"mutability":"mutable","name":"_message","nameLocation":"5952:8:9","nodeType":"VariableDeclaration","scope":2904,"src":"5935:25:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":2782,"nodeType":"UserDefinedTypeName","pathNode":{"id":2781,"name":"Message","nameLocations":["5935:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"5935:7:9"},"referencedDeclaration":4046,"src":"5935:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"},{"constant":false,"id":2785,"mutability":"mutable","name":"_proof","nameLocation":"5985:6:9","nodeType":"VariableDeclaration","scope":2904,"src":"5970:21:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2784,"name":"bytes","nodeType":"ElementaryTypeName","src":"5970:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5925:72:9"},"returnParameters":{"id":2799,"nodeType":"ParameterList","parameters":[],"src":"6141:0:9"},"scope":4009,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3214,"nodeType":"FunctionDefinition","src":"7586:4212:9","nodes":[],"body":{"id":3213,"nodeType":"Block","src":"7801:3997:9","nodes":[],"statements":[{"assignments":[2924],"declarations":[{"constant":false,"id":2924,"mutability":"mutable","name":"gasStart","nameLocation":"7819:8:9","nodeType":"VariableDeclaration","scope":3213,"src":"7811:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2923,"name":"uint256","nodeType":"ElementaryTypeName","src":"7811:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2927,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":2925,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"7830:7:9","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":2926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7830:9:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7811:28:9"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2928,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"7934:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7943:11:9","memberName":"destChainId","nodeType":"MemberAccess","referencedDeclaration":4037,"src":"7934:20:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":2930,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"7958:5:9","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":2931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7964:7:9","memberName":"chainid","nodeType":"MemberAccess","src":"7958:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7934:37:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2936,"nodeType":"IfStatement","src":"7930:69:9","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2933,"name":"B_INVALID_CHAINID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2557,"src":"7980:17:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7980:19:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2935,"nodeType":"RevertStatement","src":"7973:26:9"}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":2940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2937,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"8093:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8102:10:9","memberName":"srcChainId","nodeType":"MemberAccess","referencedDeclaration":4033,"src":"8093:19:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8116:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8093:24:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2941,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"8121:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8130:10:9","memberName":"srcChainId","nodeType":"MemberAccess","referencedDeclaration":4033,"src":"8121:19:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":2943,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"8144:5:9","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":2944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8150:7:9","memberName":"chainid","nodeType":"MemberAccess","src":"8144:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8121:36:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8093:64:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2951,"nodeType":"IfStatement","src":"8089:121:9","trueBody":{"id":2950,"nodeType":"Block","src":"8159:51:9","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2947,"name":"B_INVALID_CHAINID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2557,"src":"8180:17:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8180:19:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2949,"nodeType":"RevertStatement","src":"8173:26:9"}]}},{"assignments":[2954],"declarations":[{"constant":false,"id":2954,"mutability":"mutable","name":"stats","nameLocation":"8243:5:9","nodeType":"VariableDeclaration","scope":3213,"src":"8220:28:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats"},"typeName":{"id":2953,"nodeType":"UserDefinedTypeName","pathNode":{"id":2952,"name":"ProcessingStats","nameLocations":["8220:15:9"],"nodeType":"IdentifierPath","referencedDeclaration":2488,"src":"8220:15:9"},"referencedDeclaration":2488,"src":"8220:15:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_storage_ptr","typeString":"struct Bridge.ProcessingStats"}},"visibility":"internal"}],"id":2955,"nodeType":"VariableDeclarationStatement","src":"8220:28:9"},{"expression":{"id":2964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2956,"name":"stats","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"8258:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats memory"}},"id":2958,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8264:18:9","memberName":"processedByRelayer","nodeType":"MemberAccess","referencedDeclaration":2487,"src":"8258:24:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2959,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8285:3:9","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8289:6:9","memberName":"sender","nodeType":"MemberAccess","src":"8285:10:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":2961,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"8299:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8308:9:9","memberName":"destOwner","nodeType":"MemberAccess","referencedDeclaration":4039,"src":"8299:18:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8285:32:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8258:59:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2965,"nodeType":"ExpressionStatement","src":"8258:59:9"},{"condition":{"expression":{"id":2966,"name":"stats","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"8416:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats memory"}},"id":2967,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8422:18:9","memberName":"processedByRelayer","nodeType":"MemberAccess","referencedDeclaration":2487,"src":"8416:24:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2985,"nodeType":"IfStatement","src":"8412:196:9","trueBody":{"id":2984,"nodeType":"Block","src":"8442:166:9","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":2971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2968,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"8460:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":2969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8469:8:9","memberName":"gasLimit","nodeType":"MemberAccess","referencedDeclaration":4029,"src":"8460:17:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8481:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8460:22:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2975,"nodeType":"IfStatement","src":"8456:56:9","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2972,"name":"B_PERMISSION_DENIED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2573,"src":"8491:19:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8491:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2974,"nodeType":"RevertStatement","src":"8484:28:9"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2976,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2910,"src":"8530:6:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":2977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8537:6:9","memberName":"length","nodeType":"MemberAccess","src":"8530:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":2978,"name":"RELAYER_MAX_PROOF_BYTES","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2511,"src":"8546:23:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8530:39:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2983,"nodeType":"IfStatement","src":"8526:71:9","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2980,"name":"B_PROOF_TOO_LARGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2575,"src":"8578:17:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8578:19:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2982,"nodeType":"RevertStatement","src":"8571:26:9"}}]}},{"assignments":[2987],"declarations":[{"constant":false,"id":2987,"mutability":"mutable","name":"msgHash","nameLocation":"8626:7:9","nodeType":"VariableDeclaration","scope":3213,"src":"8618:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2986,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8618:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2991,"initialValue":{"arguments":[{"id":2989,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"8648:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}],"id":2988,"name":"hashMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3551,"src":"8636:11:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$4046_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct IBridge.Message memory) pure returns (bytes32)"}},"id":2990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8636:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"8618:39:9"},{"expression":{"arguments":[{"id":2993,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2987,"src":"8681:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2994,"name":"Status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"8690:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Status_$4018_$","typeString":"type(enum IBridge.Status)"}},"id":2995,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8697:3:9","memberName":"NEW","nodeType":"MemberAccess","referencedDeclaration":4013,"src":"8690:10:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}],"id":2992,"name":"_checkStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"8668:12:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_enum$_Status_$4018_$returns$__$","typeString":"function (bytes32,enum IBridge.Status) view"}},"id":2996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8668:33:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2997,"nodeType":"ExpressionStatement","src":"8668:33:9"},{"expression":{"id":3006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":2998,"name":"stats","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"8712:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats memory"}},"id":3000,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8718:9:9","memberName":"proofSize","nodeType":"MemberAccess","referencedDeclaration":2483,"src":"8712:15:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":3003,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2910,"src":"8737:6:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":3004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8744:6:9","memberName":"length","nodeType":"MemberAccess","src":"8737:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3002,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8730:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":3001,"name":"uint32","nodeType":"ElementaryTypeName","src":"8730:6:9","typeDescriptions":{}}},"id":3005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8730:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"8712:39:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":3007,"nodeType":"ExpressionStatement","src":"8712:39:9"},{"expression":{"id":3018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3008,"name":"stats","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"8761:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats memory"}},"id":3010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8767:11:9","memberName":"numCacheOps","nodeType":"MemberAccess","referencedDeclaration":2485,"src":"8761:17:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3012,"name":"signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"8814:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},{"id":3013,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2987,"src":"8829:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":3014,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"8838:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8847:10:9","memberName":"srcChainId","nodeType":"MemberAccess","referencedDeclaration":4033,"src":"8838:19:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":3016,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2910,"src":"8859:6:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":3011,"name":"_proveSignalReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3779,"src":"8793:20:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_ISignalService_$6277_$_t_bytes32_$_t_uint64_$_t_bytes_calldata_ptr_$returns$_t_uint32_$","typeString":"function (contract ISignalService,bytes32,uint64,bytes calldata) returns (uint32)"}},"id":3017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8793:73:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"8761:105:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":3019,"nodeType":"ExpressionStatement","src":"8761:105:9"},{"assignments":[3021],"declarations":[{"constant":false,"id":3021,"mutability":"mutable","name":"refundAmount","nameLocation":"8885:12:9","nodeType":"VariableDeclaration","scope":3213,"src":"8877:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3020,"name":"uint256","nodeType":"ElementaryTypeName","src":"8877:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3022,"nodeType":"VariableDeclarationStatement","src":"8877:20:9"},{"condition":{"arguments":[{"id":3024,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"8938:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},{"id":3025,"name":"signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"8948:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"},{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}],"id":3023,"name":"_unableToInvokeMessageCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"8911:26:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Message_$4046_calldata_ptr_$_t_contract$_ISignalService_$6277_$returns$_t_bool_$","typeString":"function (struct IBridge.Message calldata,contract ISignalService) view returns (bool)"}},"id":3026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8911:51:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3084,"nodeType":"Block","src":"9300:436:9","statements":[{"assignments":[3044],"declarations":[{"constant":false,"id":3044,"mutability":"mutable","name":"gasLimit","nameLocation":"9322:8:9","nodeType":"VariableDeclaration","scope":3084,"src":"9314:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3043,"name":"uint256","nodeType":"ElementaryTypeName","src":"9314:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3053,"initialValue":{"condition":{"expression":{"id":3045,"name":"stats","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"9333:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats memory"}},"id":3046,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9339:18:9","memberName":"processedByRelayer","nodeType":"MemberAccess","referencedDeclaration":2487,"src":"9333:24:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":3050,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"9392:7:9","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":3051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9392:9:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9333:68:9","trueExpression":{"arguments":[{"id":3048,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"9380:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}],"id":3047,"name":"_invocationGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3933,"src":"9360:19:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$4046_calldata_ptr_$returns$_t_uint256_$","typeString":"function (struct IBridge.Message calldata) pure returns (uint256)"}},"id":3049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9360:29:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9314:87:9"},{"condition":{"arguments":[{"id":3055,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"9439:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},{"id":3056,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2987,"src":"9449:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3057,"name":"gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3044,"src":"9458:8:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":3058,"name":"stats","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"9468:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats memory"}},"id":3059,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9474:18:9","memberName":"processedByRelayer","nodeType":"MemberAccess","referencedDeclaration":2487,"src":"9468:24:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3054,"name":"_invokeMessageCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3684,"src":"9420:18:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Message_$4046_calldata_ptr_$_t_bytes32_$_t_uint256_$_t_bool_$returns$_t_bool_$","typeString":"function (struct IBridge.Message calldata,bytes32,uint256,bool) returns (bool)"}},"id":3060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9420:73:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3082,"nodeType":"Block","src":"9609:117:9","statements":[{"expression":{"id":3075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3072,"name":"status_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2918,"src":"9627:7:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3073,"name":"Status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"9637:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Status_$4018_$","typeString":"type(enum IBridge.Status)"}},"id":3074,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9644:9:9","memberName":"RETRIABLE","nodeType":"MemberAccess","referencedDeclaration":4014,"src":"9637:16:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"src":"9627:26:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"id":3076,"nodeType":"ExpressionStatement","src":"9627:26:9"},{"expression":{"id":3080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3077,"name":"reason_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2921,"src":"9671:7:9","typeDescriptions":{"typeIdentifier":"t_enum$_StatusReason_$4023","typeString":"enum IBridge.StatusReason"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3078,"name":"StatusReason","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4023,"src":"9681:12:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_StatusReason_$4023_$","typeString":"type(enum IBridge.StatusReason)"}},"id":3079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9694:17:9","memberName":"INVOCATION_FAILED","nodeType":"MemberAccess","referencedDeclaration":4021,"src":"9681:30:9","typeDescriptions":{"typeIdentifier":"t_enum$_StatusReason_$4023","typeString":"enum IBridge.StatusReason"}},"src":"9671:40:9","typeDescriptions":{"typeIdentifier":"t_enum$_StatusReason_$4023","typeString":"enum IBridge.StatusReason"}},"id":3081,"nodeType":"ExpressionStatement","src":"9671:40:9"}]},"id":3083,"nodeType":"IfStatement","src":"9416:310:9","trueBody":{"id":3071,"nodeType":"Block","src":"9495:108:9","statements":[{"expression":{"id":3064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3061,"name":"status_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2918,"src":"9513:7:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3062,"name":"Status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"9523:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Status_$4018_$","typeString":"type(enum IBridge.Status)"}},"id":3063,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9530:4:9","memberName":"DONE","nodeType":"MemberAccess","referencedDeclaration":4015,"src":"9523:11:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"src":"9513:21:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"id":3065,"nodeType":"ExpressionStatement","src":"9513:21:9"},{"expression":{"id":3069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3066,"name":"reason_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2921,"src":"9552:7:9","typeDescriptions":{"typeIdentifier":"t_enum$_StatusReason_$4023","typeString":"enum IBridge.StatusReason"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3067,"name":"StatusReason","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4023,"src":"9562:12:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_StatusReason_$4023_$","typeString":"type(enum IBridge.StatusReason)"}},"id":3068,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9575:13:9","memberName":"INVOCATION_OK","nodeType":"MemberAccess","referencedDeclaration":4019,"src":"9562:26:9","typeDescriptions":{"typeIdentifier":"t_enum$_StatusReason_$4023","typeString":"enum IBridge.StatusReason"}},"src":"9552:36:9","typeDescriptions":{"typeIdentifier":"t_enum$_StatusReason_$4023","typeString":"enum IBridge.StatusReason"}},"id":3070,"nodeType":"ExpressionStatement","src":"9552:36:9"}]}}]},"id":3085,"nodeType":"IfStatement","src":"8907:829:9","trueBody":{"id":3042,"nodeType":"Block","src":"8964:330:9","statements":[{"expression":{"id":3030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3027,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3021,"src":"9161:12:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3028,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"9176:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9185:5:9","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4043,"src":"9176:14:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9161:29:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3031,"nodeType":"ExpressionStatement","src":"9161:29:9"},{"expression":{"id":3035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3032,"name":"status_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2918,"src":"9204:7:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3033,"name":"Status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"9214:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Status_$4018_$","typeString":"type(enum IBridge.Status)"}},"id":3034,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9221:4:9","memberName":"DONE","nodeType":"MemberAccess","referencedDeclaration":4015,"src":"9214:11:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"src":"9204:21:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"id":3036,"nodeType":"ExpressionStatement","src":"9204:21:9"},{"expression":{"id":3040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3037,"name":"reason_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2921,"src":"9239:7:9","typeDescriptions":{"typeIdentifier":"t_enum$_StatusReason_$4023","typeString":"enum IBridge.StatusReason"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":3038,"name":"StatusReason","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4023,"src":"9249:12:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_StatusReason_$4023_$","typeString":"type(enum IBridge.StatusReason)"}},"id":3039,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9262:21:9","memberName":"INVOCATION_PROHIBITED","nodeType":"MemberAccess","referencedDeclaration":4020,"src":"9249:34:9","typeDescriptions":{"typeIdentifier":"t_enum$_StatusReason_$4023","typeString":"enum IBridge.StatusReason"}},"src":"9239:44:9","typeDescriptions":{"typeIdentifier":"t_enum$_StatusReason_$4023","typeString":"enum IBridge.StatusReason"}},"id":3041,"nodeType":"ExpressionStatement","src":"9239:44:9"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":3089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3086,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"9750:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9759:3:9","memberName":"fee","nodeType":"MemberAccess","referencedDeclaration":4027,"src":"9750:12:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":3088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9766:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9750:17:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3192,"nodeType":"IfStatement","src":"9746:1855:9","trueBody":{"id":3191,"nodeType":"Block","src":"9769:1832:9","statements":[{"expression":{"id":3093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3090,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3021,"src":"9783:12:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"id":3091,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"9799:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9808:3:9","memberName":"fee","nodeType":"MemberAccess","referencedDeclaration":4027,"src":"9799:12:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"9783:28:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3094,"nodeType":"ExpressionStatement","src":"9783:28:9"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3095,"name":"stats","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"9830:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats memory"}},"id":3096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9836:18:9","memberName":"processedByRelayer","nodeType":"MemberAccess","referencedDeclaration":2487,"src":"9830:24:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":3100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3097,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"9858:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9867:8:9","memberName":"gasLimit","nodeType":"MemberAccess","referencedDeclaration":4029,"src":"9858:17:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":3099,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9879:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9858:22:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9830:50:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3190,"nodeType":"IfStatement","src":"9826:1765:9","trueBody":{"id":3189,"nodeType":"Block","src":"9882:1709:9","statements":[{"id":3188,"nodeType":"UncheckedBlock","src":"9900:1677:9","statements":[{"assignments":[3103],"declarations":[{"constant":false,"id":3103,"mutability":"mutable","name":"refund","nameLocation":"10607:6:9","nodeType":"VariableDeclaration","scope":3188,"src":"10599:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3102,"name":"uint256","nodeType":"ElementaryTypeName","src":"10599:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3108,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3104,"name":"stats","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"10616:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats memory"}},"id":3105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10622:11:9","memberName":"numCacheOps","nodeType":"MemberAccess","referencedDeclaration":2485,"src":"10616:17:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3106,"name":"_GAS_REFUND_PER_CACHE_OPERATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"10636:31:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10616:51:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10599:68:9"},{"expression":{"id":3127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":3109,"name":"stats","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"10881:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats memory"}},"id":3111,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10887:16:9","memberName":"gasUsedInFeeCalc","nodeType":"MemberAccess","referencedDeclaration":2481,"src":"10881:22:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3114,"name":"GAS_OVERHEAD","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"10938:12:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3115,"name":"gasStart","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2924,"src":"10953:8:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10938:23:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"expression":{"expression":{"id":3118,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"10985:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10994:4:9","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":4045,"src":"10985:13:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":3120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10999:6:9","memberName":"length","nodeType":"MemberAccess","src":"10985:20:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3117,"name":"_messageCalldataCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"10964:20:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint32_$","typeString":"function (uint256) pure returns (uint32)"}},"id":3121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10964:42:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"10938:68:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":3123,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"11037:7:9","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":3124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11037:9:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10938:108:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3113,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10906:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":3112,"name":"uint32","nodeType":"ElementaryTypeName","src":"10906:6:9","typeDescriptions":{}}},"id":3126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10906:162:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"10881:187:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":3128,"nodeType":"ExpressionStatement","src":"10881:187:9"},{"assignments":[3130],"declarations":[{"constant":false,"id":3130,"mutability":"mutable","name":"gasCharged","nameLocation":"11099:10:9","nodeType":"VariableDeclaration","scope":3188,"src":"11091:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3129,"name":"uint256","nodeType":"ElementaryTypeName","src":"11091:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3138,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":3133,"name":"stats","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"11123:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats memory"}},"id":3134,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11129:16:9","memberName":"gasUsedInFeeCalc","nodeType":"MemberAccess","referencedDeclaration":2481,"src":"11123:22:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":3131,"name":"refund","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3103,"src":"11112:6:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11119:3:9","memberName":"max","nodeType":"MemberAccess","referencedDeclaration":5766,"src":"11112:10:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11112:34:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3136,"name":"refund","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3103,"src":"11149:6:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11112:43:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11091:64:9"},{"assignments":[3140],"declarations":[{"constant":false,"id":3140,"mutability":"mutable","name":"maxFee","nameLocation":"11185:6:9","nodeType":"VariableDeclaration","scope":3188,"src":"11177:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3139,"name":"uint256","nodeType":"ElementaryTypeName","src":"11177:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3148,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3141,"name":"gasCharged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"11194:10:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":3142,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"11207:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11216:3:9","memberName":"fee","nodeType":"MemberAccess","referencedDeclaration":4027,"src":"11207:12:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"11194:25:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":3145,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"11222:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11231:8:9","memberName":"gasLimit","nodeType":"MemberAccess","referencedDeclaration":4029,"src":"11222:17:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"11194:45:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11177:62:9"},{"assignments":[3150],"declarations":[{"constant":false,"id":3150,"mutability":"mutable","name":"baseFee","nameLocation":"11269:7:9","nodeType":"VariableDeclaration","scope":3188,"src":"11261:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3149,"name":"uint256","nodeType":"ElementaryTypeName","src":"11261:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3155,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3151,"name":"gasCharged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"11279:10:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":3152,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"11292:5:9","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11298:7:9","memberName":"basefee","nodeType":"MemberAccess","src":"11292:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11279:26:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11261:44:9"},{"assignments":[3157],"declarations":[{"constant":false,"id":3157,"mutability":"mutable","name":"fee","nameLocation":"11335:3:9","nodeType":"VariableDeclaration","scope":3188,"src":"11327:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3156,"name":"uint256","nodeType":"ElementaryTypeName","src":"11327:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3174,"initialValue":{"arguments":[{"expression":{"id":3171,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"11424:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11433:3:9","memberName":"fee","nodeType":"MemberAccess","referencedDeclaration":4027,"src":"11424:12:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"}],"expression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3158,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"11366:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3159,"name":"maxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3140,"src":"11377:6:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11366:17:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3162,"name":"maxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3140,"src":"11396:6:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3163,"name":"baseFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3150,"src":"11405:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11396:16:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3165,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11395:18:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":3166,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11417:1:9","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11395:23:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11366:52:9","trueExpression":{"id":3161,"name":"maxFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3140,"src":"11386:6:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3169,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11365:54:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11420:3:9","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":5748,"src":"11365:58:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11365:72:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11327:110:9"},{"expression":{"id":3177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3175,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3021,"src":"11460:12:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3176,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3157,"src":"11476:3:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11460:19:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3178,"nodeType":"ExpressionStatement","src":"11460:19:9"},{"expression":{"arguments":[{"id":3184,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3157,"src":"11531:3:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3185,"name":"_SEND_ETHER_GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2519,"src":"11536:21:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":3179,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11501:3:9","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11505:6:9","memberName":"sender","nodeType":"MemberAccess","src":"11501:10:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11512:18:9","memberName":"sendEtherAndVerify","nodeType":"MemberAccess","referencedDeclaration":5495,"src":"11501:29:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$attached_to$_t_address_$","typeString":"function (address,uint256,uint256)"}},"id":3186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11501:57:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3187,"nodeType":"ExpressionStatement","src":"11501:57:9"}]}]}}]}},{"expression":{"arguments":[{"id":3198,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3021,"src":"11649:12:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3199,"name":"_SEND_ETHER_GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2519,"src":"11663:21:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":3193,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"11611:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11620:9:9","memberName":"destOwner","nodeType":"MemberAccess","referencedDeclaration":4039,"src":"11611:18:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11630:18:9","memberName":"sendEtherAndVerify","nodeType":"MemberAccess","referencedDeclaration":5495,"src":"11611:37:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$attached_to$_t_address_$","typeString":"function (address,uint256,uint256)"}},"id":3200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11611:74:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3201,"nodeType":"ExpressionStatement","src":"11611:74:9"},{"expression":{"arguments":[{"id":3203,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2987,"src":"11717:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3204,"name":"status_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2918,"src":"11726:7:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}],"id":3202,"name":"_updateMessageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3714,"src":"11696:20:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_enum$_Status_$4018_$returns$__$","typeString":"function (bytes32,enum IBridge.Status)"}},"id":3205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11696:38:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3206,"nodeType":"ExpressionStatement","src":"11696:38:9"},{"eventCall":{"arguments":[{"id":3208,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2987,"src":"11766:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3209,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2908,"src":"11775:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},{"id":3210,"name":"stats","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"11785:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"},{"typeIdentifier":"t_struct$_ProcessingStats_$2488_memory_ptr","typeString":"struct Bridge.ProcessingStats memory"}],"id":3207,"name":"MessageProcessed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2499,"src":"11749:16:9","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_struct$_Message_$4046_memory_ptr_$_t_struct$_ProcessingStats_$2488_memory_ptr_$returns$__$","typeString":"function (bytes32,struct IBridge.Message memory,struct Bridge.ProcessingStats memory)"}},"id":3211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11749:42:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3212,"nodeType":"EmitStatement","src":"11744:47:9"}]},"baseFunctions":[4105],"documentation":{"id":2905,"nodeType":"StructuredDocumentation","src":"7289:292:9","text":"@inheritdoc IBridge\n @dev To ensure successful execution, we recommend this transaction's gas limit not to be\n smaller than:\n `(message.gasLimit - GAS_RESERVE) * 64 / 63 + GAS_RESERVE`,\n Or we can use a simplified rule: `tx.gaslimit = message.gaslimit * 102%`."},"functionSelector":"2035065e","implemented":true,"kind":"function","modifiers":[{"id":2913,"kind":"modifierInvocation","modifierName":{"id":2912,"name":"whenNotPaused","nameLocations":["7707:13:9"],"nodeType":"IdentifierPath","referencedDeclaration":4398,"src":"7707:13:9"},"nodeType":"ModifierInvocation","src":"7707:13:9"},{"id":2915,"kind":"modifierInvocation","modifierName":{"id":2914,"name":"nonReentrant","nameLocations":["7729:12:9"],"nodeType":"IdentifierPath","referencedDeclaration":4382,"src":"7729:12:9"},"nodeType":"ModifierInvocation","src":"7729:12:9"}],"name":"processMessage","nameLocation":"7595:14:9","parameters":{"id":2911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2908,"mutability":"mutable","name":"_message","nameLocation":"7636:8:9","nodeType":"VariableDeclaration","scope":3214,"src":"7619:25:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":2907,"nodeType":"UserDefinedTypeName","pathNode":{"id":2906,"name":"Message","nameLocations":["7619:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"7619:7:9"},"referencedDeclaration":4046,"src":"7619:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"},{"constant":false,"id":2910,"mutability":"mutable","name":"_proof","nameLocation":"7669:6:9","nodeType":"VariableDeclaration","scope":3214,"src":"7654:21:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2909,"name":"bytes","nodeType":"ElementaryTypeName","src":"7654:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7609:72:9"},"returnParameters":{"id":2922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2918,"mutability":"mutable","name":"status_","nameLocation":"7766:7:9","nodeType":"VariableDeclaration","scope":3214,"src":"7759:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"},"typeName":{"id":2917,"nodeType":"UserDefinedTypeName","pathNode":{"id":2916,"name":"Status","nameLocations":["7759:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":4018,"src":"7759:6:9"},"referencedDeclaration":4018,"src":"7759:6:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"visibility":"internal"},{"constant":false,"id":2921,"mutability":"mutable","name":"reason_","nameLocation":"7788:7:9","nodeType":"VariableDeclaration","scope":3214,"src":"7775:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_StatusReason_$4023","typeString":"enum IBridge.StatusReason"},"typeName":{"id":2920,"nodeType":"UserDefinedTypeName","pathNode":{"id":2919,"name":"StatusReason","nameLocations":["7775:12:9"],"nodeType":"IdentifierPath","referencedDeclaration":4023,"src":"7775:12:9"},"referencedDeclaration":4023,"src":"7775:12:9","typeDescriptions":{"typeIdentifier":"t_enum$_StatusReason_$4023","typeString":"enum IBridge.StatusReason"}},"visibility":"internal"}],"src":"7758:38:9"},"scope":4009,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3327,"nodeType":"FunctionDefinition","src":"11832:1159:9","nodes":[],"body":{"id":3326,"nodeType":"Block","src":"12067:924:9","nodes":[],"statements":[{"assignments":[3236],"declarations":[{"constant":false,"id":3236,"mutability":"mutable","name":"msgHash","nameLocation":"12085:7:9","nodeType":"VariableDeclaration","scope":3326,"src":"12077:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3235,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12077:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3240,"initialValue":{"arguments":[{"id":3238,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3218,"src":"12107:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}],"id":3237,"name":"hashMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3551,"src":"12095:11:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$4046_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct IBridge.Message memory) pure returns (bytes32)"}},"id":3239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12095:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"12077:39:9"},{"expression":{"arguments":[{"id":3242,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"12139:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":3243,"name":"Status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"12148:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Status_$4018_$","typeString":"type(enum IBridge.Status)"}},"id":3244,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12155:9:9","memberName":"RETRIABLE","nodeType":"MemberAccess","referencedDeclaration":4014,"src":"12148:16:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}],"id":3241,"name":"_checkStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"12126:12:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_enum$_Status_$4018_$returns$__$","typeString":"function (bytes32,enum IBridge.Status) view"}},"id":3245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12126:39:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3246,"nodeType":"ExpressionStatement","src":"12126:39:9"},{"assignments":[3248],"declarations":[{"constant":false,"id":3248,"mutability":"mutable","name":"succeeded","nameLocation":"12181:9:9","nodeType":"VariableDeclaration","scope":3326,"src":"12176:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3247,"name":"bool","nodeType":"ElementaryTypeName","src":"12176:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":3249,"nodeType":"VariableDeclarationStatement","src":"12176:14:9"},{"condition":{"arguments":[{"id":3251,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3218,"src":"12231:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},{"id":3252,"name":"signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"12241:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"},{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}],"id":3250,"name":"_unableToInvokeMessageCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3907,"src":"12204:26:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_Message_$4046_calldata_ptr_$_t_contract$_ISignalService_$6277_$returns$_t_bool_$","typeString":"function (struct IBridge.Message calldata,contract ISignalService) view returns (bool)"}},"id":3253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12204:51:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3294,"nodeType":"Block","src":"12371:301:9","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":3269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3266,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3218,"src":"12390:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12399:8:9","memberName":"gasLimit","nodeType":"MemberAccess","referencedDeclaration":4029,"src":"12390:17:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3268,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12411:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12390:22:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"id":3270,"name":"_isLastAttempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3220,"src":"12416:14:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12390:40:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":3272,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12389:42:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3273,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12435:3:9","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12439:6:9","memberName":"sender","nodeType":"MemberAccess","src":"12435:10:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":3275,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3218,"src":"12449:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12458:9:9","memberName":"destOwner","nodeType":"MemberAccess","referencedDeclaration":4039,"src":"12449:18:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12435:32:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12389:78:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3283,"nodeType":"IfStatement","src":"12385:145:9","trueBody":{"id":3282,"nodeType":"Block","src":"12469:61:9","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3279,"name":"B_PERMISSION_DENIED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2573,"src":"12494:19:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12494:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3281,"nodeType":"RevertStatement","src":"12487:28:9"}]}},{"expression":{"id":3292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3284,"name":"succeeded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3248,"src":"12594:9:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3286,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3218,"src":"12625:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},{"id":3287,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"12635:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":3288,"name":"gasleft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-7,"src":"12644:7:9","typeDescriptions":{"typeIdentifier":"t_function_gasleft_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":3289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12644:9:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":3290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12655:5:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3285,"name":"_invokeMessageCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3684,"src":"12606:18:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_Message_$4046_calldata_ptr_$_t_bytes32_$_t_uint256_$_t_bool_$returns$_t_bool_$","typeString":"function (struct IBridge.Message calldata,bytes32,uint256,bool) returns (bool)"}},"id":3291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12606:55:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12594:67:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3293,"nodeType":"ExpressionStatement","src":"12594:67:9"}]},"id":3295,"nodeType":"IfStatement","src":"12200:472:9","trueBody":{"id":3265,"nodeType":"Block","src":"12257:108:9","statements":[{"expression":{"id":3263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3254,"name":"succeeded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3248,"src":"12271:9:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":3258,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3218,"src":"12312:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12321:5:9","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4043,"src":"12312:14:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3260,"name":"_SEND_ETHER_GAS_LIMIT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2519,"src":"12328:21:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"","id":3261,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12351:2:9","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"expression":{"id":3255,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3218,"src":"12283:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12292:9:9","memberName":"destOwner","nodeType":"MemberAccess","referencedDeclaration":4039,"src":"12283:18:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12302:9:9","memberName":"sendEther","nodeType":"MemberAccess","referencedDeclaration":5468,"src":"12283:28:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$attached_to$_t_address_$","typeString":"function (address,uint256,uint256,bytes memory) returns (bool)"}},"id":3262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12283:71:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12271:83:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3264,"nodeType":"ExpressionStatement","src":"12271:83:9"}]}},{"condition":{"id":3296,"name":"succeeded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3248,"src":"12686:9:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"id":3304,"name":"_isLastAttempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3220,"src":"12774:14:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3323,"nodeType":"Block","src":"12937:48:9","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3320,"name":"B_RETRY_FAILED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2577,"src":"12958:14:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12958:16:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3322,"nodeType":"RevertStatement","src":"12951:23:9"}]},"id":3324,"nodeType":"IfStatement","src":"12770:215:9","trueBody":{"id":3319,"nodeType":"Block","src":"12790:141:9","statements":[{"expression":{"arguments":[{"id":3306,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"12825:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":3307,"name":"Status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"12834:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Status_$4018_$","typeString":"type(enum IBridge.Status)"}},"id":3308,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12841:6:9","memberName":"FAILED","nodeType":"MemberAccess","referencedDeclaration":4016,"src":"12834:13:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}],"id":3305,"name":"_updateMessageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3714,"src":"12804:20:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_enum$_Status_$4018_$returns$__$","typeString":"function (bytes32,enum IBridge.Status)"}},"id":3309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12804:44:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3310,"nodeType":"ExpressionStatement","src":"12804:44:9"},{"expression":{"arguments":[{"arguments":[{"id":3315,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"12911:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3314,"name":"signalForFailedMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3571,"src":"12888:22:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":3316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12888:31:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":3311,"name":"signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"12863:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"id":3313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12877:10:9","memberName":"sendSignal","nodeType":"MemberAccess","referencedDeclaration":6232,"src":"12863:24:9","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) external returns (bytes32)"}},"id":3317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12863:57:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3318,"nodeType":"ExpressionStatement","src":"12863:57:9"}]}},"id":3325,"nodeType":"IfStatement","src":"12682:303:9","trueBody":{"id":3303,"nodeType":"Block","src":"12697:67:9","statements":[{"expression":{"arguments":[{"id":3298,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3236,"src":"12732:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":3299,"name":"Status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"12741:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Status_$4018_$","typeString":"type(enum IBridge.Status)"}},"id":3300,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12748:4:9","memberName":"DONE","nodeType":"MemberAccess","referencedDeclaration":4015,"src":"12741:11:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}],"id":3297,"name":"_updateMessageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3714,"src":"12711:20:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_enum$_Status_$4018_$returns$__$","typeString":"function (bytes32,enum IBridge.Status)"}},"id":3301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12711:42:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3302,"nodeType":"ExpressionStatement","src":"12711:42:9"}]}}]},"baseFunctions":[4114],"documentation":{"id":3215,"nodeType":"StructuredDocumentation","src":"11804:23:9","text":"@inheritdoc IBridge"},"functionSelector":"0432873c","implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":3223,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3218,"src":"11959:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11968:11:9","memberName":"destChainId","nodeType":"MemberAccess","referencedDeclaration":4037,"src":"11959:20:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"id":3225,"kind":"modifierInvocation","modifierName":{"id":3222,"name":"sameChain","nameLocations":["11949:9:9"],"nodeType":"IdentifierPath","referencedDeclaration":2589,"src":"11949:9:9"},"nodeType":"ModifierInvocation","src":"11949:31:9"},{"arguments":[{"expression":{"id":3227,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3218,"src":"11999:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12008:10:9","memberName":"srcChainId","nodeType":"MemberAccess","referencedDeclaration":4033,"src":"11999:19:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"id":3229,"kind":"modifierInvocation","modifierName":{"id":3226,"name":"diffChain","nameLocations":["11989:9:9"],"nodeType":"IdentifierPath","referencedDeclaration":2599,"src":"11989:9:9"},"nodeType":"ModifierInvocation","src":"11989:30:9"},{"id":3231,"kind":"modifierInvocation","modifierName":{"id":3230,"name":"whenNotPaused","nameLocations":["12028:13:9"],"nodeType":"IdentifierPath","referencedDeclaration":4398,"src":"12028:13:9"},"nodeType":"ModifierInvocation","src":"12028:13:9"},{"id":3233,"kind":"modifierInvocation","modifierName":{"id":3232,"name":"nonReentrant","nameLocations":["12050:12:9"],"nodeType":"IdentifierPath","referencedDeclaration":4382,"src":"12050:12:9"},"nodeType":"ModifierInvocation","src":"12050:12:9"}],"name":"retryMessage","nameLocation":"11841:12:9","parameters":{"id":3221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3218,"mutability":"mutable","name":"_message","nameLocation":"11880:8:9","nodeType":"VariableDeclaration","scope":3327,"src":"11863:25:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":3217,"nodeType":"UserDefinedTypeName","pathNode":{"id":3216,"name":"Message","nameLocations":["11863:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"11863:7:9"},"referencedDeclaration":4046,"src":"11863:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"},{"constant":false,"id":3220,"mutability":"mutable","name":"_isLastAttempt","nameLocation":"11903:14:9","nodeType":"VariableDeclaration","scope":3327,"src":"11898:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3219,"name":"bool","nodeType":"ElementaryTypeName","src":"11898:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11853:70:9"},"returnParameters":{"id":3234,"nodeType":"ParameterList","parameters":[],"src":"12067:0:9"},"scope":4009,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3383,"nodeType":"FunctionDefinition","src":"13025:519:9","nodes":[],"body":{"id":3382,"nodeType":"Block","src":"13216:328:9","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3346,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13230:3:9","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":3347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13234:6:9","memberName":"sender","nodeType":"MemberAccess","src":"13230:10:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":3348,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3331,"src":"13244:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13253:9:9","memberName":"destOwner","nodeType":"MemberAccess","referencedDeclaration":4039,"src":"13244:18:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13230:32:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3355,"nodeType":"IfStatement","src":"13226:91:9","trueBody":{"id":3354,"nodeType":"Block","src":"13264:53:9","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3351,"name":"B_PERMISSION_DENIED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2573,"src":"13285:19:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13285:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3353,"nodeType":"RevertStatement","src":"13278:28:9"}]}},{"assignments":[3357],"declarations":[{"constant":false,"id":3357,"mutability":"mutable","name":"msgHash","nameLocation":"13335:7:9","nodeType":"VariableDeclaration","scope":3382,"src":"13327:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3356,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13327:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":3361,"initialValue":{"arguments":[{"id":3359,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3331,"src":"13357:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}],"id":3358,"name":"hashMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3551,"src":"13345:11:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$4046_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct IBridge.Message memory) pure returns (bytes32)"}},"id":3360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13345:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13327:39:9"},{"expression":{"arguments":[{"id":3363,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3357,"src":"13389:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":3364,"name":"Status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"13398:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Status_$4018_$","typeString":"type(enum IBridge.Status)"}},"id":3365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13405:9:9","memberName":"RETRIABLE","nodeType":"MemberAccess","referencedDeclaration":4014,"src":"13398:16:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}],"id":3362,"name":"_checkStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3844,"src":"13376:12:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_enum$_Status_$4018_$returns$__$","typeString":"function (bytes32,enum IBridge.Status) view"}},"id":3366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13376:39:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3367,"nodeType":"ExpressionStatement","src":"13376:39:9"},{"expression":{"arguments":[{"id":3369,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3357,"src":"13447:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":3370,"name":"Status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"13456:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Status_$4018_$","typeString":"type(enum IBridge.Status)"}},"id":3371,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13463:6:9","memberName":"FAILED","nodeType":"MemberAccess","referencedDeclaration":4016,"src":"13456:13:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}],"id":3368,"name":"_updateMessageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3714,"src":"13426:20:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_enum$_Status_$4018_$returns$__$","typeString":"function (bytes32,enum IBridge.Status)"}},"id":3372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13426:44:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3373,"nodeType":"ExpressionStatement","src":"13426:44:9"},{"expression":{"arguments":[{"arguments":[{"id":3378,"name":"msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3357,"src":"13528:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3377,"name":"signalForFailedMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3571,"src":"13505:22:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":3379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13505:31:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":3374,"name":"signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"13480:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"id":3376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13494:10:9","memberName":"sendSignal","nodeType":"MemberAccess","referencedDeclaration":6232,"src":"13480:24:9","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) external returns (bytes32)"}},"id":3380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13480:57:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":3381,"nodeType":"ExpressionStatement","src":"13480:57:9"}]},"baseFunctions":[4121],"documentation":{"id":3328,"nodeType":"StructuredDocumentation","src":"12997:23:9","text":"@inheritdoc IBridge"},"functionSelector":"913b16cb","implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":3334,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3331,"src":"13108:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13117:11:9","memberName":"destChainId","nodeType":"MemberAccess","referencedDeclaration":4037,"src":"13108:20:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"id":3336,"kind":"modifierInvocation","modifierName":{"id":3333,"name":"sameChain","nameLocations":["13098:9:9"],"nodeType":"IdentifierPath","referencedDeclaration":2589,"src":"13098:9:9"},"nodeType":"ModifierInvocation","src":"13098:31:9"},{"arguments":[{"expression":{"id":3338,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3331,"src":"13148:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13157:10:9","memberName":"srcChainId","nodeType":"MemberAccess","referencedDeclaration":4033,"src":"13148:19:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"id":3340,"kind":"modifierInvocation","modifierName":{"id":3337,"name":"diffChain","nameLocations":["13138:9:9"],"nodeType":"IdentifierPath","referencedDeclaration":2599,"src":"13138:9:9"},"nodeType":"ModifierInvocation","src":"13138:30:9"},{"id":3342,"kind":"modifierInvocation","modifierName":{"id":3341,"name":"whenNotPaused","nameLocations":["13177:13:9"],"nodeType":"IdentifierPath","referencedDeclaration":4398,"src":"13177:13:9"},"nodeType":"ModifierInvocation","src":"13177:13:9"},{"id":3344,"kind":"modifierInvocation","modifierName":{"id":3343,"name":"nonReentrant","nameLocations":["13199:12:9"],"nodeType":"IdentifierPath","referencedDeclaration":4382,"src":"13199:12:9"},"nodeType":"ModifierInvocation","src":"13199:12:9"}],"name":"failMessage","nameLocation":"13034:11:9","parameters":{"id":3332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3331,"mutability":"mutable","name":"_message","nameLocation":"13063:8:9","nodeType":"VariableDeclaration","scope":3383,"src":"13046:25:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":3330,"nodeType":"UserDefinedTypeName","pathNode":{"id":3329,"name":"Message","nameLocations":["13046:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"13046:7:9"},"referencedDeclaration":4046,"src":"13046:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"}],"src":"13045:27:9"},"returnParameters":{"id":3345,"nodeType":"ParameterList","parameters":[],"src":"13216:0:9"},"scope":4009,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":3412,"nodeType":"FunctionDefinition","src":"13578:250:9","nodes":[],"body":{"id":3411,"nodeType":"Block","src":"13657:171:9","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3392,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"13671:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13680:10:9","memberName":"srcChainId","nodeType":"MemberAccess","referencedDeclaration":4033,"src":"13671:19:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":3394,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"13694:5:9","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13700:7:9","memberName":"chainid","nodeType":"MemberAccess","src":"13694:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13671:36:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3399,"nodeType":"IfStatement","src":"13667:54:9","trueBody":{"expression":{"hexValue":"66616c7365","id":3397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13716:5:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":3391,"id":3398,"nodeType":"Return","src":"13709:12:9"}},{"expression":{"arguments":[{"arguments":[{"id":3404,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13781:4:9","typeDescriptions":{"typeIdentifier":"t_contract$_Bridge_$4009","typeString":"contract Bridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Bridge_$4009","typeString":"contract Bridge"}],"id":3403,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13773:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3402,"name":"address","nodeType":"ElementaryTypeName","src":"13773:7:9","typeDescriptions":{}}},"id":3405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13773:13:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":3407,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3387,"src":"13809:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}],"id":3406,"name":"hashMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3551,"src":"13797:11:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$4046_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct IBridge.Message memory) pure returns (bytes32)"}},"id":3408,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13797:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":3400,"name":"signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"13738:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"id":3401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13752:12:9","memberName":"isSignalSent","nodeType":"MemberAccess","referencedDeclaration":6268,"src":"13738:26:9","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_bytes32_$returns$_t_bool_$","typeString":"function (address,bytes32) view external returns (bool)"}},"id":3409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":["13767:4:9","13788:7:9"],"names":["_app","_signal"],"nodeType":"FunctionCall","src":"13738:83:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3391,"id":3410,"nodeType":"Return","src":"13731:90:9"}]},"baseFunctions":[4137],"documentation":{"id":3384,"nodeType":"StructuredDocumentation","src":"13550:23:9","text":"@inheritdoc IBridge"},"functionSelector":"60620c6b","implemented":true,"kind":"function","modifiers":[],"name":"isMessageSent","nameLocation":"13587:13:9","parameters":{"id":3388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3387,"mutability":"mutable","name":"_message","nameLocation":"13618:8:9","nodeType":"VariableDeclaration","scope":3412,"src":"13601:25:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":3386,"nodeType":"UserDefinedTypeName","pathNode":{"id":3385,"name":"Message","nameLocations":["13601:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"13601:7:9"},"referencedDeclaration":4046,"src":"13601:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"}],"src":"13600:27:9"},"returnParameters":{"id":3391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3390,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3412,"src":"13651:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3389,"name":"bool","nodeType":"ElementaryTypeName","src":"13651:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13650:6:9"},"scope":4009,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":3444,"nodeType":"FunctionDefinition","src":"14121:410:9","nodes":[],"body":{"id":3443,"nodeType":"Block","src":"14275:256:9","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3423,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3416,"src":"14289:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14298:10:9","memberName":"srcChainId","nodeType":"MemberAccess","referencedDeclaration":4033,"src":"14289:19:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":3425,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"14312:5:9","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14318:7:9","memberName":"chainid","nodeType":"MemberAccess","src":"14312:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14289:36:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3430,"nodeType":"IfStatement","src":"14285:54:9","trueBody":{"expression":{"hexValue":"66616c7365","id":3428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14334:5:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":3422,"id":3429,"nodeType":"Return","src":"14327:12:9"}},{"expression":{"arguments":[{"id":3432,"name":"signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"14388:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},{"arguments":[{"arguments":[{"id":3435,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3416,"src":"14450:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}],"id":3434,"name":"hashMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3551,"src":"14438:11:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$4046_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct IBridge.Message memory) pure returns (bytes32)"}},"id":3436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14438:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":3433,"name":"signalForFailedMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3571,"src":"14415:22:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":3437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14415:45:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":3438,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3416,"src":"14474:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14483:11:9","memberName":"destChainId","nodeType":"MemberAccess","referencedDeclaration":4037,"src":"14474:20:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":3440,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3418,"src":"14508:6:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":3431,"name":"_isSignalReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3826,"src":"14357:17:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_ISignalService_$6277_$_t_bytes32_$_t_uint64_$_t_bytes_calldata_ptr_$returns$_t_bool_$","typeString":"function (contract ISignalService,bytes32,uint64,bytes calldata) view returns (bool)"}},"id":3441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14357:167:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3422,"id":3442,"nodeType":"Return","src":"14350:174:9"}]},"documentation":{"id":3413,"nodeType":"StructuredDocumentation","src":"13834:282:9","text":"@notice Checks if a msgHash has failed on its destination chain.\n This is the 'readonly' version of proveMessageFailed.\n @param _message The message.\n @param _proof The merkle inclusion proof.\n @return true if the message has failed, false otherwise."},"functionSelector":"5862f6e1","implemented":true,"kind":"function","modifiers":[],"name":"isMessageFailed","nameLocation":"14130:15:9","parameters":{"id":3419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3416,"mutability":"mutable","name":"_message","nameLocation":"14172:8:9","nodeType":"VariableDeclaration","scope":3444,"src":"14155:25:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":3415,"nodeType":"UserDefinedTypeName","pathNode":{"id":3414,"name":"Message","nameLocations":["14155:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"14155:7:9"},"referencedDeclaration":4046,"src":"14155:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"},{"constant":false,"id":3418,"mutability":"mutable","name":"_proof","nameLocation":"14205:6:9","nodeType":"VariableDeclaration","scope":3444,"src":"14190:21:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3417,"name":"bytes","nodeType":"ElementaryTypeName","src":"14190:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"14145:72:9"},"returnParameters":{"id":3422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3421,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3444,"src":"14265:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3420,"name":"bool","nodeType":"ElementaryTypeName","src":"14265:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14264:6:9"},"scope":4009,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":3474,"nodeType":"FunctionDefinition","src":"14835:329:9","nodes":[],"body":{"id":3473,"nodeType":"Block","src":"14991:173:9","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3455,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3448,"src":"15005:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15014:11:9","memberName":"destChainId","nodeType":"MemberAccess","referencedDeclaration":4037,"src":"15005:20:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":3457,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"15029:5:9","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15035:7:9","memberName":"chainid","nodeType":"MemberAccess","src":"15029:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15005:37:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3462,"nodeType":"IfStatement","src":"15001:55:9","trueBody":{"expression":{"hexValue":"66616c7365","id":3460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15051:5:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":3454,"id":3461,"nodeType":"Return","src":"15044:12:9"}},{"expression":{"arguments":[{"id":3464,"name":"signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2530,"src":"15091:13:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},{"arguments":[{"id":3466,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3448,"src":"15118:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}],"id":3465,"name":"hashMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3551,"src":"15106:11:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_Message_$4046_memory_ptr_$returns$_t_bytes32_$","typeString":"function (struct IBridge.Message memory) pure returns (bytes32)"}},"id":3467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15106:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":3468,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3448,"src":"15129:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15138:10:9","memberName":"srcChainId","nodeType":"MemberAccess","referencedDeclaration":4033,"src":"15129:19:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":3470,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3450,"src":"15150:6:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":3463,"name":"_isSignalReceived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3826,"src":"15073:17:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_ISignalService_$6277_$_t_bytes32_$_t_uint64_$_t_bytes_calldata_ptr_$returns$_t_bool_$","typeString":"function (contract ISignalService,bytes32,uint64,bytes calldata) view returns (bool)"}},"id":3471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15073:84:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3454,"id":3472,"nodeType":"Return","src":"15066:91:9"}]},"documentation":{"id":3445,"nodeType":"StructuredDocumentation","src":"14537:293:9","text":"@notice Checks if a msgHash has been received on its source chain.\n This is the 'readonly' version of proveMessageReceived.\n @param _message The message.\n @param _proof The merkle inclusion proof.\n @return true if the message has been received, false otherwise."},"functionSelector":"b8acae0e","implemented":true,"kind":"function","modifiers":[],"name":"isMessageReceived","nameLocation":"14844:17:9","parameters":{"id":3451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3448,"mutability":"mutable","name":"_message","nameLocation":"14888:8:9","nodeType":"VariableDeclaration","scope":3474,"src":"14871:25:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":3447,"nodeType":"UserDefinedTypeName","pathNode":{"id":3446,"name":"Message","nameLocations":["14871:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"14871:7:9"},"referencedDeclaration":4046,"src":"14871:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"},{"constant":false,"id":3450,"mutability":"mutable","name":"_proof","nameLocation":"14921:6:9","nodeType":"VariableDeclaration","scope":3474,"src":"14906:21:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3449,"name":"bytes","nodeType":"ElementaryTypeName","src":"14906:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"14861:72:9"},"returnParameters":{"id":3454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3453,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3474,"src":"14981:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3452,"name":"bool","nodeType":"ElementaryTypeName","src":"14981:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14980:6:9"},"scope":4009,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":3503,"nodeType":"FunctionDefinition","src":"15412:249:9","nodes":[],"body":{"id":3502,"nodeType":"Block","src":"15542:119:9","nodes":[],"statements":[{"expression":{"id":3491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3484,"name":"destBridge_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3482,"src":"15552:11:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3486,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3477,"src":"15574:8:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":3487,"name":"LibNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5845,"src":"15584:8:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibNames_$5845_$","typeString":"type(library LibNames)"}},"id":3488,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15593:8:9","memberName":"B_BRIDGE","nodeType":"MemberAccess","referencedDeclaration":5796,"src":"15584:17:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"74727565","id":3489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15603:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3485,"name":"resolve","nodeType":"Identifier","overloadedDeclarations":[4899,4921],"referencedDeclaration":4899,"src":"15566:7:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint64_$_t_bytes32_$_t_bool_$returns$_t_address_$","typeString":"function (uint64,bytes32,bool) view returns (address)"}},"id":3490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15566:42:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15552:56:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3492,"nodeType":"ExpressionStatement","src":"15552:56:9"},{"expression":{"id":3500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3493,"name":"enabled_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3480,"src":"15618:8:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3494,"name":"destBridge_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3482,"src":"15629:11:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":3497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15652:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15644:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3495,"name":"address","nodeType":"ElementaryTypeName","src":"15644:7:9","typeDescriptions":{}}},"id":3498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15644:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"15629:25:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15618:36:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3501,"nodeType":"ExpressionStatement","src":"15618:36:9"}]},"documentation":{"id":3475,"nodeType":"StructuredDocumentation","src":"15170:237:9","text":"@notice Checks if the destination chain is enabled.\n @param _chainId The destination chain ID.\n @return enabled_ True if the destination chain is enabled.\n @return destBridge_ The bridge of the destination chain."},"functionSelector":"8e3881a9","implemented":true,"kind":"function","modifiers":[],"name":"isDestChainEnabled","nameLocation":"15421:18:9","parameters":{"id":3478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3477,"mutability":"mutable","name":"_chainId","nameLocation":"15447:8:9","nodeType":"VariableDeclaration","scope":3503,"src":"15440:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":3476,"name":"uint64","nodeType":"ElementaryTypeName","src":"15440:6:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"15439:17:9"},"returnParameters":{"id":3483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3480,"mutability":"mutable","name":"enabled_","nameLocation":"15507:8:9","nodeType":"VariableDeclaration","scope":3503,"src":"15502:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3479,"name":"bool","nodeType":"ElementaryTypeName","src":"15502:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3482,"mutability":"mutable","name":"destBridge_","nameLocation":"15525:11:9","nodeType":"VariableDeclaration","scope":3503,"src":"15517:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3481,"name":"address","nodeType":"ElementaryTypeName","src":"15517:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15501:36:9"},"scope":4009,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":3533,"nodeType":"FunctionDefinition","src":"15737:225:9","nodes":[],"body":{"id":3532,"nodeType":"Block","src":"15800:162:9","nodes":[],"statements":[{"expression":{"id":3513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3510,"name":"ctx_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3508,"src":"15810:4:9","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_memory_ptr","typeString":"struct IBridge.Context memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":3511,"name":"_loadContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3789,"src":"15817:12:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_Context_$4053_memory_ptr_$","typeString":"function () view returns (struct IBridge.Context memory)"}},"id":3512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15817:14:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_memory_ptr","typeString":"struct IBridge.Context memory"}},"src":"15810:21:9","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_memory_ptr","typeString":"struct IBridge.Context memory"}},"id":3514,"nodeType":"ExpressionStatement","src":"15810:21:9"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3515,"name":"ctx_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3508,"src":"15845:4:9","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_memory_ptr","typeString":"struct IBridge.Context memory"}},"id":3516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15850:7:9","memberName":"msgHash","nodeType":"MemberAccess","referencedDeclaration":4048,"src":"15845:12:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3517,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15861:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15845:17:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3519,"name":"ctx_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3508,"src":"15866:4:9","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_memory_ptr","typeString":"struct IBridge.Context memory"}},"id":3520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15871:7:9","memberName":"msgHash","nodeType":"MemberAccess","referencedDeclaration":4048,"src":"15866:12:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3523,"name":"_PLACEHOLDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"15890:12:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3522,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15882:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":3521,"name":"bytes32","nodeType":"ElementaryTypeName","src":"15882:7:9","typeDescriptions":{}}},"id":3524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15882:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"15866:37:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15845:58:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3531,"nodeType":"IfStatement","src":"15841:115:9","trueBody":{"id":3530,"nodeType":"Block","src":"15905:51:9","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3527,"name":"B_INVALID_CONTEXT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2559,"src":"15926:17:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15926:19:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3529,"nodeType":"RevertStatement","src":"15919:26:9"}]}}]},"baseFunctions":[4128],"documentation":{"id":3504,"nodeType":"StructuredDocumentation","src":"15667:65:9","text":"@notice Gets the current context.\n @inheritdoc IBridge"},"functionSelector":"d0496d6a","implemented":true,"kind":"function","modifiers":[],"name":"context","nameLocation":"15746:7:9","parameters":{"id":3505,"nodeType":"ParameterList","parameters":[],"src":"15753:2:9"},"returnParameters":{"id":3509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3508,"mutability":"mutable","name":"ctx_","nameLocation":"15794:4:9","nodeType":"VariableDeclaration","scope":3533,"src":"15779:19:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_memory_ptr","typeString":"struct IBridge.Context"},"typeName":{"id":3507,"nodeType":"UserDefinedTypeName","pathNode":{"id":3506,"name":"Context","nameLocations":["15779:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4053,"src":"15779:7:9"},"referencedDeclaration":4053,"src":"15779:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_storage_ptr","typeString":"struct IBridge.Context"}},"visibility":"internal"}],"src":"15778:21:9"},"scope":4009,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":3551,"nodeType":"FunctionDefinition","src":"15996:148:9","nodes":[],"body":{"id":3550,"nodeType":"Block","src":"16072:72:9","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"5441494b4f5f4d455353414745","id":3545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"16110:15:9","typeDescriptions":{"typeIdentifier":"t_stringliteral_1a4473b8c75893734d8c6977cd1e546423701f3f5c26bb840c8dbeabf02c3f88","typeString":"literal_string \"TAIKO_MESSAGE\""},"value":"TAIKO_MESSAGE"},{"id":3546,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3537,"src":"16127:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_1a4473b8c75893734d8c6977cd1e546423701f3f5c26bb840c8dbeabf02c3f88","typeString":"literal_string \"TAIKO_MESSAGE\""},{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message memory"}],"expression":{"id":3543,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"16099:3:9","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":3544,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16103:6:9","memberName":"encode","nodeType":"MemberAccess","src":"16099:10:9","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":3547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16099:37:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":3542,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"16089:9:9","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":3548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16089:48:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":3541,"id":3549,"nodeType":"Return","src":"16082:55:9"}]},"baseFunctions":[4152],"documentation":{"id":3534,"nodeType":"StructuredDocumentation","src":"15968:23:9","text":"@inheritdoc IBridge"},"functionSelector":"c012fa77","implemented":true,"kind":"function","modifiers":[],"name":"hashMessage","nameLocation":"16005:11:9","parameters":{"id":3538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3537,"mutability":"mutable","name":"_message","nameLocation":"16032:8:9","nodeType":"VariableDeclaration","scope":3551,"src":"16017:23:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_memory_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":3536,"nodeType":"UserDefinedTypeName","pathNode":{"id":3535,"name":"Message","nameLocations":["16017:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"16017:7:9"},"referencedDeclaration":4046,"src":"16017:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"}],"src":"16016:25:9"},"returnParameters":{"id":3541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3540,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3551,"src":"16063:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3539,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16063:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16062:9:9"},"scope":4009,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":3571,"nodeType":"FunctionDefinition","src":"16325:146:9","nodes":[],"body":{"id":3570,"nodeType":"Block","src":"16405:66:9","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":3568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3559,"name":"_msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3554,"src":"16422:8:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"arguments":[{"arguments":[{"expression":{"id":3564,"name":"Status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"16449:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Status_$4018_$","typeString":"type(enum IBridge.Status)"}},"id":3565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16456:6:9","memberName":"FAILED","nodeType":"MemberAccess","referencedDeclaration":4016,"src":"16449:13:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}],"id":3563,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16441:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3562,"name":"uint256","nodeType":"ElementaryTypeName","src":"16441:7:9","typeDescriptions":{}}},"id":3566,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16441:22:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16433:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":3560,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16433:7:9","typeDescriptions":{}}},"id":3567,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16433:31:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"16422:42:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":3558,"id":3569,"nodeType":"Return","src":"16415:49:9"}]},"documentation":{"id":3552,"nodeType":"StructuredDocumentation","src":"16150:170:9","text":"@notice Returns a signal representing a failed/recalled message.\n @param _msgHash The message hash.\n @return The failed representation of it as bytes32."},"functionSelector":"d1aaa5df","implemented":true,"kind":"function","modifiers":[],"name":"signalForFailedMessage","nameLocation":"16334:22:9","parameters":{"id":3555,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3554,"mutability":"mutable","name":"_msgHash","nameLocation":"16365:8:9","nodeType":"VariableDeclaration","scope":3571,"src":"16357:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3553,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16357:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16356:18:9"},"returnParameters":{"id":3558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3557,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3571,"src":"16396:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3556,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16396:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"16395:9:9"},"scope":4009,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":3586,"nodeType":"FunctionDefinition","src":"16688:150:9","nodes":[],"body":{"id":3585,"nodeType":"Block","src":"16768:70:9","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":3583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3580,"name":"dataLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3574,"src":"16806:10:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3579,"name":"_messageCalldataCost","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3959,"src":"16785:20:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint32_$","typeString":"function (uint256) pure returns (uint32)"}},"id":3581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16785:32:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3582,"name":"GAS_RESERVE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2503,"src":"16820:11:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"16785:46:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":3578,"id":3584,"nodeType":"Return","src":"16778:53:9"}]},"documentation":{"id":3572,"nodeType":"StructuredDocumentation","src":"16477:206:9","text":"@notice Returns the minimal gas limit required for sending a given message.\n @param dataLength The length of message.data.\n @return The minimal gas limit required for sending this message."},"functionSelector":"7cbadfaa","implemented":true,"kind":"function","modifiers":[],"name":"getMessageMinGasLimit","nameLocation":"16697:21:9","parameters":{"id":3575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3574,"mutability":"mutable","name":"dataLength","nameLocation":"16727:10:9","nodeType":"VariableDeclaration","scope":3586,"src":"16719:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3573,"name":"uint256","nodeType":"ElementaryTypeName","src":"16719:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16718:20:9"},"returnParameters":{"id":3578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3577,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3586,"src":"16760:6:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3576,"name":"uint32","nodeType":"ElementaryTypeName","src":"16760:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"16759:8:9"},"scope":4009,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":3684,"nodeType":"FunctionDefinition","src":"17315:949:9","nodes":[],"body":{"id":3683,"nodeType":"Block","src":"17528:736:9","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3602,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3590,"src":"17545:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17554:4:9","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":4031,"src":"17545:13:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":3606,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"17570:4:9","typeDescriptions":{"typeIdentifier":"t_contract$_Bridge_$4009","typeString":"contract Bridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Bridge_$4009","typeString":"contract Bridge"}],"id":3605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17562:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3604,"name":"address","nodeType":"ElementaryTypeName","src":"17562:7:9","typeDescriptions":{}}},"id":3607,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17562:13:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17545:30:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3601,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"17538:6:9","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":3609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17538:38:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3610,"nodeType":"ExpressionStatement","src":"17538:38:9"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3611,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3590,"src":"17591:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17600:5:9","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4043,"src":"17591:14:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17609:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17591:19:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":3615,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3590,"src":"17614:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17623:4:9","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":4045,"src":"17614:13:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":3617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17628:6:9","memberName":"length","nodeType":"MemberAccess","src":"17614:20:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17638:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17614:25:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17591:48:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3623,"nodeType":"IfStatement","src":"17587:65:9","trueBody":{"expression":{"hexValue":"74727565","id":3621,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17648:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3600,"id":3622,"nodeType":"Return","src":"17641:11:9"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3624,"name":"_gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3594,"src":"17667:9:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17680:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17667:14:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3629,"nodeType":"IfStatement","src":"17663:32:9","trueBody":{"expression":{"hexValue":"66616c7365","id":3627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17690:5:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":3600,"id":3628,"nodeType":"Return","src":"17683:12:9"}},{"expression":{"arguments":[{"id":3631,"name":"_msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3592,"src":"17720:8:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":3632,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3590,"src":"17730:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17739:4:9","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":4031,"src":"17730:13:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":3634,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3590,"src":"17745:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17754:10:9","memberName":"srcChainId","nodeType":"MemberAccess","referencedDeclaration":4033,"src":"17745:19:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":3630,"name":"_storeContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3733,"src":"17706:13:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint64_$returns$__$","typeString":"function (bytes32,address,uint64)"}},"id":3636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17706:59:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3637,"nodeType":"ExpressionStatement","src":"17706:59:9"},{"assignments":[3639],"declarations":[{"constant":false,"id":3639,"mutability":"mutable","name":"to","nameLocation":"17784:2:9","nodeType":"VariableDeclaration","scope":3683,"src":"17776:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3638,"name":"address","nodeType":"ElementaryTypeName","src":"17776:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":3642,"initialValue":{"expression":{"id":3640,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3590,"src":"17789:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17798:2:9","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":4041,"src":"17789:11:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"17776:24:9"},{"assignments":[3644],"declarations":[{"constant":false,"id":3644,"mutability":"mutable","name":"value","nameLocation":"17818:5:9","nodeType":"VariableDeclaration","scope":3683,"src":"17810:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3643,"name":"uint256","nodeType":"ElementaryTypeName","src":"17810:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3647,"initialValue":{"expression":{"id":3645,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3590,"src":"17826:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17835:5:9","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":4043,"src":"17826:14:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17810:30:9"},{"assignments":[3649],"declarations":[{"constant":false,"id":3649,"mutability":"mutable","name":"data","nameLocation":"17863:4:9","nodeType":"VariableDeclaration","scope":3683,"src":"17850:17:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":3648,"name":"bytes","nodeType":"ElementaryTypeName","src":"17850:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":3652,"initialValue":{"expression":{"id":3650,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3590,"src":"17870:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17879:4:9","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":4045,"src":"17870:13:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"nodeType":"VariableDeclarationStatement","src":"17850:33:9"},{"assignments":[3654],"declarations":[{"constant":false,"id":3654,"mutability":"mutable","name":"gasLeft","nameLocation":"17901:7:9","nodeType":"VariableDeclaration","scope":3683,"src":"17893:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3653,"name":"uint256","nodeType":"ElementaryTypeName","src":"17893:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3655,"nodeType":"VariableDeclarationStatement","src":"17893:15:9"},{"AST":{"nativeSrc":"17928:127:9","nodeType":"YulBlock","src":"17928:127:9","statements":[{"nativeSrc":"17942:74:9","nodeType":"YulAssignment","src":"17942:74:9","value":{"arguments":[{"name":"_gasLimit","nativeSrc":"17959:9:9","nodeType":"YulIdentifier","src":"17959:9:9"},{"name":"to","nativeSrc":"17970:2:9","nodeType":"YulIdentifier","src":"17970:2:9"},{"name":"value","nativeSrc":"17974:5:9","nodeType":"YulIdentifier","src":"17974:5:9"},{"arguments":[{"name":"data","nativeSrc":"17985:4:9","nodeType":"YulIdentifier","src":"17985:4:9"},{"kind":"number","nativeSrc":"17991:4:9","nodeType":"YulLiteral","src":"17991:4:9","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"17981:3:9","nodeType":"YulIdentifier","src":"17981:3:9"},"nativeSrc":"17981:15:9","nodeType":"YulFunctionCall","src":"17981:15:9"},{"arguments":[{"name":"data","nativeSrc":"18004:4:9","nodeType":"YulIdentifier","src":"18004:4:9"}],"functionName":{"name":"mload","nativeSrc":"17998:5:9","nodeType":"YulIdentifier","src":"17998:5:9"},"nativeSrc":"17998:11:9","nodeType":"YulFunctionCall","src":"17998:11:9"},{"kind":"number","nativeSrc":"18011:1:9","nodeType":"YulLiteral","src":"18011:1:9","type":"","value":"0"},{"kind":"number","nativeSrc":"18014:1:9","nodeType":"YulLiteral","src":"18014:1:9","type":"","value":"0"}],"functionName":{"name":"call","nativeSrc":"17954:4:9","nodeType":"YulIdentifier","src":"17954:4:9"},"nativeSrc":"17954:62:9","nodeType":"YulFunctionCall","src":"17954:62:9"},"variableNames":[{"name":"success_","nativeSrc":"17942:8:9","nodeType":"YulIdentifier","src":"17942:8:9"}]},{"nativeSrc":"18029:16:9","nodeType":"YulAssignment","src":"18029:16:9","value":{"arguments":[],"functionName":{"name":"gas","nativeSrc":"18040:3:9","nodeType":"YulIdentifier","src":"18040:3:9"},"nativeSrc":"18040:5:9","nodeType":"YulFunctionCall","src":"18040:5:9"},"variableNames":[{"name":"gasLeft","nativeSrc":"18029:7:9","nodeType":"YulIdentifier","src":"18029:7:9"}]}]},"evmVersion":"shanghai","externalReferences":[{"declaration":3594,"isOffset":false,"isSlot":false,"src":"17959:9:9","valueSize":1},{"declaration":3649,"isOffset":false,"isSlot":false,"src":"17985:4:9","valueSize":1},{"declaration":3649,"isOffset":false,"isSlot":false,"src":"18004:4:9","valueSize":1},{"declaration":3654,"isOffset":false,"isSlot":false,"src":"18029:7:9","valueSize":1},{"declaration":3599,"isOffset":false,"isSlot":false,"src":"17942:8:9","valueSize":1},{"declaration":3639,"isOffset":false,"isSlot":false,"src":"17970:2:9","valueSize":1},{"declaration":3644,"isOffset":false,"isSlot":false,"src":"17974:5:9","valueSize":1}],"id":3656,"nodeType":"InlineAssembly","src":"17919:136:9"},{"condition":{"id":3657,"name":"_shouldCheckForwardedGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3596,"src":"18069:24:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3664,"nodeType":"IfStatement","src":"18065:93:9","trueBody":{"id":3663,"nodeType":"Block","src":"18095:63:9","statements":[{"expression":{"arguments":[{"id":3659,"name":"gasLeft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3654,"src":"18128:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":3660,"name":"_gasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3594,"src":"18137:9:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3658,"name":"_checkForwardedGas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3976,"src":"18109:18:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":3661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18109:38:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3662,"nodeType":"ExpressionStatement","src":"18109:38:9"}]}},{"expression":{"arguments":[{"arguments":[{"id":3668,"name":"_PLACEHOLDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"18189:12:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3667,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18181:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":3666,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18181:7:9","typeDescriptions":{}}},"id":3669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18181:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"arguments":[{"id":3674,"name":"_PLACEHOLDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"18220:12:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3673,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18212:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":3672,"name":"uint160","nodeType":"ElementaryTypeName","src":"18212:7:9","typeDescriptions":{}}},"id":3675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18212:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":3671,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18204:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3670,"name":"address","nodeType":"ElementaryTypeName","src":"18204:7:9","typeDescriptions":{}}},"id":3676,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18204:30:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":3679,"name":"_PLACEHOLDER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2527,"src":"18243:12:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3678,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18236:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":3677,"name":"uint64","nodeType":"ElementaryTypeName","src":"18236:6:9","typeDescriptions":{}}},"id":3680,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18236:20:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":3665,"name":"_storeContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3733,"src":"18167:13:9","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint64_$returns$__$","typeString":"function (bytes32,address,uint64)"}},"id":3681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18167:90:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3682,"nodeType":"ExpressionStatement","src":"18167:90:9"}]},"documentation":{"id":3587,"nodeType":"StructuredDocumentation","src":"16844:466:9","text":"@notice Invokes a call message on the Bridge.\n @param _message The call message to be invoked.\n @param _msgHash The hash of the message.\n @param _shouldCheckForwardedGas True to check gasleft is sufficient for target function\n invocation.\n @return success_ A boolean value indicating whether the message call was successful.\n @dev This function updates the context in the state before and after the\n message call."},"implemented":true,"kind":"function","modifiers":[],"name":"_invokeMessageCall","nameLocation":"17324:18:9","parameters":{"id":3597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3590,"mutability":"mutable","name":"_message","nameLocation":"17369:8:9","nodeType":"VariableDeclaration","scope":3684,"src":"17352:25:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":3589,"nodeType":"UserDefinedTypeName","pathNode":{"id":3588,"name":"Message","nameLocations":["17352:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"17352:7:9"},"referencedDeclaration":4046,"src":"17352:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"},{"constant":false,"id":3592,"mutability":"mutable","name":"_msgHash","nameLocation":"17395:8:9","nodeType":"VariableDeclaration","scope":3684,"src":"17387:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3591,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17387:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3594,"mutability":"mutable","name":"_gasLimit","nameLocation":"17421:9:9","nodeType":"VariableDeclaration","scope":3684,"src":"17413:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3593,"name":"uint256","nodeType":"ElementaryTypeName","src":"17413:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3596,"mutability":"mutable","name":"_shouldCheckForwardedGas","nameLocation":"17445:24:9","nodeType":"VariableDeclaration","scope":3684,"src":"17440:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3595,"name":"bool","nodeType":"ElementaryTypeName","src":"17440:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17342:133:9"},"returnParameters":{"id":3600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3599,"mutability":"mutable","name":"success_","nameLocation":"17514:8:9","nodeType":"VariableDeclaration","scope":3684,"src":"17509:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3598,"name":"bool","nodeType":"ElementaryTypeName","src":"17509:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17508:15:9"},"scope":4009,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":3714,"nodeType":"FunctionDefinition","src":"18568:251:9","nodes":[],"body":{"id":3713,"nodeType":"Block","src":"18640:179:9","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"},"id":3697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3693,"name":"messageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2541,"src":"18654:13:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_Status_$4018_$","typeString":"mapping(bytes32 => enum IBridge.Status)"}},"id":3695,"indexExpression":{"id":3694,"name":"_msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"18668:8:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18654:23:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":3696,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3690,"src":"18681:7:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"src":"18654:34:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3701,"nodeType":"IfStatement","src":"18650:65:9","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3698,"name":"B_INVALID_STATUS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2565,"src":"18697:16:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18697:18:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3700,"nodeType":"RevertStatement","src":"18690:25:9"}},{"expression":{"id":3706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":3702,"name":"messageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2541,"src":"18725:13:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_Status_$4018_$","typeString":"mapping(bytes32 => enum IBridge.Status)"}},"id":3704,"indexExpression":{"id":3703,"name":"_msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"18739:8:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18725:23:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3705,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3690,"src":"18751:7:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"src":"18725:33:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"id":3707,"nodeType":"ExpressionStatement","src":"18725:33:9"},{"eventCall":{"arguments":[{"id":3709,"name":"_msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3687,"src":"18794:8:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3710,"name":"_status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3690,"src":"18804:7:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}],"id":3708,"name":"MessageStatusChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4069,"src":"18773:20:9","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_enum$_Status_$4018_$returns$__$","typeString":"function (bytes32,enum IBridge.Status)"}},"id":3711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18773:39:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3712,"nodeType":"EmitStatement","src":"18768:44:9"}]},"documentation":{"id":3685,"nodeType":"StructuredDocumentation","src":"18270:293:9","text":"@notice Updates the status of a bridge message.\n @dev If the new status is different from the current status in the\n mapping, the status is updated and an event is emitted.\n @param _msgHash The hash of the message.\n @param _status The new status of the message."},"implemented":true,"kind":"function","modifiers":[],"name":"_updateMessageStatus","nameLocation":"18577:20:9","parameters":{"id":3691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3687,"mutability":"mutable","name":"_msgHash","nameLocation":"18606:8:9","nodeType":"VariableDeclaration","scope":3714,"src":"18598:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3686,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18598:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3690,"mutability":"mutable","name":"_status","nameLocation":"18623:7:9","nodeType":"VariableDeclaration","scope":3714,"src":"18616:14:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"},"typeName":{"id":3689,"nodeType":"UserDefinedTypeName","pathNode":{"id":3688,"name":"Status","nameLocations":["18616:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":4018,"src":"18616:6:9"},"referencedDeclaration":4018,"src":"18616:6:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"visibility":"internal"}],"src":"18597:34:9"},"returnParameters":{"id":3692,"nodeType":"ParameterList","parameters":[],"src":"18640:0:9"},"scope":4009,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":3733,"nodeType":"FunctionDefinition","src":"18998:155:9","nodes":[],"body":{"id":3732,"nodeType":"Block","src":"19091:62:9","nodes":[],"statements":[{"expression":{"id":3730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3724,"name":"__ctx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"19101:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_storage","typeString":"struct IBridge.Context storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3726,"name":"_msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3717,"src":"19117:8:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3727,"name":"_from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3719,"src":"19127:5:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3728,"name":"_srcChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3721,"src":"19134:11:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint64","typeString":"uint64"}],"id":3725,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4053,"src":"19109:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_Context_$4053_storage_ptr_$","typeString":"type(struct IBridge.Context storage pointer)"}},"id":3729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19109:37:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_memory_ptr","typeString":"struct IBridge.Context memory"}},"src":"19101:45:9","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_storage","typeString":"struct IBridge.Context storage ref"}},"id":3731,"nodeType":"ExpressionStatement","src":"19101:45:9"}]},"documentation":{"id":3715,"nodeType":"StructuredDocumentation","src":"18825:168:9","text":"@notice Stores the call context\n @param _msgHash The message hash.\n @param _from The sender's address.\n @param _srcChainId The source chain ID."},"implemented":true,"kind":"function","modifiers":[],"name":"_storeContext","nameLocation":"19007:13:9","parameters":{"id":3722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3717,"mutability":"mutable","name":"_msgHash","nameLocation":"19029:8:9","nodeType":"VariableDeclaration","scope":3733,"src":"19021:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3716,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19021:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3719,"mutability":"mutable","name":"_from","nameLocation":"19047:5:9","nodeType":"VariableDeclaration","scope":3733,"src":"19039:13:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3718,"name":"address","nodeType":"ElementaryTypeName","src":"19039:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3721,"mutability":"mutable","name":"_srcChainId","nameLocation":"19061:11:9","nodeType":"VariableDeclaration","scope":3733,"src":"19054:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":3720,"name":"uint64","nodeType":"ElementaryTypeName","src":"19054:6:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"19020:53:9"},"returnParameters":{"id":3723,"nodeType":"ParameterList","parameters":[],"src":"19091:0:9"},"scope":4009,"stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"id":3779,"nodeType":"FunctionDefinition","src":"19512:536:9","nodes":[],"body":{"id":3778,"nodeType":"Block","src":"19726:322:9","nodes":[],"statements":[{"clauses":[{"block":{"id":3770,"nodeType":"Block","src":"19921:59:9","statements":[{"expression":{"id":3768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3763,"name":"numCacheOps_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3746,"src":"19935:12:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3766,"name":"numCacheOps","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3761,"src":"19957:11:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3765,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19950:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":3764,"name":"uint32","nodeType":"ElementaryTypeName","src":"19950:6:9","typeDescriptions":{}}},"id":3767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19950:19:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"19935:34:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":3769,"nodeType":"ExpressionStatement","src":"19935:34:9"}]},"errorName":"","id":3771,"nodeType":"TryCatchClause","parameters":{"id":3762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3761,"mutability":"mutable","name":"numCacheOps","nameLocation":"19899:11:9","nodeType":"VariableDeclaration","scope":3771,"src":"19891:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3760,"name":"uint256","nodeType":"ElementaryTypeName","src":"19891:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19877:43:9"},"src":"19869:111:9"},{"block":{"id":3775,"nodeType":"Block","src":"19987:55:9","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3772,"name":"B_SIGNAL_NOT_RECEIVED","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2579,"src":"20008:21:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20008:23:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3774,"nodeType":"RevertStatement","src":"20001:30:9"}]},"errorName":"","id":3776,"nodeType":"TryCatchClause","src":"19981:61:9"}],"externalCall":{"arguments":[{"id":3750,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3741,"src":"19788:8:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"arguments":[{"id":3752,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3741,"src":"19806:8:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":3753,"name":"LibNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5845,"src":"19816:8:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibNames_$5845_$","typeString":"type(library LibNames)"}},"id":3754,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19825:8:9","memberName":"B_BRIDGE","nodeType":"MemberAccess","referencedDeclaration":5796,"src":"19816:17:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"66616c7365","id":3755,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19835:5:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3751,"name":"resolve","nodeType":"Identifier","overloadedDeclarations":[4899,4921],"referencedDeclaration":4899,"src":"19798:7:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint64_$_t_bytes32_$_t_bool_$returns$_t_address_$","typeString":"function (uint64,bytes32,bool) view returns (address)"}},"id":3756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19798:43:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3757,"name":"_signal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3739,"src":"19843:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3758,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3743,"src":"19852:6:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":3748,"name":"_signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3737,"src":"19740:14:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"id":3749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19755:19:9","memberName":"proveSignalReceived","nodeType":"MemberAccess","referencedDeclaration":6246,"src":"19740:34:9","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint64_$_t_address_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint64,address,bytes32,bytes memory) external returns (uint256)"}},"id":3759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19740:128:9","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3777,"nodeType":"TryStatement","src":"19736:306:9"}]},"documentation":{"id":3734,"nodeType":"StructuredDocumentation","src":"19159:348:9","text":"@notice Checks if the signal was received and caches cross-chain data if requested.\n @param _signalService The signal service address.\n @param _signal The signal.\n @param _chainId The ID of the chain the signal is stored on.\n @param _proof The merkle inclusion proof.\n @return numCacheOps_ Num of cached items"},"implemented":true,"kind":"function","modifiers":[],"name":"_proveSignalReceived","nameLocation":"19521:20:9","parameters":{"id":3744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3737,"mutability":"mutable","name":"_signalService","nameLocation":"19566:14:9","nodeType":"VariableDeclaration","scope":3779,"src":"19551:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"},"typeName":{"id":3736,"nodeType":"UserDefinedTypeName","pathNode":{"id":3735,"name":"ISignalService","nameLocations":["19551:14:9"],"nodeType":"IdentifierPath","referencedDeclaration":6277,"src":"19551:14:9"},"referencedDeclaration":6277,"src":"19551:14:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"visibility":"internal"},{"constant":false,"id":3739,"mutability":"mutable","name":"_signal","nameLocation":"19598:7:9","nodeType":"VariableDeclaration","scope":3779,"src":"19590:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3738,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19590:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3741,"mutability":"mutable","name":"_chainId","nameLocation":"19622:8:9","nodeType":"VariableDeclaration","scope":3779,"src":"19615:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":3740,"name":"uint64","nodeType":"ElementaryTypeName","src":"19615:6:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":3743,"mutability":"mutable","name":"_proof","nameLocation":"19655:6:9","nodeType":"VariableDeclaration","scope":3779,"src":"19640:21:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3742,"name":"bytes","nodeType":"ElementaryTypeName","src":"19640:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19541:126:9"},"returnParameters":{"id":3747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3746,"mutability":"mutable","name":"numCacheOps_","nameLocation":"19708:12:9","nodeType":"VariableDeclaration","scope":3779,"src":"19701:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3745,"name":"uint32","nodeType":"ElementaryTypeName","src":"19701:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"19700:21:9"},"scope":4009,"stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"id":3789,"nodeType":"FunctionDefinition","src":"20145:100:9","nodes":[],"body":{"id":3788,"nodeType":"Block","src":"20216:29:9","nodes":[],"statements":[{"expression":{"id":3786,"name":"__ctx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2545,"src":"20233:5:9","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_storage","typeString":"struct IBridge.Context storage ref"}},"functionReturnParameters":3785,"id":3787,"nodeType":"Return","src":"20226:12:9"}]},"documentation":{"id":3780,"nodeType":"StructuredDocumentation","src":"20054:86:9","text":"@notice Loads and returns the call context.\n @return ctx_ The call context."},"implemented":true,"kind":"function","modifiers":[],"name":"_loadContext","nameLocation":"20154:12:9","parameters":{"id":3781,"nodeType":"ParameterList","parameters":[],"src":"20166:2:9"},"returnParameters":{"id":3785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3784,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3789,"src":"20200:14:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_memory_ptr","typeString":"struct IBridge.Context"},"typeName":{"id":3783,"nodeType":"UserDefinedTypeName","pathNode":{"id":3782,"name":"Context","nameLocations":["20200:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4053,"src":"20200:7:9"},"referencedDeclaration":4053,"src":"20200:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Context_$4053_storage_ptr","typeString":"struct IBridge.Context"}},"visibility":"internal"}],"src":"20199:16:9"},"scope":4009,"stateMutability":"view","virtual":true,"visibility":"internal"},{"id":3826,"nodeType":"FunctionDefinition","src":"20628:439:9","nodes":[],"body":{"id":3825,"nodeType":"Block","src":"20837:230:9","nodes":[],"statements":[{"clauses":[{"block":{"id":3818,"nodeType":"Block","src":"20981:36:9","statements":[{"expression":{"hexValue":"74727565","id":3816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21002:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3803,"id":3817,"nodeType":"Return","src":"20995:11:9"}]},"errorName":"","id":3819,"nodeType":"TryCatchClause","src":"20981:36:9"},{"block":{"id":3822,"nodeType":"Block","src":"21024:37:9","statements":[{"expression":{"hexValue":"66616c7365","id":3820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21045:5:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":3803,"id":3821,"nodeType":"Return","src":"21038:12:9"}]},"errorName":"","id":3823,"nodeType":"TryCatchClause","src":"21018:43:9"}],"externalCall":{"arguments":[{"id":3806,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3797,"src":"20900:8:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"arguments":[{"id":3808,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3797,"src":"20918:8:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":3809,"name":"LibNames","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5845,"src":"20928:8:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LibNames_$5845_$","typeString":"type(library LibNames)"}},"id":3810,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20937:8:9","memberName":"B_BRIDGE","nodeType":"MemberAccess","referencedDeclaration":5796,"src":"20928:17:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"hexValue":"66616c7365","id":3811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20947:5:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":3807,"name":"resolve","nodeType":"Identifier","overloadedDeclarations":[4899,4921],"referencedDeclaration":4899,"src":"20910:7:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint64_$_t_bytes32_$_t_bool_$returns$_t_address_$","typeString":"function (uint64,bytes32,bool) view returns (address)"}},"id":3812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20910:43:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":3813,"name":"_signal","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3795,"src":"20955:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":3814,"name":"_proof","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3799,"src":"20964:6:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":3804,"name":"_signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3793,"src":"20851:14:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"id":3805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20866:20:9","memberName":"verifySignalReceived","nodeType":"MemberAccess","referencedDeclaration":6258,"src":"20851:35:9","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint64_$_t_address_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (uint64,address,bytes32,bytes memory) view external"}},"id":3815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20851:129:9","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":3824,"nodeType":"TryStatement","src":"20847:214:9"}]},"documentation":{"id":3790,"nodeType":"StructuredDocumentation","src":"20251:372:9","text":"@notice Checks if the signal was received.\n This is the 'readonly' version of _proveSignalReceived.\n @param _signalService The signal service address.\n @param _signal The signal.\n @param _chainId The ID of the chain the signal is stored on.\n @param _proof The merkle inclusion proof.\n @return true if the message was received."},"implemented":true,"kind":"function","modifiers":[],"name":"_isSignalReceived","nameLocation":"20637:17:9","parameters":{"id":3800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3793,"mutability":"mutable","name":"_signalService","nameLocation":"20679:14:9","nodeType":"VariableDeclaration","scope":3826,"src":"20664:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"},"typeName":{"id":3792,"nodeType":"UserDefinedTypeName","pathNode":{"id":3791,"name":"ISignalService","nameLocations":["20664:14:9"],"nodeType":"IdentifierPath","referencedDeclaration":6277,"src":"20664:14:9"},"referencedDeclaration":6277,"src":"20664:14:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"visibility":"internal"},{"constant":false,"id":3795,"mutability":"mutable","name":"_signal","nameLocation":"20711:7:9","nodeType":"VariableDeclaration","scope":3826,"src":"20703:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3794,"name":"bytes32","nodeType":"ElementaryTypeName","src":"20703:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3797,"mutability":"mutable","name":"_chainId","nameLocation":"20735:8:9","nodeType":"VariableDeclaration","scope":3826,"src":"20728:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":3796,"name":"uint64","nodeType":"ElementaryTypeName","src":"20728:6:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":3799,"mutability":"mutable","name":"_proof","nameLocation":"20768:6:9","nodeType":"VariableDeclaration","scope":3826,"src":"20753:21:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3798,"name":"bytes","nodeType":"ElementaryTypeName","src":"20753:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"20654:126:9"},"returnParameters":{"id":3803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3802,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3826,"src":"20827:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3801,"name":"bool","nodeType":"ElementaryTypeName","src":"20827:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20826:6:9"},"scope":4009,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":3844,"nodeType":"FunctionDefinition","src":"21073:167:9","nodes":[],"body":{"id":3843,"nodeType":"Block","src":"21150:90:9","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"},"id":3838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":3834,"name":"messageStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2541,"src":"21164:13:9","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_enum$_Status_$4018_$","typeString":"mapping(bytes32 => enum IBridge.Status)"}},"id":3836,"indexExpression":{"id":3835,"name":"_msgHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3828,"src":"21178:8:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21164:23:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":3837,"name":"_expectedStatus","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3831,"src":"21191:15:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"src":"21164:42:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3842,"nodeType":"IfStatement","src":"21160:73:9","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3839,"name":"B_INVALID_STATUS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2565,"src":"21215:16:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21215:18:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3841,"nodeType":"RevertStatement","src":"21208:25:9"}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_checkStatus","nameLocation":"21082:12:9","parameters":{"id":3832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3828,"mutability":"mutable","name":"_msgHash","nameLocation":"21103:8:9","nodeType":"VariableDeclaration","scope":3844,"src":"21095:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3827,"name":"bytes32","nodeType":"ElementaryTypeName","src":"21095:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":3831,"mutability":"mutable","name":"_expectedStatus","nameLocation":"21120:15:9","nodeType":"VariableDeclaration","scope":3844,"src":"21113:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"},"typeName":{"id":3830,"nodeType":"UserDefinedTypeName","pathNode":{"id":3829,"name":"Status","nameLocations":["21113:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":4018,"src":"21113:6:9"},"referencedDeclaration":4018,"src":"21113:6:9","typeDescriptions":{"typeIdentifier":"t_enum$_Status_$4018","typeString":"enum IBridge.Status"}},"visibility":"internal"}],"src":"21094:42:9"},"returnParameters":{"id":3833,"nodeType":"ParameterList","parameters":[],"src":"21150:0:9"},"scope":4009,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":3907,"nodeType":"FunctionDefinition","src":"21246:521:9","nodes":[],"body":{"id":3906,"nodeType":"Block","src":"21418:349:9","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3855,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3847,"src":"21432:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21441:2:9","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":4041,"src":"21432:11:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":3859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21455:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":3858,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21447:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3857,"name":"address","nodeType":"ElementaryTypeName","src":"21447:7:9","typeDescriptions":{}}},"id":3860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21447:10:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21432:25:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3864,"nodeType":"IfStatement","src":"21428:42:9","trueBody":{"expression":{"hexValue":"74727565","id":3862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21466:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3854,"id":3863,"nodeType":"Return","src":"21459:11:9"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3865,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3847,"src":"21484:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21493:2:9","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":4041,"src":"21484:11:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3869,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"21507:4:9","typeDescriptions":{"typeIdentifier":"t_contract$_Bridge_$4009","typeString":"contract Bridge"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Bridge_$4009","typeString":"contract Bridge"}],"id":3868,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21499:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3867,"name":"address","nodeType":"ElementaryTypeName","src":"21499:7:9","typeDescriptions":{}}},"id":3870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21499:13:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21484:28:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3874,"nodeType":"IfStatement","src":"21480:45:9","trueBody":{"expression":{"hexValue":"74727565","id":3872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21521:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3854,"id":3873,"nodeType":"Return","src":"21514:11:9"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":3881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":3875,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3847,"src":"21539:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21548:2:9","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":4041,"src":"21539:11:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":3879,"name":"_signalService","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3850,"src":"21562:14:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}],"id":3878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21554:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":3877,"name":"address","nodeType":"ElementaryTypeName","src":"21554:7:9","typeDescriptions":{}}},"id":3880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21554:23:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21539:38:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3884,"nodeType":"IfStatement","src":"21535:55:9","trueBody":{"expression":{"hexValue":"74727565","id":3882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21586:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":3854,"id":3883,"nodeType":"Return","src":"21579:11:9"}},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":3885,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3847,"src":"21608:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21617:4:9","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":4045,"src":"21608:13:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":3887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21622:6:9","memberName":"length","nodeType":"MemberAccess","src":"21608:20:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"34","id":3888,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21632:1:9","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"21608:25:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":3898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":3892,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3847,"src":"21656:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21665:4:9","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":4045,"src":"21656:13:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":3891,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21649:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes4_$","typeString":"type(bytes4)"},"typeName":{"id":3890,"name":"bytes4","nodeType":"ElementaryTypeName","src":"21649:6:9","typeDescriptions":{}}},"id":3894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21649:21:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"expression":{"id":3895,"name":"IMessageInvocable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4172,"src":"21674:17:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IMessageInvocable_$4172_$","typeString":"type(contract IMessageInvocable)"}},"id":3896,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"21692:19:9","memberName":"onMessageInvocation","nodeType":"MemberAccess","referencedDeclaration":4171,"src":"21674:37:9","typeDescriptions":{"typeIdentifier":"t_function_declaration_payable$_t_bytes_calldata_ptr_$returns$__$","typeString":"function IMessageInvocable.onMessageInvocation(bytes calldata) payable"}},"id":3897,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"21712:8:9","memberName":"selector","nodeType":"MemberAccess","src":"21674:46:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"21649:71:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"21608:112:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":3900,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3847,"src":"21736:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21745:2:9","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":4041,"src":"21736:11:9","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":3902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21748:10:9","memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":22454,"src":"21736:22:9","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$attached_to$_t_address_$","typeString":"function (address) view returns (bool)"}},"id":3903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21736:24:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"21608:152:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":3854,"id":3905,"nodeType":"Return","src":"21601:159:9"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_unableToInvokeMessageCall","nameLocation":"21255:26:9","parameters":{"id":3851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3847,"mutability":"mutable","name":"_message","nameLocation":"21308:8:9","nodeType":"VariableDeclaration","scope":3907,"src":"21291:25:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":3846,"nodeType":"UserDefinedTypeName","pathNode":{"id":3845,"name":"Message","nameLocations":["21291:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"21291:7:9"},"referencedDeclaration":4046,"src":"21291:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"},{"constant":false,"id":3850,"mutability":"mutable","name":"_signalService","nameLocation":"21341:14:9","nodeType":"VariableDeclaration","scope":3907,"src":"21326:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"},"typeName":{"id":3849,"nodeType":"UserDefinedTypeName","pathNode":{"id":3848,"name":"ISignalService","nameLocations":["21326:14:9"],"nodeType":"IdentifierPath","referencedDeclaration":6277,"src":"21326:14:9"},"referencedDeclaration":6277,"src":"21326:14:9","typeDescriptions":{"typeIdentifier":"t_contract$_ISignalService_$6277","typeString":"contract ISignalService"}},"visibility":"internal"}],"src":"21281:80:9"},"returnParameters":{"id":3854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3853,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3907,"src":"21408:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3852,"name":"bool","nodeType":"ElementaryTypeName","src":"21408:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21407:6:9"},"scope":4009,"stateMutability":"view","virtual":false,"visibility":"private"},{"id":3933,"nodeType":"FunctionDefinition","src":"21773:277:9","nodes":[],"body":{"id":3932,"nodeType":"Block","src":"21860:190:9","nodes":[],"statements":[{"assignments":[3916],"declarations":[{"constant":false,"id":3916,"mutability":"mutable","name":"minGasRequired","nameLocation":"21878:14:9","nodeType":"VariableDeclaration","scope":3932,"src":"21870:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3915,"name":"uint256","nodeType":"ElementaryTypeName","src":"21870:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":3922,"initialValue":{"arguments":[{"expression":{"expression":{"id":3918,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3910,"src":"21917:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21926:4:9","memberName":"data","nodeType":"MemberAccess","referencedDeclaration":4045,"src":"21917:13:9","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"id":3920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21931:6:9","memberName":"length","nodeType":"MemberAccess","src":"21917:20:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3917,"name":"getMessageMinGasLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3586,"src":"21895:21:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint32_$","typeString":"function (uint256) pure returns (uint32)"}},"id":3921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21895:43:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"21870:68:9"},{"id":3931,"nodeType":"UncheckedBlock","src":"21948:96:9","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":3925,"name":"_message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3910,"src":"21998:8:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message calldata"}},"id":3926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22007:8:9","memberName":"gasLimit","nodeType":"MemberAccess","referencedDeclaration":4029,"src":"21998:17:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":3923,"name":"minGasRequired","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3916,"src":"21979:14:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21994:3:9","memberName":"max","nodeType":"MemberAccess","referencedDeclaration":5766,"src":"21979:18:9","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":3927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21979:37:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3928,"name":"minGasRequired","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3916,"src":"22019:14:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21979:54:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3914,"id":3930,"nodeType":"Return","src":"21972:61:9"}]}]},"implemented":true,"kind":"function","modifiers":[],"name":"_invocationGasLimit","nameLocation":"21782:19:9","parameters":{"id":3911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3910,"mutability":"mutable","name":"_message","nameLocation":"21819:8:9","nodeType":"VariableDeclaration","scope":3933,"src":"21802:25:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_calldata_ptr","typeString":"struct IBridge.Message"},"typeName":{"id":3909,"nodeType":"UserDefinedTypeName","pathNode":{"id":3908,"name":"Message","nameLocations":["21802:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4046,"src":"21802:7:9"},"referencedDeclaration":4046,"src":"21802:7:9","typeDescriptions":{"typeIdentifier":"t_struct$_Message_$4046_storage_ptr","typeString":"struct IBridge.Message"}},"visibility":"internal"}],"src":"21801:27:9"},"returnParameters":{"id":3914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3913,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3933,"src":"21851:7:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3912,"name":"uint256","nodeType":"ElementaryTypeName","src":"21851:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21850:9:9"},"scope":4009,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":3959,"nodeType":"FunctionDefinition","src":"22056:604:9","nodes":[],"body":{"id":3958,"nodeType":"Block","src":"22136:524:9","nodes":[],"statements":[{"id":3957,"nodeType":"UncheckedBlock","src":"22564:90:9","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3942,"name":"dataLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3935,"src":"22604:10:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"3331","id":3943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22617:2:9","typeDescriptions":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"},"value":"31"},"src":"22604:15:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3945,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22603:17:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3332","id":3946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22623:2:9","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"22603:22:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"3332","id":3948,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22628:2:9","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"22603:27:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"343136","id":3950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22633:3:9","typeDescriptions":{"typeIdentifier":"t_rational_416_by_1","typeString":"int_const 416"},"value":"416"},"src":"22603:33:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":3952,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22602:35:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"34","id":3953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22641:1:9","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"22602:40:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22595:6:9","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":3940,"name":"uint32","nodeType":"ElementaryTypeName","src":"22595:6:9","typeDescriptions":{}}},"id":3955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22595:48:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":3939,"id":3956,"nodeType":"Return","src":"22588:55:9"}]}]},"implemented":true,"kind":"function","modifiers":[],"name":"_messageCalldataCost","nameLocation":"22065:20:9","parameters":{"id":3936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3935,"mutability":"mutable","name":"dataLength","nameLocation":"22094:10:9","nodeType":"VariableDeclaration","scope":3959,"src":"22086:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3934,"name":"uint256","nodeType":"ElementaryTypeName","src":"22086:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22085:20:9"},"returnParameters":{"id":3939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3938,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3959,"src":"22128:6:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3937,"name":"uint32","nodeType":"ElementaryTypeName","src":"22128:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"22127:8:9"},"scope":4009,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":3976,"nodeType":"FunctionDefinition","src":"23684:2292:9","nodes":[],"body":{"id":3975,"nodeType":"Block","src":"23766:2210:9","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3967,"name":"_gasLeft","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3962,"src":"25501:8:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3968,"name":"_gasRequested","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3964,"src":"25512:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3633","id":3969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25528:2:9","typeDescriptions":{"typeIdentifier":"t_rational_63_by_1","typeString":"int_const 63"},"value":"63"},"src":"25512:18:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25501:29:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3974,"nodeType":"IfStatement","src":"25497:473:9","trueBody":{"id":3973,"nodeType":"Block","src":"25532:438:9","statements":[{"AST":{"nativeSrc":"25919:41:9","nodeType":"YulBlock","src":"25919:41:9","statements":[{"expression":{"arguments":[],"functionName":{"name":"invalid","nativeSrc":"25937:7:9","nodeType":"YulIdentifier","src":"25937:7:9"},"nativeSrc":"25937:9:9","nodeType":"YulFunctionCall","src":"25937:9:9"},"nativeSrc":"25937:9:9","nodeType":"YulExpressionStatement","src":"25937:9:9"}]},"evmVersion":"shanghai","externalReferences":[],"id":3972,"nodeType":"InlineAssembly","src":"25910:50:9"}]}}]},"documentation":{"id":3960,"nodeType":"StructuredDocumentation","src":"22834:845:9","text":"@dev Suggested by OpenZeppelin and copied from\n https://github.com/OpenZeppelin/openzeppelin-contracts/\n blob/83c7e45092dac350b070c421cd2bf7105616cf1a/contracts/\n metatx/ERC2771Forwarder.sol#L327C1-L370C6\n @dev Checks if the requested gas was correctly forwarded to the callee.\n As a consequence of https://eips.ethereum.org/EIPS/eip-150[EIP-150]:\n - At most `gasleft() - floor(gasleft() / 64)` is forwarded to the callee.\n - At least `floor(gasleft() / 64)` is kept in the caller.\n It reverts consuming all the available gas if the forwarded gas is not the requested gas.\n IMPORTANT: The `gasLeft` parameter should be measured exactly at the end of the forwarded\n call.\n Any gas consumed in between will make room for bypassing this check."},"implemented":true,"kind":"function","modifiers":[],"name":"_checkForwardedGas","nameLocation":"23693:18:9","parameters":{"id":3965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3962,"mutability":"mutable","name":"_gasLeft","nameLocation":"23720:8:9","nodeType":"VariableDeclaration","scope":3976,"src":"23712:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3961,"name":"uint256","nodeType":"ElementaryTypeName","src":"23712:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3964,"mutability":"mutable","name":"_gasRequested","nameLocation":"23738:13:9","nodeType":"VariableDeclaration","scope":3976,"src":"23730:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3963,"name":"uint256","nodeType":"ElementaryTypeName","src":"23730:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23711:41:9"},"returnParameters":{"id":3966,"nodeType":"ParameterList","parameters":[],"src":"23766:0:9"},"scope":4009,"stateMutability":"pure","virtual":false,"visibility":"private"},{"id":3990,"nodeType":"FunctionDefinition","src":"25982:130:9","nodes":[],"body":{"id":3989,"nodeType":"Block","src":"26038:74:9","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3981,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3978,"src":"26052:8:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":3982,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"26064:5:9","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":3983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26070:7:9","memberName":"chainid","nodeType":"MemberAccess","src":"26064:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26052:25:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3988,"nodeType":"IfStatement","src":"26048:57:9","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3985,"name":"B_INVALID_CHAINID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2557,"src":"26086:17:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26086:19:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3987,"nodeType":"RevertStatement","src":"26079:26:9"}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_checkSameChain","nameLocation":"25991:15:9","parameters":{"id":3979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3978,"mutability":"mutable","name":"_chainId","nameLocation":"26014:8:9","nodeType":"VariableDeclaration","scope":3990,"src":"26007:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":3977,"name":"uint64","nodeType":"ElementaryTypeName","src":"26007:6:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"26006:17:9"},"returnParameters":{"id":3980,"nodeType":"ParameterList","parameters":[],"src":"26038:0:9"},"scope":4009,"stateMutability":"view","virtual":false,"visibility":"internal"},{"id":4008,"nodeType":"FunctionDefinition","src":"26118:147:9","nodes":[],"body":{"id":4007,"nodeType":"Block","src":"26174:91:9","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint64","typeString":"uint64"},"id":3997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3995,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"26188:8:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26200:1:9","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26188:13:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3998,"name":"_chainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"26205:8:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":3999,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"26217:5:9","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":4000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26223:7:9","memberName":"chainid","nodeType":"MemberAccess","src":"26217:13:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26205:25:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"26188:42:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4006,"nodeType":"IfStatement","src":"26184:74:9","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4003,"name":"B_INVALID_CHAINID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2557,"src":"26239:17:9","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26239:19:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4005,"nodeType":"RevertStatement","src":"26232:26:9"}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_checkDiffChain","nameLocation":"26127:15:9","parameters":{"id":3993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3992,"mutability":"mutable","name":"_chainId","nameLocation":"26150:8:9","nodeType":"VariableDeclaration","scope":4008,"src":"26143:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":3991,"name":"uint64","nodeType":"ElementaryTypeName","src":"26143:6:9","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"26142:17:9"},"returnParameters":{"id":3994,"nodeType":"ParameterList","parameters":[],"src":"26174:0:9"},"scope":4009,"stateMutability":"view","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":2464,"name":"EssentialResolverContract","nameLocations":["662:25:9"],"nodeType":"IdentifierPath","referencedDeclaration":5017,"src":"662:25:9"},"id":2465,"nodeType":"InheritanceSpecifier","src":"662:25:9"},{"baseName":{"id":2466,"name":"IBridge","nameLocations":["689:7:9"],"nodeType":"IdentifierPath","referencedDeclaration":4153,"src":"689:7:9"},"id":2467,"nodeType":"InheritanceSpecifier","src":"689:7:9"}],"canonicalName":"Bridge","contractDependencies":[],"contractKind":"contract","documentation":{"id":2463,"nodeType":"StructuredDocumentation","src":"394:249:9","text":"@title Bridge\n @notice See the documentation for {IBridge}.\n @dev Labeled in address resolver as \"bridge\". Additionally, the code hash for the same address\n on L1 and L2 may be different.\n @custom:security-contact security@taiko.xyz"},"fullyImplemented":true,"linearizedBaseContracts":[4009,4153,5017,4802,11319,11452,16421,11748,21013,20512,20161,20171],"name":"Bridge","nameLocation":"652:6:9","scope":4010,"usedErrors":[2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579,4337,4339,4341,4343,4345,4347,5016,5441],"usedEvents":[2499,4061,4069,4330,4335,11230,11337,11594,20148,20155,20160]}],"license":"MIT"},"id":9} \ No newline at end of file diff --git a/shasta/src/l2/bindings.rs b/shasta/src/l2/bindings.rs index 137a38e3..06a78909 100644 --- a/shasta/src/l2/bindings.rs +++ b/shasta/src/l2/bindings.rs @@ -11,7 +11,7 @@ sol!( sol!( #[allow(missing_docs)] - #[sol(rpc)] - Bridge, - "src/l2/abi/Bridge.json" + #[sol(rpc, all_derives)] + Anchor, + "src/l2/abi/Anchor.json" ); diff --git a/shasta/src/l2/execution_layer.rs b/shasta/src/l2/execution_layer.rs index dc731d09..597ca44f 100644 --- a/shasta/src/l2/execution_layer.rs +++ b/shasta/src/l2/execution_layer.rs @@ -1,30 +1,43 @@ +use crate::l2::bindings::{Anchor, ICheckpointStore::Checkpoint}; +use crate::shared_abi::bindings::{ + Bridge::{self, MessageSent}, + IBridge::Message, + SignalSent, +}; use alloy::{ consensus::{ BlockHeader, SignableTransaction, Transaction as AnchorTransaction, TxEnvelope, transaction::Recovered, }, - primitives::{Address, B256}, + primitives::{Address, B256, Bytes, FixedBytes}, providers::{DynProvider, Provider}, rpc::types::Transaction, - signers::Signature, + signers::{Signature, Signer as AlloySigner}, + sol_types::SolEvent, }; use anyhow::Error; -use common::crypto::{GOLDEN_TOUCH_ADDRESS, GOLDEN_TOUCH_PRIVATE_KEY}; use common::shared::{ alloy_tools, execution_layer::ExecutionLayer as ExecutionLayerCommon, l2_slot_info_v2::L2SlotInfoV2, }; +use common::{ + crypto::{GOLDEN_TOUCH_ADDRESS, GOLDEN_TOUCH_PRIVATE_KEY}, + signer::Signer, +}; use pacaya::l2::config::TaikoConfig; -use taiko_bindings::anchor::{Anchor, ICheckpointStore::Checkpoint}; +use serde_json::Value; +use std::sync::Arc; use tracing::{debug, info, warn}; -use serde_json::Value; pub struct L2ExecutionLayer { common: ExecutionLayerCommon, - provider: DynProvider, + pub provider: DynProvider, shasta_anchor: Anchor::AnchorInstance, - chain_id: u64, + pub bridge: Bridge::BridgeInstance, + pub signal_service: Address, + pub chain_id: u64, pub config: TaikoConfig, + l2_call_signer: Arc, } impl L2ExecutionLayer { @@ -40,13 +53,28 @@ impl L2ExecutionLayer { let shasta_anchor = Anchor::new(taiko_config.taiko_anchor_address, provider.clone()); + // Surge: Store the bridge for processing L2 calls + let chain_id_hex = format!("{:x}", chain_id); + let zeros_needed = 38usize.saturating_sub(chain_id_hex.len()); + let bridge_address: Address = + format!("0x{}{}01", chain_id_hex, "0".repeat(zeros_needed)).parse()?; + let bridge = Bridge::new(bridge_address, provider.clone()); + + // Signal service address (same format as bridge, but ending in 05) + let signal_service: Address = + format!("0x{}{}05", chain_id_hex, "0".repeat(zeros_needed)).parse()?; + let common = ExecutionLayerCommon::new(provider.clone()).await?; + let l2_call_signer = taiko_config.signer.clone(); Ok(Self { common, provider, shasta_anchor, + bridge, + signal_service, chain_id, + l2_call_signer, config: taiko_config, }) } @@ -58,7 +86,7 @@ impl L2ExecutionLayer { pub async fn construct_anchor_tx( &self, l2_slot_info: &L2SlotInfoV2, - anchor_block_params: Checkpoint, + anchor_block_params: (Checkpoint, Vec>), ) -> Result { debug!( "Constructing anchor transaction for block number: {}", @@ -76,7 +104,7 @@ impl L2ExecutionLayer { let call_builder = self .shasta_anchor - .anchorV4(anchor_block_params) + .anchorV4WithSignalSlots(anchor_block_params.0, anchor_block_params.1) .gas(1_000_000) // value expected by Taiko .max_fee_per_gas(u128::from(l2_slot_info.base_fee())) // value expected by Taiko .max_priority_fee_per_gas(0) // value expected by Taiko @@ -248,3 +276,145 @@ impl L2ExecutionLayer { Ok(tx_data._checkpoint) } } + +// Surge: L2 EL ops for Bridge Handler + +pub trait L2BridgeHandlerOps { + // Surge: Builds the L2 call expected to be initiated an L1 contract via the Bridge + // This is initially sent as a user op to the bridge handler RPC + async fn construct_l2_call_tx(&self, message: Message) -> Result; + + // Surge: This can be made to retrieve multiple signal slots + async fn find_message_and_signal_slot( + &self, + block_id: u64, + ) -> Result)>, anyhow::Error>; +} + +impl L2BridgeHandlerOps for L2ExecutionLayer { + async fn construct_l2_call_tx(&self, message: Message) -> Result { + use alloy::signers::local::PrivateKeySigner; + use std::str::FromStr; + + debug!("Constructing bridge call transaction for L2 call"); + + let signer_address = self.l2_call_signer.get_address(); + + let nonce = self + .provider + .get_transaction_count(signer_address) + .await + .map_err(|e| anyhow::anyhow!("Failed to get nonce for bridge call: {}", e))?; + + let call_builder = self + .bridge + .processMessage(message, Bytes::new()) + .gas(1_000_000) + .max_fee_per_gas(1_000_000_000) // 1 gwei + .max_priority_fee_per_gas(0) + .nonce(nonce) + .chain_id(self.chain_id); + + let typed_tx = call_builder + .into_transaction_request() + .build_typed_tx() + .map_err(|_| anyhow::anyhow!("L2 Call Tx: Failed to build typed transaction"))?; + + let tx_eip1559 = typed_tx + .eip1559() + .ok_or_else(|| anyhow::anyhow!("L2 Call Tx: Failed to extract EIP-1559 transaction"))? + .clone(); + + // Sign the transaction using the L2 call signer + let signature = match self.l2_call_signer.as_ref() { + Signer::Web3signer(web3signer, address) => { + let signature_bytes = web3signer.sign_transaction(&tx_eip1559, *address).await?; + Signature::try_from(signature_bytes.as_slice()) + .map_err(|e| anyhow::anyhow!("Failed to parse signature: {}", e))? + } + Signer::PrivateKey(private_key, _) => { + let signer = PrivateKeySigner::from_str(private_key.as_str())?; + AlloySigner::sign_hash(&signer, &tx_eip1559.signature_hash()).await? + } + }; + + let sig_tx = tx_eip1559.into_signed(signature); + + let tx_envelope = TxEnvelope::from(sig_tx); + + debug!("L2 Call transaction hash: {}", tx_envelope.tx_hash()); + + let tx = Transaction { + inner: Recovered::new_unchecked(tx_envelope, signer_address), + block_hash: None, + block_number: None, + transaction_index: None, + effective_gas_price: None, + }; + Ok(tx) + } + + async fn find_message_and_signal_slot( + &self, + block_id: u64, + ) -> Result)>, anyhow::Error> { + use alloy::rpc::types::Filter; + + let bridge_address = *self.bridge.address(); + let signal_service_address = self.signal_service; + + let filter = Filter::new().from_block(block_id).to_block(block_id); + + // Get logs from the bridge contract (MessageSent event) + let bridge_filter = filter + .clone() + .address(bridge_address) + .event_signature(MessageSent::SIGNATURE_HASH); + + let bridge_logs = self + .provider + .get_logs(&bridge_filter) + .await + .map_err(|e| anyhow::anyhow!("Failed to get MessageSent logs from bridge: {e}"))?; + + // Get logs from the signal service contract (SignalSent event) + let signal_filter = filter + .address(signal_service_address) + .event_signature(SignalSent::SIGNATURE_HASH); + + let signal_logs = self.provider.get_logs(&signal_filter).await.map_err(|e| { + anyhow::anyhow!("Failed to get SignalSent logs from signal service: {e}") + })?; + + // Check if both events are present + if bridge_logs.is_empty() || signal_logs.is_empty() { + return Ok(None); + } + + // Decode MessageSent event + let message = { + let log = bridge_logs.first().unwrap(); + let log_data = alloy::primitives::LogData::new_unchecked( + log.topics().to_vec(), + log.data().data.clone(), + ); + MessageSent::decode_log_data(&log_data) + .map_err(|e| anyhow::anyhow!("Failed to decode MessageSent event: {e}"))? + .message + }; + + // Decode SignalSent event + let slot = { + let log = signal_logs.first().unwrap(); + let log_data = alloy::primitives::LogData::new_unchecked( + log.topics().to_vec(), + log.data().data.clone(), + ); + SignalSent::decode_log_data(&log_data) + .map_err(|e| anyhow::anyhow!("Failed to decode SignalSent event: {e}"))? + .slot + }; + + Ok(Some((message, slot))) + } +} diff --git a/shasta/src/l2/mod.rs b/shasta/src/l2/mod.rs index 4d6b6c2e..a34cdfda 100644 --- a/shasta/src/l2/mod.rs +++ b/shasta/src/l2/mod.rs @@ -1,4 +1,4 @@ -mod bindings; +pub mod bindings; pub mod execution_layer; pub mod extra_data; pub mod taiko; diff --git a/shasta/src/l2/taiko.rs b/shasta/src/l2/taiko.rs index a67cadb5..4d049788 100644 --- a/shasta/src/l2/taiko.rs +++ b/shasta/src/l2/taiko.rs @@ -3,7 +3,9 @@ use super::execution_layer::L2ExecutionLayer; use crate::l1::protocol_config::ProtocolConfig; +use crate::l2::bindings::{Anchor, ICheckpointStore::Checkpoint}; use crate::node::proposal_manager::l2_block_payload::L2BlockV2Payload; +use alloy::primitives::FixedBytes; use alloy::{ consensus::BlockHeader, eips::BlockNumberOrTag, @@ -31,7 +33,6 @@ use common::{ use pacaya::l2::config::TaikoConfig; use std::{sync::Arc, time::Duration}; use taiko_alethia_reth::validation::ANCHOR_V3_V4_GAS_LIMIT; -use taiko_bindings::anchor::{Anchor, ICheckpointStore::Checkpoint}; use tracing::{debug, trace}; pub struct Taiko { @@ -237,6 +238,7 @@ impl Taiko { &self, l2_block_payload: L2BlockV2Payload, l2_slot_context: &L2SlotContext, + anchor_signal_slots: Vec>, operation_type: OperationType, ) -> Result { tracing::debug!( @@ -244,11 +246,14 @@ impl Taiko { l2_block_payload.tx_list.len() ); - let anchor_block_params = Checkpoint { - blockNumber: l2_block_payload.anchor_block_id.try_into()?, - blockHash: l2_block_payload.anchor_block_hash, - stateRoot: l2_block_payload.anchor_state_root, - }; + let anchor_block_params = ( + Checkpoint { + blockNumber: l2_block_payload.anchor_block_id.try_into()?, + blockHash: l2_block_payload.anchor_block_hash, + stateRoot: l2_block_payload.anchor_state_root, + }, + anchor_signal_slots, + ); let anchor_tx = self .l2_execution_layer diff --git a/shasta/src/lib.rs b/shasta/src/lib.rs index 92f570e5..019b469f 100644 --- a/shasta/src/lib.rs +++ b/shasta/src/lib.rs @@ -3,6 +3,7 @@ mod forced_inclusion; mod l1; mod l2; mod node; +mod shared_abi; mod utils; use crate::utils::config::ShastaConfig; diff --git a/shasta/src/node/proposal_manager/batch_builder.rs b/shasta/src/node/proposal_manager/batch_builder.rs index 78d336a8..4b1105f5 100644 --- a/shasta/src/node/proposal_manager/batch_builder.rs +++ b/shasta/src/node/proposal_manager/batch_builder.rs @@ -1,12 +1,14 @@ -use std::{collections::VecDeque, sync::Arc}; - use super::proposal::Proposals; -use crate::node::proposal_manager::l2_block_payload::L2BlockV2Payload; -use crate::{ - l1::execution_layer::ExecutionLayer, metrics::Metrics, - node::proposal_manager::proposal::Proposal, shared::l2_tx_lists::PreBuiltTxList, +use crate::l1::execution_layer::ExecutionLayer; +use crate::l2::bindings::ICheckpointStore::Checkpoint; +use crate::metrics::Metrics; +use crate::node::proposal_manager::{ + bridge_handler::{L1Call, UserOpData}, + l2_block_payload::L2BlockV2Payload, + proposal::Proposal, }; -use alloy::primitives::Address; +use crate::shared::l2_tx_lists::PreBuiltTxList; +use alloy::primitives::{Address, FixedBytes}; use anyhow::Error; use common::{ batch_builder::BatchBuilderConfig, @@ -16,7 +18,7 @@ use common::{ l1::{ethereum_l1::EthereumL1, slot_clock::SlotClock, transaction_error::TransactionError}, shared::anchor_block_info::AnchorBlockInfo, }; -use taiko_bindings::anchor::ICheckpointStore::Checkpoint; +use std::{collections::VecDeque, sync::Arc}; use tracing::{debug, trace, warn}; pub struct BatchBuilder { @@ -103,6 +105,10 @@ impl BatchBuilder { anchor_block_hash: anchor_block.hash(), anchor_state_root: anchor_block.state_root(), num_forced_inclusion: 0, + checkpoint: Checkpoint::default(), + user_ops: vec![], + signal_slots: vec![], + l1_calls: vec![], }); } @@ -161,6 +167,55 @@ impl BatchBuilder { } } + // Surge: adds user ops that initiate L2 calls + pub fn add_user_op(&mut self, user_op_data: UserOpData) -> Result<&Proposal, Error> { + if let Some(current_proposal) = self.current_proposal.as_mut() { + current_proposal.user_ops.push(user_op_data.clone()); + + debug!("Added user op: {:?}", user_op_data); + Ok(current_proposal) + } else { + Err(anyhow::anyhow!("No current batch")) + } + } + + // Surge: adds signal slots to make same slot L2 call valid + pub fn add_signal_slot(&mut self, signal_slot: FixedBytes<32>) -> Result<&Proposal, Error> { + if let Some(current_proposal) = self.current_proposal.as_mut() { + current_proposal.signal_slots.push(signal_slot); + + debug!("Added signal slot: {:?}", signal_slot); + Ok(current_proposal) + } else { + Err(anyhow::anyhow!("No current batch")) + } + } + + // Surge: adds L1 calls initiated by L2 contracts + pub fn add_l1_call(&mut self, l1_call: L1Call) -> Result<&Proposal, Error> { + if let Some(current_proposal) = self.current_proposal.as_mut() { + current_proposal.l1_calls.push(l1_call.clone()); + + debug!("Added L1 call: {:?}", l1_call); + Ok(current_proposal) + } else { + Err(anyhow::anyhow!("No current batch")) + } + } + + // Surge: Sets the proposal checkpoint + // This is called at the end of sequencing + pub fn set_proposal_checkpoint(&mut self, checkpoint: Checkpoint) -> Result<&Proposal, Error> { + if let Some(current_proposal) = self.current_proposal.as_mut() { + current_proposal.checkpoint = checkpoint.clone(); + + debug!("Update proposal checkpoint: {:?}", checkpoint); + Ok(current_proposal) + } else { + Err(anyhow::anyhow!("No current batch")) + } + } + pub fn get_current_proposal_last_block_timestamp(&self) -> Option { self.current_proposal .as_ref() @@ -215,6 +270,13 @@ impl BatchBuilder { anchor_block_hash: anchor_info.hash(), anchor_state_root: anchor_info.state_root(), num_forced_inclusion: 0, + checkpoint: Checkpoint::default(), + // Surge: This is NOT OK for recovery, but fine for the POC. + // Any previously inititated user ops will not be valid during recovery + // leading to proposal failure + user_ops: vec![], + signal_slots: vec![], + l1_calls: vec![], }); } @@ -327,10 +389,12 @@ impl BatchBuilder { "Submitting batch" ); + debug!("Checkpoint data before proposing: {:?}", &batch.checkpoint); + if let Err(err) = ethereum_l1 .execution_layer // TODO send a Proosal to function - .send_batch_to_l1(batch.l2_blocks.clone(), batch.num_forced_inclusion) + .send_batch_to_l1(batch.clone()) .await { if let Some(transaction_error) = err.downcast_ref::() diff --git a/shasta/src/node/proposal_manager/bridge_handler.rs b/shasta/src/node/proposal_manager/bridge_handler.rs new file mode 100644 index 00000000..bcef61ad --- /dev/null +++ b/shasta/src/node/proposal_manager/bridge_handler.rs @@ -0,0 +1,194 @@ +use crate::l2::taiko::Taiko; +use crate::shared_abi::bindings::IBridge::Message; +use crate::{ + l1::{ + bindings::UserOpsSubmitter::UserOp, + execution_layer::{ExecutionLayer, L1BridgeHandlerOps}, + }, + l2::execution_layer::L2BridgeHandlerOps, +}; +use alloy::primitives::{Address, Bytes, FixedBytes, U256}; +use alloy::signers::Signer; +use anyhow::Result; +use common::{l1::ethereum_l1::EthereumL1, utils::cancellation_token::CancellationToken}; +use jsonrpsee::server::{RpcModule, ServerBuilder}; +use serde::Deserialize; +use std::{net::SocketAddr, sync::Arc}; +use tokio::sync::mpsc::{self, Receiver}; +use tracing::{error, info}; + +#[derive(Deserialize)] +pub struct SignedUserOp { + // `UserOpsSubmitter` contract for the user. + // Can be replaced with a Safe multisig or equivalent user ops based service contract + submitter: String, + target: String, + value: u64, + data: Vec, + // Signature on the hashed UserOp { target, value, data } + signature: Vec, +} + +// Sequence of calls on L1: +// 1. User op submission via `UserOpSubmitter` +// 2. Proposal with signal slot +// 3. L1Call initiated by an L2 contract + +// Sequence of calls on l2: +// 1. L2Call initiated by an L1 contract + +// Data to allow construction of the user op transaction +#[derive(Clone, Debug)] +pub struct UserOpData { + pub user_op: UserOp, + pub user_op_signature: Bytes, + pub user_op_submitter: Address, +} + +// Data required to build the L1 call transaction initiated by an L2 contract via the bridge +#[derive(Clone, Debug)] +pub struct L1Call { + pub message_from_l2: Message, + // For this POC, this is a signature based proof, but must be a merkle proof in production + pub signal_slot_proof: Bytes, +} + +// Data required to build the L2 call transaction initiated by an L1 contract via the bridge +#[derive(Clone, Debug)] +pub struct L2Call { + pub message_from_l1: Message, + pub signal_slot_on_l2: FixedBytes<32>, +} + +pub struct BridgeHandler { + ethereum_l1: Arc>, + taiko: Arc, + rx: Receiver, + // Surge: For signing the L1 call signal slot proofs + l1_call_proof_signer: alloy::signers::local::PrivateKeySigner, +} + +impl BridgeHandler { + pub async fn new( + addr: SocketAddr, + ethereum_l1: Arc>, + taiko: Arc, + cancellation_token: CancellationToken, + ) -> Result { + let (tx, rx) = mpsc::channel::(1024); + + let server = ServerBuilder::default() + .build(addr) + .await + .map_err(|e| anyhow::anyhow!("Failed to build RPC server: {}", e))?; + + let mut module = RpcModule::new(tx); + + module.register_async_method("surge_sendUserOp", |params, tx_context, _| async move { + let signed_user_op: SignedUserOp = params.parse()?; + + info!( + "Received UserOp: target={:?}, value={:?}", + signed_user_op.target, signed_user_op.value + ); + + tx_context.send(signed_user_op).await.map_err(|e| { + error!("Failed to send UserOp to queue: {}", e); + jsonrpsee::types::ErrorObjectOwned::owned( + -32000, + "Failed to queue user operation", + Some(format!("{}", e)), + ) + })?; + + Ok::( + "UserOp queued successfully".to_string(), + ) + })?; + + info!("Bridge handler RPC server starting on {}", addr); + let handle = server.start(module); + + tokio::spawn(async move { + cancellation_token.cancelled().await; + info!("Cancellation token triggered, stopping bridge handler RPC server"); + handle.stop().ok(); + }); + + Ok(Self { + ethereum_l1, + taiko, + rx, + // Surge: Hard coding the private key for the POC + // (This is the first private key from foundry anvil) + l1_call_proof_signer: alloy::signers::local::PrivateKeySigner::from_bytes( + &"0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + .parse::>()?, + )?, + }) + } + + // Returns any L2 calls initiated by an L1 contract via the Bridge. + // For seamless composability, the users will be submitting a `UserOp` on L1 to interact with + // the Bridge and any other intermediate contract. + pub async fn next_user_op_and_l2_call( + &mut self, + ) -> Result, anyhow::Error> { + if let Some(signed_user_op) = self.rx.recv().await { + let user_op = UserOp { + target: signed_user_op.target.parse()?, + value: U256::from(signed_user_op.value), + data: Bytes::from(signed_user_op.data), + }; + + let user_op_data = UserOpData { + user_op, + user_op_submitter: signed_user_op.submitter.parse()?, + user_op_signature: Bytes::from(signed_user_op.signature), + }; + + // This is the message sent from the L1 contract to the L2, and the + // associated signal that is set when the user op is executed + if let Some((message_from_l1, signal_slot_on_l2)) = self + .ethereum_l1 + .execution_layer + .find_message_and_signal_slot(user_op_data.clone()) + .await? + { + return Ok(Some(( + user_op_data, + L2Call { + message_from_l1, + signal_slot_on_l2, + }, + ))); + } + } + + Ok(None) + } + + // Surge: Finds L1 calls initiated in a specific L2 block + pub async fn find_l1_call(&mut self, block_id: u64) -> Result, anyhow::Error> { + if let Some((message_from_l2, signal_slot)) = self + .taiko + .l2_execution_layer() + .find_message_and_signal_slot(block_id) + .await? + { + let signature = self.l1_call_proof_signer.sign_hash(&signal_slot).await?; + + let mut signal_slot_proof = [0_u8; 65]; + signal_slot_proof[..32].copy_from_slice(signature.r().to_be_bytes::<32>().as_slice()); + signal_slot_proof[32..64].copy_from_slice(signature.s().to_be_bytes::<32>().as_slice()); + signal_slot_proof[64] = (signature.v() as u8) + 27; + + return Ok(Some(L1Call { + message_from_l2, + signal_slot_proof: Bytes::from(signal_slot_proof), + })); + } + + Ok(None) + } +} diff --git a/shasta/src/node/proposal_manager/mod.rs b/shasta/src/node/proposal_manager/mod.rs index 77711d88..de5266ae 100644 --- a/shasta/src/node/proposal_manager/mod.rs +++ b/shasta/src/node/proposal_manager/mod.rs @@ -1,16 +1,25 @@ mod batch_builder; +pub mod bridge_handler; pub mod l2_block_payload; pub mod proposal; +use crate::l2::bindings::ICheckpointStore::Checkpoint; +use crate::l2::execution_layer::L2BridgeHandlerOps; +use crate::node::proposal_manager::bridge_handler::UserOpData; use crate::{ l1::execution_layer::ExecutionLayer, l2::taiko::Taiko, metrics::Metrics, shared::{l2_block_v2::L2BlockV2Draft, l2_tx_lists::PreBuiltTxList}, }; -use alloy::{consensus::BlockHeader, consensus::Transaction}; +use alloy::primitives::FixedBytes; +use alloy::{ + consensus::{BlockHeader, Transaction as TransactionTrait}, + primitives::aliases::U48, +}; use anyhow::Error; use batch_builder::BatchBuilder; +use bridge_handler::BridgeHandler; use common::{batch_builder::BatchBuilderConfig, shared::l2_slot_info_v2::L2SlotContext}; use common::{ l1::{ethereum_l1::EthereumL1, traits::ELTrait}, @@ -18,7 +27,8 @@ use common::{ shared::anchor_block_info::AnchorBlockInfo, utils::cancellation_token::CancellationToken, }; -use std::sync::Arc; +use std::{net::SocketAddr, sync::Arc}; +use tokio::sync::Mutex; use tracing::{debug, error, info, warn}; use crate::forced_inclusion::ForcedInclusion; @@ -29,6 +39,7 @@ const MIN_ANCHOR_OFFSET: u64 = 2; pub struct BatchManager { batch_builder: BatchBuilder, + bridge_handler: Arc>, ethereum_l1: Arc>, pub taiko: Arc, l1_height_lag: u64, @@ -62,12 +73,25 @@ impl BatchManager { let forced_inclusion = Arc::new(ForcedInclusion::new(ethereum_l1.clone()).await?); + // Initialize bridge handler listening on port 4545 + let bridge_addr: SocketAddr = "127.0.0.1:4545".parse()?; + let bridge_handler = Arc::new(Mutex::new( + BridgeHandler::new( + bridge_addr, + ethereum_l1.clone(), + taiko.clone(), + cancel_token.clone(), + ) + .await?, + )); + Ok(Self { batch_builder: BatchBuilder::new( config, ethereum_l1.slot_clock.clone(), metrics.clone(), ), + bridge_handler, ethereum_l1, taiko, l1_height_lag, @@ -162,10 +186,11 @@ impl BatchManager { .get_last_synced_block_params_from_geth() .await?; - let pyaload = self.batch_builder.add_fi_block(fi_block, anchor_params)?; + let payload = self.batch_builder.add_fi_block(fi_block, anchor_params)?; + // Surge: Signal slots are not expected in forced inclusions match self .taiko - .advance_head_to_new_l2_block(pyaload, l2_slot_context, operation_type) + .advance_head_to_new_l2_block(payload, l2_slot_context, vec![], operation_type) .await { Ok(fi_preconfed_block) => { @@ -249,20 +274,98 @@ impl BatchManager { Ok(preconfed_block) } + // Surge: Adds any pending L2 calls initiated via User Ops on the bridge handler + // to the transaction list in the draft block. + // + // For the POC, only a single L2 call is added per block + // + // Returns the signal slot to be set on L2 + async fn add_pending_l2_call_to_draft_block( + &mut self, + l2_draft_block: &mut L2BlockV2Draft, + ) -> Result)>, anyhow::Error> { + // Check for pending L2 calls from the bridge handler + if let Ok(Some((user_op_data, l2_call))) = self + .bridge_handler + .lock() + .await + .next_user_op_and_l2_call() + .await + { + info!("Processing pending L2 call: {:?}", l2_call); + + // Construct the bridge call transaction via the L2 execution layer + let l2_call_bridge_tx = self + .taiko + .l2_execution_layer() + .construct_l2_call_tx(l2_call.message_from_l1) + .await?; + + // Insert the bridge transaction into the list + l2_draft_block + .prebuilt_tx_list + .tx_list + .push(l2_call_bridge_tx); + + debug!("Inserted bridge call transaction into tx list"); + + return Ok(Some((user_op_data, l2_call.signal_slot_on_l2))); + } + + Ok(None) + } + async fn add_draft_block_to_proposal( &mut self, - l2_draft_block: L2BlockV2Draft, + mut l2_draft_block: L2BlockV2Draft, l2_slot_context: &L2SlotContext, operation_type: OperationType, ) -> Result { + let mut anchor_signal_slots: Vec> = vec![]; + + // Surge: Add any pending L2 call from the bridge handler RPC and + // record associated signal slot for the proposal + if let Some((user_op_data, signal_slot)) = self + .add_pending_l2_call_to_draft_block(&mut l2_draft_block) + .await? + { + self.batch_builder.add_user_op(user_op_data)?; + self.batch_builder.add_signal_slot(signal_slot)?; + anchor_signal_slots.push(signal_slot); + } let payload = self.batch_builder.add_l2_draft_block(l2_draft_block)?; match self .taiko - .advance_head_to_new_l2_block(payload, l2_slot_context, operation_type) + .advance_head_to_new_l2_block( + payload, + l2_slot_context, + anchor_signal_slots, + operation_type, + ) .await { - Ok(preconfed_block) => Ok(preconfed_block), + Ok(preconfed_block) => { + // Surge: record the state of the preconfed block as a potential checkpoint + self.batch_builder.set_proposal_checkpoint(Checkpoint { + blockNumber: U48::from(preconfed_block.number), + stateRoot: preconfed_block.state_root, + blockHash: preconfed_block.hash, + })?; + + // Surge: Record any L1 call initiated in the L2 block + if let Some(l1_call) = self + .bridge_handler + .lock() + .await + .find_l1_call(preconfed_block.number) + .await? + { + self.batch_builder.add_l1_call(l1_call)?; + } + + Ok(preconfed_block) + } Err(err) => { error!("Failed to advance head to new L2 block: {}", err); self.remove_last_l2_block(); @@ -475,6 +578,10 @@ impl BatchManager { let txs = txs.to_vec(); + // Store block data for checkpoint before block is moved + let block_hash = block.header.hash_slow(); + let block_state_root = block.header.state_root(); + // TODO validate block params self.batch_builder .recover_from( @@ -487,12 +594,22 @@ impl BatchManager { is_forced_inclusion, ) .await?; + + // Surge: Set the checkpoint for the recovered block + // This is the L2 block state that should be used as checkpoint for the proposal + self.batch_builder.set_proposal_checkpoint(Checkpoint { + blockNumber: U48::from(block_height), + stateRoot: block_state_root, + blockHash: block_hash, + })?; + Ok(()) } pub fn clone_without_batches(&self) -> Self { Self { batch_builder: self.batch_builder.clone_without_batches(), + bridge_handler: self.bridge_handler.clone(), ethereum_l1: self.ethereum_l1.clone(), taiko: self.taiko.clone(), l1_height_lag: self.l1_height_lag, diff --git a/shasta/src/node/proposal_manager/proposal.rs b/shasta/src/node/proposal_manager/proposal.rs index f59b3989..de36163f 100644 --- a/shasta/src/node/proposal_manager/proposal.rs +++ b/shasta/src/node/proposal_manager/proposal.rs @@ -1,9 +1,12 @@ -use crate::node::proposal_manager::l2_block_payload::L2BlockV2Payload; -use alloy::primitives::{Address, B256}; +use crate::l2::bindings::ICheckpointStore::Checkpoint; +use crate::node::proposal_manager::{ + bridge_handler::{L1Call, UserOpData}, + l2_block_payload::L2BlockV2Payload, +}; +use alloy::primitives::{Address, B256, FixedBytes}; use common::shared::l2_block_v2::{L2BlockV2, L2BlockV2Draft}; use std::collections::VecDeque; use std::time::Instant; -use taiko_bindings::anchor::ICheckpointStore::Checkpoint; use taiko_protocol::shasta::manifest::{BlockManifest, DerivationSourceManifest}; use tracing::{debug, warn}; @@ -20,6 +23,15 @@ pub struct Proposal { pub anchor_block_hash: B256, pub anchor_state_root: B256, pub num_forced_inclusion: u8, + // Surge: the state sync checkpoint that is signed and sent as a proof + // along with the proposal to Surge inbox + pub checkpoint: Checkpoint, + // Surge: User ops that initiate L2 calls + pub user_ops: Vec, + // Surge: Signal slots to set via anchor with the proposal + pub signal_slots: Vec>, + // Surge: L1 calls intitiated by any L2 contracts + pub l1_calls: Vec, } impl Proposal { @@ -177,6 +189,10 @@ mod test { anchor_block_hash: B256::ZERO, anchor_state_root: B256::ZERO, num_forced_inclusion: 0, + checkpoint: Checkpoint::default(), + user_ops: vec![], + signal_slots: vec![], + l1_calls: vec![], }; proposal.compress(); diff --git a/shasta/src/shared_abi/Bridge.json b/shasta/src/shared_abi/Bridge.json new file mode 100644 index 00000000..8f768573 --- /dev/null +++ b/shasta/src/shared_abi/Bridge.json @@ -0,0 +1,738 @@ +{ + "abi": [ + { + "type": "function", + "name": "context", + "inputs": [], + "outputs": [ + { + "name": "ctx_", + "type": "tuple", + "internalType": "struct IBridge.Context", + "components": [ + { + "name": "msgHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "srcChainId", + "type": "uint64", + "internalType": "uint64" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "failMessage", + "inputs": [ + { + "name": "_message", + "type": "tuple", + "internalType": "struct IBridge.Message", + "components": [ + { + "name": "id", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "fee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "gasLimit", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "srcChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "srcOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "destChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "destOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "hashMessage", + "inputs": [ + { + "name": "_message", + "type": "tuple", + "internalType": "struct IBridge.Message", + "components": [ + { + "name": "id", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "fee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "gasLimit", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "srcChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "srcOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "destChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "destOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "isMessageSent", + "inputs": [ + { + "name": "_message", + "type": "tuple", + "internalType": "struct IBridge.Message", + "components": [ + { + "name": "id", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "fee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "gasLimit", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "srcChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "srcOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "destChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "destOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "nextMessageId", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "processMessage", + "inputs": [ + { + "name": "_message", + "type": "tuple", + "internalType": "struct IBridge.Message", + "components": [ + { + "name": "id", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "fee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "gasLimit", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "srcChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "srcOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "destChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "destOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "_proof", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum IBridge.Status" + }, + { + "name": "", + "type": "uint8", + "internalType": "enum IBridge.StatusReason" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recallMessage", + "inputs": [ + { + "name": "_message", + "type": "tuple", + "internalType": "struct IBridge.Message", + "components": [ + { + "name": "id", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "fee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "gasLimit", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "srcChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "srcOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "destChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "destOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "_proof", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "retryMessage", + "inputs": [ + { + "name": "_message", + "type": "tuple", + "internalType": "struct IBridge.Message", + "components": [ + { + "name": "id", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "fee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "gasLimit", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "srcChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "srcOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "destChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "destOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "name": "_isLastAttempt", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "sendMessage", + "inputs": [ + { + "name": "_message", + "type": "tuple", + "internalType": "struct IBridge.Message", + "components": [ + { + "name": "id", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "fee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "gasLimit", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "srcChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "srcOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "destChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "destOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "outputs": [ + { + "name": "msgHash_", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "message_", + "type": "tuple", + "internalType": "struct IBridge.Message", + "components": [ + { + "name": "id", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "fee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "gasLimit", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "srcChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "srcOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "destChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "destOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "MessageSent", + "inputs": [ + { + "name": "msgHash", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "message", + "type": "tuple", + "indexed": false, + "internalType": "struct IBridge.Message", + "components": [ + { + "name": "id", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "fee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "gasLimit", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "srcChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "srcOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "destChainId", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "destOwner", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MessageStatusChanged", + "inputs": [ + { + "name": "msgHash", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "status", + "type": "uint8", + "indexed": false, + "internalType": "enum IBridge.Status" + } + ], + "anonymous": false + } + ] +} \ No newline at end of file diff --git a/shasta/src/shared_abi/bindings.rs b/shasta/src/shared_abi/bindings.rs new file mode 100644 index 00000000..1abe936d --- /dev/null +++ b/shasta/src/shared_abi/bindings.rs @@ -0,0 +1,17 @@ +#![allow(clippy::too_many_arguments)] + +use alloy::sol; + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + #[derive(Debug)] + Bridge, + "src/shared_abi/Bridge.json" +); + +// SignalSent event emitted by the SignalService contract +sol! { + #[allow(missing_docs)] + event SignalSent(address indexed app, bytes32 signal, bytes32 slot, bytes32 value); +} diff --git a/shasta/src/shared_abi/mod.rs b/shasta/src/shared_abi/mod.rs new file mode 100644 index 00000000..90c70dcc --- /dev/null +++ b/shasta/src/shared_abi/mod.rs @@ -0,0 +1 @@ +pub mod bindings; diff --git a/shasta/src/utils/config.rs b/shasta/src/utils/config.rs index da138a5a..c27a8b1d 100644 --- a/shasta/src/utils/config.rs +++ b/shasta/src/utils/config.rs @@ -6,6 +6,8 @@ use std::str::FromStr; #[derive(Debug, Clone)] pub struct ShastaConfig { pub shasta_inbox: Address, + pub proposer_multicall: Address, + pub bridge: Address, } impl ConfigTrait for ShastaConfig { @@ -18,8 +20,14 @@ impl ConfigTrait for ShastaConfig { }; let shasta_inbox = read_contract_address("SHASTA_INBOX_ADDRESS")?; + let proposer_multicall = read_contract_address("PROPOSER_MULTICALL_ADDRESS")?; + let bridge = read_contract_address("L1_BRIDGE_ADDRESS")?; - Ok(ShastaConfig { shasta_inbox }) + Ok(ShastaConfig { + shasta_inbox, + proposer_multicall, + bridge, + }) } } @@ -27,6 +35,7 @@ use std::fmt; impl fmt::Display for ShastaConfig { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { writeln!(f, "Shasta inbox: {:#?}", self.shasta_inbox)?; + writeln!(f, "Proposer multicall: {:#?}", self.proposer_multicall)?; Ok(()) } }