diff --git a/l2-bridge-ethereum/.gitignore b/l2-bridge-ethereum/.gitignore index a18706e3..f73222b7 100644 --- a/l2-bridge-ethereum/.gitignore +++ b/l2-bridge-ethereum/.gitignore @@ -6,4 +6,3 @@ forta.config.json *.log version.json .DS_Store -src/generated diff --git a/l2-bridge-ethereum/package.json b/l2-bridge-ethereum/package.json index 93ecdd34..c6f14312 100644 --- a/l2-bridge-ethereum/package.json +++ b/l2-bridge-ethereum/package.json @@ -32,18 +32,16 @@ "prettier:check": "prettier --check .", "prettier:format": "prettier --write .", "lint": "yarn run prettier:check && yarn run eslint:lint", - "format": "yarn run eslint:format && yarn run prettier:format", - "generate-types": "typechain --target=ethers-v5 --out-dir=./src/generated ./src/abi/*", - "postinstall": "yarn generate-types" + "format": "yarn run eslint:format && yarn run prettier:format" }, "dependencies": { "bignumber.js": "^9.0.1", + "ethers": "^6.13.2", "forta-agent": "^0.1.48" }, "devDependencies": { "@jest/globals": "^29.7.0", "@tsconfig/node20": "^20.1.4", - "@typechain/ethers-v5": "^11.1.2", "@types/jest": "^29.5.12", "@types/nodemon": "^1.19.0", "@typescript-eslint/eslint-plugin": "^6.12.0", @@ -56,7 +54,6 @@ "nodemon": "^2.0.8", "prettier": "^3.1.0", "ts-jest": "^29.2.4", - "typechain": "^8.3.2", "typescript": "^5.3.2" }, "packageManager": "yarn@3.3.0" diff --git a/l2-bridge-ethereum/src/abi/BaseAdapter.json b/l2-bridge-ethereum/src/abi/BaseAdapter.json deleted file mode 100644 index 901167cf..00000000 --- a/l2-bridge-ethereum/src/abi/BaseAdapter.json +++ /dev/null @@ -1,163 +0,0 @@ -[ - { - "type": "function", - "name": "BASE_GAS_LIMIT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "CROSS_CHAIN_CONTROLLER", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IBaseCrossChainController" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "adapterName", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "forwardMessage", - "inputs": [ - { - "name": "receiver", - "type": "address", - "internalType": "address" - }, - { - "name": "executionGasLimit", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "destinationChainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "message", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - }, - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getTrustedRemoteByChainId", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "infraToNativeChainId", - "inputs": [ - { - "name": "infraChainId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nativeToInfraChainId", - "inputs": [ - { - "name": "nativeChainId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setupPayments", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "SetTrustedRemote", - "inputs": [ - { - "name": "originChainId", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "originForwarder", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - } -] diff --git a/l2-bridge-ethereum/src/abi/CrossChainController.json b/l2-bridge-ethereum/src/abi/CrossChainController.json deleted file mode 100644 index ffcbf281..00000000 --- a/l2-bridge-ethereum/src/abi/CrossChainController.json +++ /dev/null @@ -1,1884 +0,0 @@ -{ - "abi": [ - { "type": "receive", "stateMutability": "payable" }, - { - "type": "function", - "name": "allowReceiverBridgeAdapters", - "inputs": [ - { - "name": "bridgeAdaptersInput", - "type": "tuple[]", - "internalType": "struct ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[]", - "components": [ - { "name": "bridgeAdapter", "type": "address", "internalType": "address" }, - { "name": "chainIds", "type": "uint256[]", "internalType": "uint256[]" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "approveSenders", - "inputs": [{ "name": "senders", "type": "address[]", "internalType": "address[]" }], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "deliverEnvelope", - "inputs": [ - { - "name": "envelope", - "type": "tuple", - "internalType": "struct Envelope", - "components": [ - { "name": "nonce", "type": "uint256", "internalType": "uint256" }, - { "name": "origin", "type": "address", "internalType": "address" }, - { "name": "destination", "type": "address", "internalType": "address" }, - { "name": "originChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "destinationChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "disableBridgeAdapters", - "inputs": [ - { - "name": "bridgeAdapters", - "type": "tuple[]", - "internalType": "struct ICrossChainForwarder.BridgeAdapterToDisable[]", - "components": [ - { "name": "bridgeAdapter", "type": "address", "internalType": "address" }, - { "name": "chainIds", "type": "uint256[]", "internalType": "uint256[]" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "disallowReceiverBridgeAdapters", - "inputs": [ - { - "name": "bridgeAdapters", - "type": "tuple[]", - "internalType": "struct ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[]", - "components": [ - { "name": "bridgeAdapter", "type": "address", "internalType": "address" }, - { "name": "chainIds", "type": "uint256[]", "internalType": "uint256[]" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "emergencyEtherTransfer", - "inputs": [ - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "emergencyTokenTransfer", - "inputs": [ - { "name": "erc20Token", "type": "address", "internalType": "address" }, - { "name": "to", "type": "address", "internalType": "address" }, - { "name": "amount", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "enableBridgeAdapters", - "inputs": [ - { - "name": "bridgeAdapters", - "type": "tuple[]", - "internalType": "struct ICrossChainForwarder.ForwarderBridgeAdapterConfigInput[]", - "components": [ - { "name": "currentChainBridgeAdapter", "type": "address", "internalType": "address" }, - { "name": "destinationBridgeAdapter", "type": "address", "internalType": "address" }, - { "name": "destinationChainId", "type": "uint256", "internalType": "uint256" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "forwardMessage", - "inputs": [ - { "name": "destinationChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "destination", "type": "address", "internalType": "address" }, - { "name": "gasLimit", "type": "uint256", "internalType": "uint256" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "", "type": "bytes32", "internalType": "bytes32" }, - { "name": "", "type": "bytes32", "internalType": "bytes32" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getConfigurationByChain", - "inputs": [{ "name": "chainId", "type": "uint256", "internalType": "uint256" }], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct ICrossChainReceiver.ReceiverConfiguration", - "components": [ - { "name": "requiredConfirmation", "type": "uint8", "internalType": "uint8" }, - { "name": "validityTimestamp", "type": "uint120", "internalType": "uint120" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getCurrentEnvelopeNonce", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getCurrentTransactionNonce", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getEnvelopeState", - "inputs": [{ "name": "envelopeId", "type": "bytes32", "internalType": "bytes32" }], - "outputs": [{ "name": "", "type": "uint8", "internalType": "enum ICrossChainReceiver.EnvelopeState" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getEnvelopeState", - "inputs": [ - { - "name": "envelope", - "type": "tuple", - "internalType": "struct Envelope", - "components": [ - { "name": "nonce", "type": "uint256", "internalType": "uint256" }, - { "name": "origin", "type": "address", "internalType": "address" }, - { "name": "destination", "type": "address", "internalType": "address" }, - { "name": "originChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "destinationChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [{ "name": "", "type": "uint8", "internalType": "enum ICrossChainReceiver.EnvelopeState" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getForwarderBridgeAdaptersByChain", - "inputs": [{ "name": "chainId", "type": "uint256", "internalType": "uint256" }], - "outputs": [ - { - "name": "", - "type": "tuple[]", - "internalType": "struct ICrossChainForwarder.ChainIdBridgeConfig[]", - "components": [ - { "name": "destinationBridgeAdapter", "type": "address", "internalType": "address" }, - { "name": "currentChainBridgeAdapter", "type": "address", "internalType": "address" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getReceiverBridgeAdaptersByChain", - "inputs": [{ "name": "chainId", "type": "uint256", "internalType": "uint256" }], - "outputs": [{ "name": "", "type": "address[]", "internalType": "address[]" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSupportedChains", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256[]", "internalType": "uint256[]" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getTransactionState", - "inputs": [ - { - "name": "transaction", - "type": "tuple", - "internalType": "struct Transaction", - "components": [ - { "name": "nonce", "type": "uint256", "internalType": "uint256" }, - { "name": "encodedEnvelope", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct ICrossChainReceiver.TransactionStateWithoutAdapters", - "components": [ - { "name": "confirmations", "type": "uint8", "internalType": "uint8" }, - { "name": "firstBridgedAt", "type": "uint120", "internalType": "uint120" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getTransactionState", - "inputs": [{ "name": "transactionId", "type": "bytes32", "internalType": "bytes32" }], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct ICrossChainReceiver.TransactionStateWithoutAdapters", - "components": [ - { "name": "confirmations", "type": "uint8", "internalType": "uint8" }, - { "name": "firstBridgedAt", "type": "uint120", "internalType": "uint120" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "guardian", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { "name": "owner", "type": "address", "internalType": "address" }, - { "name": "guardian", "type": "address", "internalType": "address" }, - { - "name": "initialRequiredConfirmations", - "type": "tuple[]", - "internalType": "struct ICrossChainReceiver.ConfirmationInput[]", - "components": [ - { "name": "chainId", "type": "uint256", "internalType": "uint256" }, - { "name": "requiredConfirmations", "type": "uint8", "internalType": "uint8" } - ] - }, - { - "name": "receiverBridgeAdaptersToAllow", - "type": "tuple[]", - "internalType": "struct ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[]", - "components": [ - { "name": "bridgeAdapter", "type": "address", "internalType": "address" }, - { "name": "chainIds", "type": "uint256[]", "internalType": "uint256[]" } - ] - }, - { - "name": "forwarderBridgeAdaptersToEnable", - "type": "tuple[]", - "internalType": "struct ICrossChainForwarder.ForwarderBridgeAdapterConfigInput[]", - "components": [ - { "name": "currentChainBridgeAdapter", "type": "address", "internalType": "address" }, - { "name": "destinationBridgeAdapter", "type": "address", "internalType": "address" }, - { "name": "destinationChainId", "type": "uint256", "internalType": "uint256" } - ] - }, - { "name": "sendersToApprove", "type": "address[]", "internalType": "address[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isEnvelopeRegistered", - "inputs": [ - { - "name": "envelope", - "type": "tuple", - "internalType": "struct Envelope", - "components": [ - { "name": "nonce", "type": "uint256", "internalType": "uint256" }, - { "name": "origin", "type": "address", "internalType": "address" }, - { "name": "destination", "type": "address", "internalType": "address" }, - { "name": "originChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "destinationChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isEnvelopeRegistered", - "inputs": [{ "name": "envelopeId", "type": "bytes32", "internalType": "bytes32" }], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isReceiverBridgeAdapterAllowed", - "inputs": [ - { "name": "bridgeAdapter", "type": "address", "internalType": "address" }, - { "name": "chainId", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isSenderApproved", - "inputs": [{ "name": "sender", "type": "address", "internalType": "address" }], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isTransactionForwarded", - "inputs": [{ "name": "transactionId", "type": "bytes32", "internalType": "bytes32" }], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isTransactionForwarded", - "inputs": [ - { - "name": "transaction", - "type": "tuple", - "internalType": "struct Transaction", - "components": [ - { "name": "nonce", "type": "uint256", "internalType": "uint256" }, - { "name": "encodedEnvelope", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isTransactionReceivedByAdapter", - "inputs": [ - { "name": "transactionId", "type": "bytes32", "internalType": "bytes32" }, - { "name": "bridgeAdapter", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "receiveCrossChainMessage", - "inputs": [ - { "name": "encodedTransaction", "type": "bytes", "internalType": "bytes" }, - { "name": "originChainId", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "removeSenders", - "inputs": [{ "name": "senders", "type": "address[]", "internalType": "address[]" }], - "outputs": [], - "stateMutability": "nonpayable" - }, - { "type": "function", "name": "renounceOwnership", "inputs": [], "outputs": [], "stateMutability": "nonpayable" }, - { - "type": "function", - "name": "retryEnvelope", - "inputs": [ - { - "name": "envelope", - "type": "tuple", - "internalType": "struct Envelope", - "components": [ - { "name": "nonce", "type": "uint256", "internalType": "uint256" }, - { "name": "origin", "type": "address", "internalType": "address" }, - { "name": "destination", "type": "address", "internalType": "address" }, - { "name": "originChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "destinationChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "gasLimit", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "retryTransaction", - "inputs": [ - { "name": "encodedTransaction", "type": "bytes", "internalType": "bytes" }, - { "name": "gasLimit", "type": "uint256", "internalType": "uint256" }, - { "name": "bridgeAdaptersToRetry", "type": "address[]", "internalType": "address[]" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [{ "name": "newOwner", "type": "address", "internalType": "address" }], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateConfirmations", - "inputs": [ - { - "name": "newConfirmations", - "type": "tuple[]", - "internalType": "struct ICrossChainReceiver.ConfirmationInput[]", - "components": [ - { "name": "chainId", "type": "uint256", "internalType": "uint256" }, - { "name": "requiredConfirmations", "type": "uint8", "internalType": "uint8" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateGuardian", - "inputs": [{ "name": "newGuardian", "type": "address", "internalType": "address" }], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateMessagesValidityTimestamp", - "inputs": [ - { - "name": "newValidityTimestamp", - "type": "tuple[]", - "internalType": "struct ICrossChainReceiver.ValidityTimestampInput[]", - "components": [ - { "name": "chainId", "type": "uint256", "internalType": "uint256" }, - { "name": "validityTimestamp", "type": "uint120", "internalType": "uint120" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "whoCanRescue", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "event", - "name": "BridgeAdapterUpdated", - "inputs": [ - { "name": "destinationChainId", "type": "uint256", "indexed": true, "internalType": "uint256" }, - { "name": "bridgeAdapter", "type": "address", "indexed": true, "internalType": "address" }, - { "name": "destinationBridgeAdapter", "type": "address", "indexed": false, "internalType": "address" }, - { "name": "allowed", "type": "bool", "indexed": true, "internalType": "bool" } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ConfirmationsUpdated", - "inputs": [ - { "name": "newConfirmations", "type": "uint8", "indexed": false, "internalType": "uint8" }, - { "name": "chainId", "type": "uint256", "indexed": true, "internalType": "uint256" } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC20Rescued", - "inputs": [ - { "name": "caller", "type": "address", "indexed": true, "internalType": "address" }, - { "name": "token", "type": "address", "indexed": true, "internalType": "address" }, - { "name": "to", "type": "address", "indexed": true, "internalType": "address" }, - { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EnvelopeDeliveryAttempted", - "inputs": [ - { "name": "envelopeId", "type": "bytes32", "indexed": false, "internalType": "bytes32" }, - { - "name": "envelope", - "type": "tuple", - "indexed": false, - "internalType": "struct Envelope", - "components": [ - { "name": "nonce", "type": "uint256", "internalType": "uint256" }, - { "name": "origin", "type": "address", "internalType": "address" }, - { "name": "destination", "type": "address", "internalType": "address" }, - { "name": "originChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "destinationChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "isDelivered", "type": "bool", "indexed": false, "internalType": "bool" } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EnvelopeRegistered", - "inputs": [ - { "name": "envelopeId", "type": "bytes32", "indexed": true, "internalType": "bytes32" }, - { - "name": "envelope", - "type": "tuple", - "indexed": false, - "internalType": "struct Envelope", - "components": [ - { "name": "nonce", "type": "uint256", "internalType": "uint256" }, - { "name": "origin", "type": "address", "internalType": "address" }, - { "name": "destination", "type": "address", "internalType": "address" }, - { "name": "originChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "destinationChainId", "type": "uint256", "internalType": "uint256" }, - { "name": "message", "type": "bytes", "internalType": "bytes" } - ] - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "GuardianUpdated", - "inputs": [ - { "name": "oldGuardian", "type": "address", "indexed": false, "internalType": "address" }, - { "name": "newGuardian", "type": "address", "indexed": false, "internalType": "address" } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [{ "name": "version", "type": "uint8", "indexed": false, "internalType": "uint8" }], - "anonymous": false - }, - { - "type": "event", - "name": "NativeTokensRescued", - "inputs": [ - { "name": "caller", "type": "address", "indexed": true, "internalType": "address" }, - { "name": "to", "type": "address", "indexed": true, "internalType": "address" }, - { "name": "amount", "type": "uint256", "indexed": false, "internalType": "uint256" } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NewInvalidation", - "inputs": [ - { "name": "invalidTimestamp", "type": "uint256", "indexed": false, "internalType": "uint256" }, - { "name": "chainId", "type": "uint256", "indexed": true, "internalType": "uint256" } - ], - "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": "ReceiverBridgeAdaptersUpdated", - "inputs": [ - { "name": "bridgeAdapter", "type": "address", "indexed": true, "internalType": "address" }, - { "name": "allowed", "type": "bool", "indexed": true, "internalType": "bool" }, - { "name": "chainId", "type": "uint256", "indexed": true, "internalType": "uint256" } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SenderUpdated", - "inputs": [ - { "name": "sender", "type": "address", "indexed": true, "internalType": "address" }, - { "name": "isApproved", "type": "bool", "indexed": true, "internalType": "bool" } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TransactionForwardingAttempted", - "inputs": [ - { "name": "transactionId", "type": "bytes32", "indexed": false, "internalType": "bytes32" }, - { "name": "envelopeId", "type": "bytes32", "indexed": true, "internalType": "bytes32" }, - { "name": "encodedTransaction", "type": "bytes", "indexed": false, "internalType": "bytes" }, - { "name": "destinationChainId", "type": "uint256", "indexed": false, "internalType": "uint256" }, - { "name": "bridgeAdapter", "type": "address", "indexed": true, "internalType": "address" }, - { "name": "destinationBridgeAdapter", "type": "address", "indexed": false, "internalType": "address" }, - { "name": "adapterSuccessful", "type": "bool", "indexed": true, "internalType": "bool" }, - { "name": "returnData", "type": "bytes", "indexed": false, "internalType": "bytes" } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TransactionReceived", - "inputs": [ - { "name": "transactionId", "type": "bytes32", "indexed": false, "internalType": "bytes32" }, - { "name": "envelopeId", "type": "bytes32", "indexed": true, "internalType": "bytes32" }, - { "name": "originChainId", "type": "uint256", "indexed": true, "internalType": "uint256" }, - { - "name": "transaction", - "type": "tuple", - "indexed": false, - "internalType": "struct Transaction", - "components": [ - { "name": "nonce", "type": "uint256", "internalType": "uint256" }, - { "name": "encodedEnvelope", "type": "bytes", "internalType": "bytes" } - ] - }, - { "name": "bridgeAdapter", "type": "address", "indexed": true, "internalType": "address" }, - { "name": "confirmations", "type": "uint8", "indexed": false, "internalType": "uint8" } - ], - "anonymous": false - }, - { - "type": "error", - "name": "SafeERC20FailedOperation", - "inputs": [{ "name": "token", "type": "address", "internalType": "address" }] - } - ], - "bytecode": { - "object": "0x60806040523480156200001157600080fd5b50604080516000808252602082019092529062000051565b6040805180820190915260008082526020820152815260200190600190039081620000295790505b50604080516000808252602082019092529062000092565b604080518082019091526000815260606020820152815260200190600190039081620000695790505b506040805160008082526020820190925290620000d8565b6040805160608101825260008082526020808301829052928201528252600019909201910181620000aa5790505b50604080516000815260208101909152620000f333620001c1565b620000fe3362000211565b604080516000808252602082019092526200015d9184919062000145565b6040805180820190915260008152606060208201528152602001906001900390816200011c5790505b50604080516000815260208101909152849062000272565b505060408051600080825260208201909252620001ae91839190620001a6565b6040805180820190915260008152606060208201528152602001906001900390816200017d5790505b5084620002a8565b50620001bb9050620002d2565b620011f6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600180546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f064d28d3d3071c5cbc271a261c10c2f0f0d9e319390397101aa0eb23c6bad909910160405180910390a15050565b6200027d8462000395565b620002888362000637565b6200029582600162000927565b620002a281600062000927565b50505050565b620002b583600162000a67565b620002c282600062000a67565b620002cd8162000d07565b505050565b607154610100900460ff1615620003405760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084015b60405180910390fd5b60715460ff908116101562000393576071805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60005b815181101562000633576000828281518110620003b957620003b962001109565b6020026020010151905060006001600160a01b031681602001516001600160a01b031614158015620003f4575080516001600160a01b031615155b604051806040016040528060018152602001600d60fa1b815250906200042f5760405162461bcd60e51b815260040162000337919062001145565b506040808201516000908152600760205290812090805b82548110156200052257600083828154811062000467576200046762001109565b60009182526020909120865160029092020160018101549092506001600160a01b039182169116036200050c57602085015181546001600160a01b03908116911614620005015760208581015182546001600160a01b0319166001600160a01b03918216908117845587516040808a015190519283526001949190931692916000805160206200531f833981519152910160405180910390a45b600192505062000522565b5080620005198162001190565b91505062000446565b50806200061a5782516040805160048152602481018252602080820180516001600160e01b039081166352d1043d60e01b1790915283518085019094526002845261199960f11b918401919091526200057e93929062000e2116565b50604080518082018252602085810180516001600160a01b03908116845287518116838501908152875460018082018a5560008a81528690209651600290920290960180549184166001600160a01b03199283161781559151918601805492841692909116919091179055875188860151925195519582168652939493169290916000805160206200531f833981519152910160405180910390a45b50505080806200062a9062001190565b91505062000398565b5050565b60005b8151811015620006335760005b8282815181106200065c576200065c62001109565b6020026020010151602001515181101562000911576000600760008585815181106200068c576200068c62001109565b6020026020010151602001518481518110620006ac57620006ac62001109565b60200260200101518152602001908152602001600020905060005b8154811015620008f957848481518110620006e657620006e662001109565b6020026020010151600001516001600160a01b031682828154811062000710576200071062001109565b60009182526020909120600160029092020101546001600160a01b031603620008e45760008282815481106200074a576200074a62001109565b600091825260209091206002909102015483546001600160a01b03909116915083906200077a90600190620011ac565b815481106200078d576200078d62001109565b9060005260206000209060020201838381548110620007b057620007b062001109565b60009182526020909120825460029092020180546001600160a01b039283166001600160a01b031991821617825560019384015493909101805493909216921691909117905582548390806200080a576200080a620011c2565b60008281526020812060026000199093019283020180546001600160a01b03199081168255600191909101805490911690559155865187908790811062000855576200085562001109565b6020026020010151600001516001600160a01b03168787815181106200087f576200087f62001109565b60200260200101516020015186815181106200089f576200089f62001109565b60200260200101516000805160206200531f83398151915284604051620008d591906001600160a01b0391909116815260200190565b60405180910390a450620008f9565b80620008f08162001190565b915050620006c7565b50508080620009089062001190565b91505062000647565b50806200091e8162001190565b9150506200063a565b60005b8251811015620002cd5760006001600160a01b031683828151811062000954576200095462001109565b60200260200101516001600160a01b0316141560405180604001604052806002815260200161199b60f11b81525090620009a35760405162461bcd60e51b815260040162000337919062001145565b508160046000858481518110620009be57620009be62001109565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555081151583828151811062000a155762000a1562001109565b60200260200101516001600160a01b03167f626c27c1d088fd70034e681d579a5efd004c3d47a56d3ee07ad256ac7301433360405160405180910390a38062000a5e8162001190565b9150506200092a565b60005b8251811015620002cd57600083828151811062000a8b5762000a8b62001109565b6020026020010151905060006001600160a01b031681600001516001600160a01b0316141560405180604001604052806002815260200161062760f31b8152509062000aec5760405162461bcd60e51b815260040162000337919062001145565b5060005b81602001515181101562000cef576000841562000b945762000b3d8360200151838151811062000b245762000b2462001109565b6020026020010151603d62000ea060201b90919060201c565b5062000b8c8360000151603a60008660200151868151811062000b645762000b6462001109565b6020026020010151815260200190815260200160002060010162000eb760201b90919060201c565b905062000c73565b62000be28360000151603a60008660200151868151811062000bba5762000bba62001109565b6020026020010151815260200190815260200160002060010162000ece60201b90919060201c565b905080801562000c35575062000c33603a60008560200151858151811062000c0e5762000c0e62001109565b6020026020010151815260200190815260200160002060010162000ee560201b60201c565b155b1562000c735762000c718360200151838151811062000c585762000c5862001109565b6020026020010151603d62000ef060201b90919060201c565b505b801562000cd9578260200151828151811062000c935762000c9362001109565b602002602001015185151584600001516001600160a01b03167f537ae69afd3600f30d8c662539017cc022c73b04db804445c9eaae801c2f4a8360405160405180910390a45b508062000ce68162001190565b91505062000af0565b5050808062000cfe9062001190565b91505062000a6a565b60005b81518110156200063357600082828151811062000d2b5762000d2b62001109565b602002602001015190506000816020015160ff1611801562000d71575080516000908152603a6020526040902062000d669060010162000ee5565b816020015160ff1611155b60405180604001604052806002815260200161189b60f11b8152509062000dad5760405162461bcd60e51b815260040162000337919062001145565b506020818101805183516000908152603a8452604090819020805460ff191660ff9384161790558451925190519116815290917f799ef5c83e710778f5725ab120f43a73d21b1d98f2e1a058801728ace31275fd910160405180910390a2508062000e188162001190565b91505062000d0a565b6060600080856001600160a01b03168560405162000e409190620011d8565b600060405180830381855af49150503d806000811462000e7d576040519150601f19603f3d011682016040523d82523d6000602084013e62000e82565b606091505b50909250905062000e968683838762000efe565b9695505050505050565b600062000eae838362000f86565b90505b92915050565b600062000eae836001600160a01b03841662000f86565b600062000eae836001600160a01b03841662000fd8565b600062000eb1825490565b600062000eae838362000fd8565b6060831562000f7257825160000362000f6a576001600160a01b0385163b62000f6a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000337565b508162000f7e565b62000f7e8383620010dc565b949350505050565b600081815260018301602052604081205462000fcf5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000eb1565b50600062000eb1565b60008181526001830160205260408120548015620010d157600062000fff600183620011ac565b85549091506000906200101590600190620011ac565b90508181146200108157600086600001828154811062001039576200103962001109565b90600052602060002001549050808760000184815481106200105f576200105f62001109565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620010955762001095620011c2565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000eb1565b600091505062000eb1565b815115620010ed5781518083602001fd5b8060405162461bcd60e51b815260040162000337919062001145565b634e487b7160e01b600052603260045260246000fd5b60005b838110156200113c57818101518382015260200162001122565b50506000910152565b6020815260008251806020840152620011668160408501602087016200111f565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b600060018201620011a557620011a56200117a565b5060010190565b8181038181111562000eb15762000eb16200117a565b634e487b7160e01b600052603160045260246000fd5b60008251620011ec8184602087016200111f565b9190910192915050565b61411980620012066000396000f3fe6080604052600436106102345760003560e01c80639b6c7efa1161012e578063db58eaec116100ab578063efe4b0ae1161006f578063efe4b0ae146107ce578063f2fde38b146107e3578063f62b984314610803578063fc52539514610823578063fe46a4131461084357600080fd5b8063db58eaec1461071e578063e01658d91461074e578063e3a95a5a1461076e578063ed68595a1461078e578063eed88b8d146107ae57600080fd5b8063a4757b0f116100f2578063a4757b0f14610526578063aa3f85c814610634578063c37255f214610671578063c4bffe2b14610691578063c71cca16146106b357600080fd5b80639b6c7efa146105845780639d0cb9d4146105b4578063a25d3892146105d4578063a2711ff4146105f4578063a3d5b2551461061457600080fd5b80635b9d97c6116101bc57806376e5379a1161018057806376e5379a146104bc57806383fec72c146105065780638da5cb5b1461052657806390f7af5414610544578063917cbb9b1461056457600080fd5b80635b9d97c6146103d5578063654a812b146104025780636e74ebe814610421578063715018a6146104875780637670d1d81461049c57600080fd5b80633805e84e116102035780633805e84e146102e55780633eb59f601461032e578063436bd1031461034e578063452a93201461036e57806355c4fed4146103a057600080fd5b80630a234b15146102405780630fb9ca41146102625780631947051e1461029857806334f7870c146102b857600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5061026061025b36600461327f565b610863565b005b34801561026e57600080fd5b5061028261027d36600461332b565b610877565b60405161028f91906133a1565b60405180910390f35b3480156102a457600080fd5b506102606102b3366004613451565b61089d565b3480156102c457600080fd5b506102d86102d3366004613485565b6109e1565b60405161028f919061349e565b3480156102f157600080fd5b5061031e6103003660046134fa565b6001600160a01b031660009081526004602052604090205460ff1690565b604051901515815260200161028f565b34801561033a57600080fd5b50610260610349366004613586565b610a6c565b34801561035a57600080fd5b5061031e610369366004613451565b610e2d565b34801561037a57600080fd5b506001546001600160a01b03165b6040516001600160a01b03909116815260200161028f565b3480156103ac57600080fd5b506103c06103bb3660046135f2565b610e3b565b6040805192835260208301919091520161028f565b3480156103e157600080fd5b506103f56103f0366004613485565b611092565b60405161028f9190613654565b34801561040e57600080fd5b506003545b60405190815260200161028f565b34801561042d57600080fd5b5061028261043c366004613485565b6040805180820190915260008082526020820152506000908152603a602090815260409182902082518084019093525460ff8116835261010090046001600160781b03169082015290565b34801561049357600080fd5b506102606110af565b3480156104a857600080fd5b506102606104b73660046136a1565b6110c3565b3480156104c857600080fd5b5061031e6104d73660046136d5565b6000828152603b602090815260408083206001600160a01b038516845260010190915290205460ff1692915050565b34801561051257600080fd5b506102606105213660046138c2565b6110d6565b34801561053257600080fd5b506000546001600160a01b0316610388565b34801561055057600080fd5b5061026061055f3660046136a1565b6111ac565b34801561057057600080fd5b5061026061057f36600461398e565b6111bf565b34801561059057600080fd5b5061031e61059f366004613485565b60009081526006602052604090205460ff1690565b3480156105c057600080fd5b506102606105cf3660046139d6565b6111d0565b3480156105e057600080fd5b506104136105ef366004613a0a565b6111e3565b34801561060057600080fd5b5061026061060f366004613a4e565b611397565b34801561062057600080fd5b5061026061062f366004613b0f565b6113a8565b34801561064057600080fd5b5061066461064f366004613485565b6000908152603c602052604090205460ff1690565b60405161028f9190613b66565b34801561067d57600080fd5b5061031e61068c36600461332b565b61146e565b34801561069d57600080fd5b506106a661147c565b60405161028f9190613b8e565b3480156106bf57600080fd5b506102826106ce366004613485565b6040805180820190915260008082526020820152506040805180820182526000838152603b60208181529382205460ff811684529490915282526101009092046001600160781b03169082015290565b34801561072a57600080fd5b5061031e610739366004613485565b60009081526005602052604090205460ff1690565b34801561075a57600080fd5b50610664610769366004613451565b611488565b34801561077a57600080fd5b506102606107893660046139d6565b611496565b34801561079a57600080fd5b506102606107a9366004613bc6565b6114a9565b3480156107ba57600080fd5b506102606107c9366004613bfb565b611879565b3480156107da57600080fd5b50600254610413565b3480156107ef57600080fd5b506102606107fe3660046134fa565b6119c0565b34801561080f57600080fd5b5061031e61081e366004613bfb565b611a36565b34801561082f57600080fd5b5061026061083e3660046134fa565b611a58565b34801561084f57600080fd5b5061026061085e366004613c27565b611a69565b61086b611a7a565b61087481611ad4565b50565b60408051808201909152600080825260208201526108976106ce83611d78565b92915050565b60006108a882611d8f565b905060016000828152603c602052604090205460ff1660028111156108cf576108cf613b50565b1460405180604001604052806002815260200161191960f11b815250906109125760405162461bcd60e51b81526004016109099190613cab565b60405180910390fd5b506000818152603c6020908152604091829020805460ff191660021790558382015190840151606085015160a08601519351630a81a65d60e11b81526001600160a01b03909316936315034cba9361096f93929190600401613cbe565b600060405180830381600087803b15801561098957600080fd5b505af115801561099d573d6000803e3d6000fd5b505050507fa2540dac02f8d07ec0107c5fc2172e2c49d3231e86a21cb02b47058635ae97ab818360016040516109d593929190613d43565b60405180910390a15050565b606060076000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610a61576000848152602090819020604080518082019091526002850290910180546001600160a01b03908116835260019182015416828401529083529092019101610a16565b505050509050919050565b610a74611d9b565b8251602084012060009060008181526006602052604090205490915060ff1660405180604001604052806002815260200161313960f01b81525090610acc5760405162461bcd60e51b81526004016109099190613cab565b506000610ad885611e0a565b90506000610ae582611e33565b905060006007600083608001518152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610b6b576000848152602090819020604080518082019091526002850290910180546001600160a01b03908116835260019182015416828401529083529092019101610b20565b5050505090506000815111604051806040016040528060028152602001610c4d60f21b81525090610baf5760405162461bcd60e51b81526004016109099190613cab565b50600085516001600160401b03811115610bcb57610bcb6130da565b604051908082528060200260200182016040528015610c1057816020015b6040805180820190915260008082526020820152815260200190600190039081610be95790505b50905060005b8651811015610dc8576000610c2c826001613d84565b90505b8751811015610ccc57878181518110610c4a57610c4a613d97565b60200260200101516001600160a01b0316888381518110610c6d57610c6d613d97565b60200260200101516001600160a01b0316141560405180604001604052806002815260200161323160f01b81525090610cb95760405162461bcd60e51b81526004016109099190613cab565b5080610cc481613dad565b915050610c2f565b506000805b8451811015610d7b57848181518110610cec57610cec613d97565b6020026020010151602001516001600160a01b0316898481518110610d1357610d13613d97565b60200260200101516001600160a01b031603610d6957848181518110610d3b57610d3b613d97565b6020026020010151848481518110610d5557610d55613d97565b602002602001018190525060019150610d7b565b80610d7381613dad565b915050610cd1565b50604080518082019091526002815261062760f31b602082015281610db35760405162461bcd60e51b81526004016109099190613cab565b50508080610dc090613dad565b915050610c16565b506000610de5610dd786611e48565b878b87608001518c87611e5b565b90508060405180604001604052806002815260200161032360f41b81525090610e215760405162461bcd60e51b81526004016109099190613cab565b50505050505050505050565b600061089761073983611d8f565b33600090815260046020526040812054819060ff16604051806040016040528060018152602001601960f91b81525090610e885760405162461bcd60e51b81526004016109099190613cab565b50600086815260076020908152604080832080548251818502810185019093528083529192909190849084015b82821015610f00576000848152602090819020604080518082019091526002850290910180546001600160a01b03908116835260019182015416828401529083529092019101610eb5565b5050505090506000815111604051806040016040528060028152602001610c4d60f21b81525090610f445760405162461bcd60e51b81526004016109099190613cab565b506002805460009182610f5683613dad565b91905055905060006040518060c00160405280838152602001336001600160a01b03168152602001896001600160a01b031681526020014681526020018a81526020018781525090506000610faa82612005565b6020808201805160009081526005909252604091829020805460ff19166001179055519051919250907f18d245f6501b267c6fc4ab6bb6f037c83d28a9ab089e79ab063162d414d2d9c990611000908590613dc6565b60405180910390a2600061103e60405180604001604052806003600081548092919061102b90613dad565b9091555081528451602090910152612066565b6020808201805160009081526006835260409020805460ff1916600117905590840151905182516080870151939450611078938d8a611e5b565b50602091820151910151909a909950975050505050505050565b6000818152603a60205260409020606090610897906001016120a1565b6110b7611a7a565b6110c160006120ae565b565b6110cb611a7a565b6108748160006120fe565b607154610100900460ff16158080156110f65750607154600160ff909116105b806111105750303b158015611110575060715460ff166001145b61112c5760405162461bcd60e51b815260040161090990613dd9565b6071805460ff19166001179055801561114f576071805461ff0019166101001790555b61115d87878787878761222e565b80156111a3576071805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6111b4611a7a565b6108748160016120fe565b6111c7611a7a565b6108748161235f565b6111d8611a7a565b61087481600161262b565b60006111ed611d9b565b60006111f884612005565b9050611217816020015160009081526005602052604090205460ff1690565b604051806040016040528060018152602001603360f81b8152509061124f5760405162461bcd60e51b81526004016109099190613cab565b5060006007600086608001518152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156112d4576000848152602090819020604080518082019091526002850290910180546001600160a01b03908116835260019182015416828401529083529092019101611289565b5050505090506000815111604051806040016040528060028152602001610c4d60f21b815250906113185760405162461bcd60e51b81526004016109099190613cab565b50600061134f60405180604001604052806003600081548092919061133c90613dad565b9091555081528551602090910152612066565b6020808201805160009081526006835260409020805460ff19166001179055908501519051825160808a0151939450611389938987611e5b565b506020015195945050505050565b61139f611a7a565b61087481612896565b6000546001600160a01b031633146113f95760405162461bcd60e51b815260206004820152601460248201527327a7262cafa922a9a1aaa2afa3aaa0a92224a0a760611b6044820152606401610909565b61140d6001600160a01b03841683836129bf565b816001600160a01b0316836001600160a01b0316336001600160a01b03167fc7af665d489507e14ae25ac7ab0030fc7f570869610bdd32117ea56b60ae5c618460405161145c91815260200190565b60405180910390a4505050565b905090565b600061089761059f83611d78565b6060611469603d6120a1565b600061089761064f83611d8f565b61149e611a7a565b61087481600061262b565b806114b43382611a36565b604051806040016040528060018152602001603560f81b815250906114ec5760405162461bcd60e51b81526004016109099190613cab565b5060006114f884611e0a565b9050600061150582611e33565b905083816060015114801561151d5750468160800151145b60405180604001604052806002815260200161333360f01b815250906115565760405162461bcd60e51b81526004016109099190613cab565b50600061156283611e48565b865160208801209091506000906000818152603b602090815260408083208a8452603a83529281902081518083019092525460ff811682526001600160781b03610100918290048116938301939093528354949550929390929004168015806115fd575033600090815260018401602052604090205460ff161580156115fd575081602001516001600160781b0316816001600160781b0316115b15610e2157806001600160781b0316600003611632578254610100600160801b031916610100426001600160781b0316021783555b8254600090849082906116479060ff16613e27565b825460ff8083166101009490940a93840293021916919091179091553360008181526001878101602052604091829020805460ff1916909117905551919250908b9088907f5353716bf921d1d85f5567a99a718cc63ff1182dca5f9163d9e9b8f1fc3ac387906116bc908a908e908890613e65565b60405180910390a46000868152603c602052604081205460ff1660028111156116e7576116e7613b50565b146116f9575050505050505050505050565b825160ff16158015906117165750826000015160ff168160ff1610155b1561186b576000868152603c6020908152604091829020805460ff19166002179055888201519089015160608a015160a08b01519351630a81a65d60e11b81526001600160a01b03909316936315034cba9361177793929190600401613cbe565b600060405180830381600087803b15801561179157600080fd5b505af19250505080156117a2575060015b61182e573d8080156117d0576040519150601f19603f3d011682016040523d82523d6000602084013e6117d5565b606091505b506000878152603c6020526040808220805460ff19166001179055517fa2540dac02f8d07ec0107c5fc2172e2c49d3231e86a21cb02b47058635ae97ab91611820918a918c91613d43565b60405180910390a15061186b565b7fa2540dac02f8d07ec0107c5fc2172e2c49d3231e86a21cb02b47058635ae97ab8688600160405161186293929190613d43565b60405180910390a15b50505050505050505b505050565b6000546001600160a01b031633146118ca5760405162461bcd60e51b815260206004820152601460248201527327a7262cafa922a9a1aaa2afa3aaa0a92224a0a760611b6044820152606401610909565b604080516000808252602082019092526001600160a01b0384169083906040516118f49190613e91565b60006040518083038185875af1925050503d8060008114611931576040519150601f19603f3d011682016040523d82523d6000602084013e611936565b606091505b505090508061197b5760405162461bcd60e51b815260206004820152601160248201527011551217d514905394d1915497d1905253607a1b6044820152606401610909565b6040518281526001600160a01b0384169033907fb7c602059992183c7b767c08204223afc99f1895fd175adf9ece23ce9f5bb8b79060200160405180910390a3505050565b6119c8611a7a565b6001600160a01b038116611a2d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610909565b610874816120ae565b6000818152603a60205260408120611a519060010184612a11565b9392505050565b611a60611d9b565b61087481612a33565b611a71611a7a565b61087481612a8d565b6000546001600160a01b031633146110c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b60005b8151811015611d74576000828281518110611af457611af4613d97565b6020026020010151905060006001600160a01b031681602001516001600160a01b031614158015611b2e575080516001600160a01b031615155b604051806040016040528060018152602001600d60fa1b81525090611b665760405162461bcd60e51b81526004016109099190613cab565b506040808201516000908152600760205290812090805b8254811015611c60576000838281548110611b9a57611b9a613d97565b60009182526020909120865160029092020160018101549092506001600160a01b03918216911603611c4d57602085015181546001600160a01b03908116911614611c435760208581015182546001600160a01b0319166001600160a01b03918216908117845587516040808a015190519283526001949190931692917f2152376b51b154ef9693e64efbda43bd7ecd04ccb98df7f6caf781078eca308d910160405180910390a45b6001925050611c60565b5080611c5881613dad565b915050611b7d565b5080611d5e5782516040805160048152602481018252602080820180516001600160e01b03166352d1043d60e01b17905282518084019093526002835261199960f11b90830152611cb19291612b9a565b50604080518082018252602085810180516001600160a01b03908116845287518116838501908152875460018082018a5560008a81528690209651600290920290960180549184166001600160a01b03199283161781559151918601805492841692909116919091179055875188860151925195519582168652939493169290917f2152376b51b154ef9693e64efbda43bd7ecd04ccb98df7f6caf781078eca308d910160405180910390a45b5050508080611d6c90613dad565b915050611ad7565b5050565b600080611d8483612066565b602001519392505050565b600080611d8483612005565b6000546001600160a01b0316331480611dbe57506001546001600160a01b031633145b6110c15760405162461bcd60e51b815260206004820152601960248201527f4f4e4c595f42595f4f574e45525f4f525f475541524449414e000000000000006044820152606401610909565b604080518082019091526000815260606020820152818060200190518101906108979190613ef2565b611e3b613092565b6108978260200151612c12565b6020808201518051910120600090610897565b600080805b8351811015611ff957600080858381518110611e7e57611e7e613d97565b6020026020010151602001516001600160a01b03166336da7a0660e01b878581518110611ead57611ead613d97565b602002602001015160000151898b8d604051602401611ecf9493929190613f59565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611f0d9190613e91565b600060405180830381855af49150503d8060008114611f48576040519150601f19603f3d011682016040523d82523d6000602084013e611f4d565b606091505b50915091508115611f5d57600193505b811515868481518110611f7257611f72613d97565b6020026020010151602001516001600160a01b03168c7f935aa87d643578e6395c90fdbd5d50ffee5f2c1f6ce2cd01274740412bb679f48d8d8d8c8a81518110611fbe57611fbe613d97565b60200260200101516000015188604051611fdc959493929190613f86565b60405180910390a450508080611ff190613dad565b915050611e60565b50979650505050505050565b604080518082019091526060815260006020820152604080518082019091526060815260006020820152826040516020016120409190613dc6565b60408051808303601f190181529190528082528051602090910120602082015292915050565b604080518082019091526060815260006020820152604080518082019091526060815260006020820152826040516020016120409190613fd3565b60606000611a5183612c2e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b82518110156118745760006001600160a01b031683828151811061212757612127613d97565b60200260200101516001600160a01b0316141560405180604001604052806002815260200161199b60f11b815250906121735760405162461bcd60e51b81526004016109099190613cab565b50816004600085848151811061218b5761218b613d97565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508115158382815181106121df576121df613d97565b60200260200101516001600160a01b03167f626c27c1d088fd70034e681d579a5efd004c3d47a56d3ee07ad256ac7301433360405160405180910390a38061222681613dad565b915050612101565b607154610100900460ff161580801561224e5750607154600160ff909116105b806122685750303b158015612268575060715460ff166001145b6122845760405162461bcd60e51b815260040161090990613dd9565b6071805460ff1916600117905580156122a7576071805461ff0019166101001790555b6122b0876120ae565b6122b986612a33565b60408051600080825260208201909252612304918691906122fd565b6040805180820190915260008152606060208201528152602001906001900390816122d55790505b5087612c8a565b6040805160008082526020820190925261115d91859190612348565b6040805180820190915260008152606060208201528152602001906001900390816123205790505b506040805160008152602081019091528590612ca9565b60005b8151811015611d745760005b82828151811061238057612380613d97565b60200260200101516020015151811015612618576000600760008585815181106123ac576123ac613d97565b60200260200101516020015184815181106123c9576123c9613d97565b60200260200101518152602001908152602001600020905060005b8154811015612603578484815181106123ff576123ff613d97565b6020026020010151600001516001600160a01b031682828154811061242657612426613d97565b60009182526020909120600160029092020101546001600160a01b0316036125f157600082828154811061245c5761245c613d97565b600091825260209091206002909102015483546001600160a01b039091169150839061248a90600190613fe6565b8154811061249a5761249a613d97565b90600052602060002090600202018383815481106124ba576124ba613d97565b60009182526020909120825460029092020180546001600160a01b039283166001600160a01b0319918216178255600193840154939091018054939092169216919091179055825483908061251157612511613ff9565b60008281526020812060026000199093019283020180546001600160a01b03199081168255600191909101805490911690559155865187908790811061255957612559613d97565b6020026020010151600001516001600160a01b031687878151811061258057612580613d97565b602002602001015160200151868151811061259d5761259d613d97565b60200260200101517f2152376b51b154ef9693e64efbda43bd7ecd04ccb98df7f6caf781078eca308d846040516125e391906001600160a01b0391909116815260200190565b60405180910390a450612603565b806125fb81613dad565b9150506123e4565b5050808061261090613dad565b91505061236e565b508061262381613dad565b915050612362565b60005b825181101561187457600083828151811061264b5761264b613d97565b6020026020010151905060006001600160a01b031681600001516001600160a01b0316141560405180604001604052806002815260200161062760f31b815250906126a95760405162461bcd60e51b81526004016109099190613cab565b5060005b8160200151518110156128815760008415612744576126f3836020015183815181106126db576126db613d97565b6020026020010151603d612cd790919063ffffffff16565b5061273d8360000151603a60008660200151868151811061271657612716613d97565b60200260200101518152602001908152602001600020600101612ce390919063ffffffff16565b905061280c565b61278d8360000151603a60008660200151868151811061276657612766613d97565b60200260200101518152602001908152602001600020600101612cf890919063ffffffff16565b90508080156127d457506127d2603a6000856020015185815181106127b4576127b4613d97565b60200260200101518152602001908152602001600020600101612d0d565b155b1561280c5761280a836020015183815181106127f2576127f2613d97565b6020026020010151603d612d1790919063ffffffff16565b505b801561286e578260200151828151811061282857612828613d97565b602002602001015185151584600001516001600160a01b03167f537ae69afd3600f30d8c662539017cc022c73b04db804445c9eaae801c2f4a8360405160405180910390a45b508061287981613dad565b9150506126ad565b5050808061288e90613dad565b91505061262e565b60005b8151811015611d745760008282815181106128b6576128b6613d97565b60209081029190910181015180516000908152603a83526040902054918101519092506001600160781b036101009092048216911611801561290557504281602001516001600160781b031611155b604051806040016040528060018152602001601b60f91b8152509061293d5760405162461bcd60e51b81526004016109099190613cab565b506020818101805183516000908152603a84526040908190208054610100600160801b0319166101006001600160781b03948516021790558451925190519116815290917f79b1ca301c237cd649b2d35eb6f0873650079b8bb613a17279bbf80332754ddd910160405180910390a250806129b781613dad565b915050612899565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611874908490612d23565b6001600160a01b03811660009081526001830160205260408120541515611a51565b600180546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f064d28d3d3071c5cbc271a261c10c2f0f0d9e319390397101aa0eb23c6bad90991016109d5565b60005b8151811015611d74576000828281518110612aad57612aad613d97565b602002602001015190506000816020015160ff16118015612af0575080516000908152603a60205260409020612ae590600101612d0d565b816020015160ff1611155b60405180604001604052806002815260200161189b60f11b81525090612b295760405162461bcd60e51b81526004016109099190613cab565b506020818101805183516000908152603a8452604090819020805460ff191660ff9384161790558451925190519116815290917f799ef5c83e710778f5725ab120f43a73d21b1d98f2e1a058801728ace31275fd910160405180910390a25080612b9281613dad565b915050612a90565b6060600080856001600160a01b031685604051612bb79190613e91565b600060405180830381855af49150503d8060008114612bf2576040519150601f19603f3d011682016040523d82523d6000602084013e612bf7565b606091505b5091509150612c0886838387612d86565b9695505050505050565b612c1a613092565b81806020019051810190610897919061400f565b606081600001805480602002602001604051908101604052809291908181526020018280548015612c7e57602002820191906000526020600020905b815481526020019060010190808311612c6a575b50505050509050919050565b612c9583600161262b565b612ca082600061262b565b61187481612a8d565b612cb284611ad4565b612cbb8361235f565b612cc68260016120fe565b612cd18160006120fe565b50505050565b6000611a518383612e07565b6000611a51836001600160a01b038416612e07565b6000611a51836001600160a01b038416612e56565b6000610897825490565b6000611a518383612e56565b6000612d386001600160a01b03841683612f49565b90508051600014158015612d5d575080806020019051810190612d5b91906140c1565b155b1561187457604051635274afe760e01b81526001600160a01b0384166004820152602401610909565b60608315612df5578251600003612dee576001600160a01b0385163b612dee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610909565b5081612dff565b612dff8383612f8d565b949350505050565b6000818152600183016020526040812054612e4e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610897565b506000610897565b60008181526001830160205260408120548015612f3f576000612e7a600183613fe6565b8554909150600090612e8e90600190613fe6565b9050818114612ef3576000866000018281548110612eae57612eae613d97565b9060005260206000200154905080876000018481548110612ed157612ed1613d97565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612f0457612f04613ff9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610897565b6000915050610897565b6060611a51838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250612fb7565b815115612f9d5781518083602001fd5b8060405162461bcd60e51b81526004016109099190613cab565b6060824710156130185760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610909565b600080866001600160a01b031685876040516130349190613e91565b60006040518083038185875af1925050503d8060008114613071576040519150601f19603f3d011682016040523d82523d6000602084013e613076565b606091505b509150915061308787838387612d86565b979650505050505050565b6040518060c001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001606081525090565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613112576131126130da565b60405290565b604080519081016001600160401b0381118282101715613112576131126130da565b60405160c081016001600160401b0381118282101715613112576131126130da565b604051601f8201601f191681016001600160401b0381118282101715613184576131846130da565b604052919050565b60006001600160401b038211156131a5576131a56130da565b5060051b60200190565b6001600160a01b038116811461087457600080fd5b80356131cf816131af565b919050565b600082601f8301126131e557600080fd5b813560206131fa6131f58361318c565b61315c565b8281526060928302850182019282820191908785111561321957600080fd5b8387015b858110156132725781818a0312156132355760008081fd5b61323d6130f0565b8135613248816131af565b815281860135613257816131af565b8187015260408281013590820152845292840192810161321d565b5090979650505050505050565b60006020828403121561329157600080fd5b81356001600160401b038111156132a757600080fd5b612dff848285016131d4565b60006001600160401b038211156132cc576132cc6130da565b50601f01601f191660200190565b600082601f8301126132eb57600080fd5b81356132f96131f5826132b3565b81815284602083860101111561330e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561333d57600080fd5b81356001600160401b038082111561335457600080fd5b908301906040828603121561336857600080fd5b613370613118565b8235815260208301358281111561338657600080fd5b613392878286016132da565b60208301525095945050505050565b815160ff1681526020808301516001600160781b03169082015260408101610897565b600060c082840312156133d657600080fd5b6133de61313a565b90508135815260208201356133f2816131af565b60208201526040820135613405816131af565b80604083015250606082013560608201526080820135608082015260a08201356001600160401b0381111561343957600080fd5b613445848285016132da565b60a08301525092915050565b60006020828403121561346357600080fd5b81356001600160401b0381111561347957600080fd5b612dff848285016133c4565b60006020828403121561349757600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b828110156134ed57815180516001600160a01b03908116865290870151168685015292840192908501906001016134bb565b5091979650505050505050565b60006020828403121561350c57600080fd5b8135611a51816131af565b600082601f83011261352857600080fd5b813560206135386131f58361318c565b82815260059290921b8401810191818101908684111561355757600080fd5b8286015b8481101561357b57803561356e816131af565b835291830191830161355b565b509695505050505050565b60008060006060848603121561359b57600080fd5b83356001600160401b03808211156135b257600080fd5b6135be878388016132da565b94506020860135935060408601359150808211156135db57600080fd5b506135e886828701613517565b9150509250925092565b6000806000806080858703121561360857600080fd5b84359350602085013561361a816131af565b92506040850135915060608501356001600160401b0381111561363c57600080fd5b613648878288016132da565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b818110156136955783516001600160a01b031683529284019291840191600101613670565b50909695505050505050565b6000602082840312156136b357600080fd5b81356001600160401b038111156136c957600080fd5b612dff84828501613517565b600080604083850312156136e857600080fd5b8235915060208301356136fa816131af565b809150509250929050565b600082601f83011261371657600080fd5b813560206137266131f58361318c565b82815260069290921b8401810191818101908684111561374557600080fd5b8286015b8481101561357b57604081890312156137625760008081fd5b61376a613118565b813581528482013560ff811681146137825760008081fd5b81860152835291830191604001613749565b60006137a26131f58461318c565b8381529050602080820190600585811b8501878111156137c157600080fd5b855b818110156138965780356001600160401b03808211156137e35760008081fd5b908801906040828c0312156137f85760008081fd5b613800613118565b823561380b816131af565b8152828701358281111561381f5760008081fd5b8084019350508b601f84011261383757600091508182fd5b823591506138476131f58361318c565b82815291861b8301870191878101908d8411156138645760008081fd5b938801935b8385101561388257843582529388019390880190613869565b8289015250875250509383019383016137c3565b50505050509392505050565b600082601f8301126138b357600080fd5b611a5183833560208501613794565b60008060008060008060c087890312156138db57600080fd5b6138e4876131c4565b95506138f2602088016131c4565b945060408701356001600160401b038082111561390e57600080fd5b61391a8a838b01613705565b9550606089013591508082111561393057600080fd5b61393c8a838b016138a2565b9450608089013591508082111561395257600080fd5b61395e8a838b016131d4565b935060a089013591508082111561397457600080fd5b5061398189828a01613517565b9150509295509295509295565b6000602082840312156139a057600080fd5b81356001600160401b038111156139b657600080fd5b8201601f810184136139c757600080fd5b612dff84823560208401613794565b6000602082840312156139e857600080fd5b81356001600160401b038111156139fe57600080fd5b612dff848285016138a2565b60008060408385031215613a1d57600080fd5b82356001600160401b03811115613a3357600080fd5b613a3f858286016133c4565b95602094909401359450505050565b60006020808385031215613a6157600080fd5b82356001600160401b03811115613a7757600080fd5b8301601f81018513613a8857600080fd5b8035613a966131f58261318c565b81815260069190911b82018301908381019087831115613ab557600080fd5b928401925b828410156130875760408489031215613ad35760008081fd5b613adb613118565b84358152858501356001600160781b0381168114613af95760008081fd5b8187015282526040939093019290840190613aba565b600080600060608486031215613b2457600080fd5b8335613b2f816131af565b92506020840135613b3f816131af565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b6020810160038310613b8857634e487b7160e01b600052602160045260246000fd5b91905290565b6020808252825182820181905260009190848201906040850190845b8181101561369557835183529284019291840191600101613baa565b60008060408385031215613bd957600080fd5b82356001600160401b03811115613bef57600080fd5b613a3f858286016132da565b60008060408385031215613c0e57600080fd5b8235613c19816131af565b946020939093013593505050565b600060208284031215613c3957600080fd5b81356001600160401b03811115613c4f57600080fd5b612dff84828501613705565b60005b83811015613c76578181015183820152602001613c5e565b50506000910152565b60008151808452613c97816020860160208601613c5b565b601f01601f19169290920160200192915050565b602081526000611a516020830184613c7f565b60018060a01b0384168152826020820152606060408201526000613ce56060830184613c7f565b95945050505050565b805182526000602082015160018060a01b0380821660208601528060408501511660408601525050606082015160608401526080820151608084015260a082015160c060a0850152612dff60c0850182613c7f565b838152606060208201526000613d5c6060830185613cee565b90508215156040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561089757610897613d6e565b634e487b7160e01b600052603260045260246000fd5b600060018201613dbf57613dbf613d6e565b5060010190565b602081526000611a516020830184613cee565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600060ff821660ff8103613e3d57613e3d613d6e565b60010192915050565b805182526000602082015160406020850152612dff6040850182613c7f565b838152606060208201526000613e7e6060830185613e46565b905060ff83166040830152949350505050565b60008251613ea3818460208701613c5b565b9190910192915050565b600082601f830112613ebe57600080fd5b8151613ecc6131f5826132b3565b818152846020838601011115613ee157600080fd5b612dff826020830160208701613c5b565b600060208284031215613f0457600080fd5b81516001600160401b0380821115613f1b57600080fd5b9083019060408286031215613f2f57600080fd5b613f37613118565b82518152602083015182811115613f4d57600080fd5b61339287828601613ead565b60018060a01b0385168152836020820152826040820152608060608201526000612c086080830184613c7f565b85815260a060208201526000613f9f60a0830187613c7f565b604083018690526001600160a01b03851660608401528281036080840152613fc78185613c7f565b98975050505050505050565b602081526000611a516020830184613e46565b8181038181111561089757610897613d6e565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561402157600080fd5b81516001600160401b038082111561403857600080fd5b9083019060c0828603121561404c57600080fd5b61405461313a565b825181526020830151614066816131af565b60208201526040830151614079816131af565b80604083015250606083015160608201526080830151608082015260a0830151828111156140a657600080fd5b6140b287828601613ead565b60a08301525095945050505050565b6000602082840312156140d357600080fd5b81518015158114611a5157600080fdfea26469706673582212203a0fbfd27f57c353abc9a31d82a049872a39cd8f74784ad37f693ebab944aad064736f6c634300081300332152376b51b154ef9693e64efbda43bd7ecd04ccb98df7f6caf781078eca308d", - "sourceMap": "393:667:178:-:0;;;;;;;;;;;;-1:-1:-1;1092:26:177;;;1116:1;1092:26;;;;;;;;;;;;;393:667:178;;;;;;;;;-1:-1:-1;393:667:178;;;;;;;1092:26:177;;;;;;;;;;;;;;;-1:-1:-1;1120:41:177;;;1159:1;1120:41;;;;;;;;;;;;;393:667:178;;;;;;;;;-1:-1:-1;393:667:178;;;;;;;1120:41:177;;;;;;;;;;;;;;;-1:-1:-1;1187:42:177;;;1227:1;1187:42;;;;;;;;;;;;;393:667:178;;;;;;;;-1:-1:-1;393:667:178;;;;;;;;;;;;;;1187:42:177;;-1:-1:-1;;1187:42:177;;;;;;;;;;;-1:-1:-1;1231:16:177;;;1245:1;1231:16;;;;;;;;1031:32:71;831:10:70;1031:18:71;:32::i;:::-;289:29:64;831:10:70;289:15:64;:29::i;:::-;3022:31:180;;;3051:1;3022:31;;;;;;;;;2959:148;;2992:22;;3022:31;;;;393:667:178;;;;;;;;;-1:-1:-1;393:667:178;;;;;;;3022:31:180;;;;;;;;;;;;;;;-1:-1:-1;3085:16:180;;;3099:1;3085:16;;;;;;;;3061;;2959:25;:148::i;:::-;-1:-1:-1;;2472:41:181;;;2511:1;2472:41;;;;;;;;;2411:144;;2443:21;;2472:41;;;;393:667:178;;;;;;;;;-1:-1:-1;393:667:178;;;;;;;2472:41:181;;;;;;;;;;;;;;;-1:-1:-1;2521:28:181;2411:24;:144::i;:::-;-1:-1:-1;3167:22:80;;-1:-1:-1;3167:20:80;:22::i;:::-;393:667:178;;2428:173:71;2497:16;2516:6;;-1:-1:-1;;;;;2528:17:71;;;-1:-1:-1;;;;;;2528:17:71;;;;;;2556:40;;2516:6;;;;;;;2556:40;;2497:16;2556:40;2491:110;2428:173;:::o;814:178:64:-;897:9;;;-1:-1:-1;;;;;912:23:64;;;-1:-1:-1;;;;;;912:23:64;;;;;;;946:41;;;897:9;;;;358:34:290;;;423:2;408:18;;401:43;;;;946:41:64;;293:18:290;946:41:64;;;;;;;869:123;814:178;:::o;16169:426:180:-;16418:38;16440:15;16418:21;:38::i;:::-;16462:40;16485:16;16462:22;:40::i;:::-;16508:37;16523:15;16540:4;16508:14;:37::i;:::-;16551:39;16566:16;16584:5;16551:14;:39::i;:::-;16169:426;;;;:::o;12592:525:181:-;12956:52;12986:15;13003:4;12956:29;:52::i;:::-;13014:54;13044:16;13062:5;13014:29;:54::i;:::-;13074:38;13095:16;13074:20;:38::i;:::-;12592:525;;;:::o;5608:253:80:-;5672:13;;;;;;;5671:14;5663:66;;;;-1:-1:-1;;;5663:66:80;;657:2:290;5663:66:80;;;639:21:290;696:2;676:18;;;669:30;735:34;715:18;;;708:62;-1:-1:-1;;;786:18:290;;;779:37;833:19;;5663:66:80;;;;;;;;;5739:12;;5754:15;5739:12;;;:30;5735:122;;;5779:12;:30;;-1:-1:-1;;5779:30:80;5794:15;5779:30;;;;;;5822:28;;1005:36:290;;;5822:28:80;;993:2:290;978:18;5822:28:80;;;;;;;5735:122;5608:253::o;11856:2445:180:-;11974:9;11969:2328;11993:14;:21;11989:1;:25;11969:2328;;;12029:65;12097:14;12112:1;12097:17;;;;;;;;:::i;:::-;;;;;;;12029:85;;12201:1;-1:-1:-1;;;;;12140:63:180;:24;:49;;;-1:-1:-1;;;;;12140:63:180;;;:141;;;;-1:-1:-1;12217:50:180;;-1:-1:-1;;;;;12217:64:180;;;12140:141;12291:51;;;;;;;;;;;;;-1:-1:-1;;;12291:51:180;;;12123:227;;;;;-1:-1:-1;;;12123:227:180;;;;;;;;:::i;:::-;-1:-1:-1;12443:43:180;;;;;12358:50;12411:83;;;:22;:83;;;;;;12358:50;12579:905;12603:27;;12599:31;;12579:905;;;12647:47;12697:20;12718:1;12697:23;;;;;;;;:::i;:::-;;;;;;;;;12805:50;;12697:23;;;;;12746:45;;;;12697:23;;-1:-1:-1;;;;;;12746:109:180;;;:45;;:109;12731:745;;12955:49;;;;12895:44;;-1:-1:-1;;;;;12895:44:180;;;:109;;;12878:541;;13078:64;;;;;13031:111;;-1:-1:-1;;;;;;13031:111:180;-1:-1:-1;;;;;13031:111:180;;;;;;;;13257:50;;13198:43;;;;;13162:244;;1986:51:290;;;-1:-1:-1;;13162:244:180;;;;;13198:43;-1:-1:-1;;;;;;;;;;;13162:244:180;1959:18:290;13162:244:180;;;;;;;12878:541;13444:4;13430:18;;13460:5;;;12731:745;-1:-1:-1;12632:3:180;;;;:::i;:::-;;;;12579:905;;;;13497:11;13492:799;;13593:50;;13655:59;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13655:59:180;;;-1:-1:-1;;;13655:59:180;;;;13726:35;;;;;;;;;;;-1:-1:-1;;;13726:35:180;;;;;;;13553:218;;13593:50;13726:35;13553:28;:218;:::i;:::-;-1:-1:-1;13819:213:180;;;;;;;;13879:49;;;;;;-1:-1:-1;;;;;13819:213:180;;;;;13969:50;;13819:213;;;;;;;;13782:260;;;;;;;;-1:-1:-1;13782:260:180;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13782:260:180;;;;;;;;;;;;;;;;;;;;;;;;;;14145:50;;14090:43;;;;14207:49;;14058:224;;2004:32:290;;;1986:51;;13782:260:180;;14058:224;;;14090:43;;-1:-1:-1;;;;;;;;;;;14058:224:180;1959:18:290;14058:224:180;;;;;;;13492:799;12021:2276;;;12016:3;;;;;:::i;:::-;;;;11969:2328;;;;11856:2445;:::o;14445:1131::-;14562:9;14557:1015;14581:23;:30;14577:1;:34;14557:1015;;;14631:9;14626:940;14650:23;14674:1;14650:26;;;;;;;;:::i;:::-;;;;;;;:35;;;:42;14646:1;:46;14626:940;;;14709:50;14762:22;:82;14796:23;14820:1;14796:26;;;;;;;;:::i;:::-;;;;;;;:35;;;14832:1;14796:38;;;;;;;;:::i;:::-;;;;;;;14762:82;;;;;;;;;;;14709:135;;14860:9;14855:703;14879:27;;14875:31;;14855:703;;;15007:23;15031:1;15007:26;;;;;;;;:::i;:::-;;;;;;;:40;;;-1:-1:-1;;;;;14942:105:180;:20;14963:1;14942:23;;;;;;;;:::i;:::-;;;;;;;;;:49;:23;;;;;:49;;-1:-1:-1;;;;;14942:49:180;:105;14925:623;;15074:32;15109:20;15130:1;15109:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:48;15219:27;;-1:-1:-1;;;;;15109:48:180;;;;-1:-1:-1;15198:20:180;;15219:31;;15109:48;;15219:31;:::i;:::-;15198:53;;;;;;;;:::i;:::-;;;;;;;;;;;15172:20;15193:1;15172:23;;;;;;;;:::i;:::-;;;;;;;;;:79;;:23;;;;;:79;;-1:-1:-1;;;;;15172:79:180;;;-1:-1:-1;;;;;;15172:79:180;;;;;;-1:-1:-1;15172:79:180;;;;;;;;;;;;;;;;;;;;;;15265:26;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;15265:26:180;;;;;;;;;-1:-1:-1;;;;;;15265:26:180;;;;;;;;;;;;;;;;;;;15401;;:23;;15425:1;;15401:26;;;;;;:::i;:::-;;;;;;;:40;;;-1:-1:-1;;;;;15311:205:180;15347:23;15371:1;15347:26;;;;;;;;:::i;:::-;;;;;;;:35;;;15383:1;15347:38;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;;;;;;;15457:24:180;15311:205;;;;;-1:-1:-1;;;;;2004:32:290;;;;1986:51;;1974:2;1959:18;;1840:203;15311:205:180;;;;;;;;15530:5;;;14925:623;14908:3;;;;:::i;:::-;;;;14855:703;;;;14699:867;14694:3;;;;;:::i;:::-;;;;14626:940;;;-1:-1:-1;14613:3:180;;;;:::i;:::-;;;;14557:1015;;15789:295;15874:9;15869:211;15893:7;:14;15889:1;:18;15869:211;;;15952:1;-1:-1:-1;;;;;15930:24:180;:7;15938:1;15930:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15930:24:180;;;15956:21;;;;;;;;;;;;;-1:-1:-1;;;15956:21:180;;;15922:56;;;;;-1:-1:-1;;;15922:56:180;;;;;;;;:::i;:::-;;16017:8;15986:16;:28;16003:7;16011:1;16003:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15986:28:180;-1:-1:-1;;;;;15986:28:180;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;16064:8;16038:35;;16052:7;16060:1;16052:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;16038:35:180;;;;;;;;;;;15909:3;;;;:::i;:::-;;;;15869:211;;11294:1213:181;11444:9;11439:1064;11463:19;:26;11459:1;:30;11439:1064;;;11504:45;11552:19;11572:1;11552:22;;;;;;;;:::i;:::-;;;;;;;11504:70;;11621:1;-1:-1:-1;;;;;11590:33:181;:5;:19;;;-1:-1:-1;;;;;11590:33:181;;;11625:29;;;;;;;;;;;;;-1:-1:-1;;;11625:29:181;;;11582:73;;;;;-1:-1:-1;;;11582:73:181;;;;;;;;:::i;:::-;;11669:9;11664:833;11684:5;:14;;;:21;11680:1;:25;11664:833;;;11722:20;11756:9;11752:599;;;11779:39;11800:5;:14;;;11815:1;11800:17;;;;;;;;:::i;:::-;;;;;;;11779:16;:20;;;;:39;;;;:::i;:::-;;11848:112;11929:5;:19;;;11848:22;:41;11871:5;:14;;;11886:1;11871:17;;;;;;;;:::i;:::-;;;;;;;11848:41;;;;;;;;;;;:63;;:67;;;;:112;;;;:::i;:::-;11830:130;;11752:599;;;12007:115;12091:5;:19;;;12007:22;:41;12030:5;:14;;;12045:1;12030:17;;;;;;;;:::i;:::-;;;;;;;12007:41;;;;;;;;;;;:63;;:70;;;;:115;;;;:::i;:::-;11989:133;;12151:15;:108;;;;;12182:72;:22;:41;12205:5;:14;;;12220:1;12205:17;;;;;;;;:::i;:::-;;;;;;;12182:41;;;;;;;;;;;:63;;:70;;;:72;;:::i;:::-;:77;12151:108;12134:207;;;12286:42;12310:5;:14;;;12325:1;12310:17;;;;;;;;:::i;:::-;;;;;;;12286:16;:23;;;;:42;;;;:::i;:::-;;12134:207;12364:15;12360:129;;;12460:5;:14;;;12475:1;12460:17;;;;;;;;:::i;:::-;;;;;;;12449:9;12398:80;;12428:5;:19;;;-1:-1:-1;;;;;12398:80:181;;;;;;;;;;;12360:129;-1:-1:-1;11707:3:181;;;;:::i;:::-;;;;11664:833;;;;11496:1007;11491:3;;;;;:::i;:::-;;;;11439:1064;;10402:714;10497:9;10492:620;10512:16;:23;10508:1;:27;10492:620;;;10550:38;10591:16;10608:1;10591:19;;;;;;;;:::i;:::-;;;;;;;10550:60;;10673:1;10635:13;:35;;;:39;;;:178;;;;-1:-1:-1;10760:21:181;;10737:45;;;;:22;:45;;;;;:76;;:67;;:74;:76::i;:::-;10688:13;:35;;;:125;;;;10635:178;10823:37;;;;;;;;;;;;;-1:-1:-1;;;10823:37:181;;;10618:250;;;;;-1:-1:-1;;;10618:250:181;;;;;;;;:::i;:::-;-1:-1:-1;10977:35:181;;;;;;10899:21;;10876:45;;;;:22;:45;;;;;;;:136;;-1:-1:-1;;10876:136:181;;;;;;;;11083:21;;11046:35;;11025:80;;1023:17:290;;1005:36;;11083:21:181;;11025:80;;978:18:290;11025:80:181;;;;;;;-1:-1:-1;10537:3:181;;;;:::i;:::-;;;;10492:620;;6603:301:69;6730:12;6751;6765:23;6792:6;-1:-1:-1;;;;;6792:19:69;6812:4;6792:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6750:67:69;;-1:-1:-1;6750:67:69;-1:-1:-1;6830:69:69;6857:6;6750:67;;6886:12;6830:26;:69::i;:::-;6823:76;6603:301;-1:-1:-1;;;;;;6603:301:69:o;10793:129:63:-;10860:4;10883:32;10888:3;10908:5;10883:4;:32::i;:::-;10876:39;;10793:129;;;;;:::o;8305:150::-;8375:4;8398:50;8403:3;-1:-1:-1;;;;;8423:23:63;;8398:4;:50::i;8623:156::-;8696:4;8719:53;8727:3;-1:-1:-1;;;;;8747:23:63;;8719:7;:53::i;9106:115::-;9169:7;9195:19;9203:3;4545:18;;4463:107;11090:135;11160:4;11183:35;11191:3;11211:5;11183:7;:35::i;7178:548:69:-;7340:12;7364:7;7360:362;;;7385:10;:17;7406:1;7385:22;7381:256;;-1:-1:-1;;;;;1513:19:69;;;7568:60;;;;-1:-1:-1;;;7568:60:69;;3079:2:290;7568:60:69;;;3061:21:290;3118:2;3098:18;;;3091:30;3157:31;3137:18;;;3130:59;3206:18;;7568:60:69;2877:353:290;7568:60:69;-1:-1:-1;7651:10:69;7644:17;;7360:362;7682:33;7690:10;7702:12;7682:7;:33::i;:::-;7178:548;;;;;;:::o;2214:404:63:-;2277:4;4351:19;;;:12;;;:19;;;;;;2293:319;;-1:-1:-1;2335:23:63;;;;;;;;:11;:23;;;;;;;;;;;;;2515:18;;2493:19;;;:12;;;:19;;;;;;:40;;;;2547:11;;2293:319;-1:-1:-1;2596:5:63;2589:12;;2786:1388;2852:4;2989:19;;;:12;;;:19;;;;;;3023:15;;3019:1149;;3392:21;3416:14;3429:1;3416:10;:14;:::i;:::-;3464:18;;3392:38;;-1:-1:-1;3444:17:63;;3464:22;;3485:1;;3464:22;:::i;:::-;3444:42;;3518:13;3505:9;:26;3501:398;;3551:17;3571:3;:11;;3583:9;3571:22;;;;;;;;:::i;:::-;;;;;;;;;3551:42;;3722:9;3693:3;:11;;3705:13;3693:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3805:23;;;:12;;;:23;;;;;:36;;;3501:398;3977:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4069:3;:12;;:19;4082:5;4069:19;;;;;;;;;;;4062:26;;;4110:4;4103:11;;;;;;;3019:1149;4152:5;4145:12;;;;;8192:476:69;8343:17;;:21;8339:325;;8545:10;8539:17;8593:15;8580:10;8576:2;8572:19;8565:44;8339:325;8644:12;8637:20;;-1:-1:-1;;;8637:20:69;;;;;;;;:::i;1052:127:290:-;1113:10;1108:3;1104:20;1101:1;1094:31;1144:4;1141:1;1134:15;1168:4;1165:1;1158:15;1184:250;1269:1;1279:113;1293:6;1290:1;1287:13;1279:113;;;1369:11;;;1363:18;1350:11;;;1343:39;1315:2;1308:10;1279:113;;;-1:-1:-1;;1426:1:290;1408:16;;1401:27;1184:250::o;1439:396::-;1588:2;1577:9;1570:21;1551:4;1620:6;1614:13;1663:6;1658:2;1647:9;1643:18;1636:34;1679:79;1751:6;1746:2;1735:9;1731:18;1726:2;1718:6;1714:15;1679:79;:::i;:::-;1819:2;1798:15;-1:-1:-1;;1794:29:290;1779:45;;;;1826:2;1775:54;;1439:396;-1:-1:-1;;1439:396:290:o;2048:127::-;2109:10;2104:3;2100:20;2097:1;2090:31;2140:4;2137:1;2130:15;2164:4;2161:1;2154:15;2180:135;2219:3;2240:17;;;2237:43;;2260:18;;:::i;:::-;-1:-1:-1;2307:1:290;2296:13;;2180:135::o;2320:128::-;2387:9;;;2408:11;;;2405:37;;;2422:18;;:::i;2453:127::-;2514:10;2509:3;2505:20;2502:1;2495:31;2545:4;2542:1;2535:15;2569:4;2566:1;2559:15;2585:287;2714:3;2752:6;2746:13;2768:66;2827:6;2822:3;2815:4;2807:6;2803:17;2768:66;:::i;:::-;2850:16;;;;;2585:287;-1:-1:-1;;2585:287:290:o;2877:353::-;393:667:178;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x6080604052600436106102345760003560e01c80639b6c7efa1161012e578063db58eaec116100ab578063efe4b0ae1161006f578063efe4b0ae146107ce578063f2fde38b146107e3578063f62b984314610803578063fc52539514610823578063fe46a4131461084357600080fd5b8063db58eaec1461071e578063e01658d91461074e578063e3a95a5a1461076e578063ed68595a1461078e578063eed88b8d146107ae57600080fd5b8063a4757b0f116100f2578063a4757b0f14610526578063aa3f85c814610634578063c37255f214610671578063c4bffe2b14610691578063c71cca16146106b357600080fd5b80639b6c7efa146105845780639d0cb9d4146105b4578063a25d3892146105d4578063a2711ff4146105f4578063a3d5b2551461061457600080fd5b80635b9d97c6116101bc57806376e5379a1161018057806376e5379a146104bc57806383fec72c146105065780638da5cb5b1461052657806390f7af5414610544578063917cbb9b1461056457600080fd5b80635b9d97c6146103d5578063654a812b146104025780636e74ebe814610421578063715018a6146104875780637670d1d81461049c57600080fd5b80633805e84e116102035780633805e84e146102e55780633eb59f601461032e578063436bd1031461034e578063452a93201461036e57806355c4fed4146103a057600080fd5b80630a234b15146102405780630fb9ca41146102625780631947051e1461029857806334f7870c146102b857600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5061026061025b36600461327f565b610863565b005b34801561026e57600080fd5b5061028261027d36600461332b565b610877565b60405161028f91906133a1565b60405180910390f35b3480156102a457600080fd5b506102606102b3366004613451565b61089d565b3480156102c457600080fd5b506102d86102d3366004613485565b6109e1565b60405161028f919061349e565b3480156102f157600080fd5b5061031e6103003660046134fa565b6001600160a01b031660009081526004602052604090205460ff1690565b604051901515815260200161028f565b34801561033a57600080fd5b50610260610349366004613586565b610a6c565b34801561035a57600080fd5b5061031e610369366004613451565b610e2d565b34801561037a57600080fd5b506001546001600160a01b03165b6040516001600160a01b03909116815260200161028f565b3480156103ac57600080fd5b506103c06103bb3660046135f2565b610e3b565b6040805192835260208301919091520161028f565b3480156103e157600080fd5b506103f56103f0366004613485565b611092565b60405161028f9190613654565b34801561040e57600080fd5b506003545b60405190815260200161028f565b34801561042d57600080fd5b5061028261043c366004613485565b6040805180820190915260008082526020820152506000908152603a602090815260409182902082518084019093525460ff8116835261010090046001600160781b03169082015290565b34801561049357600080fd5b506102606110af565b3480156104a857600080fd5b506102606104b73660046136a1565b6110c3565b3480156104c857600080fd5b5061031e6104d73660046136d5565b6000828152603b602090815260408083206001600160a01b038516845260010190915290205460ff1692915050565b34801561051257600080fd5b506102606105213660046138c2565b6110d6565b34801561053257600080fd5b506000546001600160a01b0316610388565b34801561055057600080fd5b5061026061055f3660046136a1565b6111ac565b34801561057057600080fd5b5061026061057f36600461398e565b6111bf565b34801561059057600080fd5b5061031e61059f366004613485565b60009081526006602052604090205460ff1690565b3480156105c057600080fd5b506102606105cf3660046139d6565b6111d0565b3480156105e057600080fd5b506104136105ef366004613a0a565b6111e3565b34801561060057600080fd5b5061026061060f366004613a4e565b611397565b34801561062057600080fd5b5061026061062f366004613b0f565b6113a8565b34801561064057600080fd5b5061066461064f366004613485565b6000908152603c602052604090205460ff1690565b60405161028f9190613b66565b34801561067d57600080fd5b5061031e61068c36600461332b565b61146e565b34801561069d57600080fd5b506106a661147c565b60405161028f9190613b8e565b3480156106bf57600080fd5b506102826106ce366004613485565b6040805180820190915260008082526020820152506040805180820182526000838152603b60208181529382205460ff811684529490915282526101009092046001600160781b03169082015290565b34801561072a57600080fd5b5061031e610739366004613485565b60009081526005602052604090205460ff1690565b34801561075a57600080fd5b50610664610769366004613451565b611488565b34801561077a57600080fd5b506102606107893660046139d6565b611496565b34801561079a57600080fd5b506102606107a9366004613bc6565b6114a9565b3480156107ba57600080fd5b506102606107c9366004613bfb565b611879565b3480156107da57600080fd5b50600254610413565b3480156107ef57600080fd5b506102606107fe3660046134fa565b6119c0565b34801561080f57600080fd5b5061031e61081e366004613bfb565b611a36565b34801561082f57600080fd5b5061026061083e3660046134fa565b611a58565b34801561084f57600080fd5b5061026061085e366004613c27565b611a69565b61086b611a7a565b61087481611ad4565b50565b60408051808201909152600080825260208201526108976106ce83611d78565b92915050565b60006108a882611d8f565b905060016000828152603c602052604090205460ff1660028111156108cf576108cf613b50565b1460405180604001604052806002815260200161191960f11b815250906109125760405162461bcd60e51b81526004016109099190613cab565b60405180910390fd5b506000818152603c6020908152604091829020805460ff191660021790558382015190840151606085015160a08601519351630a81a65d60e11b81526001600160a01b03909316936315034cba9361096f93929190600401613cbe565b600060405180830381600087803b15801561098957600080fd5b505af115801561099d573d6000803e3d6000fd5b505050507fa2540dac02f8d07ec0107c5fc2172e2c49d3231e86a21cb02b47058635ae97ab818360016040516109d593929190613d43565b60405180910390a15050565b606060076000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610a61576000848152602090819020604080518082019091526002850290910180546001600160a01b03908116835260019182015416828401529083529092019101610a16565b505050509050919050565b610a74611d9b565b8251602084012060009060008181526006602052604090205490915060ff1660405180604001604052806002815260200161313960f01b81525090610acc5760405162461bcd60e51b81526004016109099190613cab565b506000610ad885611e0a565b90506000610ae582611e33565b905060006007600083608001518152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610b6b576000848152602090819020604080518082019091526002850290910180546001600160a01b03908116835260019182015416828401529083529092019101610b20565b5050505090506000815111604051806040016040528060028152602001610c4d60f21b81525090610baf5760405162461bcd60e51b81526004016109099190613cab565b50600085516001600160401b03811115610bcb57610bcb6130da565b604051908082528060200260200182016040528015610c1057816020015b6040805180820190915260008082526020820152815260200190600190039081610be95790505b50905060005b8651811015610dc8576000610c2c826001613d84565b90505b8751811015610ccc57878181518110610c4a57610c4a613d97565b60200260200101516001600160a01b0316888381518110610c6d57610c6d613d97565b60200260200101516001600160a01b0316141560405180604001604052806002815260200161323160f01b81525090610cb95760405162461bcd60e51b81526004016109099190613cab565b5080610cc481613dad565b915050610c2f565b506000805b8451811015610d7b57848181518110610cec57610cec613d97565b6020026020010151602001516001600160a01b0316898481518110610d1357610d13613d97565b60200260200101516001600160a01b031603610d6957848181518110610d3b57610d3b613d97565b6020026020010151848481518110610d5557610d55613d97565b602002602001018190525060019150610d7b565b80610d7381613dad565b915050610cd1565b50604080518082019091526002815261062760f31b602082015281610db35760405162461bcd60e51b81526004016109099190613cab565b50508080610dc090613dad565b915050610c16565b506000610de5610dd786611e48565b878b87608001518c87611e5b565b90508060405180604001604052806002815260200161032360f41b81525090610e215760405162461bcd60e51b81526004016109099190613cab565b50505050505050505050565b600061089761073983611d8f565b33600090815260046020526040812054819060ff16604051806040016040528060018152602001601960f91b81525090610e885760405162461bcd60e51b81526004016109099190613cab565b50600086815260076020908152604080832080548251818502810185019093528083529192909190849084015b82821015610f00576000848152602090819020604080518082019091526002850290910180546001600160a01b03908116835260019182015416828401529083529092019101610eb5565b5050505090506000815111604051806040016040528060028152602001610c4d60f21b81525090610f445760405162461bcd60e51b81526004016109099190613cab565b506002805460009182610f5683613dad565b91905055905060006040518060c00160405280838152602001336001600160a01b03168152602001896001600160a01b031681526020014681526020018a81526020018781525090506000610faa82612005565b6020808201805160009081526005909252604091829020805460ff19166001179055519051919250907f18d245f6501b267c6fc4ab6bb6f037c83d28a9ab089e79ab063162d414d2d9c990611000908590613dc6565b60405180910390a2600061103e60405180604001604052806003600081548092919061102b90613dad565b9091555081528451602090910152612066565b6020808201805160009081526006835260409020805460ff1916600117905590840151905182516080870151939450611078938d8a611e5b565b50602091820151910151909a909950975050505050505050565b6000818152603a60205260409020606090610897906001016120a1565b6110b7611a7a565b6110c160006120ae565b565b6110cb611a7a565b6108748160006120fe565b607154610100900460ff16158080156110f65750607154600160ff909116105b806111105750303b158015611110575060715460ff166001145b61112c5760405162461bcd60e51b815260040161090990613dd9565b6071805460ff19166001179055801561114f576071805461ff0019166101001790555b61115d87878787878761222e565b80156111a3576071805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6111b4611a7a565b6108748160016120fe565b6111c7611a7a565b6108748161235f565b6111d8611a7a565b61087481600161262b565b60006111ed611d9b565b60006111f884612005565b9050611217816020015160009081526005602052604090205460ff1690565b604051806040016040528060018152602001603360f81b8152509061124f5760405162461bcd60e51b81526004016109099190613cab565b5060006007600086608001518152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156112d4576000848152602090819020604080518082019091526002850290910180546001600160a01b03908116835260019182015416828401529083529092019101611289565b5050505090506000815111604051806040016040528060028152602001610c4d60f21b815250906113185760405162461bcd60e51b81526004016109099190613cab565b50600061134f60405180604001604052806003600081548092919061133c90613dad565b9091555081528551602090910152612066565b6020808201805160009081526006835260409020805460ff19166001179055908501519051825160808a0151939450611389938987611e5b565b506020015195945050505050565b61139f611a7a565b61087481612896565b6000546001600160a01b031633146113f95760405162461bcd60e51b815260206004820152601460248201527327a7262cafa922a9a1aaa2afa3aaa0a92224a0a760611b6044820152606401610909565b61140d6001600160a01b03841683836129bf565b816001600160a01b0316836001600160a01b0316336001600160a01b03167fc7af665d489507e14ae25ac7ab0030fc7f570869610bdd32117ea56b60ae5c618460405161145c91815260200190565b60405180910390a4505050565b905090565b600061089761059f83611d78565b6060611469603d6120a1565b600061089761064f83611d8f565b61149e611a7a565b61087481600061262b565b806114b43382611a36565b604051806040016040528060018152602001603560f81b815250906114ec5760405162461bcd60e51b81526004016109099190613cab565b5060006114f884611e0a565b9050600061150582611e33565b905083816060015114801561151d5750468160800151145b60405180604001604052806002815260200161333360f01b815250906115565760405162461bcd60e51b81526004016109099190613cab565b50600061156283611e48565b865160208801209091506000906000818152603b602090815260408083208a8452603a83529281902081518083019092525460ff811682526001600160781b03610100918290048116938301939093528354949550929390929004168015806115fd575033600090815260018401602052604090205460ff161580156115fd575081602001516001600160781b0316816001600160781b0316115b15610e2157806001600160781b0316600003611632578254610100600160801b031916610100426001600160781b0316021783555b8254600090849082906116479060ff16613e27565b825460ff8083166101009490940a93840293021916919091179091553360008181526001878101602052604091829020805460ff1916909117905551919250908b9088907f5353716bf921d1d85f5567a99a718cc63ff1182dca5f9163d9e9b8f1fc3ac387906116bc908a908e908890613e65565b60405180910390a46000868152603c602052604081205460ff1660028111156116e7576116e7613b50565b146116f9575050505050505050505050565b825160ff16158015906117165750826000015160ff168160ff1610155b1561186b576000868152603c6020908152604091829020805460ff19166002179055888201519089015160608a015160a08b01519351630a81a65d60e11b81526001600160a01b03909316936315034cba9361177793929190600401613cbe565b600060405180830381600087803b15801561179157600080fd5b505af19250505080156117a2575060015b61182e573d8080156117d0576040519150601f19603f3d011682016040523d82523d6000602084013e6117d5565b606091505b506000878152603c6020526040808220805460ff19166001179055517fa2540dac02f8d07ec0107c5fc2172e2c49d3231e86a21cb02b47058635ae97ab91611820918a918c91613d43565b60405180910390a15061186b565b7fa2540dac02f8d07ec0107c5fc2172e2c49d3231e86a21cb02b47058635ae97ab8688600160405161186293929190613d43565b60405180910390a15b50505050505050505b505050565b6000546001600160a01b031633146118ca5760405162461bcd60e51b815260206004820152601460248201527327a7262cafa922a9a1aaa2afa3aaa0a92224a0a760611b6044820152606401610909565b604080516000808252602082019092526001600160a01b0384169083906040516118f49190613e91565b60006040518083038185875af1925050503d8060008114611931576040519150601f19603f3d011682016040523d82523d6000602084013e611936565b606091505b505090508061197b5760405162461bcd60e51b815260206004820152601160248201527011551217d514905394d1915497d1905253607a1b6044820152606401610909565b6040518281526001600160a01b0384169033907fb7c602059992183c7b767c08204223afc99f1895fd175adf9ece23ce9f5bb8b79060200160405180910390a3505050565b6119c8611a7a565b6001600160a01b038116611a2d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610909565b610874816120ae565b6000818152603a60205260408120611a519060010184612a11565b9392505050565b611a60611d9b565b61087481612a33565b611a71611a7a565b61087481612a8d565b6000546001600160a01b031633146110c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610909565b60005b8151811015611d74576000828281518110611af457611af4613d97565b6020026020010151905060006001600160a01b031681602001516001600160a01b031614158015611b2e575080516001600160a01b031615155b604051806040016040528060018152602001600d60fa1b81525090611b665760405162461bcd60e51b81526004016109099190613cab565b506040808201516000908152600760205290812090805b8254811015611c60576000838281548110611b9a57611b9a613d97565b60009182526020909120865160029092020160018101549092506001600160a01b03918216911603611c4d57602085015181546001600160a01b03908116911614611c435760208581015182546001600160a01b0319166001600160a01b03918216908117845587516040808a015190519283526001949190931692917f2152376b51b154ef9693e64efbda43bd7ecd04ccb98df7f6caf781078eca308d910160405180910390a45b6001925050611c60565b5080611c5881613dad565b915050611b7d565b5080611d5e5782516040805160048152602481018252602080820180516001600160e01b03166352d1043d60e01b17905282518084019093526002835261199960f11b90830152611cb19291612b9a565b50604080518082018252602085810180516001600160a01b03908116845287518116838501908152875460018082018a5560008a81528690209651600290920290960180549184166001600160a01b03199283161781559151918601805492841692909116919091179055875188860151925195519582168652939493169290917f2152376b51b154ef9693e64efbda43bd7ecd04ccb98df7f6caf781078eca308d910160405180910390a45b5050508080611d6c90613dad565b915050611ad7565b5050565b600080611d8483612066565b602001519392505050565b600080611d8483612005565b6000546001600160a01b0316331480611dbe57506001546001600160a01b031633145b6110c15760405162461bcd60e51b815260206004820152601960248201527f4f4e4c595f42595f4f574e45525f4f525f475541524449414e000000000000006044820152606401610909565b604080518082019091526000815260606020820152818060200190518101906108979190613ef2565b611e3b613092565b6108978260200151612c12565b6020808201518051910120600090610897565b600080805b8351811015611ff957600080858381518110611e7e57611e7e613d97565b6020026020010151602001516001600160a01b03166336da7a0660e01b878581518110611ead57611ead613d97565b602002602001015160000151898b8d604051602401611ecf9493929190613f59565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051611f0d9190613e91565b600060405180830381855af49150503d8060008114611f48576040519150601f19603f3d011682016040523d82523d6000602084013e611f4d565b606091505b50915091508115611f5d57600193505b811515868481518110611f7257611f72613d97565b6020026020010151602001516001600160a01b03168c7f935aa87d643578e6395c90fdbd5d50ffee5f2c1f6ce2cd01274740412bb679f48d8d8d8c8a81518110611fbe57611fbe613d97565b60200260200101516000015188604051611fdc959493929190613f86565b60405180910390a450508080611ff190613dad565b915050611e60565b50979650505050505050565b604080518082019091526060815260006020820152604080518082019091526060815260006020820152826040516020016120409190613dc6565b60408051808303601f190181529190528082528051602090910120602082015292915050565b604080518082019091526060815260006020820152604080518082019091526060815260006020820152826040516020016120409190613fd3565b60606000611a5183612c2e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b82518110156118745760006001600160a01b031683828151811061212757612127613d97565b60200260200101516001600160a01b0316141560405180604001604052806002815260200161199b60f11b815250906121735760405162461bcd60e51b81526004016109099190613cab565b50816004600085848151811061218b5761218b613d97565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508115158382815181106121df576121df613d97565b60200260200101516001600160a01b03167f626c27c1d088fd70034e681d579a5efd004c3d47a56d3ee07ad256ac7301433360405160405180910390a38061222681613dad565b915050612101565b607154610100900460ff161580801561224e5750607154600160ff909116105b806122685750303b158015612268575060715460ff166001145b6122845760405162461bcd60e51b815260040161090990613dd9565b6071805460ff1916600117905580156122a7576071805461ff0019166101001790555b6122b0876120ae565b6122b986612a33565b60408051600080825260208201909252612304918691906122fd565b6040805180820190915260008152606060208201528152602001906001900390816122d55790505b5087612c8a565b6040805160008082526020820190925261115d91859190612348565b6040805180820190915260008152606060208201528152602001906001900390816123205790505b506040805160008152602081019091528590612ca9565b60005b8151811015611d745760005b82828151811061238057612380613d97565b60200260200101516020015151811015612618576000600760008585815181106123ac576123ac613d97565b60200260200101516020015184815181106123c9576123c9613d97565b60200260200101518152602001908152602001600020905060005b8154811015612603578484815181106123ff576123ff613d97565b6020026020010151600001516001600160a01b031682828154811061242657612426613d97565b60009182526020909120600160029092020101546001600160a01b0316036125f157600082828154811061245c5761245c613d97565b600091825260209091206002909102015483546001600160a01b039091169150839061248a90600190613fe6565b8154811061249a5761249a613d97565b90600052602060002090600202018383815481106124ba576124ba613d97565b60009182526020909120825460029092020180546001600160a01b039283166001600160a01b0319918216178255600193840154939091018054939092169216919091179055825483908061251157612511613ff9565b60008281526020812060026000199093019283020180546001600160a01b03199081168255600191909101805490911690559155865187908790811061255957612559613d97565b6020026020010151600001516001600160a01b031687878151811061258057612580613d97565b602002602001015160200151868151811061259d5761259d613d97565b60200260200101517f2152376b51b154ef9693e64efbda43bd7ecd04ccb98df7f6caf781078eca308d846040516125e391906001600160a01b0391909116815260200190565b60405180910390a450612603565b806125fb81613dad565b9150506123e4565b5050808061261090613dad565b91505061236e565b508061262381613dad565b915050612362565b60005b825181101561187457600083828151811061264b5761264b613d97565b6020026020010151905060006001600160a01b031681600001516001600160a01b0316141560405180604001604052806002815260200161062760f31b815250906126a95760405162461bcd60e51b81526004016109099190613cab565b5060005b8160200151518110156128815760008415612744576126f3836020015183815181106126db576126db613d97565b6020026020010151603d612cd790919063ffffffff16565b5061273d8360000151603a60008660200151868151811061271657612716613d97565b60200260200101518152602001908152602001600020600101612ce390919063ffffffff16565b905061280c565b61278d8360000151603a60008660200151868151811061276657612766613d97565b60200260200101518152602001908152602001600020600101612cf890919063ffffffff16565b90508080156127d457506127d2603a6000856020015185815181106127b4576127b4613d97565b60200260200101518152602001908152602001600020600101612d0d565b155b1561280c5761280a836020015183815181106127f2576127f2613d97565b6020026020010151603d612d1790919063ffffffff16565b505b801561286e578260200151828151811061282857612828613d97565b602002602001015185151584600001516001600160a01b03167f537ae69afd3600f30d8c662539017cc022c73b04db804445c9eaae801c2f4a8360405160405180910390a45b508061287981613dad565b9150506126ad565b5050808061288e90613dad565b91505061262e565b60005b8151811015611d745760008282815181106128b6576128b6613d97565b60209081029190910181015180516000908152603a83526040902054918101519092506001600160781b036101009092048216911611801561290557504281602001516001600160781b031611155b604051806040016040528060018152602001601b60f91b8152509061293d5760405162461bcd60e51b81526004016109099190613cab565b506020818101805183516000908152603a84526040908190208054610100600160801b0319166101006001600160781b03948516021790558451925190519116815290917f79b1ca301c237cd649b2d35eb6f0873650079b8bb613a17279bbf80332754ddd910160405180910390a250806129b781613dad565b915050612899565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611874908490612d23565b6001600160a01b03811660009081526001830160205260408120541515611a51565b600180546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f064d28d3d3071c5cbc271a261c10c2f0f0d9e319390397101aa0eb23c6bad90991016109d5565b60005b8151811015611d74576000828281518110612aad57612aad613d97565b602002602001015190506000816020015160ff16118015612af0575080516000908152603a60205260409020612ae590600101612d0d565b816020015160ff1611155b60405180604001604052806002815260200161189b60f11b81525090612b295760405162461bcd60e51b81526004016109099190613cab565b506020818101805183516000908152603a8452604090819020805460ff191660ff9384161790558451925190519116815290917f799ef5c83e710778f5725ab120f43a73d21b1d98f2e1a058801728ace31275fd910160405180910390a25080612b9281613dad565b915050612a90565b6060600080856001600160a01b031685604051612bb79190613e91565b600060405180830381855af49150503d8060008114612bf2576040519150601f19603f3d011682016040523d82523d6000602084013e612bf7565b606091505b5091509150612c0886838387612d86565b9695505050505050565b612c1a613092565b81806020019051810190610897919061400f565b606081600001805480602002602001604051908101604052809291908181526020018280548015612c7e57602002820191906000526020600020905b815481526020019060010190808311612c6a575b50505050509050919050565b612c9583600161262b565b612ca082600061262b565b61187481612a8d565b612cb284611ad4565b612cbb8361235f565b612cc68260016120fe565b612cd18160006120fe565b50505050565b6000611a518383612e07565b6000611a51836001600160a01b038416612e07565b6000611a51836001600160a01b038416612e56565b6000610897825490565b6000611a518383612e56565b6000612d386001600160a01b03841683612f49565b90508051600014158015612d5d575080806020019051810190612d5b91906140c1565b155b1561187457604051635274afe760e01b81526001600160a01b0384166004820152602401610909565b60608315612df5578251600003612dee576001600160a01b0385163b612dee5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610909565b5081612dff565b612dff8383612f8d565b949350505050565b6000818152600183016020526040812054612e4e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610897565b506000610897565b60008181526001830160205260408120548015612f3f576000612e7a600183613fe6565b8554909150600090612e8e90600190613fe6565b9050818114612ef3576000866000018281548110612eae57612eae613d97565b9060005260206000200154905080876000018481548110612ed157612ed1613d97565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612f0457612f04613ff9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610897565b6000915050610897565b6060611a51838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250612fb7565b815115612f9d5781518083602001fd5b8060405162461bcd60e51b81526004016109099190613cab565b6060824710156130185760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610909565b600080866001600160a01b031685876040516130349190613e91565b60006040518083038185875af1925050503d8060008114613071576040519150601f19603f3d011682016040523d82523d6000602084013e613076565b606091505b509150915061308787838387612d86565b979650505050505050565b6040518060c001604052806000815260200160006001600160a01b0316815260200160006001600160a01b031681526020016000815260200160008152602001606081525090565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715613112576131126130da565b60405290565b604080519081016001600160401b0381118282101715613112576131126130da565b60405160c081016001600160401b0381118282101715613112576131126130da565b604051601f8201601f191681016001600160401b0381118282101715613184576131846130da565b604052919050565b60006001600160401b038211156131a5576131a56130da565b5060051b60200190565b6001600160a01b038116811461087457600080fd5b80356131cf816131af565b919050565b600082601f8301126131e557600080fd5b813560206131fa6131f58361318c565b61315c565b8281526060928302850182019282820191908785111561321957600080fd5b8387015b858110156132725781818a0312156132355760008081fd5b61323d6130f0565b8135613248816131af565b815281860135613257816131af565b8187015260408281013590820152845292840192810161321d565b5090979650505050505050565b60006020828403121561329157600080fd5b81356001600160401b038111156132a757600080fd5b612dff848285016131d4565b60006001600160401b038211156132cc576132cc6130da565b50601f01601f191660200190565b600082601f8301126132eb57600080fd5b81356132f96131f5826132b3565b81815284602083860101111561330e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561333d57600080fd5b81356001600160401b038082111561335457600080fd5b908301906040828603121561336857600080fd5b613370613118565b8235815260208301358281111561338657600080fd5b613392878286016132da565b60208301525095945050505050565b815160ff1681526020808301516001600160781b03169082015260408101610897565b600060c082840312156133d657600080fd5b6133de61313a565b90508135815260208201356133f2816131af565b60208201526040820135613405816131af565b80604083015250606082013560608201526080820135608082015260a08201356001600160401b0381111561343957600080fd5b613445848285016132da565b60a08301525092915050565b60006020828403121561346357600080fd5b81356001600160401b0381111561347957600080fd5b612dff848285016133c4565b60006020828403121561349757600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b828110156134ed57815180516001600160a01b03908116865290870151168685015292840192908501906001016134bb565b5091979650505050505050565b60006020828403121561350c57600080fd5b8135611a51816131af565b600082601f83011261352857600080fd5b813560206135386131f58361318c565b82815260059290921b8401810191818101908684111561355757600080fd5b8286015b8481101561357b57803561356e816131af565b835291830191830161355b565b509695505050505050565b60008060006060848603121561359b57600080fd5b83356001600160401b03808211156135b257600080fd5b6135be878388016132da565b94506020860135935060408601359150808211156135db57600080fd5b506135e886828701613517565b9150509250925092565b6000806000806080858703121561360857600080fd5b84359350602085013561361a816131af565b92506040850135915060608501356001600160401b0381111561363c57600080fd5b613648878288016132da565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b818110156136955783516001600160a01b031683529284019291840191600101613670565b50909695505050505050565b6000602082840312156136b357600080fd5b81356001600160401b038111156136c957600080fd5b612dff84828501613517565b600080604083850312156136e857600080fd5b8235915060208301356136fa816131af565b809150509250929050565b600082601f83011261371657600080fd5b813560206137266131f58361318c565b82815260069290921b8401810191818101908684111561374557600080fd5b8286015b8481101561357b57604081890312156137625760008081fd5b61376a613118565b813581528482013560ff811681146137825760008081fd5b81860152835291830191604001613749565b60006137a26131f58461318c565b8381529050602080820190600585811b8501878111156137c157600080fd5b855b818110156138965780356001600160401b03808211156137e35760008081fd5b908801906040828c0312156137f85760008081fd5b613800613118565b823561380b816131af565b8152828701358281111561381f5760008081fd5b8084019350508b601f84011261383757600091508182fd5b823591506138476131f58361318c565b82815291861b8301870191878101908d8411156138645760008081fd5b938801935b8385101561388257843582529388019390880190613869565b8289015250875250509383019383016137c3565b50505050509392505050565b600082601f8301126138b357600080fd5b611a5183833560208501613794565b60008060008060008060c087890312156138db57600080fd5b6138e4876131c4565b95506138f2602088016131c4565b945060408701356001600160401b038082111561390e57600080fd5b61391a8a838b01613705565b9550606089013591508082111561393057600080fd5b61393c8a838b016138a2565b9450608089013591508082111561395257600080fd5b61395e8a838b016131d4565b935060a089013591508082111561397457600080fd5b5061398189828a01613517565b9150509295509295509295565b6000602082840312156139a057600080fd5b81356001600160401b038111156139b657600080fd5b8201601f810184136139c757600080fd5b612dff84823560208401613794565b6000602082840312156139e857600080fd5b81356001600160401b038111156139fe57600080fd5b612dff848285016138a2565b60008060408385031215613a1d57600080fd5b82356001600160401b03811115613a3357600080fd5b613a3f858286016133c4565b95602094909401359450505050565b60006020808385031215613a6157600080fd5b82356001600160401b03811115613a7757600080fd5b8301601f81018513613a8857600080fd5b8035613a966131f58261318c565b81815260069190911b82018301908381019087831115613ab557600080fd5b928401925b828410156130875760408489031215613ad35760008081fd5b613adb613118565b84358152858501356001600160781b0381168114613af95760008081fd5b8187015282526040939093019290840190613aba565b600080600060608486031215613b2457600080fd5b8335613b2f816131af565b92506020840135613b3f816131af565b929592945050506040919091013590565b634e487b7160e01b600052602160045260246000fd5b6020810160038310613b8857634e487b7160e01b600052602160045260246000fd5b91905290565b6020808252825182820181905260009190848201906040850190845b8181101561369557835183529284019291840191600101613baa565b60008060408385031215613bd957600080fd5b82356001600160401b03811115613bef57600080fd5b613a3f858286016132da565b60008060408385031215613c0e57600080fd5b8235613c19816131af565b946020939093013593505050565b600060208284031215613c3957600080fd5b81356001600160401b03811115613c4f57600080fd5b612dff84828501613705565b60005b83811015613c76578181015183820152602001613c5e565b50506000910152565b60008151808452613c97816020860160208601613c5b565b601f01601f19169290920160200192915050565b602081526000611a516020830184613c7f565b60018060a01b0384168152826020820152606060408201526000613ce56060830184613c7f565b95945050505050565b805182526000602082015160018060a01b0380821660208601528060408501511660408601525050606082015160608401526080820151608084015260a082015160c060a0850152612dff60c0850182613c7f565b838152606060208201526000613d5c6060830185613cee565b90508215156040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561089757610897613d6e565b634e487b7160e01b600052603260045260246000fd5b600060018201613dbf57613dbf613d6e565b5060010190565b602081526000611a516020830184613cee565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b600060ff821660ff8103613e3d57613e3d613d6e565b60010192915050565b805182526000602082015160406020850152612dff6040850182613c7f565b838152606060208201526000613e7e6060830185613e46565b905060ff83166040830152949350505050565b60008251613ea3818460208701613c5b565b9190910192915050565b600082601f830112613ebe57600080fd5b8151613ecc6131f5826132b3565b818152846020838601011115613ee157600080fd5b612dff826020830160208701613c5b565b600060208284031215613f0457600080fd5b81516001600160401b0380821115613f1b57600080fd5b9083019060408286031215613f2f57600080fd5b613f37613118565b82518152602083015182811115613f4d57600080fd5b61339287828601613ead565b60018060a01b0385168152836020820152826040820152608060608201526000612c086080830184613c7f565b85815260a060208201526000613f9f60a0830187613c7f565b604083018690526001600160a01b03851660608401528281036080840152613fc78185613c7f565b98975050505050505050565b602081526000611a516020830184613e46565b8181038181111561089757610897613d6e565b634e487b7160e01b600052603160045260246000fd5b60006020828403121561402157600080fd5b81516001600160401b038082111561403857600080fd5b9083019060c0828603121561404c57600080fd5b61405461313a565b825181526020830151614066816131af565b60208201526040830151614079816131af565b80604083015250606083015160608201526080830151608082015260a0830151828111156140a657600080fd5b6140b287828601613ead565b60a08301525095945050505050565b6000602082840312156140d357600080fd5b81518015158114611a5157600080fdfea26469706673582212203a0fbfd27f57c353abc9a31d82a049872a39cd8f74784ad37f693ebab944aad064736f6c63430008130033", - "sourceMap": "393:667:178:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9520:164:180;;;;;;;;;;-1:-1:-1;9520:164:180;;;;;:::i;:::-;;:::i;:::-;;3832:190:181;;;;;;;;;;-1:-1:-1;3832:190:181;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8698:518;;;;;;;;;;-1:-1:-1;8698:518:181;;;;;:::i;:::-;;:::i;9003:170:180:-;;;;;;;;;;-1:-1:-1;9003:170:180;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3459:111::-;;;;;;;;;;-1:-1:-1;3459:111:180;;;;;:::i;:::-;-1:-1:-1;;;;;3541:24:180;3522:4;3541:24;;;:16;:24;;;;;;;;;3459:111;;;;7959:14:290;;7952:22;7934:41;;7922:2;7907:18;3459:111:180;7794:187:290;6903:2057:180;;;;;;;;;;-1:-1:-1;6903:2057:180;;;;;:::i;:::-;;:::i;3613:139::-;;;;;;;;;;-1:-1:-1;3613:139:180;;;;;:::i;:::-;;:::i;465:86:64:-;;;;;;;;;;-1:-1:-1;537:9:64;;-1:-1:-1;;;;;537:9:64;465:86;;;-1:-1:-1;;;;;9565:32:290;;;9547:51;;9535:2;9520:18;465:86:64;9401:203:290;4340:1442:180;;;;;;;;;;-1:-1:-1;4340:1442:180;;;;;:::i;:::-;;:::i;:::-;;;;10380:25:290;;;10436:2;10421:18;;10414:34;;;;10353:18;4340:1442:180;10206:248:290;2602:186:181;;;;;;;;;;-1:-1:-1;2602:186:181;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;3304:112:180:-;;;;;;;;;;-1:-1:-1;3387:24:180;;3304:112;;;11268:25:290;;;11256:2;11241:18;3304:112:180;11122:177:290;2986:174:181;;;;;;;;;;-1:-1:-1;2986:174:181;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;3110:31:181;;;;:22;:31;;;;;;;;;3103:52;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3103:52:181;;;;;;2986:174;1862:95:71;;;;;;;;;;;;;:::i;9368:109:180:-;;;;;;;;;;-1:-1:-1;9368:109:180;;;;;:::i;:::-;;:::i;4417:210:181:-;;;;;;;;;;-1:-1:-1;4417:210:181;;;;;:::i;:::-;4538:4;4557:33;;;:18;:33;;;;;;;;-1:-1:-1;;;;;4557:65:181;;;;:50;;:65;;;;;;;;4417:210;;;;;518:540:178;;;;;;;;;;-1:-1:-1;518:540:178;;;;;:::i;:::-;;:::i;1268:79:71:-;;;;;;;;;;-1:-1:-1;1314:7:71;1336:6;-1:-1:-1;;;;;1336:6:71;1268:79;;9216:109:180;;;;;;;;;;-1:-1:-1;9216:109:180;;;;;:::i;:::-;;:::i;9727:155::-;;;;;;;;;;-1:-1:-1;9727:155:180;;;;;:::i;:::-;;:::i;4160:137::-;;;;;;;;;;-1:-1:-1;4160:137:180;;;;;:::i;:::-;4236:4;4255:37;;;:22;:37;;;;;;;;;4160:137;5082:194:181;;;;;;;;;;-1:-1:-1;5082:194:181;;;;;:::i;:::-;;:::i;5825:1035:180:-;;;;;;;;;;-1:-1:-1;5825:1035:180;;;;;:::i;:::-;;:::i;4853:187:181:-;;;;;;;;;;-1:-1:-1;4853:187:181;;;;;:::i;:::-;;:::i;659:238:87:-;;;;;;;;;;-1:-1:-1;659:238:87;;;;;:::i;:::-;;:::i;4248:127:181:-;;;;;;;;;;-1:-1:-1;4248:127:181;;;;;:::i;:::-;4315:13;4343:27;;;:15;:27;;;;;;;;;4248:127;;;;;;;;:::i;3965:152:180:-;;;;;;;;;;-1:-1:-1;3965:152:180;;;;;:::i;:::-;;:::i;2830:114:181:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3458:332::-;;;;;;;;;;-1:-1:-1;3458:332:181;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;3598:187:181;;;;;;;;-1:-1:-1;3655:33:181;;;:18;:33;;;;;;;:47;;;;3598:187;;3728:33;;;;;;3655:47;3728:48;;;-1:-1:-1;;;;;3728:48:181;3598:187;;;;;3458:332;3795:127:180;;;;;;;;;;-1:-1:-1;3795:127:180;;;;;:::i;:::-;3866:4;3885:32;;;:20;:32;;;;;;;;;3795:127;4064:142:181;;;;;;;;;;-1:-1:-1;4064:142:181;;;;;:::i;:::-;;:::i;5318:188::-;;;;;;;;;;-1:-1:-1;5318:188:181;;;;;:::i;:::-;;:::i;5548:3108::-;;;;;;;;;;-1:-1:-1;5548:3108:181;;;;;:::i;:::-;;:::i;930:252:87:-;;;;;;;;;;-1:-1:-1;930:252:87;;;;;:::i;:::-;;:::i;3155:106:180:-;;;;;;;;;;-1:-1:-1;3235:21:180;;3155:106;;2096:188:71;;;;;;;;;;-1:-1:-1;2096:188:71;;;;;:::i;:::-;;:::i;3202:214:181:-;;;;;;;;;;-1:-1:-1;3202:214:181;;;;;:::i;:::-;;:::i;587:122:64:-;;;;;;;;;;-1:-1:-1;587:122:64;;;;;:::i;:::-;;:::i;4669:142:181:-;;;;;;;;;;-1:-1:-1;4669:142:181;;;;;:::i;:::-;;:::i;9520:164:180:-;1175:13:71;:11;:13::i;:::-;9642:37:180::1;9664:14;9642:21;:37::i;:::-;9520:164:::0;:::o;3832:190:181:-;-1:-1:-1;;;;;;;;;;;;;;;;;3977:40:181;3997:19;:11;:17;:19::i;3977:40::-;3970:47;3832:190;-1:-1:-1;;3832:190:181:o;8698:518::-;8764:18;8785:16;:8;:14;:16::i;:::-;8764:37;-1:-1:-1;8853:23:181;8822:27;;;;:15;:27;;;;;;;;:54;;;;;;;;:::i;:::-;;8884:42;;;;;;;;;;;;;-1:-1:-1;;;8884:42:181;;;8807:125;;;;;-1:-1:-1;;;8807:125:181;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;8939:27:181;;;;:15;:27;;;;;;;;;:53;;-1:-1:-1;;8939:53:181;8969:23;8939:53;;;9018:20;;;;9072:15;;;;9095:22;;;;9125:16;;;;8998:149;;-1:-1:-1;;;8998:149:181;;-1:-1:-1;;;;;8998:66:181;;;;;;:149;;9072:15;9095:22;9125:16;8998:149;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9158:53;9184:10;9196:8;9206:4;9158:53;;;;;;;;:::i;:::-;;;;;;;;8758:458;8698:518;:::o;9003:170:180:-;9094:28;9137:22;:31;9160:7;9137:31;;;;;;;;;;;9130:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9130:38:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9003:170;;;:::o;6903:2057::-;426:23:64;:21;:23::i;:::-;4891:22:246;;;;;;7071:21:180::1;::::0;4236:4;4255:37;;;:22;:37;;;;;;7071:66;;-1:-1:-1;4255:37:180;;7284:43:::1;;;;;;;;;;;;;-1:-1:-1::0;;;7284:43:180::1;;::::0;7237:91:::1;;;;;-1:-1:-1::0;;;7237:91:180::1;;;;;;;;:::i;:::-;;7335:30;7368:43;7392:18;7368:23;:43::i;:::-;7335:76;;7417:24;7444:25;:11;:23;:25::i;:::-;7417:52;;7476:53;7532:22;:63;7562:8;:27;;;7532:63;;;;;;;;;;;7476:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;7476:119:180;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;::::1;;;;;;;;;;7643:1;7609:24;:31;:35;7646:45;;;;;;;;;;;;;-1:-1:-1::0;;;7646:45:180::1;;::::0;7601:91:::1;;;;;-1:-1:-1::0;;;7601:91:180::1;;;;;;;;:::i;:::-;;7699:56;7791:21;:28;-1:-1:-1::0;;;;;7758:67:180::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;7758:67:180::1;;;;;;;;;;;;;;;;7699:126;;7837:9;7832:829;7856:21;:28;7852:1;:32;7832:829;;;7970:9;7982:5;:1:::0;7986::::1;7982:5;:::i;:::-;7970:17;;7965:214;7993:21;:28;7989:1;:32;7965:214;;;8085:21;8107:1;8085:24;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;8057:52:180::1;:21;8079:1;8057:24;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;8057:52:180::1;;;8121:39;;;;;;;;;;;;;-1:-1:-1::0;;;8121:39:180::1;;::::0;8038:132:::1;;;;;-1:-1:-1::0;;;8038:132:180::1;;;;;;;;:::i;:::-;-1:-1:-1::0;8023:3:180;::::1;::::0;::::1;:::i;:::-;;;;7965:214;;;;8243:24;8288:9:::0;8283:305:::1;8307:24;:31;8303:1;:35;8283:305;;;8387:24;8412:1;8387:27;;;;;;;;:::i;:::-;;;;;;;:53;;;-1:-1:-1::0;;;;;8359:81:180::1;:21;8381:1;8359:24;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;8359:81:180::1;::::0;8355:225:::1;;8487:24;8512:1;8487:27;;;;;;;;:::i;:::-;;;;;;;8454;8482:1;8454:30;;;;;;;;:::i;:::-;;;;;;:60;;;;8548:4;8526:26;;8564:5;;8355:225;8340:3:::0;::::1;::::0;::::1;:::i;:::-;;;;8283:305;;;-1:-1:-1::0;8624:29:180::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;8624:29:180::1;::::0;::::1;::::0;8603:19;8595:59:::1;;;;-1:-1:-1::0;;;8595:59:180::1;;;;;;;;:::i;:::-;;7891:770;7886:3;;;;;:::i;:::-;;;;7832:829;;;;8667:25;8695:192;8721:27;:11;:25;:27::i;:::-;8756:13;8777:18;8803:8;:27;;;8838:8;8854:27;8695:18;:192::i;:::-;8667:220;;8901:20;8923:31;;;;;;;;;;;;;-1:-1:-1::0;;;8923:31:180::1;;::::0;8893:62:::1;;;;;-1:-1:-1::0;;;8893:62:180::1;;;;;;;;:::i;:::-;;7065:1895;;;;;;6903:2057:::0;;;:::o;3613:139::-;3690:4;3709:38;3730:16;:8;:14;:16::i;4340:1442::-;2588:10;4511:7;3541:24;;;:16;:24;;;;;;4511:7;;3541:24;;2601:36;;;;;;;;;;;;;-1:-1:-1;;;2601:36:180;;;2563:75;;;;;-1:-1:-1;;;2563:75:180;;;;;;;;:::i;:::-;-1:-1:-1;4535:43:180::1;4581:42:::0;;;:22:::1;:42;::::0;;;;;;;4535:88;;;;;;::::1;::::0;;;;;;;;;;;;4581:42;;4535:88;:43;;:88;::::1;;;;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;4535:88:180;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;::::1;;;;;;;;;;4661:1;4637:14;:21;:25;4664:45;;;;;;;;;;;;;-1:-1:-1::0;;;4664:45:180::1;;::::0;4629:81:::1;;;;;-1:-1:-1::0;;;4629:81:180::1;;;;;;;;:::i;:::-;-1:-1:-1::0;4741:21:180::1;:23:::0;;4717:21:::1;::::0;;4741:23:::1;::::0;::::1;:::i;:::-;;;;;4717:47;;4771:24;4798:208;;;;;;;;4822:13;4798:208;;;;4851:10;-1:-1:-1::0;;;;;4798:208:180::1;;;;;4882:11;-1:-1:-1::0;;;;;4798:208:180::1;;;;;4916:13;4798:208;;;;4957:18;4798:208;;;;4992:7;4798:208;;::::0;4771:235:::1;;5012:38;5053:17;:8;:15;:17::i;:::-;5223:18;::::0;;::::1;::::0;;5202:40:::1;::::0;;;:20:::1;:40:::0;;;;;;;;:47;;-1:-1:-1;;5202:47:180::1;5245:4;5202:47;::::0;;5279:18;5260:48;;5012:58;;-1:-1:-1;5279:18:180;5260:48:::1;::::0;::::1;::::0;5299:8;;5260:48:::1;:::i;:::-;;;;;;;;5315:44;5362:110;5370:87;;;;;;;;5390:24;;:26;;;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;5370:87:180;;5435:20;;5370:87:::1;::::0;;::::1;::::0;5362:108:::1;:110::i;:::-;5502:21;::::0;;::::1;::::0;;5479:45:::1;::::0;;;:22:::1;:45:::0;;;;;:52;;-1:-1:-1;;5479:52:180::1;5527:4;5479:52;::::0;;5564:18;;::::1;::::0;5590:21;;5619:23;;5650:27:::1;::::0;::::1;::::0;5315:157;;-1:-1:-1;5538:183:180::1;::::0;5685:8;5701:14;5538:18:::1;:183::i;:::-;-1:-1:-1::0;5735:18:180::1;::::0;;::::1;::::0;5755:21;::::1;::::0;5735:18;;5755:21;;-1:-1:-1;4340:1442:180;-1:-1:-1;;;;;;;;4340:1442:180:o;2602:186:181:-;2721:31;;;;:22;:31;;;;;2690:16;;2721:62;;:53;;:60;:62::i;1862:95:71:-;1175:13;:11;:13::i;:::-;1922:30:::1;1949:1;1922:18;:30::i;:::-;1862:95::o:0;9368:109:180:-;1175:13:71;:11;:13::i;:::-;9442:30:180::1;9457:7;9466:5;9442:14;:30::i;518:540:178:-:0;3489:13:80;;;;;;;3488:14;;3524:34;;;;-1:-1:-1;3542:12:80;;3557:1;3542:12;;;;:16;3524:34;3523:105;;;-1:-1:-1;3600:4:80;1513:19:69;:23;;;3572:55:80;;-1:-1:-1;3610:12:80;;;;;:17;3572:55;3508:182;;;;-1:-1:-1;;;3508:182:80;;;;;;;:::i;:::-;3696:12;:16;;-1:-1:-1;;3696:16:80;3711:1;3696:16;;;3718:55;;;;3746:13;:20;;-1:-1:-1;;3746:20:80;;;;;3718:55;867:186:178::1;890:5;903:8;919:28;955:29;992:31;1031:16;867:15;:186::i;:::-;3789:14:80::0;3785:83;;;3813:13;:21;;-1:-1:-1;;3813:21:80;;;3847:14;;-1:-1:-1;26883:36:290;;3847:14:80;;26871:2:290;26856:18;3847:14:80;;;;;;;3785:83;3460:412;518:540:178;;;;;;:::o;9216:109:180:-;1175:13:71;:11;:13::i;:::-;9291:29:180::1;9306:7;9315:4;9291:14;:29::i;9727:155::-:0;1175:13:71;:11;:13::i;:::-;9839:38:180::1;9862:14;9839:22;:38::i;5082:194:181:-:0;1175:13:71;:11;:13::i;:::-;5215:56:181::1;5245:19;5266:4;5215:29;:56::i;5825:1035:180:-:0;5942:7;426:23:64;:21;:23::i;:::-;5957:38:180::1;5998:17;:8;:15;:17::i;:::-;5957:58;;6120:40;6141:15;:18;;;3866:4:::0;3885:32;;;:20;:32;;;;;;;;;3795:127;6120:40:::1;6162:41;;;;;;;;;;;;;-1:-1:-1::0;;;6162:41:180::1;;::::0;6112:92:::1;;;;;-1:-1:-1::0;;;6112:92:180::1;;;;;;;;:::i;:::-;;6211:43;6257:22;:63;6287:8;:27;;;6257:63;;;;;;;;;;;6211:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;6211:109:180;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;::::1;;;;;;;;;;6358:1;6334:14;:21;:25;6361:45;;;;;;;;;;;;;-1:-1:-1::0;;;6361:45:180::1;;::::0;6326:81:::1;;;;;-1:-1:-1::0;;;6326:81:180::1;;;;;;;;:::i;:::-;;6414:44;6461:110;6469:87;;;;;;;;6489:24;;:26;;;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;6469:87:180;;6534:20;;6469:87:::1;::::0;;::::1;::::0;6461:108:::1;:110::i;:::-;6601:21;::::0;;::::1;::::0;;6578:45:::1;::::0;;;:22:::1;:45:::0;;;;;:52;;-1:-1:-1;;6578:52:180::1;6626:4;6578:52;::::0;;6663:18;;::::1;::::0;6689:21;;6718:23;;6749:27:::1;::::0;::::1;::::0;6414:157;;-1:-1:-1;6637:183:180::1;::::0;6784:8;6800:14;6637:18:::1;:183::i;:::-;-1:-1:-1::0;6834:21:180::1;;::::0;;5825:1035;-1:-1:-1;;;;;5825:1035:180:o;4853:187:181:-;1175:13:71;:11;:13::i;:::-;4981:54:181::1;5014:20;4981:32;:54::i;659:238:87:-:0;2286:7:177;1336:6:71;-1:-1:-1;;;;;1336:6:71;561:10:87;:28;553:61;;;;-1:-1:-1;;;553:61:87;;27132:2:290;553:61:87;;;27114:21:290;27171:2;27151:18;;;27144:30;-1:-1:-1;;;27190:18:290;;;27183:50;27250:18;;553:61:87;26930:344:290;553:61:87;789:43:::1;-1:-1:-1::0;;;;;789:31:87;::::1;821:2:::0;825:6;789:31:::1;:43::i;:::-;881:2;-1:-1:-1::0;;;;;844:48:87::1;869:10;-1:-1:-1::0;;;;;844:48:87::1;857:10;-1:-1:-1::0;;;;;844:48:87::1;;885:6;844:48;;;;11268:25:290::0;;11256:2;11241:18;;11122:177;844:48:87::1;;;;;;;;659:238:::0;;;:::o;2308:7:177:-;2301:14;;2209:111;:::o;3965:152:180:-;4050:4;4069:43;4092:19;:11;:17;:19::i;2830:114:181:-;2883:16;2914:25;:16;:23;:25::i;4064:142::-;4139:13;4167:34;4184:16;:8;:14;:16::i;5318:188::-;1175:13:71;:11;:13::i;:::-;5449:52:181::1;5479:14;5495:5;5449:29;:52::i;5548:3108::-:0;5679:13;1892:51;1923:10;1935:7;1892:30;:51::i;:::-;1945:33;;;;;;;;;;;;;-1:-1:-1;;;1945:33:181;;;1884:95;;;;;-1:-1:-1;;;1884:95:181;;;;;;;;:::i;:::-;;5700:30:::1;5733:43;5757:18;5733:23;:43::i;:::-;5700:76;;5782:24;5809:25;:11;:23;:25::i;:::-;5782:52;;5881:13;5855:8;:22;;;:39;:87;;;;;5929:13;5898:8;:27;;;:44;5855:87;5950:24;;;;;;;;;;;;;-1:-1:-1::0;;;5950:24:181::1;;::::0;5840:140:::1;;;;;-1:-1:-1::0;;;5840:140:181::1;;;;;;;;:::i;:::-;;5986:18;6007:27;:11;:25;:27::i;:::-;4891:22:246::0;;;;;;5986:48:181;;-1:-1:-1;6041:21:181::1;::::0;6114:44:::1;6161:33:::0;;;:18:::1;:33;::::0;;;;;;;6245:37;;;:22:::1;:37:::0;;;;;;6200:103;;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;6200:103:181::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;6789:34;;6041:66;;-1:-1:-1;6161:33:181;;6200:103;;6789:34;::::1;;6840:30:::0;;;:162:::1;;-1:-1:-1::0;6919:10:181::1;6882:48;::::0;;;:36:::1;::::0;::::1;:48;::::0;;;;;::::1;;6881:49;:120:::0;::::1;;;;6970:13;:31;;;-1:-1:-1::0;;;;;6942:59:181::1;:25;-1:-1:-1::0;;;;;6942:59:181::1;;6881:120;6829:1823;;;7021:25;-1:-1:-1::0;;;;;7021:30:181::1;7050:1;7021:30:::0;7017:116:::1;;7063:61:::0;;-1:-1:-1;;;;;;7063:61:181::1;;7108:15;-1:-1:-1::0;;;;;7063:61:181::1;;;::::0;;7017:116:::1;7166:35:::0;;7141:22:::1;::::0;7168:19;;7141:22;;7166:35:::1;::::0;::::1;;;:::i;:::-;::::0;;::::1;::::0;;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;;;::::0;;;::::1;::::0;;;7246:10:::1;-1:-1:-1::0;7209:48:181;;;-1:-1:-1;7209:36:181;;::::1;:48;::::0;;;;;;:55;;-1:-1:-1;;7209:55:181::1;::::0;;::::1;::::0;;7278:160;7166:35;;-1:-1:-1;7246:10:181;7350:13;;7330:10;;7278:160:::1;::::0;::::1;::::0;7307:13;;7373:11;;7166:35;;7278:160:::1;:::i;:::-;;;;;;;;7695:18;7664:27:::0;;;:15:::1;:27;::::0;;;;;::::1;;:49;::::0;::::1;;;;;;:::i;:::-;;7660:80;;7725:7;;;;;;;;5548:3108:::0;;;:::o;7660:80::-:1;8006:34:::0;;:38:::1;;::::0;;;;:104:::1;;;8076:13;:34;;;8056:54;;:16;:54;;;;8006:104;7993:653;;;8129:27;::::0;;;:15:::1;:27;::::0;;;;;;;;:53;;-1:-1:-1;;8129:53:181::1;8159:23;8129:53;::::0;;8226:20;;::::1;::::0;8286:15;;::::1;::::0;8315:22:::1;::::0;::::1;::::0;8351:16:::1;::::0;::::1;::::0;8206:173;;-1:-1:-1;;;8206:173:181;;-1:-1:-1;;;;;8206:66:181;;::::1;::::0;::::1;::::0;:173:::1;::::0;8286:15;8315:22;8351:16;8206:173:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;8192:446;;;::::0;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;8503:27:181::1;::::0;;;:15:::1;:27;::::0;;;;;:53;;-1:-1:-1;;8503:53:181::1;8533:23;8503:53;::::0;;8573:54;::::1;::::0;::::1;::::0;8503:27;;8611:8;;8573:54:::1;:::i;:::-;;;;;;;;8470:168;8192:446;;;8405:53;8431:10;8443:8;8453:4;8405:53;;;;;;;;:::i;:::-;;;;;;;;8192:446;7009:1643;5694:2962;;;;;;;1985:1;5548:3108:::0;;;:::o;930:252:87:-;2286:7:177;1336:6:71;-1:-1:-1;;;;;1336:6:71;561:10:87;:28;553:61;;;;-1:-1:-1;;;553:61:87;;27132:2:290;553:61:87;;;27114:21:290;27171:2;27151:18;;;27144:30;-1:-1:-1;;;27190:18:290;;;27183:50;27250:18;;553:61:87;26930:344:290;553:61:87;1066:12:::1;::::0;;1025::::1;1066::::0;;;::::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;1043:7:87;::::1;::::0;1058:6;;1043:36:::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1024:55;;;1093:7;1085:37;;;::::0;-1:-1:-1;;;1085:37:87;;28639:2:290;1085:37:87::1;::::0;::::1;28621:21:290::0;28678:2;28658:18;;;28651:30;-1:-1:-1;;;28697:18:290;;;28690:47;28754:18;;1085:37:87::1;28437:341:290::0;1085:37:87::1;1134:43;::::0;11268:25:290;;;-1:-1:-1;;;;;1134:43:87;::::1;::::0;1154:10:::1;::::0;1134:43:::1;::::0;11256:2:290;11241:18;1134:43:87::1;;;;;;;1018:164;930:252:::0;;:::o;2096:188:71:-;1175:13;:11;:13::i;:::-;-1:-1:-1;;;;;2180:22:71;::::1;2172:73;;;::::0;-1:-1:-1;;;2172:73:71;;28985:2:290;2172:73:71::1;::::0;::::1;28967:21:290::0;29024:2;29004:18;;;28997:30;29063:34;29043:18;;;29036:62;-1:-1:-1;;;29114:18:290;;;29107:36;29160:19;;2172:73:71::1;28783:402:290::0;2172:73:71::1;2251:28;2270:8;2251:18;:28::i;3202:214:181:-:0;3315:4;3334:31;;;:22;:31;;;;;:77;;:53;;3397:13;3334:62;:77::i;:::-;3327:84;3202:214;-1:-1:-1;;;3202:214:181:o;587:122:64:-;426:23;:21;:23::i;:::-;676:28:::1;692:11;676:15;:28::i;4669:142:181:-:0;1175:13:71;:11;:13::i;:::-;4768:38:181::1;4789:16;4768:20;:38::i;1412:124:71:-:0;1314:7;1336:6;-1:-1:-1;;;;;1336:6:71;831:10:70;1471:23:71;1463:68;;;;-1:-1:-1;;;1463:68:71;;29392:2:290;1463:68:71;;;29374:21:290;;;29411:18;;;29404:30;29470:34;29450:18;;;29443:62;29522:18;;1463:68:71;29190:356:290;11856:2445:180;11974:9;11969:2328;11993:14;:21;11989:1;:25;11969:2328;;;12029:65;12097:14;12112:1;12097:17;;;;;;;;:::i;:::-;;;;;;;12029:85;;12201:1;-1:-1:-1;;;;;12140:63:180;:24;:49;;;-1:-1:-1;;;;;12140:63:180;;;:141;;;;-1:-1:-1;12217:50:180;;-1:-1:-1;;;;;12217:64:180;;;12140:141;12291:51;;;;;;;;;;;;;-1:-1:-1;;;12291:51:180;;;12123:227;;;;;-1:-1:-1;;;12123:227:180;;;;;;;;:::i;:::-;-1:-1:-1;12443:43:180;;;;;12358:50;12411:83;;;:22;:83;;;;;;12358:50;12579:905;12603:27;;12599:31;;12579:905;;;12647:47;12697:20;12718:1;12697:23;;;;;;;;:::i;:::-;;;;;;;;;12805:50;;12697:23;;;;;12746:45;;;;12697:23;;-1:-1:-1;;;;;;12746:109:180;;;:45;;:109;12731:745;;12955:49;;;;12895:44;;-1:-1:-1;;;;;12895:44:180;;;:109;;;12878:541;;13078:64;;;;;13031:111;;-1:-1:-1;;;;;;13031:111:180;-1:-1:-1;;;;;13031:111:180;;;;;;;;13257:50;;13198:43;;;;;13162:244;;9547:51:290;;;-1:-1:-1;;13162:244:180;;;;;13198:43;13162:244;;9520:18:290;13162:244:180;;;;;;;12878:541;13444:4;13430:18;;13460:5;;;12731:745;-1:-1:-1;12632:3:180;;;;:::i;:::-;;;;12579:905;;;;13497:11;13492:799;;13593:50;;13655:59;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13655:59:180;-1:-1:-1;;;13655:59:180;;;13726:35;;;;;;;;;;;-1:-1:-1;;;13726:35:180;;;;13553:218;;13593:50;13553:28;:218::i;:::-;-1:-1:-1;13819:213:180;;;;;;;;13879:49;;;;;;-1:-1:-1;;;;;13819:213:180;;;;;13969:50;;13819:213;;;;;;;;13782:260;;;;;;;;-1:-1:-1;13782:260:180;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13782:260:180;;;;;;;;;;;;;;;;;;;;;;;;;;14145:50;;14090:43;;;;14207:49;;14058:224;;9565:32:290;;;9547:51;;13782:260:180;;14058:224;;;14090:43;;14058:224;;9520:18:290;14058:224:180;;;;;;;13492:799;12021:2276;;;12016:3;;;;;:::i;:::-;;;;11969:2328;;;;11856:2445;:::o;4464:190:246:-;4534:7;4549:44;4596:19;4603:11;4596:6;:19::i;:::-;4628:21;;;;4464:190;-1:-1:-1;;;4464:190:246:o;2227:172::-;2291:7;2306:38;2347:16;2354:8;2347:6;:16::i;1106:149:64:-;1314:7:71;1336:6;-1:-1:-1;;;;;1336:6:71;831:10:70;1167:23:64;;:53;;-1:-1:-1;537:9:64;;-1:-1:-1;;;;;537:9:64;831:10:70;1194:26:64;1167:53;1159:91;;;;-1:-1:-1;;;1159:91:64;;29753:2:290;1159:91:64;;;29735:21:290;29792:2;29772:18;;;29765:30;29831:27;29811:18;;;29804:55;29876:18;;1159:91:64;29551:349:290;4129:141:246;-1:-1:-1;;;;;;;;;;;;;;;;;4238:11:246;4227:38;;;;;;;;;;;;:::i;5188:160::-;5264:15;;:::i;:::-;5294:49;5315:11;:27;;;5294:20;:49::i;5583:153::-;5703:27;;;;;4891:22;;;;;5661:7;;5683:48;4805:113;10510:1214:180;10751:4;;;10804:878;10828:14;:21;10824:1;:25;10804:878;;;10865:12;10879:23;10906:14;10921:1;10906:17;;;;;;;;:::i;:::-;;;;;;;:52;;;-1:-1:-1;;;;;10906:74:180;11028:36;;;11078:14;11093:1;11078:17;;;;;;;;:::i;:::-;;;;;;;:42;;;11134:8;11156:18;11188;10992:226;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;10992:226:180;;;;;;;;;;;;;;-1:-1:-1;;;;;10992:226:180;-1:-1:-1;;;;;;10992:226:180;;;;;;;;;;10906:322;;;;10992:226;10906:322;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10864:364;;;;11241:7;11237:147;;;11285:4;11260:29;;11237:147;11640:7;11396:279;;11535:14;11550:1;11535:17;;;;;;;;:::i;:::-;;;;;;;:43;;;-1:-1:-1;;;;;11396:279:180;11459:10;11396:279;11436:13;11479:18;11507;11588:14;11603:1;11588:17;;;;;;;;:::i;:::-;;;;;;;:42;;;11657:10;11396:279;;;;;;;;;;:::i;:::-;;;;;;;;10856:826;;10851:3;;;;;:::i;:::-;;;;10804:878;;;-1:-1:-1;11696:22:180;10510:1214;-1:-1:-1;;;;;;;10510:1214:180:o;1419:269:246:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1592:8:246;1581:20;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;1581:20:246;;;;;;1558:43;;;4891:22;;;;;;;1607:18;;;:48;:15;1419:269;-1:-1:-1;;1419:269:246:o;3603:307::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3802:11:246;3791:23;;;;;;;;:::i;10259:300:63:-;10322:16;10350:22;10375:19;10383:3;10375:7;:19::i;2428:173:71:-;2497:16;2516:6;;-1:-1:-1;;;;;2528:17:71;;;-1:-1:-1;;;;;;2528:17:71;;;;;;2556:40;;2516:6;;;;;;;2556:40;;2497:16;2556:40;2491:110;2428:173;:::o;15789:295:180:-;15874:9;15869:211;15893:7;:14;15889:1;:18;15869:211;;;15952:1;-1:-1:-1;;;;;15930:24:180;:7;15938:1;15930:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15930:24:180;;;15956:21;;;;;;;;;;;;;-1:-1:-1;;;15956:21:180;;;15922:56;;;;;-1:-1:-1;;;15922:56:180;;;;;;;;:::i;:::-;;16017:8;15986:16;:28;16003:7;16011:1;16003:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15986:28:180;-1:-1:-1;;;;;15986:28:180;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;16064:8;16038:35;;16052:7;16060:1;16052:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;16038:35:180;;;;;;;;;;;15909:3;;;;:::i;:::-;;;;15869:211;;1314:862:177;3489:13:80;;;;;;;3488:14;;3524:34;;;;-1:-1:-1;3542:12:80;;3557:1;3542:12;;;;:16;3524:34;3523:105;;;-1:-1:-1;3600:4:80;1513:19:69;:23;;;3572:55:80;;-1:-1:-1;3610:12:80;;;;;:17;3572:55;3508:182;;;;-1:-1:-1;;;3508:182:80;;;;;;;:::i;:::-;3696:12;:16;;-1:-1:-1;;3696:16:80;3711:1;3696:16;;;3718:55;;;;3746:13;:20;;-1:-1:-1;;3746:20:80;;;;;3718:55;1668:25:177::1;1687:5;1668:18;:25::i;:::-;1699;1715:8;1699:15;:25::i;:::-;1800:41;::::0;;1839:1:::1;1800:41:::0;;;::::1;::::0;::::1;::::0;;;1731:192:::1;::::0;1763:29;;1800:41;::::1;::::0;::::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;1800:41:177::1;;;;;;;;;;;;;;;;1889:28;1731:24;:192::i;:::-;2002:31;::::0;;2031:1:::1;2002:31:::0;;;::::1;::::0;::::1;::::0;;;1930:241:::1;::::0;1963:31;;2002;::::1;::::0;::::1;-1:-1:-1::0;;;;;;;;;;;;;;;;;2002:31:177::1;;;;;;;;;;;;;;;-1:-1:-1::0;2105:16:177::1;::::0;;2119:1:::1;2105:16:::0;;::::1;::::0;::::1;::::0;;;2081;;1930:25:::1;:241::i;14445:1131:180:-:0;14562:9;14557:1015;14581:23;:30;14577:1;:34;14557:1015;;;14631:9;14626:940;14650:23;14674:1;14650:26;;;;;;;;:::i;:::-;;;;;;;:35;;;:42;14646:1;:46;14626:940;;;14709:50;14762:22;:82;14796:23;14820:1;14796:26;;;;;;;;:::i;:::-;;;;;;;:35;;;14832:1;14796:38;;;;;;;;:::i;:::-;;;;;;;14762:82;;;;;;;;;;;14709:135;;14860:9;14855:703;14879:27;;14875:31;;14855:703;;;15007:23;15031:1;15007:26;;;;;;;;:::i;:::-;;;;;;;:40;;;-1:-1:-1;;;;;14942:105:180;:20;14963:1;14942:23;;;;;;;;:::i;:::-;;;;;;;;;:49;:23;;;;;:49;;-1:-1:-1;;;;;14942:49:180;:105;14925:623;;15074:32;15109:20;15130:1;15109:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:48;15219:27;;-1:-1:-1;;;;;15109:48:180;;;;-1:-1:-1;15198:20:180;;15219:31;;15109:48;;15219:31;:::i;:::-;15198:53;;;;;;;;:::i;:::-;;;;;;;;;;;15172:20;15193:1;15172:23;;;;;;;;:::i;:::-;;;;;;;;;:79;;:23;;;;;:79;;-1:-1:-1;;;;;15172:79:180;;;-1:-1:-1;;;;;;15172:79:180;;;;;;-1:-1:-1;15172:79:180;;;;;;;;;;;;;;;;;;;;;;15265:26;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;15265:26:180;;;;;;;;;-1:-1:-1;;;;;;15265:26:180;;;;;;;;;;;;;;;;;;;15401;;:23;;15425:1;;15401:26;;;;;;:::i;:::-;;;;;;;:40;;;-1:-1:-1;;;;;15311:205:180;15347:23;15371:1;15347:26;;;;;;;;:::i;:::-;;;;;;;:35;;;15383:1;15347:38;;;;;;;;:::i;:::-;;;;;;;15311:205;15457:24;15311:205;;;;;-1:-1:-1;;;;;9565:32:290;;;;9547:51;;9535:2;9520:18;;9401:203;15311:205:180;;;;;;;;15530:5;;;14925:623;14908:3;;;;:::i;:::-;;;;14855:703;;;;14699:867;14694:3;;;;;:::i;:::-;;;;14626:940;;;-1:-1:-1;14613:3:180;;;;:::i;:::-;;;;14557:1015;;11294:1213:181;11444:9;11439:1064;11463:19;:26;11459:1;:30;11439:1064;;;11504:45;11552:19;11572:1;11552:22;;;;;;;;:::i;:::-;;;;;;;11504:70;;11621:1;-1:-1:-1;;;;;11590:33:181;:5;:19;;;-1:-1:-1;;;;;11590:33:181;;;11625:29;;;;;;;;;;;;;-1:-1:-1;;;11625:29:181;;;11582:73;;;;;-1:-1:-1;;;11582:73:181;;;;;;;;:::i;:::-;;11669:9;11664:833;11684:5;:14;;;:21;11680:1;:25;11664:833;;;11722:20;11756:9;11752:599;;;11779:39;11800:5;:14;;;11815:1;11800:17;;;;;;;;:::i;:::-;;;;;;;11779:16;:20;;:39;;;;:::i;:::-;;11848:112;11929:5;:19;;;11848:22;:41;11871:5;:14;;;11886:1;11871:17;;;;;;;;:::i;:::-;;;;;;;11848:41;;;;;;;;;;;:63;;:67;;:112;;;;:::i;:::-;11830:130;;11752:599;;;12007:115;12091:5;:19;;;12007:22;:41;12030:5;:14;;;12045:1;12030:17;;;;;;;;:::i;:::-;;;;;;;12007:41;;;;;;;;;;;:63;;:70;;:115;;;;:::i;:::-;11989:133;;12151:15;:108;;;;;12182:72;:22;:41;12205:5;:14;;;12220:1;12205:17;;;;;;;;:::i;:::-;;;;;;;12182:41;;;;;;;;;;;:63;;:70;:72::i;:::-;:77;12151:108;12134:207;;;12286:42;12310:5;:14;;;12325:1;12310:17;;;;;;;;:::i;:::-;;;;;;;12286:16;:23;;:42;;;;:::i;:::-;;12134:207;12364:15;12360:129;;;12460:5;:14;;;12475:1;12460:17;;;;;;;;:::i;:::-;;;;;;;12449:9;12398:80;;12428:5;:19;;;-1:-1:-1;;;;;12398:80:181;;;;;;;;;;;12360:129;-1:-1:-1;11707:3:181;;;;:::i;:::-;;;;11664:833;;;;11496:1007;11491:3;;;;;:::i;:::-;;;;11439:1064;;9482:689;9612:9;9607:560;9627:26;:33;9623:1;:37;9607:560;;;9675:35;9713:26;9740:1;9713:29;;;;;;;;:::i;:::-;;;;;;;;;;;;9826:13;;9803:37;;;;:22;:37;;;;;:69;9767:23;;;;9713:29;;-1:-1:-1;;;;;;9803:69:181;;;;;;9767:105;;;:161;;;;;9913:15;9886:5;:23;;;-1:-1:-1;;;;;9886:42:181;;;9767:161;9938:33;;;;;;;;;;;;;-1:-1:-1;;;9938:33:181;;;9750:229;;;;;-1:-1:-1;;;9750:229:181;;;;;;;;:::i;:::-;-1:-1:-1;10059:32:181;;;;;;10010:13;;9987:37;;;;:22;:37;;;;;;;:104;;-1:-1:-1;;;;;;9987:104:181;;-1:-1:-1;;;;;9987:104:181;;;;;;;10146:13;;10121:23;;10105:55;;32824:45:290;;32806:64;;10146:13:181;;10105:55;;32779:18:290;10105:55:181;;;;;;;-1:-1:-1;9662:3:181;;;;:::i;:::-;;;;9607:560;;1405:154:73;1510:43;;;-1:-1:-1;;;;;33073:32:290;;1510:43:73;;;33055:51:290;33122:18;;;;33115:34;;;1510:43:73;;;;;;;;;;33028:18:290;;;;1510:43:73;;;;;;;;-1:-1:-1;;;;;1510:43:73;-1:-1:-1;;;1510:43:73;;;1483:71;;1503:5;;1483:19;:71::i;8860:165:63:-;-1:-1:-1;;;;;8993:23:63;;8940:4;4351:19;;;:12;;;:19;;;;;;:24;;8963:55;4255:127;814:178:64;897:9;;;-1:-1:-1;;;;;912:23:64;;;-1:-1:-1;;;;;;912:23:64;;;;;;;946:41;;;897:9;;;;33372:34:290;;;33437:2;33422:18;;33415:43;;;;946:41:64;;33307:18:290;946:41:64;33160:304:290;10402:714:181;10497:9;10492:620;10512:16;:23;10508:1;:27;10492:620;;;10550:38;10591:16;10608:1;10591:19;;;;;;;;:::i;:::-;;;;;;;10550:60;;10673:1;10635:13;:35;;;:39;;;:178;;;;-1:-1:-1;10760:21:181;;10737:45;;;;:22;:45;;;;;:76;;:67;;:74;:76::i;:::-;10688:13;:35;;;:125;;;;10635:178;10823:37;;;;;;;;;;;;;-1:-1:-1;;;10823:37:181;;;10618:250;;;;;-1:-1:-1;;;10618:250:181;;;;;;;;:::i;:::-;-1:-1:-1;10977:35:181;;;;;;10899:21;;10876:45;;;;:22;:45;;;;;;;:136;;-1:-1:-1;;10876:136:181;;;;;;;;11083:21;;11046:35;;11025:80;;26901:17:290;;26883:36;;11083:21:181;;11025:80;;26856:18:290;11025:80:181;;;;;;;-1:-1:-1;10537:3:181;;;;:::i;:::-;;;;10492:620;;6603:301:69;6730:12;6751;6765:23;6792:6;-1:-1:-1;;;;;6792:19:69;6812:4;6792:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6750:67;;;;6830:69;6857:6;6865:7;6874:10;6886:12;6830:26;:69::i;:::-;6823:76;6603:301;-1:-1:-1;;;;;;6603:301:69:o;1893:129:246:-;1955:15;;:::i;:::-;1996:8;1985:32;;;;;;;;;;;;:::i;5570:109:63:-;5626:16;5661:3;:11;;5654:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5570:109;;;:::o;12592:525:181:-;12956:52;12986:15;13003:4;12956:29;:52::i;:::-;13014:54;13044:16;13062:5;13014:29;:54::i;:::-;13074:38;13095:16;13074:20;:38::i;16169:426:180:-;16418:38;16440:15;16418:21;:38::i;:::-;16462:40;16485:16;16462:22;:40::i;:::-;16508:37;16523:15;16540:4;16508:14;:37::i;:::-;16551:39;16566:16;16584:5;16551:14;:39::i;:::-;16169:426;;;;:::o;10793:129:63:-;10860:4;10883:32;10888:3;10908:5;10883:4;:32::i;8305:150::-;8375:4;8398:50;8403:3;-1:-1:-1;;;;;8423:23:63;;8398:4;:50::i;8623:156::-;8696:4;8719:53;8727:3;-1:-1:-1;;;;;8747:23:63;;8719:7;:53::i;9106:115::-;9169:7;9195:19;9203:3;4545:18;;4463:107;11090:135;11160:4;11183:35;11191:3;11211:5;11183:7;:35::i;4628:597:73:-;5031:23;5057:33;-1:-1:-1;;;;;5057:27:73;;5085:4;5057:27;:33::i;:::-;5031:59;;5100:10;:17;5121:1;5100:22;;:57;;;;;5138:10;5127:30;;;;;;;;;;;;:::i;:::-;5126:31;5100:57;5096:125;;;5174:40;;-1:-1:-1;;;5174:40:73;;-1:-1:-1;;;;;9565:32:290;;5174:40:73;;;9547:51:290;9520:18;;5174:40:73;9401:203:290;7178:548:69;7340:12;7364:7;7360:362;;;7385:10;:17;7406:1;7385:22;7381:256;;-1:-1:-1;;;;;1513:19:69;;;7568:60;;;;-1:-1:-1;;;7568:60:69;;35170:2:290;7568:60:69;;;35152:21:290;35209:2;35189:18;;;35182:30;35248:31;35228:18;;;35221:59;35297:18;;7568:60:69;34968:353:290;7568:60:69;-1:-1:-1;7651:10:69;7644:17;;7360:362;7682:33;7690:10;7702:12;7682:7;:33::i;:::-;7178:548;;;;;;:::o;2214:404:63:-;2277:4;4351:19;;;:12;;;:19;;;;;;2293:319;;-1:-1:-1;2335:23:63;;;;;;;;:11;:23;;;;;;;;;;;;;2515:18;;2493:19;;;:12;;;:19;;;;;;:40;;;;2547:11;;2293:319;-1:-1:-1;2596:5:63;2589:12;;2786:1388;2852:4;2989:19;;;:12;;;:19;;;;;;3023:15;;3019:1149;;3392:21;3416:14;3429:1;3416:10;:14;:::i;:::-;3464:18;;3392:38;;-1:-1:-1;3444:17:63;;3464:22;;3485:1;;3464:22;:::i;:::-;3444:42;;3518:13;3505:9;:26;3501:398;;3551:17;3571:3;:11;;3583:9;3571:22;;;;;;;;:::i;:::-;;;;;;;;;3551:42;;3722:9;3693:3;:11;;3705:13;3693:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3805:23;;;:12;;;:23;;;;;:36;;;3501:398;3977:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4069:3;:12;;:19;4082:5;4069:19;;;;;;;;;;;4062:26;;;4110:4;4103:11;;;;;;;3019:1149;4152:5;4145:12;;;;;3426:179:69;3501:12;3528:72;3550:6;3558:4;3564:1;3528:72;;;;;;;;;;;;;;;;;:21;:72::i;8192:476::-;8343:17;;:21;8339:325;;8545:10;8539:17;8593:15;8580:10;8576:2;8572:19;8565:44;8339:325;8644:12;8637:20;;-1:-1:-1;;;8637:20:69;;;;;;;;:::i;4822:414::-;4969:12;5022:5;4997:21;:30;;4989:81;;;;-1:-1:-1;;;4989:81:69;;35528:2:290;4989:81:69;;;35510:21:290;35567:2;35547:18;;;35540:30;35606:34;35586:18;;;35579:62;-1:-1:-1;;;35657:18:290;;;35650:36;35703:19;;4989:81:69;35326:402:290;4989:81:69;5077:12;5091:23;5118:6;-1:-1:-1;;;;;5118:11:69;5137:5;5144:4;5118:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5076:73;;;;5162:69;5189:6;5197:7;5206:10;5218:12;5162:26;:69::i;:::-;5155:76;4822:414;-1:-1:-1;;;;;;;4822:414:69:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:127:290:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:253;218:2;212:9;260:4;248:17;;-1:-1:-1;;;;;280:34:290;;316:22;;;277:62;274:88;;;342:18;;:::i;:::-;378:2;371:22;146:253;:::o;404:257::-;476:4;470:11;;;508:17;;-1:-1:-1;;;;;540:34:290;;576:22;;;537:62;534:88;;;602:18;;:::i;666:253::-;738:2;732:9;780:4;768:17;;-1:-1:-1;;;;;800:34:290;;836:22;;;797:62;794:88;;;862:18;;:::i;924:275::-;995:2;989:9;1060:2;1041:13;;-1:-1:-1;;1037:27:290;1025:40;;-1:-1:-1;;;;;1080:34:290;;1116:22;;;1077:62;1074:88;;;1142:18;;:::i;:::-;1178:2;1171:22;924:275;;-1:-1:-1;924:275:290:o;1204:216::-;1297:4;-1:-1:-1;;;;;1322:6:290;1319:30;1316:56;;;1352:18;;:::i;:::-;-1:-1:-1;1397:1:290;1393:14;1409:4;1389:25;;1204:216::o;1425:131::-;-1:-1:-1;;;;;1500:31:290;;1490:42;;1480:70;;1546:1;1543;1536:12;1561:134;1629:20;;1658:31;1629:20;1658:31;:::i;:::-;1561:134;;;:::o;1700:1271::-;1787:5;1840:3;1833:4;1825:6;1821:17;1817:27;1807:55;;1858:1;1855;1848:12;1807:55;1894:6;1881:20;1920:4;1944:93;1960:76;2033:2;1960:76;:::i;:::-;1944:93;:::i;:::-;2071:15;;;2133:4;2176:11;;;2164:24;;2160:33;;;2102:12;;;;2059:3;2205:15;;;2202:35;;;2233:1;2230;2223:12;2202:35;2269:2;2261:6;2257:15;2281:661;2297:6;2292:3;2289:15;2281:661;;;2373:2;2367:3;2362;2358:13;2354:22;2351:112;;;2417:1;2446:2;2442;2435:14;2351:112;2489:22;;:::i;:::-;2552:3;2539:17;2569:33;2594:7;2569:33;:::i;:::-;2615:22;;2678:12;;;2665:26;2704:33;2665:26;2704:33;:::i;:::-;2757:14;;;2750:31;2804:2;2855:12;;;2842:26;2826:14;;;2819:50;2882:18;;2920:12;;;;2314;;2281:661;;;-1:-1:-1;2960:5:290;;1700:1271;-1:-1:-1;;;;;;;1700:1271:290:o;2976:433::-;3112:6;3165:2;3153:9;3144:7;3140:23;3136:32;3133:52;;;3181:1;3178;3171:12;3133:52;3221:9;3208:23;-1:-1:-1;;;;;3246:6:290;3243:30;3240:50;;;3286:1;3283;3276:12;3240:50;3309:94;3395:7;3386:6;3375:9;3371:22;3309:94;:::i;3414:186::-;3462:4;-1:-1:-1;;;;;3487:6:290;3484:30;3481:56;;;3517:18;;:::i;:::-;-1:-1:-1;3583:2:290;3562:15;-1:-1:-1;;3558:29:290;3589:4;3554:40;;3414:186::o;3605:462::-;3647:5;3700:3;3693:4;3685:6;3681:17;3677:27;3667:55;;3718:1;3715;3708:12;3667:55;3754:6;3741:20;3785:48;3801:31;3829:2;3801:31;:::i;3785:48::-;3858:2;3849:7;3842:19;3904:3;3897:4;3892:2;3884:6;3880:15;3876:26;3873:35;3870:55;;;3921:1;3918;3911:12;3870:55;3986:2;3979:4;3971:6;3967:17;3960:4;3951:7;3947:18;3934:55;4034:1;4009:16;;;4027:4;4005:27;3998:38;;;;4013:7;3605:462;-1:-1:-1;;;3605:462:290:o;4072:671::-;4161:6;4214:2;4202:9;4193:7;4189:23;4185:32;4182:52;;;4230:1;4227;4220:12;4182:52;4270:9;4257:23;-1:-1:-1;;;;;4340:2:290;4332:6;4329:14;4326:34;;;4356:1;4353;4346:12;4326:34;4379:22;;;;4435:4;4417:16;;;4413:27;4410:47;;;4453:1;4450;4443:12;4410:47;4479:22;;:::i;:::-;4537:2;4524:16;4517:5;4510:31;4587:2;4583;4579:11;4566:25;4616:2;4606:8;4603:16;4600:36;;;4632:1;4629;4622:12;4600:36;4668:44;4704:7;4693:8;4689:2;4685:17;4668:44;:::i;:::-;4663:2;4652:14;;4645:68;-1:-1:-1;4656:5:290;4072:671;-1:-1:-1;;;;;4072:671:290:o;4975:320::-;4849:12;;4863:4;4845:23;4833:36;;4922:4;4911:16;;;4905:23;-1:-1:-1;;;;;4901:62:290;4885:14;;;4878:86;5209:2;5194:18;;5221:68;4748:222;5300:820;5355:5;5403:4;5391:9;5386:3;5382:19;5378:30;5375:50;;;5421:1;5418;5411:12;5375:50;5443:22;;:::i;:::-;5434:31;;5501:9;5488:23;5481:5;5474:38;5564:2;5553:9;5549:18;5536:32;5577:33;5602:7;5577:33;:::i;:::-;5637:2;5626:14;;5619:31;5702:2;5687:18;;5674:32;5715:33;5674:32;5715:33;:::i;:::-;5780:7;5775:2;5768:5;5764:14;5757:31;;5848:2;5837:9;5833:18;5820:32;5815:2;5808:5;5804:14;5797:56;5914:3;5903:9;5899:19;5886:33;5880:3;5873:5;5869:15;5862:58;5971:3;5960:9;5956:19;5943:33;-1:-1:-1;;;;;5991:6:290;5988:30;5985:50;;;6031:1;6028;6021:12;5985:50;6068:45;6109:3;6100:6;6089:9;6085:22;6068:45;:::i;:::-;6062:3;6055:5;6051:15;6044:70;;5300:820;;;;:::o;6125:348::-;6211:6;6264:2;6252:9;6243:7;6239:23;6235:32;6232:52;;;6280:1;6277;6270:12;6232:52;6320:9;6307:23;-1:-1:-1;;;;;6345:6:290;6342:30;6339:50;;;6385:1;6382;6375:12;6339:50;6408:59;6459:7;6450:6;6439:9;6435:22;6408:59;:::i;6478:180::-;6537:6;6590:2;6578:9;6569:7;6565:23;6561:32;6558:52;;;6606:1;6603;6596:12;6558:52;-1:-1:-1;6629:23:290;;6478:180;-1:-1:-1;6478:180:290:o;6663:874::-;6910:2;6962:21;;;7032:13;;6935:18;;;7054:22;;;6881:4;;6910:2;7095;;7113:18;;;;7154:15;;;6881:4;7197:314;7211:6;7208:1;7205:13;7197:314;;;7270:13;;7354:9;;-1:-1:-1;;;;;7350:18:290;;;7338:31;;7413:11;;;7407:18;7403:27;7389:12;;;7382:49;7451:12;;;;7486:15;;;;7323:1;7226:9;7197:314;;;-1:-1:-1;7528:3:290;;6663:874;-1:-1:-1;;;;;;;6663:874:290:o;7542:247::-;7601:6;7654:2;7642:9;7633:7;7629:23;7625:32;7622:52;;;7670:1;7667;7660:12;7622:52;7709:9;7696:23;7728:31;7753:5;7728:31;:::i;7986:770::-;8040:5;8093:3;8086:4;8078:6;8074:17;8070:27;8060:55;;8111:1;8108;8101:12;8060:55;8147:6;8134:20;8173:4;8197:93;8213:76;8286:2;8213:76;:::i;8197:93::-;8324:15;;;8410:1;8406:10;;;;8394:23;;8390:32;;;8355:12;;;;8434:15;;;8431:35;;;8462:1;8459;8452:12;8431:35;8498:2;8490:6;8486:15;8510:217;8526:6;8521:3;8518:15;8510:217;;;8606:3;8593:17;8623:31;8648:5;8623:31;:::i;:::-;8667:18;;8705:12;;;;8543;;8510:217;;;-1:-1:-1;8745:5:290;7986:770;-1:-1:-1;;;;;;7986:770:290:o;8761:635::-;8872:6;8880;8888;8941:2;8929:9;8920:7;8916:23;8912:32;8909:52;;;8957:1;8954;8947:12;8909:52;8997:9;8984:23;-1:-1:-1;;;;;9067:2:290;9059:6;9056:14;9053:34;;;9083:1;9080;9073:12;9053:34;9106:49;9147:7;9138:6;9127:9;9123:22;9106:49;:::i;:::-;9096:59;;9202:2;9191:9;9187:18;9174:32;9164:42;;9259:2;9248:9;9244:18;9231:32;9215:48;;9288:2;9278:8;9275:16;9272:36;;;9304:1;9301;9294:12;9272:36;;9327:63;9382:7;9371:8;9360:9;9356:24;9327:63;:::i;:::-;9317:73;;;8761:635;;;;;:::o;9609:592::-;9704:6;9712;9720;9728;9781:3;9769:9;9760:7;9756:23;9752:33;9749:53;;;9798:1;9795;9788:12;9749:53;9834:9;9821:23;9811:33;;9894:2;9883:9;9879:18;9866:32;9907:31;9932:5;9907:31;:::i;:::-;9957:5;-1:-1:-1;10009:2:290;9994:18;;9981:32;;-1:-1:-1;10064:2:290;10049:18;;10036:32;-1:-1:-1;;;;;10080:30:290;;10077:50;;;10123:1;10120;10113:12;10077:50;10146:49;10187:7;10178:6;10167:9;10163:22;10146:49;:::i;:::-;10136:59;;;9609:592;;;;;;;:::o;10459:658::-;10630:2;10682:21;;;10752:13;;10655:18;;;10774:22;;;10601:4;;10630:2;10853:15;;;;10827:2;10812:18;;;10601:4;10896:195;10910:6;10907:1;10904:13;10896:195;;;10975:13;;-1:-1:-1;;;;;10971:39:290;10959:52;;11066:15;;;;11031:12;;;;11007:1;10925:9;10896:195;;;-1:-1:-1;11108:3:290;;10459:658;-1:-1:-1;;;;;;10459:658:290:o;11609:348::-;11693:6;11746:2;11734:9;11725:7;11721:23;11717:32;11714:52;;;11762:1;11759;11752:12;11714:52;11802:9;11789:23;-1:-1:-1;;;;;11827:6:290;11824:30;11821:50;;;11867:1;11864;11857:12;11821:50;11890:61;11943:7;11934:6;11923:9;11919:22;11890:61;:::i;11962:315::-;12030:6;12038;12091:2;12079:9;12070:7;12066:23;12062:32;12059:52;;;12107:1;12104;12097:12;12059:52;12143:9;12130:23;12120:33;;12203:2;12192:9;12188:18;12175:32;12216:31;12241:5;12216:31;:::i;:::-;12266:5;12256:15;;;11962:315;;;;;:::o;12282:1162::-;12353:5;12406:3;12399:4;12391:6;12387:17;12383:27;12373:55;;12424:1;12421;12414:12;12373:55;12460:6;12447:20;12486:4;12510:93;12526:76;12599:2;12526:76;:::i;12510:93::-;12637:15;;;12723:1;12719:10;;;;12707:23;;12703:32;;;12668:12;;;;12747:15;;;12744:35;;;12775:1;12772;12765:12;12744:35;12811:2;12803:6;12799:15;12823:592;12839:6;12834:3;12831:15;12823:592;;;12917:4;12911:3;12906;12902:13;12898:24;12895:114;;;12963:1;12992:2;12988;12981:14;12895:114;13035:22;;:::i;:::-;13097:3;13084:17;13077:5;13070:32;13152:2;13147:3;13143:12;13130:26;13204:4;13195:7;13191:18;13182:7;13179:31;13169:129;;13252:1;13281:2;13277;13270:14;13169:129;13318:14;;;13311:31;13355:18;;13393:12;;;;12865:4;12856:14;12823:592;;13449:2242;13560:5;13589:97;13605:80;13678:6;13605:80;:::i;13589:97::-;13720:21;;;13580:106;-1:-1:-1;13760:4:290;13780:14;;;;13813:1;13849:15;;;13837:28;;13877:15;;;13874:35;;;13905:1;13902;13895:12;13874:35;13929:6;13944:1741;13960:6;13955:3;13952:15;13944:1741;;;14046:3;14033:17;-1:-1:-1;;;;;14123:2:290;14110:11;14107:19;14104:109;;;14167:1;14196:2;14192;14185:14;14104:109;14236:24;;;;14294:4;14280:12;;;14276:23;14273:113;;;14340:1;14369:2;14365;14358:14;14273:113;14412:22;;:::i;:::-;14475:2;14462:16;14491:33;14516:7;14491:33;:::i;:::-;14537:22;;14601:11;;;14588:25;14629:16;;;14626:106;;;14686:1;14715:2;14711;14704:14;14626:106;14763:8;14759:2;14755:17;14745:27;;;14814:3;14807:4;14803:2;14799:13;14795:23;14785:121;;14860:1;14850:11;;14889:2;14885;14878:14;14785:121;14943:2;14930:16;14919:27;;14972:94;14988:77;15061:3;14988:77;:::i;14972:94::-;15110:18;;;15205:12;;;15197:21;;15193:30;;;15150:14;;;;15239:17;;;15236:110;;;15298:1;15328:3;15323;15316:16;15236:110;15372:11;;;;15396:174;15414:8;15407:5;15404:19;15396:174;;;15496:19;;15482:34;;15435:14;;;;15542;;;;15396:174;;;15590:14;;;15583:29;-1:-1:-1;15625:18:290;;-1:-1:-1;;15663:12:290;;;;13977;;13944:1741;;;13948:3;;;;;13449:2242;;;;;:::o;15696:308::-;15782:5;15835:3;15828:4;15820:6;15816:17;15812:27;15802:55;;15853:1;15850;15843:12;15802:55;15875:123;15994:3;15985:6;15972:20;15965:4;15957:6;15953:17;15875:123;:::i;16009:1419::-;16352:6;16360;16368;16376;16384;16392;16445:3;16433:9;16424:7;16420:23;16416:33;16413:53;;;16462:1;16459;16452:12;16413:53;16485:29;16504:9;16485:29;:::i;:::-;16475:39;;16533:38;16567:2;16556:9;16552:18;16533:38;:::i;:::-;16523:48;;16622:2;16611:9;16607:18;16594:32;-1:-1:-1;;;;;16686:2:290;16678:6;16675:14;16672:34;;;16702:1;16699;16692:12;16672:34;16725:78;16795:7;16786:6;16775:9;16771:22;16725:78;:::i;:::-;16715:88;;16856:2;16845:9;16841:18;16828:32;16812:48;;16885:2;16875:8;16872:16;16869:36;;;16901:1;16898;16891:12;16869:36;16924:95;17011:7;17000:8;16989:9;16985:24;16924:95;:::i;:::-;16914:105;;17072:3;17061:9;17057:19;17044:33;17028:49;;17102:2;17092:8;17089:16;17086:36;;;17118:1;17115;17108:12;17086:36;17141:96;17229:7;17218:8;17207:9;17203:24;17141:96;:::i;:::-;17131:106;;17290:3;17279:9;17275:19;17262:33;17246:49;;17320:2;17310:8;17307:16;17304:36;;;17336:1;17333;17326:12;17304:36;;17359:63;17414:7;17403:8;17392:9;17388:24;17359:63;:::i;:::-;17349:73;;;16009:1419;;;;;;;;:::o;17433:550::-;17558:6;17611:2;17599:9;17590:7;17586:23;17582:32;17579:52;;;17627:1;17624;17617:12;17579:52;17667:9;17654:23;-1:-1:-1;;;;;17692:6:290;17689:30;17686:50;;;17732:1;17729;17722:12;17686:50;17755:22;;17808:4;17800:13;;17796:27;-1:-1:-1;17786:55:290;;17837:1;17834;17827:12;17786:55;17860:117;17969:7;17964:2;17951:16;17946:2;17942;17938:11;17860:117;:::i;18173:431::-;18308:6;18361:2;18349:9;18340:7;18336:23;18332:32;18329:52;;;18377:1;18374;18367:12;18329:52;18417:9;18404:23;-1:-1:-1;;;;;18442:6:290;18439:30;18436:50;;;18482:1;18479;18472:12;18436:50;18505:93;18590:7;18581:6;18570:9;18566:22;18505:93;:::i;18609:416::-;18704:6;18712;18765:2;18753:9;18744:7;18740:23;18736:32;18733:52;;;18781:1;18778;18771:12;18733:52;18821:9;18808:23;-1:-1:-1;;;;;18846:6:290;18843:30;18840:50;;;18886:1;18883;18876:12;18840:50;18909:59;18960:7;18951:6;18940:9;18936:22;18909:59;:::i;:::-;18899:69;19015:2;19000:18;;;;18987:32;;-1:-1:-1;;;;18609:416:290:o;19212:1447::-;19337:6;19368:2;19411;19399:9;19390:7;19386:23;19382:32;19379:52;;;19427:1;19424;19417:12;19379:52;19467:9;19454:23;-1:-1:-1;;;;;19492:6:290;19489:30;19486:50;;;19532:1;19529;19522:12;19486:50;19555:22;;19608:4;19600:13;;19596:27;-1:-1:-1;19586:55:290;;19637:1;19634;19627:12;19586:55;19673:2;19660:16;19696:93;19712:76;19785:2;19712:76;:::i;19696:93::-;19823:15;;;19905:1;19901:10;;;;19893:19;;19889:28;;;19854:12;;;;19929:19;;;19926:39;;;19961:1;19958;19951:12;19926:39;19985:11;;;;20005:624;20021:6;20016:3;20013:15;20005:624;;;20103:4;20097:3;20088:7;20084:17;20080:28;20077:118;;;20149:1;20178:2;20174;20167:14;20077:118;20221:22;;:::i;:::-;20283:3;20270:17;20263:5;20256:32;20338:2;20333:3;20329:12;20316:26;-1:-1:-1;;;;;20381:7:290;20377:46;20368:7;20365:59;20355:157;;20466:1;20495:2;20491;20484:14;20355:157;20532:14;;;20525:31;20569:18;;20047:4;20038:14;;;;;20607:12;;;;20005:624;;20664:456;20741:6;20749;20757;20810:2;20798:9;20789:7;20785:23;20781:32;20778:52;;;20826:1;20823;20816:12;20778:52;20865:9;20852:23;20884:31;20909:5;20884:31;:::i;:::-;20934:5;-1:-1:-1;20991:2:290;20976:18;;20963:32;21004:33;20963:32;21004:33;:::i;:::-;20664:456;;21056:7;;-1:-1:-1;;;21110:2:290;21095:18;;;;21082:32;;20664:456::o;21125:127::-;21186:10;21181:3;21177:20;21174:1;21167:31;21217:4;21214:1;21207:15;21241:4;21238:1;21231:15;21257:347;21408:2;21393:18;;21441:1;21430:13;;21420:144;;21486:10;21481:3;21477:20;21474:1;21467:31;21521:4;21518:1;21511:15;21549:4;21546:1;21539:15;21420:144;21573:25;;;21257:347;:::o;21609:632::-;21780:2;21832:21;;;21902:13;;21805:18;;;21924:22;;;21751:4;;21780:2;22003:15;;;;21977:2;21962:18;;;21751:4;22046:169;22060:6;22057:1;22054:13;22046:169;;;22121:13;;22109:26;;22190:15;;;;22155:12;;;;22082:1;22075:9;22046:169;;22246:388;22323:6;22331;22384:2;22372:9;22363:7;22359:23;22355:32;22352:52;;;22400:1;22397;22390:12;22352:52;22440:9;22427:23;-1:-1:-1;;;;;22465:6:290;22462:30;22459:50;;;22505:1;22502;22495:12;22459:50;22528:49;22569:7;22560:6;22549:9;22545:22;22528:49;:::i;22639:315::-;22707:6;22715;22768:2;22756:9;22747:7;22743:23;22739:32;22736:52;;;22784:1;22781;22774:12;22736:52;22823:9;22810:23;22842:31;22867:5;22842:31;:::i;:::-;22892:5;22944:2;22929:18;;;;22916:32;;-1:-1:-1;;;22639:315:290:o;22959:401::-;23079:6;23132:2;23120:9;23111:7;23107:23;23103:32;23100:52;;;23148:1;23145;23138:12;23100:52;23188:9;23175:23;-1:-1:-1;;;;;23213:6:290;23210:30;23207:50;;;23253:1;23250;23243:12;23207:50;23276:78;23346:7;23337:6;23326:9;23322:22;23276:78;:::i;23365:250::-;23450:1;23460:113;23474:6;23471:1;23468:13;23460:113;;;23550:11;;;23544:18;23531:11;;;23524:39;23496:2;23489:10;23460:113;;;-1:-1:-1;;23607:1:290;23589:16;;23582:27;23365:250::o;23620:271::-;23662:3;23700:5;23694:12;23727:6;23722:3;23715:19;23743:76;23812:6;23805:4;23800:3;23796:14;23789:4;23782:5;23778:16;23743:76;:::i;:::-;23873:2;23852:15;-1:-1:-1;;23848:29:290;23839:39;;;;23880:4;23835:50;;23620:271;-1:-1:-1;;23620:271:290:o;23896:220::-;24045:2;24034:9;24027:21;24008:4;24065:45;24106:2;24095:9;24091:18;24083:6;24065:45;:::i;24121:386::-;24353:1;24349;24344:3;24340:11;24336:19;24328:6;24324:32;24313:9;24306:51;24393:6;24388:2;24377:9;24373:18;24366:34;24436:2;24431;24420:9;24416:18;24409:30;24287:4;24456:45;24497:2;24486:9;24482:18;24474:6;24456:45;:::i;:::-;24448:53;24121:386;-1:-1:-1;;;;;24121:386:290:o;24512:577::-;24599:5;24593:12;24588:3;24581:25;24563:3;24652:4;24645:5;24641:16;24635:23;24694:1;24690;24685:3;24681:11;24677:19;24746:2;24732:12;24728:21;24721:4;24716:3;24712:14;24705:45;24811:2;24803:4;24796:5;24792:16;24786:23;24782:32;24775:4;24770:3;24766:14;24759:56;;;24864:4;24857:5;24853:16;24847:23;24840:4;24835:3;24831:14;24824:47;24920:4;24913:5;24909:16;24903:23;24896:4;24891:3;24887:14;24880:47;24975:4;24968:5;24964:16;24958:23;25013:4;25006;25001:3;24997:14;24990:28;25034:49;25077:4;25072:3;25068:14;25052;25034:49;:::i;25094:415::-;25327:6;25316:9;25309:25;25370:2;25365;25354:9;25350:18;25343:30;25290:4;25390:54;25440:2;25429:9;25425:18;25417:6;25390:54;:::i;:::-;25382:62;;25494:6;25487:14;25480:22;25475:2;25464:9;25460:18;25453:50;25094:415;;;;;;:::o;25514:127::-;25575:10;25570:3;25566:20;25563:1;25556:31;25606:4;25603:1;25596:15;25630:4;25627:1;25620:15;25646:125;25711:9;;;25732:10;;;25729:36;;;25745:18;;:::i;25776:127::-;25837:10;25832:3;25828:20;25825:1;25818:31;25868:4;25865:1;25858:15;25892:4;25889:1;25882:15;25908:135;25947:3;25968:17;;;25965:43;;25988:18;;:::i;:::-;-1:-1:-1;26035:1:290;26024:13;;25908:135::o;26048:263::-;26231:2;26220:9;26213:21;26194:4;26251:54;26301:2;26290:9;26286:18;26278:6;26251:54;:::i;26316:410::-;26518:2;26500:21;;;26557:2;26537:18;;;26530:30;26596:34;26591:2;26576:18;;26569:62;-1:-1:-1;;;26662:2:290;26647:18;;26640:44;26716:3;26701:19;;26316:410::o;27279:175::-;27316:3;27360:4;27353:5;27349:16;27389:4;27380:7;27377:17;27374:43;;27397:18;;:::i;:::-;27446:1;27433:15;;27279:175;-1:-1:-1;;27279:175:290:o;27459:255::-;27549:5;27543:12;27538:3;27531:25;27513:3;27602:4;27595:5;27591:16;27585:23;27640:4;27633;27628:3;27624:14;27617:28;27661:47;27702:4;27697:3;27693:14;27679:12;27661:47;:::i;27719:421::-;27960:6;27949:9;27942:25;28003:2;27998;27987:9;27983:18;27976:30;27923:4;28023:57;28076:2;28065:9;28061:18;28053:6;28023:57;:::i;:::-;28015:65;;28128:4;28120:6;28116:17;28111:2;28100:9;28096:18;28089:45;27719:421;;;;;;:::o;28145:287::-;28274:3;28312:6;28306:13;28328:66;28387:6;28382:3;28375:4;28367:6;28363:17;28328:66;:::i;:::-;28410:16;;;;;28145:287;-1:-1:-1;;28145:287:290:o;29905:441::-;29958:5;30011:3;30004:4;29996:6;29992:17;29988:27;29978:55;;30029:1;30026;30019:12;29978:55;30058:6;30052:13;30089:48;30105:31;30133:2;30105:31;:::i;30089:48::-;30162:2;30153:7;30146:19;30208:3;30201:4;30196:2;30188:6;30184:15;30180:26;30177:35;30174:55;;;30225:1;30222;30215:12;30174:55;30238:77;30312:2;30305:4;30296:7;30292:18;30285:4;30277:6;30273:17;30238:77;:::i;30351:672::-;30451:6;30504:2;30492:9;30483:7;30479:23;30475:32;30472:52;;;30520:1;30517;30510:12;30472:52;30553:9;30547:16;-1:-1:-1;;;;;30623:2:290;30615:6;30612:14;30609:34;;;30639:1;30636;30629:12;30609:34;30662:22;;;;30718:4;30700:16;;;30696:27;30693:47;;;30736:1;30733;30726:12;30693:47;30762:22;;:::i;:::-;30813:2;30807:9;30800:5;30793:24;30856:2;30852;30848:11;30842:18;30885:2;30875:8;30872:16;30869:36;;;30901:1;30898;30891:12;30869:36;30937:55;30984:7;30973:8;30969:2;30965:17;30937:55;:::i;31028:459::-;31288:1;31284;31279:3;31275:11;31271:19;31263:6;31259:32;31248:9;31241:51;31328:6;31323:2;31312:9;31308:18;31301:34;31371:6;31366:2;31355:9;31351:18;31344:34;31414:3;31409:2;31398:9;31394:18;31387:31;31222:4;31435:46;31476:3;31465:9;31461:19;31453:6;31435:46;:::i;31492:621::-;31769:6;31758:9;31751:25;31812:3;31807:2;31796:9;31792:18;31785:31;31732:4;31839:46;31880:3;31869:9;31865:19;31857:6;31839:46;:::i;:::-;31916:2;31901:18;;31894:34;;;-1:-1:-1;;;;;31964:32:290;;31959:2;31944:18;;31937:60;32034:22;;;32028:3;32013:19;;32006:51;32074:33;32038:6;32092;32074:33;:::i;:::-;32066:41;31492:621;-1:-1:-1;;;;;;;;31492:621:290:o;32118:272::-;32307:2;32296:9;32289:21;32270:4;32327:57;32380:2;32369:9;32365:18;32357:6;32327:57;:::i;32395:128::-;32462:9;;;32483:11;;;32480:37;;;32497:18;;:::i;32528:127::-;32589:10;32584:3;32580:20;32577:1;32570:31;32620:4;32617:1;32610:15;32644:4;32641:1;32634:15;33658:1023;33755:6;33808:2;33796:9;33787:7;33783:23;33779:32;33776:52;;;33824:1;33821;33814:12;33776:52;33857:9;33851:16;-1:-1:-1;;;;;33927:2:290;33919:6;33916:14;33913:34;;;33943:1;33940;33933:12;33913:34;33966:22;;;;34022:4;34004:16;;;34000:27;33997:47;;;34040:1;34037;34030:12;33997:47;34066:22;;:::i;:::-;34117:2;34111:9;34104:5;34097:24;34159:2;34155;34151:11;34145:18;34172:33;34197:7;34172:33;:::i;:::-;34232:2;34221:14;;34214:31;34283:2;34275:11;;34269:18;34296:33;34269:18;34296:33;:::i;:::-;34361:7;34356:2;34349:5;34345:14;34338:31;;34415:2;34411;34407:11;34401:18;34396:2;34389:5;34385:14;34378:42;34467:3;34463:2;34459:12;34453:19;34447:3;34440:5;34436:15;34429:44;34512:3;34508:2;34504:12;34498:19;34542:2;34532:8;34529:16;34526:36;;;34558:1;34555;34548:12;34526:36;34595:55;34642:7;34631:8;34627:2;34623:17;34595:55;:::i;:::-;34589:3;34578:15;;34571:80;-1:-1:-1;34582:5:290;33658:1023;-1:-1:-1;;;;;33658:1023:290:o;34686:277::-;34753:6;34806:2;34794:9;34785:7;34781:23;34777:32;34774:52;;;34822:1;34819;34812:12;34774:52;34854:9;34848:16;34907:5;34900:13;34893:21;34886:5;34883:32;34873:60;;34929:1;34926;34919:12", - "linkReferences": {} - }, - "methodIdentifiers": { - "allowReceiverBridgeAdapters((address,uint256[])[])": "9d0cb9d4", - "approveSenders(address[])": "90f7af54", - "deliverEnvelope((uint256,address,address,uint256,uint256,bytes))": "1947051e", - "disableBridgeAdapters((address,uint256[])[])": "917cbb9b", - "disallowReceiverBridgeAdapters((address,uint256[])[])": "e3a95a5a", - "emergencyEtherTransfer(address,uint256)": "eed88b8d", - "emergencyTokenTransfer(address,address,uint256)": "a3d5b255", - "enableBridgeAdapters((address,address,uint256)[])": "0a234b15", - "forwardMessage(uint256,address,uint256,bytes)": "55c4fed4", - "getConfigurationByChain(uint256)": "6e74ebe8", - "getCurrentEnvelopeNonce()": "efe4b0ae", - "getCurrentTransactionNonce()": "654a812b", - "getEnvelopeState((uint256,address,address,uint256,uint256,bytes))": "e01658d9", - "getEnvelopeState(bytes32)": "aa3f85c8", - "getForwarderBridgeAdaptersByChain(uint256)": "34f7870c", - "getReceiverBridgeAdaptersByChain(uint256)": "5b9d97c6", - "getSupportedChains()": "c4bffe2b", - "getTransactionState((uint256,bytes))": "0fb9ca41", - "getTransactionState(bytes32)": "c71cca16", - "guardian()": "452a9320", - "initialize(address,address,(uint256,uint8)[],(address,uint256[])[],(address,address,uint256)[],address[])": "83fec72c", - "isEnvelopeRegistered((uint256,address,address,uint256,uint256,bytes))": "436bd103", - "isEnvelopeRegistered(bytes32)": "db58eaec", - "isReceiverBridgeAdapterAllowed(address,uint256)": "f62b9843", - "isSenderApproved(address)": "3805e84e", - "isTransactionForwarded((uint256,bytes))": "c37255f2", - "isTransactionForwarded(bytes32)": "9b6c7efa", - "isTransactionReceivedByAdapter(bytes32,address)": "76e5379a", - "owner()": "8da5cb5b", - "receiveCrossChainMessage(bytes,uint256)": "ed68595a", - "removeSenders(address[])": "7670d1d8", - "renounceOwnership()": "715018a6", - "retryEnvelope((uint256,address,address,uint256,uint256,bytes),uint256)": "a25d3892", - "retryTransaction(bytes,uint256,address[])": "3eb59f60", - "transferOwnership(address)": "f2fde38b", - "updateConfirmations((uint256,uint8)[])": "fe46a413", - "updateGuardian(address)": "fc525395", - "updateMessagesValidityTimestamp((uint256,uint120)[])": "a2711ff4", - "whoCanRescue()": "a4757b0f" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"destinationChainId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bridgeAdapter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationBridgeAdapter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"}],\"name\":\"BridgeAdapterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"newConfirmations\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"ConfirmationsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ERC20Rescued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"envelopeId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"origin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"originChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"destinationChainId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct Envelope\",\"name\":\"envelope\",\"type\":\"tuple\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isDelivered\",\"type\":\"bool\"}],\"name\":\"EnvelopeDeliveryAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"envelopeId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"origin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"originChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"destinationChainId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct Envelope\",\"name\":\"envelope\",\"type\":\"tuple\"}],\"name\":\"EnvelopeRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldGuardian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newGuardian\",\"type\":\"address\"}],\"name\":\"GuardianUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeTokensRescued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"invalidTimestamp\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"NewInvalidation\",\"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\":true,\"internalType\":\"address\",\"name\":\"bridgeAdapter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"allowed\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"ReceiverBridgeAdaptersUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"isApproved\",\"type\":\"bool\"}],\"name\":\"SenderUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"transactionId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"envelopeId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"encodedTransaction\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"destinationChainId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bridgeAdapter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destinationBridgeAdapter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"adapterSuccessful\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"TransactionForwardingAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"transactionId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"envelopeId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"originChainId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedEnvelope\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"struct Transaction\",\"name\":\"transaction\",\"type\":\"tuple\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"bridgeAdapter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"confirmations\",\"type\":\"uint8\"}],\"name\":\"TransactionReceived\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"bridgeAdapter\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"chainIds\",\"type\":\"uint256[]\"}],\"internalType\":\"struct ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[]\",\"name\":\"bridgeAdaptersInput\",\"type\":\"tuple[]\"}],\"name\":\"allowReceiverBridgeAdapters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"approveSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"origin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"originChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"destinationChainId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Envelope\",\"name\":\"envelope\",\"type\":\"tuple\"}],\"name\":\"deliverEnvelope\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"bridgeAdapter\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"chainIds\",\"type\":\"uint256[]\"}],\"internalType\":\"struct ICrossChainForwarder.BridgeAdapterToDisable[]\",\"name\":\"bridgeAdapters\",\"type\":\"tuple[]\"}],\"name\":\"disableBridgeAdapters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"bridgeAdapter\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"chainIds\",\"type\":\"uint256[]\"}],\"internalType\":\"struct ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[]\",\"name\":\"bridgeAdapters\",\"type\":\"tuple[]\"}],\"name\":\"disallowReceiverBridgeAdapters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyEtherTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"erc20Token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emergencyTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"currentChainBridgeAdapter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAdapter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"destinationChainId\",\"type\":\"uint256\"}],\"internalType\":\"struct ICrossChainForwarder.ForwarderBridgeAdapterConfigInput[]\",\"name\":\"bridgeAdapters\",\"type\":\"tuple[]\"}],\"name\":\"enableBridgeAdapters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"destinationChainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"forwardMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"getConfigurationByChain\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"requiredConfirmation\",\"type\":\"uint8\"},{\"internalType\":\"uint120\",\"name\":\"validityTimestamp\",\"type\":\"uint120\"}],\"internalType\":\"struct ICrossChainReceiver.ReceiverConfiguration\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEnvelopeNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentTransactionNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"envelopeId\",\"type\":\"bytes32\"}],\"name\":\"getEnvelopeState\",\"outputs\":[{\"internalType\":\"enum ICrossChainReceiver.EnvelopeState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"origin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"originChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"destinationChainId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Envelope\",\"name\":\"envelope\",\"type\":\"tuple\"}],\"name\":\"getEnvelopeState\",\"outputs\":[{\"internalType\":\"enum ICrossChainReceiver.EnvelopeState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"getForwarderBridgeAdaptersByChain\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"destinationBridgeAdapter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"currentChainBridgeAdapter\",\"type\":\"address\"}],\"internalType\":\"struct ICrossChainForwarder.ChainIdBridgeConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"getReceiverBridgeAdaptersByChain\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedEnvelope\",\"type\":\"bytes\"}],\"internalType\":\"struct Transaction\",\"name\":\"transaction\",\"type\":\"tuple\"}],\"name\":\"getTransactionState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"confirmations\",\"type\":\"uint8\"},{\"internalType\":\"uint120\",\"name\":\"firstBridgedAt\",\"type\":\"uint120\"}],\"internalType\":\"struct ICrossChainReceiver.TransactionStateWithoutAdapters\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"transactionId\",\"type\":\"bytes32\"}],\"name\":\"getTransactionState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"confirmations\",\"type\":\"uint8\"},{\"internalType\":\"uint120\",\"name\":\"firstBridgedAt\",\"type\":\"uint120\"}],\"internalType\":\"struct ICrossChainReceiver.TransactionStateWithoutAdapters\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardian\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"guardian\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"requiredConfirmations\",\"type\":\"uint8\"}],\"internalType\":\"struct ICrossChainReceiver.ConfirmationInput[]\",\"name\":\"initialRequiredConfirmations\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"bridgeAdapter\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"chainIds\",\"type\":\"uint256[]\"}],\"internalType\":\"struct ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[]\",\"name\":\"receiverBridgeAdaptersToAllow\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"currentChainBridgeAdapter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destinationBridgeAdapter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"destinationChainId\",\"type\":\"uint256\"}],\"internalType\":\"struct ICrossChainForwarder.ForwarderBridgeAdapterConfigInput[]\",\"name\":\"forwarderBridgeAdaptersToEnable\",\"type\":\"tuple[]\"},{\"internalType\":\"address[]\",\"name\":\"sendersToApprove\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"origin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"originChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"destinationChainId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Envelope\",\"name\":\"envelope\",\"type\":\"tuple\"}],\"name\":\"isEnvelopeRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"envelopeId\",\"type\":\"bytes32\"}],\"name\":\"isEnvelopeRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridgeAdapter\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"isReceiverBridgeAdapterAllowed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"isSenderApproved\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"transactionId\",\"type\":\"bytes32\"}],\"name\":\"isTransactionForwarded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"encodedEnvelope\",\"type\":\"bytes\"}],\"internalType\":\"struct Transaction\",\"name\":\"transaction\",\"type\":\"tuple\"}],\"name\":\"isTransactionForwarded\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"transactionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"bridgeAdapter\",\"type\":\"address\"}],\"name\":\"isTransactionReceivedByAdapter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedTransaction\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"originChainId\",\"type\":\"uint256\"}],\"name\":\"receiveCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"removeSenders\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"origin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"originChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"destinationChainId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"internalType\":\"struct Envelope\",\"name\":\"envelope\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"retryEnvelope\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedTransaction\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"bridgeAdaptersToRetry\",\"type\":\"address[]\"}],\"name\":\"retryTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"requiredConfirmations\",\"type\":\"uint8\"}],\"internalType\":\"struct ICrossChainReceiver.ConfirmationInput[]\",\"name\":\"newConfirmations\",\"type\":\"tuple[]\"}],\"name\":\"updateConfirmations\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newGuardian\",\"type\":\"address\"}],\"name\":\"updateGuardian\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint120\",\"name\":\"validityTimestamp\",\"type\":\"uint120\"}],\"internalType\":\"struct ICrossChainReceiver.ValidityTimestampInput[]\",\"name\":\"newValidityTimestamp\",\"type\":\"tuple[]\"}],\"name\":\"updateMessagesValidityTimestamp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"whoCanRescue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"BGD Labs\",\"errors\":{\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"events\":{\"BridgeAdapterUpdated(uint256,address,address,bool)\":{\"params\":{\"allowed\":\"boolean indicating if the bridge adapter is allowed or disallowed\",\"bridgeAdapter\":\"address of the bridge adapter added (deployed on current network)\",\"destinationBridgeAdapter\":\"address of the connected bridge adapter on destination chain\",\"destinationChainId\":\"id of the destination chain in our notation\"}},\"ConfirmationsUpdated(uint8,uint256)\":{\"params\":{\"chainId\":\"id of the chain updated\",\"newConfirmations\":\"number of new confirmations needed for a message to be valid\"}},\"ERC20Rescued(address,address,address,uint256)\":{\"params\":{\"amount\":\"quantity of tokens rescued\",\"caller\":\"address that triggers the rescue\",\"to\":\"address that will receive the rescued tokens\",\"token\":\"address of the rescued token\"}},\"EnvelopeDeliveryAttempted(bytes32,(uint256,address,address,uint256,uint256,bytes),bool)\":{\"params\":{\"envelope\":\"the Envelope type data\",\"envelopeId\":\"id of the envelope\",\"isDelivered\":\"flag indicating if the message has been delivered successfully\"}},\"EnvelopeRegistered(bytes32,(uint256,address,address,uint256,uint256,bytes))\":{\"params\":{\"envelope\":\"the Envelope type data\",\"envelopeId\":\"internal id of the envelope\"}},\"GuardianUpdated(address,address)\":{\"details\":\"Event emitted when guardian gets updated\",\"params\":{\"newGuardian\":\"address of the new guardian\",\"oldGuardian\":\"address of previous guardian\"}},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"NativeTokensRescued(address,address,uint256)\":{\"params\":{\"amount\":\"quantity of tokens rescued\",\"caller\":\"address that triggers the rescue\",\"to\":\"address that will receive the rescued tokens\"}},\"NewInvalidation(uint256,uint256)\":{\"params\":{\"chainId\":\"id of the chain updated\",\"invalidTimestamp\":\"timestamp to invalidate previous messages\"}},\"ReceiverBridgeAdaptersUpdated(address,bool,uint256)\":{\"params\":{\"allowed\":\"boolean indicating if the bridge adapter has been allowed or disallowed\",\"bridgeAdapter\":\"address of the updated bridge adapter\",\"chainId\":\"id of the chain updated\"}},\"SenderUpdated(address,bool)\":{\"params\":{\"isApproved\":\"boolean that indicates if the sender has been approved or removed\",\"sender\":\"address of the updated sender\"}},\"TransactionForwardingAttempted(bytes32,bytes32,bytes,uint256,address,address,bool,bytes)\":{\"params\":{\"adapterSuccessful\":\"adapter was able to forward the message\",\"bridgeAdapter\":\"address of the bridge adapter that failed (deployed on current network)\",\"destinationBridgeAdapter\":\"address of the connected bridge adapter on destination chain\",\"destinationChainId\":\"id of the destination chain in our notation\",\"encodedTransaction\":\"object intended to be bridged\",\"envelopeId\":\"internal id of the envelope\",\"returnData\":\"bytes with error information\",\"transactionId\":\"id of the forwarded transaction\"}},\"TransactionReceived(bytes32,bytes32,uint256,(uint256,bytes),address,uint8)\":{\"params\":{\"bridgeAdapter\":\"address of the bridge adapter who received the message (deployed on current network)\",\"confirmations\":\"number of current confirmations for this message\",\"envelopeId\":\"id of the envelope\",\"originChainId\":\"id of the chain where the envelope originated\",\"transaction\":\"the Transaction type data\",\"transactionId\":\"id of the transaction\"}}},\"kind\":\"dev\",\"methods\":{\"allowReceiverBridgeAdapters((address,uint256[])[])\":{\"params\":{\"bridgeAdaptersInput\":\"array of objects with the new bridge adapters and supported chains\"}},\"approveSenders(address[])\":{\"params\":{\"senders\":\"list of addresses to approve\"}},\"deliverEnvelope((uint256,address,address,uint256,uint256,bytes))\":{\"details\":\"to deliver an envelope, it needs to have been previously confirmed and not delivered\",\"params\":{\"envelope\":\"the Envelope typed data\"}},\"disableBridgeAdapters((address,uint256[])[])\":{\"params\":{\"bridgeAdapters\":\"array of bridge adapter addresses to disable\"}},\"disallowReceiverBridgeAdapters((address,uint256[])[])\":{\"params\":{\"bridgeAdaptersInput\":\"array of objects with the bridge adapters and supported chains to disallow\"}},\"emergencyEtherTransfer(address,uint256)\":{\"params\":{\"amount\":\"of eth to rescue\",\"to\":\"address to send the eth\"}},\"emergencyTokenTransfer(address,address,uint256)\":{\"params\":{\"amount\":\"of tokens to rescue\",\"erc20Token\":\"address of the token to rescue\",\"to\":\"address to send the tokens\"}},\"enableBridgeAdapters((address,address,uint256)[])\":{\"params\":{\"bridgeAdapters\":\"array of new bridge adapter configurations\"}},\"forwardMessage(uint256,address,uint256,bytes)\":{\"params\":{\"destination\":\"address where the message is intended for\",\"destinationChainId\":\"id of the destination chain where the message needs to be bridged\",\"gasLimit\":\"gas cost on receiving side of the message\",\"message\":\"bytes that need to be bridged\"},\"returns\":{\"_0\":\"internal id of the envelope and transaction\"}},\"getConfigurationByChain(uint256)\":{\"params\":{\"chainId\":\"id of the chain to get the configuration from\"},\"returns\":{\"_0\":\"the specified chain configuration object\"}},\"getCurrentEnvelopeNonce()\":{\"returns\":{\"_0\":\"the current valid envelope nonce\"}},\"getCurrentTransactionNonce()\":{\"returns\":{\"_0\":\"the current valid transaction nonce\"}},\"getEnvelopeState((uint256,address,address,uint256,uint256,bytes))\":{\"params\":{\"envelope\":\"the Envelope type data\"},\"returns\":{\"_0\":\"the envelope current state, containing if it has been confirmed and delivered\"}},\"getEnvelopeState(bytes32)\":{\"params\":{\"envelopeId\":\"id of the envelope\"},\"returns\":{\"_0\":\"the envelope current state, containing if it has been confirmed and delivered\"}},\"getForwarderBridgeAdaptersByChain(uint256)\":{\"params\":{\"chainId\":\"id of the chain we want to get the adapters from\"},\"returns\":{\"_0\":\"an array of chain configurations where the bridge adapter can communicate\"}},\"getReceiverBridgeAdaptersByChain(uint256)\":{\"params\":{\"chainId\":\"id of the chain to get the allowed bridge adapter list\"},\"returns\":{\"_0\":\"the list of allowed bridge adapters\"}},\"getSupportedChains()\":{\"returns\":{\"_0\":\"list of supported chains\"}},\"getTransactionState((uint256,bytes))\":{\"params\":{\"transaction\":\"Transaction type data\"},\"returns\":{\"_0\":\"number of confirmations of internal message identified by internalId and the updated timestamp\"}},\"getTransactionState(bytes32)\":{\"params\":{\"transactionId\":\"the id of transaction\"},\"returns\":{\"_0\":\"number of confirmations of internal message identified by the transactionId and the updated timestamp\"}},\"guardian()\":{\"details\":\"get guardian address;\"},\"initialize(address,address,(uint256,uint8)[],(address,uint256[])[],(address,address,uint256)[],address[])\":{\"params\":{\"forwarderBridgeAdaptersToEnable\":\"array specifying for every bridgeAdapter, the destinations it can have\",\"guardian\":\"address of the guardian of the cross chain controller\",\"initialRequiredConfirmations\":\"number of confirmations the messages need to be accepted as valid\",\"owner\":\"address of the owner of the cross chain controller\",\"receiverBridgeAdaptersToAllow\":\"array of addresses of the bridge adapters that can receive messages\",\"sendersToApprove\":\"array of addresses to allow as forwarders\"}},\"isEnvelopeRegistered((uint256,address,address,uint256,uint256,bytes))\":{\"params\":{\"envelope\":\"the Envelope type data\"},\"returns\":{\"_0\":\"boolean indicating if the envelope has been registered\"}},\"isEnvelopeRegistered(bytes32)\":{\"params\":{\"envelopeId\":\"the hashed id of the envelope\"},\"returns\":{\"_0\":\"boolean indicating if the envelope has been registered\"}},\"isReceiverBridgeAdapterAllowed(address,uint256)\":{\"params\":{\"bridgeAdapter\":\"address of the bridge adapter to check\",\"chainId\":\"id of the chain to check\"},\"returns\":{\"_0\":\"boolean indicating if bridge adapter is allowed\"}},\"isSenderApproved(address)\":{\"params\":{\"sender\":\"address that we want to check if approved\"},\"returns\":{\"_0\":\"boolean indicating if the address has been approved as sender\"}},\"isTransactionForwarded((uint256,bytes))\":{\"params\":{\"transaction\":\"the Transaction type data\"},\"returns\":{\"_0\":\"flag indicating if a transaction has been forwarded\"}},\"isTransactionForwarded(bytes32)\":{\"params\":{\"transactionId\":\"hashed id of the transaction\"},\"returns\":{\"_0\":\"flag indicating if a transaction has been forwarded\"}},\"isTransactionReceivedByAdapter(bytes32,address)\":{\"params\":{\"bridgeAdapter\":\"address of the bridge adapter to check if it has bridged the message\",\"transactionId\":\"id of the transaction as stored internally\"},\"returns\":{\"_0\":\"boolean indicating if the message has been received\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"receiveCrossChainMessage(bytes,uint256)\":{\"params\":{\"encodedTransaction\":\"bytes containing the bridged information\",\"originChainId\":\"id of the chain where the transaction originated\"}},\"removeSenders(address[])\":{\"params\":{\"senders\":\"list of addresses to remove\"}},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"retryEnvelope((uint256,address,address,uint256,uint256,bytes),uint256)\":{\"details\":\"This method will send an existing Envelope using a new Transaction.This method should be used when the intention is to send the Envelope as if it was a new message. This way on the Receiver side it will start from 0 to count for the required confirmations. (usual use case would be for when an envelope has been invalidated on Receiver side, and needs to be retried as a new message)\",\"params\":{\"envelope\":\"the Envelope type data\",\"gasLimit\":\"gas cost on receiving side of the message\"},\"returns\":{\"_0\":\"the transaction id that has the retried envelope\"}},\"retryTransaction(bytes,uint256,address[])\":{\"details\":\"This method will send an existing Transaction with its Envelope to the specified adapters.Should be used when some of the bridges on the initial forwarding did not work (out of gas), and we want the Transaction with Envelope to still account for the required confirmations on the Receiver side\",\"params\":{\"bridgeAdaptersToRetry\":\"list of bridge adapters to be used for the transaction forwarding retry\",\"encodedTransaction\":\"the encoded Transaction data\",\"gasLimit\":\"limit of gas to spend on forwarding per bridge\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateConfirmations((uint256,uint8)[])\":{\"params\":{\"newConfirmations\":\"array of objects with the chainId and the new number of needed confirmations\"}},\"updateGuardian(address)\":{\"details\":\"method to update the guardian\",\"params\":{\"newGuardian\":\"the new guardian address\"}},\"updateMessagesValidityTimestamp((uint256,uint120)[])\":{\"params\":{\"newValidityTimestamp\":\"array of objects containing the chain and timestamp where all the previous unconfirmed messages must be invalidated.\"}},\"whoCanRescue()\":{\"returns\":{\"_0\":\"the allowed address\"}}},\"title\":\"CrossChainController\",\"version\":1},\"userdoc\":{\"events\":{\"BridgeAdapterUpdated(uint256,address,address,bool)\":{\"notice\":\"emitted when a bridge adapter has been added to the allowed list\"},\"ConfirmationsUpdated(uint8,uint256)\":{\"notice\":\"emitted when number of confirmations needed to validate a message changes\"},\"ERC20Rescued(address,address,address,uint256)\":{\"notice\":\"emitted when erc20 tokens get rescued\"},\"EnvelopeDeliveryAttempted(bytes32,(uint256,address,address,uint256,uint256,bytes),bool)\":{\"notice\":\"emitted when an envelope has been delivery attempted\"},\"EnvelopeRegistered(bytes32,(uint256,address,address,uint256,uint256,bytes))\":{\"notice\":\"emitted when a transaction is successfully forwarded through a bridge adapter\"},\"NativeTokensRescued(address,address,uint256)\":{\"notice\":\"emitted when native tokens get rescued\"},\"NewInvalidation(uint256,uint256)\":{\"notice\":\"emitted when a new timestamp for invalidations gets set\"},\"ReceiverBridgeAdaptersUpdated(address,bool,uint256)\":{\"notice\":\"emitted when a bridge adapter gets updated (allowed or disallowed)\"},\"SenderUpdated(address,bool)\":{\"notice\":\"emitted when a sender has been updated\"},\"TransactionForwardingAttempted(bytes32,bytes32,bytes,uint256,address,address,bool,bytes)\":{\"notice\":\"emitted when a transaction forwarding is attempted through a bridge adapter\"},\"TransactionReceived(bytes32,bytes32,uint256,(uint256,bytes),address,uint8)\":{\"notice\":\"emitted when a transaction has been received successfully\"}},\"kind\":\"user\",\"methods\":{\"allowReceiverBridgeAdapters((address,uint256[])[])\":{\"notice\":\"method to add bridge adapters to the allowed list\"},\"approveSenders(address[])\":{\"notice\":\"method to approve new sender addresses\"},\"deliverEnvelope((uint256,address,address,uint256,uint256,bytes))\":{\"notice\":\"method to deliver an envelope to its destination\"},\"disableBridgeAdapters((address,uint256[])[])\":{\"notice\":\"method to disable bridge adapters\"},\"disallowReceiverBridgeAdapters((address,uint256[])[])\":{\"notice\":\"method to remove bridge adapters from the allowed list\"},\"emergencyEtherTransfer(address,uint256)\":{\"notice\":\"method called to rescue ether sent erroneously to the contract. Only callable by owner\"},\"emergencyTokenTransfer(address,address,uint256)\":{\"notice\":\"method called to rescue tokens sent erroneously to the contract. Only callable by owner\"},\"enableBridgeAdapters((address,address,uint256)[])\":{\"notice\":\"method to enable bridge adapters\"},\"forwardMessage(uint256,address,uint256,bytes)\":{\"notice\":\"method called to initiate message forwarding to other networks.\"},\"getConfigurationByChain(uint256)\":{\"notice\":\"method to get the current configuration of a chain\"},\"getCurrentEnvelopeNonce()\":{\"notice\":\"method to get the current valid envelope nonce\"},\"getCurrentTransactionNonce()\":{\"notice\":\"method to get the current valid transaction nonce\"},\"getEnvelopeState((uint256,address,address,uint256,uint256,bytes))\":{\"notice\":\"method to get the internal state of an envelope\"},\"getEnvelopeState(bytes32)\":{\"notice\":\"method to get the internal state of an envelope\"},\"getForwarderBridgeAdaptersByChain(uint256)\":{\"notice\":\"method to get all the forwarder bridge adapters of a chain\"},\"getReceiverBridgeAdaptersByChain(uint256)\":{\"notice\":\"method to get the current allowed receiver bridge adapters for a chain\"},\"getSupportedChains()\":{\"notice\":\"method to get the current supported chains (at least one allowed bridge adapter)\"},\"getTransactionState((uint256,bytes))\":{\"notice\":\"method to get the internal transaction information\"},\"getTransactionState(bytes32)\":{\"notice\":\"method to get the current state of a transaction\"},\"initialize(address,address,(uint256,uint8)[],(address,uint256[])[],(address,address,uint256)[],address[])\":{\"notice\":\"method called to initialize the proxy\"},\"isEnvelopeRegistered((uint256,address,address,uint256,uint256,bytes))\":{\"notice\":\"method to check if a envelope has been previously forwarded.\"},\"isEnvelopeRegistered(bytes32)\":{\"notice\":\"method to check if a envelope has been previously forwarded.\"},\"isReceiverBridgeAdapterAllowed(address,uint256)\":{\"notice\":\"method to get if a bridge adapter is allowed\"},\"isSenderApproved(address)\":{\"notice\":\"method to get if a sender is approved\"},\"isTransactionForwarded((uint256,bytes))\":{\"notice\":\"method to get if a transaction has been forwarded\"},\"isTransactionForwarded(bytes32)\":{\"notice\":\"method to get if a transaction has been forwarded\"},\"isTransactionReceivedByAdapter(bytes32,address)\":{\"notice\":\"method to get if transaction has been received by bridge adapter\"},\"receiveCrossChainMessage(bytes,uint256)\":{\"notice\":\"method that receives a bridged transaction and tries to deliver the contents to destination if possible\"},\"removeSenders(address[])\":{\"notice\":\"method to remove sender addresses\"},\"retryEnvelope((uint256,address,address,uint256,uint256,bytes),uint256)\":{\"notice\":\"method called to re forward a previously sent envelope.\"},\"retryTransaction(bytes,uint256,address[])\":{\"notice\":\"method to retry forwarding an already forwarded transaction\"},\"updateConfirmations((uint256,uint8)[])\":{\"notice\":\"method to update the number of confirmations necessary for the messages to be accepted as valid\"},\"updateMessagesValidityTimestamp((uint256,uint120)[])\":{\"notice\":\"method to set a new timestamp from where the messages will be valid.\"},\"whoCanRescue()\":{\"notice\":\"method that defines the address that is allowed to rescue tokens\"}},\"notice\":\"CrossChainController contract adopted for usage on the chain where Governance deployed (mainnet in our case)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/contracts/CrossChainController.sol\":\"CrossChainController\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@aave/core-v3/=lib/aave-address-book/lib/aave-v3-core/\",\":@aave/periphery-v3/=lib/aave-address-book/lib/aave-v3-periphery/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":aave-address-book/=lib/aave-address-book/src/\",\":aave-v3-core/=lib/aave-address-book/lib/aave-v3-core/\",\":aave-v3-periphery/=lib/aave-address-book/lib/aave-v3-periphery/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":fx-portal/=lib/fx-portal/contracts/\",\":hyperlane-monorepo/=lib/hyperlane-monorepo/solidity/contracts/\",\":nitro-contracts/=lib/nitro-contracts/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":solidity-utils/=lib/solidity-utils/src/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20bf19b2b851f58a4c24543de80ae70b3e08621f9230eb335dc75e2d4f43f5df\",\"dweb:/ipfs/QmSYuH1AhvJkPK8hNvoPqtExBcgTB42pPRHgTHkS5c5zYW\"]},\"lib/solidity-utils/src/contracts/access-control/OwnableWithGuardian.sol\":{\"keccak256\":\"0x097e97cbceb38880d74db6311ffbaf158aa9e0735ec51367c60853d6eb811ff1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f83b6aa842af14fe0a8bc1ec8f844d69bf490873d72cb324462ae5f59a9267b\",\"dweb:/ipfs/QmRYv2HhJdULNQt9aTCsKWQdEVmDyjLfj3qJS3xUd4FyPF\"]},\"lib/solidity-utils/src/contracts/access-control/interfaces/IWithGuardian.sol\":{\"keccak256\":\"0x2fd8f1a5a9da521eda9d424c0764e9ceac7c3d1afa90ac9124249c5a3c7d9d1a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75ac28fae9d3a5cf111c6abc70f8a410a89f852d0dd5835bd29f6e0d0e837bc5\",\"dweb:/ipfs/QmcU48h5Lxc74jLfVrdzFkjWdLRStiz1w5GmBBx58kJo6s\"]},\"lib/solidity-utils/src/contracts/oz-common/Address.sol\":{\"keccak256\":\"0xe641fb89c32466792ed9877ec915c699acfe5c04c655cf9e67738093a40c962c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://597b0804825a4c6acbec4e466f30138a527da64a8dd3cc7ae69a68d046e8852e\",\"dweb:/ipfs/QmVvhwnnWvMkaYNcfyeihW1ajwDiGhVV6KcTNoPD9HCVym\"]},\"lib/solidity-utils/src/contracts/oz-common/Context.sol\":{\"keccak256\":\"0x6912c0cdc79f627eaa1511695fa0c14389681720812e5548645774d784bc24df\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3f2ae1b63c4be0f695d721e28361b34fe22a2e7e05723ca466b3ad2dde73db6f\",\"dweb:/ipfs/Qman92tY6xcqnXZa59TJiJKtf4Hhe5hhJrdERiStBV8EiK\"]},\"lib/solidity-utils/src/contracts/oz-common/Ownable.sol\":{\"keccak256\":\"0x5566fcff7455a22cde32daecec5c44c893dddee1472063f2dcd301e844eabd00\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://306860d4e8ecf8cf5928dd757f0e8f8530f05791a0a133acfc9be91d8e75f24a\",\"dweb:/ipfs/QmeuzENUkcz5GFTsXJUsMj1NpjbHg8hNJPDBtWzLAnEjkm\"]},\"lib/solidity-utils/src/contracts/oz-common/SafeERC20.sol\":{\"keccak256\":\"0x42c6ca0e62e6a0d93137f11377ef4888c19d3c503169692f36f32076887059b6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ac0120428aad94493baa9454143b7d0e0d1f063278abcad3ea24a1cadc84371\",\"dweb:/ipfs/QmepMxuDv7SthD9c2EyD4wzPNkchHrRmDKcUEMg8ueV6Fr\"]},\"lib/solidity-utils/src/contracts/oz-common/interfaces/IERC20.sol\":{\"keccak256\":\"0x510a088112e38933c8eff10816a3f74a0ea2365dc0914384b9097cdb62d8db69\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a3f702a4bfbec4bb8604174d80de82d5960b8997cd5b832c6f9a1850593e4bd4\",\"dweb:/ipfs/QmfXs5ejLkLQKYAg2RSm2woaAhZya6oVPeDs7T5yrAWBhT\"]},\"lib/solidity-utils/src/contracts/oz-common/interfaces/IERC20Permit.sol\":{\"keccak256\":\"0xf455056affbe27997d7cdfbb7ee3b8e7cdef3c2f6b71d97cc204cb1621440193\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ce1d2a17f6d32246ec54ebf5e1fcfd72d48d606bb4c192a4e1051d08de2b20c\",\"dweb:/ipfs/QmZSPGWfJAzBudcsLQaMXwhQvg3X2Jya5NvxkSGy7ViCFa\"]},\"lib/solidity-utils/src/contracts/transparent-proxy/Initializable.sol\":{\"keccak256\":\"0x13984ac6962308e94d92148e47eb4cd31c113b2a4798246714f2235ab9d9d7a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77edd0450d7c6bd07544bc4597845f2e7840ab19504d5286928f93a431e0e831\",\"dweb:/ipfs/Qmddubpa2kF6UEsuiWtCuLjEDjk6EPz1AzqqyabwqJ1jaS\"]},\"lib/solidity-utils/src/contracts/utils/Rescuable.sol\":{\"keccak256\":\"0xf7b7704dda57414708709251229583c917874f89a439e998b3347ee9340a95f9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59a79763e07df9fd1ead7eb7b474e5b42927065db1e63dfb012a715887667a27\",\"dweb:/ipfs/QmbZ7v236pDXPZVm4GnsgLp5sQM2ii83r2q41G1ywpThba\"]},\"lib/solidity-utils/src/contracts/utils/interfaces/IRescuable.sol\":{\"keccak256\":\"0xb7339cccbe91b2b0d9bd9adf4be58605ee75032eead9e3213304c6ae5ba108c1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://09db6f6a18144eb4a47353163408cebd32499b2611972cc8ddffc257654780b1\",\"dweb:/ipfs/Qmb6A7wFipu6seiUG3n2LoeWo91Nrj9xsapJKqEXExe7MX\"]},\"src/contracts/BaseCrossChainController.sol\":{\"keccak256\":\"0x800641fd2b769118df88683020ffc0907a13ebc2a2817ef565c064152d0f35d5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://2e86be71893e841b44f985f18af77071b7119587bfe09bb8aaf71d2f9a7edcac\",\"dweb:/ipfs/QmTFgyzGdzRXe4ZNQn2tN51NcACgSdWAF2VAF7pExmEkU7\"]},\"src/contracts/CrossChainController.sol\":{\"keccak256\":\"0x3cf72ab0d7673cb4261965ab31a2b8ba9567bcce68e6f83283da94d36da8da76\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e2b8a78275e8200fcd2e434ad11d178ba816faabfc53eda845724aa002940d1c\",\"dweb:/ipfs/QmZ5FaZLnA92he1U95KFvEWdYKSu6SAEYnxQXJN1zMknsJ\"]},\"src/contracts/CrossChainForwarder.sol\":{\"keccak256\":\"0xbef311a4d79ee901ccae60b8ed8f88dd1559f799895458a48a92e6a6d114a6c3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://3e237a8732716c69aaec8fd56d286ebe58a819c250b23ae7a693b1acd1350760\",\"dweb:/ipfs/QmPtPfhUNQoXwYaHhDX15JNcHesn1zERix6sfSVyEyjGGn\"]},\"src/contracts/CrossChainReceiver.sol\":{\"keccak256\":\"0x9a3613b6a4e0c2bdf82c917c7d6f108320cd62ef33e3fef49c3ef87ae405c6b8\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://94bb65cfcdd811affe0947f90148b0c20fc78211444ca14b07c6dec4ded8f58c\",\"dweb:/ipfs/QmVyn5oe8CYWS5dzUsk2BbXUoZ9ppx3w44vq9zp1bEKJ5C\"]},\"src/contracts/adapters/IBaseAdapter.sol\":{\"keccak256\":\"0x97ef80b6aeebf7ced38ac3816fd57e5eabd58ae251d47f17b63d2981b1f92e8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://57a009f5ed843cfa18508b9f36eeaa521f233563553c9d16e80eaba90f81369b\",\"dweb:/ipfs/QmaABhvQyMjF43qshQAH5hWrNqkWfYhYqHSYBmAgq6icug\"]},\"src/contracts/interfaces/IBaseCrossChainController.sol\":{\"keccak256\":\"0x5d226f4f433e4b73650f8f1a749eac15f44c537d2561b44fb8b979221d2fa22b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20ec37bc28bd5bb67940021014f169a90912b8c281f4220949ea9e6e940116c9\",\"dweb:/ipfs/QmXH9QBmoApfSYR82ZRVpu2JGekdE4116puXrJgkfLEdYe\"]},\"src/contracts/interfaces/IBaseReceiverPortal.sol\":{\"keccak256\":\"0x636561bf24807679c5a877b7394308545dc028fe76932d15257098be5991959f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e5f47d74b026fc94aaeec2fd74adc081dca753881b8a84265a34a7462d31b7b\",\"dweb:/ipfs/QmVWnGLdJshoWJJwMZKNZS76auTNBTZgswvLUduUxCoja2\"]},\"src/contracts/interfaces/ICrossChainController.sol\":{\"keccak256\":\"0x3e7285b5e32f47a8c352d3583d8bd892f5e89dfd63f48a532f972fbdf238e954\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d42a2ded743fd9f5d614a0d85a5065b05e90b4c517b6935f2a1076f7bbf23a7f\",\"dweb:/ipfs/QmRhceFdsSYSjrpkMkWXxvGbxRduyLER5sBVBN8uiwHkwg\"]},\"src/contracts/interfaces/ICrossChainForwarder.sol\":{\"keccak256\":\"0x7c67c32148d66de52ca28ae18c115b10753772aacd6dd020280590f137cc2056\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4077ddc3e091ee38556a7c0797de9b1608f32765d9f62a07efea6505bbebfa7c\",\"dweb:/ipfs/Qmbns917YEfng8nqn8wu3KnKBy562K7uWK3kxfzRsPdY27\"]},\"src/contracts/interfaces/ICrossChainReceiver.sol\":{\"keccak256\":\"0xf55d606adfb99cf829845731241d6eff48ef3a36153290fb6daf7af2250e3ec5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1331b21d98f083181beb5f1f9b817757760a4ef3d79665e118fb4036ca7c056a\",\"dweb:/ipfs/QmUXUZeess24rcSjXxo1geCu9BxG4X7ivEHGKhSy6bPbmW\"]},\"src/contracts/libs/EncodingUtils.sol\":{\"keccak256\":\"0xe778561273ede6b3db73f2fb7b2b443cf0a733a209967af59db107406b68964a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7361dd55dee3cf7bd053d7cd289e148c9451e98c8126672e6287f4e769ab8fba\",\"dweb:/ipfs/QmeH1cwptCar31XamSH2QHSeG4BrS86KNdAbnvk6VGFvLB\"]},\"src/contracts/libs/Errors.sol\":{\"keccak256\":\"0x4a4502debe85d126eb37f8268d2d816636ae21c08b0dae7f26cb11d2bae0f80d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab72c20ea1e07f3bf567cddd96a0749b9a0afb0beefdc9a6f589657f4f97bc39\",\"dweb:/ipfs/QmXXu7CRbhhHqpjdvoBanTsf7wjD6N457ho3vE2dprSy2S\"]}},\"version\":1}", - "metadata": { - "compiler": { "version": "0.8.19+commit.7dd6d404" }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [{ "internalType": "address", "name": "token", "type": "address" }], - "type": "error", - "name": "SafeERC20FailedOperation" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "destinationChainId", "type": "uint256", "indexed": true }, - { "internalType": "address", "name": "bridgeAdapter", "type": "address", "indexed": true }, - { "internalType": "address", "name": "destinationBridgeAdapter", "type": "address", "indexed": false }, - { "internalType": "bool", "name": "allowed", "type": "bool", "indexed": true } - ], - "type": "event", - "name": "BridgeAdapterUpdated", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "uint8", "name": "newConfirmations", "type": "uint8", "indexed": false }, - { "internalType": "uint256", "name": "chainId", "type": "uint256", "indexed": true } - ], - "type": "event", - "name": "ConfirmationsUpdated", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "caller", "type": "address", "indexed": true }, - { "internalType": "address", "name": "token", "type": "address", "indexed": true }, - { "internalType": "address", "name": "to", "type": "address", "indexed": true }, - { "internalType": "uint256", "name": "amount", "type": "uint256", "indexed": false } - ], - "type": "event", - "name": "ERC20Rescued", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "envelopeId", "type": "bytes32", "indexed": false }, - { - "internalType": "struct Envelope", - "name": "envelope", - "type": "tuple", - "components": [ - { "internalType": "uint256", "name": "nonce", "type": "uint256" }, - { "internalType": "address", "name": "origin", "type": "address" }, - { "internalType": "address", "name": "destination", "type": "address" }, - { "internalType": "uint256", "name": "originChainId", "type": "uint256" }, - { "internalType": "uint256", "name": "destinationChainId", "type": "uint256" }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ], - "indexed": false - }, - { "internalType": "bool", "name": "isDelivered", "type": "bool", "indexed": false } - ], - "type": "event", - "name": "EnvelopeDeliveryAttempted", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "envelopeId", "type": "bytes32", "indexed": true }, - { - "internalType": "struct Envelope", - "name": "envelope", - "type": "tuple", - "components": [ - { "internalType": "uint256", "name": "nonce", "type": "uint256" }, - { "internalType": "address", "name": "origin", "type": "address" }, - { "internalType": "address", "name": "destination", "type": "address" }, - { "internalType": "uint256", "name": "originChainId", "type": "uint256" }, - { "internalType": "uint256", "name": "destinationChainId", "type": "uint256" }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ], - "indexed": false - } - ], - "type": "event", - "name": "EnvelopeRegistered", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "oldGuardian", "type": "address", "indexed": false }, - { "internalType": "address", "name": "newGuardian", "type": "address", "indexed": false } - ], - "type": "event", - "name": "GuardianUpdated", - "anonymous": false - }, - { - "inputs": [{ "internalType": "uint8", "name": "version", "type": "uint8", "indexed": false }], - "type": "event", - "name": "Initialized", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "caller", "type": "address", "indexed": true }, - { "internalType": "address", "name": "to", "type": "address", "indexed": true }, - { "internalType": "uint256", "name": "amount", "type": "uint256", "indexed": false } - ], - "type": "event", - "name": "NativeTokensRescued", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "uint256", "name": "invalidTimestamp", "type": "uint256", "indexed": false }, - { "internalType": "uint256", "name": "chainId", "type": "uint256", "indexed": true } - ], - "type": "event", - "name": "NewInvalidation", - "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": "bridgeAdapter", "type": "address", "indexed": true }, - { "internalType": "bool", "name": "allowed", "type": "bool", "indexed": true }, - { "internalType": "uint256", "name": "chainId", "type": "uint256", "indexed": true } - ], - "type": "event", - "name": "ReceiverBridgeAdaptersUpdated", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address", "indexed": true }, - { "internalType": "bool", "name": "isApproved", "type": "bool", "indexed": true } - ], - "type": "event", - "name": "SenderUpdated", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "transactionId", "type": "bytes32", "indexed": false }, - { "internalType": "bytes32", "name": "envelopeId", "type": "bytes32", "indexed": true }, - { "internalType": "bytes", "name": "encodedTransaction", "type": "bytes", "indexed": false }, - { "internalType": "uint256", "name": "destinationChainId", "type": "uint256", "indexed": false }, - { "internalType": "address", "name": "bridgeAdapter", "type": "address", "indexed": true }, - { "internalType": "address", "name": "destinationBridgeAdapter", "type": "address", "indexed": false }, - { "internalType": "bool", "name": "adapterSuccessful", "type": "bool", "indexed": true }, - { "internalType": "bytes", "name": "returnData", "type": "bytes", "indexed": false } - ], - "type": "event", - "name": "TransactionForwardingAttempted", - "anonymous": false - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "transactionId", "type": "bytes32", "indexed": false }, - { "internalType": "bytes32", "name": "envelopeId", "type": "bytes32", "indexed": true }, - { "internalType": "uint256", "name": "originChainId", "type": "uint256", "indexed": true }, - { - "internalType": "struct Transaction", - "name": "transaction", - "type": "tuple", - "components": [ - { "internalType": "uint256", "name": "nonce", "type": "uint256" }, - { "internalType": "bytes", "name": "encodedEnvelope", "type": "bytes" } - ], - "indexed": false - }, - { "internalType": "address", "name": "bridgeAdapter", "type": "address", "indexed": true }, - { "internalType": "uint8", "name": "confirmations", "type": "uint8", "indexed": false } - ], - "type": "event", - "name": "TransactionReceived", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "struct ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[]", - "name": "bridgeAdaptersInput", - "type": "tuple[]", - "components": [ - { "internalType": "address", "name": "bridgeAdapter", "type": "address" }, - { "internalType": "uint256[]", "name": "chainIds", "type": "uint256[]" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "allowReceiverBridgeAdapters" - }, - { - "inputs": [{ "internalType": "address[]", "name": "senders", "type": "address[]" }], - "stateMutability": "nonpayable", - "type": "function", - "name": "approveSenders" - }, - { - "inputs": [ - { - "internalType": "struct Envelope", - "name": "envelope", - "type": "tuple", - "components": [ - { "internalType": "uint256", "name": "nonce", "type": "uint256" }, - { "internalType": "address", "name": "origin", "type": "address" }, - { "internalType": "address", "name": "destination", "type": "address" }, - { "internalType": "uint256", "name": "originChainId", "type": "uint256" }, - { "internalType": "uint256", "name": "destinationChainId", "type": "uint256" }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "deliverEnvelope" - }, - { - "inputs": [ - { - "internalType": "struct ICrossChainForwarder.BridgeAdapterToDisable[]", - "name": "bridgeAdapters", - "type": "tuple[]", - "components": [ - { "internalType": "address", "name": "bridgeAdapter", "type": "address" }, - { "internalType": "uint256[]", "name": "chainIds", "type": "uint256[]" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "disableBridgeAdapters" - }, - { - "inputs": [ - { - "internalType": "struct ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[]", - "name": "bridgeAdapters", - "type": "tuple[]", - "components": [ - { "internalType": "address", "name": "bridgeAdapter", "type": "address" }, - { "internalType": "uint256[]", "name": "chainIds", "type": "uint256[]" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "disallowReceiverBridgeAdapters" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "emergencyEtherTransfer" - }, - { - "inputs": [ - { "internalType": "address", "name": "erc20Token", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "emergencyTokenTransfer" - }, - { - "inputs": [ - { - "internalType": "struct ICrossChainForwarder.ForwarderBridgeAdapterConfigInput[]", - "name": "bridgeAdapters", - "type": "tuple[]", - "components": [ - { "internalType": "address", "name": "currentChainBridgeAdapter", "type": "address" }, - { "internalType": "address", "name": "destinationBridgeAdapter", "type": "address" }, - { "internalType": "uint256", "name": "destinationChainId", "type": "uint256" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "enableBridgeAdapters" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "destinationChainId", "type": "uint256" }, - { "internalType": "address", "name": "destination", "type": "address" }, - { "internalType": "uint256", "name": "gasLimit", "type": "uint256" }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "forwardMessage", - "outputs": [ - { "internalType": "bytes32", "name": "", "type": "bytes32" }, - { "internalType": "bytes32", "name": "", "type": "bytes32" } - ] - }, - { - "inputs": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }], - "stateMutability": "view", - "type": "function", - "name": "getConfigurationByChain", - "outputs": [ - { - "internalType": "struct ICrossChainReceiver.ReceiverConfiguration", - "name": "", - "type": "tuple", - "components": [ - { "internalType": "uint8", "name": "requiredConfirmation", "type": "uint8" }, - { "internalType": "uint120", "name": "validityTimestamp", "type": "uint120" } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getCurrentEnvelopeNonce", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getCurrentTransactionNonce", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }] - }, - { - "inputs": [{ "internalType": "bytes32", "name": "envelopeId", "type": "bytes32" }], - "stateMutability": "view", - "type": "function", - "name": "getEnvelopeState", - "outputs": [{ "internalType": "enum ICrossChainReceiver.EnvelopeState", "name": "", "type": "uint8" }] - }, - { - "inputs": [ - { - "internalType": "struct Envelope", - "name": "envelope", - "type": "tuple", - "components": [ - { "internalType": "uint256", "name": "nonce", "type": "uint256" }, - { "internalType": "address", "name": "origin", "type": "address" }, - { "internalType": "address", "name": "destination", "type": "address" }, - { "internalType": "uint256", "name": "originChainId", "type": "uint256" }, - { "internalType": "uint256", "name": "destinationChainId", "type": "uint256" }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "getEnvelopeState", - "outputs": [{ "internalType": "enum ICrossChainReceiver.EnvelopeState", "name": "", "type": "uint8" }] - }, - { - "inputs": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }], - "stateMutability": "view", - "type": "function", - "name": "getForwarderBridgeAdaptersByChain", - "outputs": [ - { - "internalType": "struct ICrossChainForwarder.ChainIdBridgeConfig[]", - "name": "", - "type": "tuple[]", - "components": [ - { "internalType": "address", "name": "destinationBridgeAdapter", "type": "address" }, - { "internalType": "address", "name": "currentChainBridgeAdapter", "type": "address" } - ] - } - ] - }, - { - "inputs": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }], - "stateMutability": "view", - "type": "function", - "name": "getReceiverBridgeAdaptersByChain", - "outputs": [{ "internalType": "address[]", "name": "", "type": "address[]" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "getSupportedChains", - "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }] - }, - { - "inputs": [ - { - "internalType": "struct Transaction", - "name": "transaction", - "type": "tuple", - "components": [ - { "internalType": "uint256", "name": "nonce", "type": "uint256" }, - { "internalType": "bytes", "name": "encodedEnvelope", "type": "bytes" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "getTransactionState", - "outputs": [ - { - "internalType": "struct ICrossChainReceiver.TransactionStateWithoutAdapters", - "name": "", - "type": "tuple", - "components": [ - { "internalType": "uint8", "name": "confirmations", "type": "uint8" }, - { "internalType": "uint120", "name": "firstBridgedAt", "type": "uint120" } - ] - } - ] - }, - { - "inputs": [{ "internalType": "bytes32", "name": "transactionId", "type": "bytes32" }], - "stateMutability": "view", - "type": "function", - "name": "getTransactionState", - "outputs": [ - { - "internalType": "struct ICrossChainReceiver.TransactionStateWithoutAdapters", - "name": "", - "type": "tuple", - "components": [ - { "internalType": "uint8", "name": "confirmations", "type": "uint8" }, - { "internalType": "uint120", "name": "firstBridgedAt", "type": "uint120" } - ] - } - ] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "guardian", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "guardian", "type": "address" }, - { - "internalType": "struct ICrossChainReceiver.ConfirmationInput[]", - "name": "initialRequiredConfirmations", - "type": "tuple[]", - "components": [ - { "internalType": "uint256", "name": "chainId", "type": "uint256" }, - { "internalType": "uint8", "name": "requiredConfirmations", "type": "uint8" } - ] - }, - { - "internalType": "struct ICrossChainReceiver.ReceiverBridgeAdapterConfigInput[]", - "name": "receiverBridgeAdaptersToAllow", - "type": "tuple[]", - "components": [ - { "internalType": "address", "name": "bridgeAdapter", "type": "address" }, - { "internalType": "uint256[]", "name": "chainIds", "type": "uint256[]" } - ] - }, - { - "internalType": "struct ICrossChainForwarder.ForwarderBridgeAdapterConfigInput[]", - "name": "forwarderBridgeAdaptersToEnable", - "type": "tuple[]", - "components": [ - { "internalType": "address", "name": "currentChainBridgeAdapter", "type": "address" }, - { "internalType": "address", "name": "destinationBridgeAdapter", "type": "address" }, - { "internalType": "uint256", "name": "destinationChainId", "type": "uint256" } - ] - }, - { "internalType": "address[]", "name": "sendersToApprove", "type": "address[]" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "inputs": [ - { - "internalType": "struct Envelope", - "name": "envelope", - "type": "tuple", - "components": [ - { "internalType": "uint256", "name": "nonce", "type": "uint256" }, - { "internalType": "address", "name": "origin", "type": "address" }, - { "internalType": "address", "name": "destination", "type": "address" }, - { "internalType": "uint256", "name": "originChainId", "type": "uint256" }, - { "internalType": "uint256", "name": "destinationChainId", "type": "uint256" }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "isEnvelopeRegistered", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [{ "internalType": "bytes32", "name": "envelopeId", "type": "bytes32" }], - "stateMutability": "view", - "type": "function", - "name": "isEnvelopeRegistered", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "address", "name": "bridgeAdapter", "type": "address" }, - { "internalType": "uint256", "name": "chainId", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function", - "name": "isReceiverBridgeAdapterAllowed", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [{ "internalType": "address", "name": "sender", "type": "address" }], - "stateMutability": "view", - "type": "function", - "name": "isSenderApproved", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [{ "internalType": "bytes32", "name": "transactionId", "type": "bytes32" }], - "stateMutability": "view", - "type": "function", - "name": "isTransactionForwarded", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { - "internalType": "struct Transaction", - "name": "transaction", - "type": "tuple", - "components": [ - { "internalType": "uint256", "name": "nonce", "type": "uint256" }, - { "internalType": "bytes", "name": "encodedEnvelope", "type": "bytes" } - ] - } - ], - "stateMutability": "view", - "type": "function", - "name": "isTransactionForwarded", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "transactionId", "type": "bytes32" }, - { "internalType": "address", "name": "bridgeAdapter", "type": "address" } - ], - "stateMutability": "view", - "type": "function", - "name": "isTransactionReceivedByAdapter", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "encodedTransaction", "type": "bytes" }, - { "internalType": "uint256", "name": "originChainId", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "receiveCrossChainMessage" - }, - { - "inputs": [{ "internalType": "address[]", "name": "senders", "type": "address[]" }], - "stateMutability": "nonpayable", - "type": "function", - "name": "removeSenders" - }, - { "inputs": [], "stateMutability": "nonpayable", "type": "function", "name": "renounceOwnership" }, - { - "inputs": [ - { - "internalType": "struct Envelope", - "name": "envelope", - "type": "tuple", - "components": [ - { "internalType": "uint256", "name": "nonce", "type": "uint256" }, - { "internalType": "address", "name": "origin", "type": "address" }, - { "internalType": "address", "name": "destination", "type": "address" }, - { "internalType": "uint256", "name": "originChainId", "type": "uint256" }, - { "internalType": "uint256", "name": "destinationChainId", "type": "uint256" }, - { "internalType": "bytes", "name": "message", "type": "bytes" } - ] - }, - { "internalType": "uint256", "name": "gasLimit", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "retryEnvelope", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }] - }, - { - "inputs": [ - { "internalType": "bytes", "name": "encodedTransaction", "type": "bytes" }, - { "internalType": "uint256", "name": "gasLimit", "type": "uint256" }, - { "internalType": "address[]", "name": "bridgeAdaptersToRetry", "type": "address[]" } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "retryTransaction" - }, - { - "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], - "stateMutability": "nonpayable", - "type": "function", - "name": "transferOwnership" - }, - { - "inputs": [ - { - "internalType": "struct ICrossChainReceiver.ConfirmationInput[]", - "name": "newConfirmations", - "type": "tuple[]", - "components": [ - { "internalType": "uint256", "name": "chainId", "type": "uint256" }, - { "internalType": "uint8", "name": "requiredConfirmations", "type": "uint8" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "updateConfirmations" - }, - { - "inputs": [{ "internalType": "address", "name": "newGuardian", "type": "address" }], - "stateMutability": "nonpayable", - "type": "function", - "name": "updateGuardian" - }, - { - "inputs": [ - { - "internalType": "struct ICrossChainReceiver.ValidityTimestampInput[]", - "name": "newValidityTimestamp", - "type": "tuple[]", - "components": [ - { "internalType": "uint256", "name": "chainId", "type": "uint256" }, - { "internalType": "uint120", "name": "validityTimestamp", "type": "uint120" } - ] - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "updateMessagesValidityTimestamp" - }, - { - "inputs": [], - "stateMutability": "view", - "type": "function", - "name": "whoCanRescue", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }] - }, - { "inputs": [], "stateMutability": "payable", "type": "receive" } - ], - "devdoc": { - "kind": "dev", - "methods": { - "allowReceiverBridgeAdapters((address,uint256[])[])": { - "params": { "bridgeAdaptersInput": "array of objects with the new bridge adapters and supported chains" } - }, - "approveSenders(address[])": { "params": { "senders": "list of addresses to approve" } }, - "deliverEnvelope((uint256,address,address,uint256,uint256,bytes))": { - "details": "to deliver an envelope, it needs to have been previously confirmed and not delivered", - "params": { "envelope": "the Envelope typed data" } - }, - "disableBridgeAdapters((address,uint256[])[])": { - "params": { "bridgeAdapters": "array of bridge adapter addresses to disable" } - }, - "disallowReceiverBridgeAdapters((address,uint256[])[])": { - "params": { - "bridgeAdaptersInput": "array of objects with the bridge adapters and supported chains to disallow" - } - }, - "emergencyEtherTransfer(address,uint256)": { - "params": { "amount": "of eth to rescue", "to": "address to send the eth" } - }, - "emergencyTokenTransfer(address,address,uint256)": { - "params": { - "amount": "of tokens to rescue", - "erc20Token": "address of the token to rescue", - "to": "address to send the tokens" - } - }, - "enableBridgeAdapters((address,address,uint256)[])": { - "params": { "bridgeAdapters": "array of new bridge adapter configurations" } - }, - "forwardMessage(uint256,address,uint256,bytes)": { - "params": { - "destination": "address where the message is intended for", - "destinationChainId": "id of the destination chain where the message needs to be bridged", - "gasLimit": "gas cost on receiving side of the message", - "message": "bytes that need to be bridged" - }, - "returns": { "_0": "internal id of the envelope and transaction" } - }, - "getConfigurationByChain(uint256)": { - "params": { "chainId": "id of the chain to get the configuration from" }, - "returns": { "_0": "the specified chain configuration object" } - }, - "getCurrentEnvelopeNonce()": { "returns": { "_0": "the current valid envelope nonce" } }, - "getCurrentTransactionNonce()": { "returns": { "_0": "the current valid transaction nonce" } }, - "getEnvelopeState((uint256,address,address,uint256,uint256,bytes))": { - "params": { "envelope": "the Envelope type data" }, - "returns": { "_0": "the envelope current state, containing if it has been confirmed and delivered" } - }, - "getEnvelopeState(bytes32)": { - "params": { "envelopeId": "id of the envelope" }, - "returns": { "_0": "the envelope current state, containing if it has been confirmed and delivered" } - }, - "getForwarderBridgeAdaptersByChain(uint256)": { - "params": { "chainId": "id of the chain we want to get the adapters from" }, - "returns": { "_0": "an array of chain configurations where the bridge adapter can communicate" } - }, - "getReceiverBridgeAdaptersByChain(uint256)": { - "params": { "chainId": "id of the chain to get the allowed bridge adapter list" }, - "returns": { "_0": "the list of allowed bridge adapters" } - }, - "getSupportedChains()": { "returns": { "_0": "list of supported chains" } }, - "getTransactionState((uint256,bytes))": { - "params": { "transaction": "Transaction type data" }, - "returns": { - "_0": "number of confirmations of internal message identified by internalId and the updated timestamp" - } - }, - "getTransactionState(bytes32)": { - "params": { "transactionId": "the id of transaction" }, - "returns": { - "_0": "number of confirmations of internal message identified by the transactionId and the updated timestamp" - } - }, - "guardian()": { "details": "get guardian address;" }, - "initialize(address,address,(uint256,uint8)[],(address,uint256[])[],(address,address,uint256)[],address[])": { - "params": { - "forwarderBridgeAdaptersToEnable": "array specifying for every bridgeAdapter, the destinations it can have", - "guardian": "address of the guardian of the cross chain controller", - "initialRequiredConfirmations": "number of confirmations the messages need to be accepted as valid", - "owner": "address of the owner of the cross chain controller", - "receiverBridgeAdaptersToAllow": "array of addresses of the bridge adapters that can receive messages", - "sendersToApprove": "array of addresses to allow as forwarders" - } - }, - "isEnvelopeRegistered((uint256,address,address,uint256,uint256,bytes))": { - "params": { "envelope": "the Envelope type data" }, - "returns": { "_0": "boolean indicating if the envelope has been registered" } - }, - "isEnvelopeRegistered(bytes32)": { - "params": { "envelopeId": "the hashed id of the envelope" }, - "returns": { "_0": "boolean indicating if the envelope has been registered" } - }, - "isReceiverBridgeAdapterAllowed(address,uint256)": { - "params": { - "bridgeAdapter": "address of the bridge adapter to check", - "chainId": "id of the chain to check" - }, - "returns": { "_0": "boolean indicating if bridge adapter is allowed" } - }, - "isSenderApproved(address)": { - "params": { "sender": "address that we want to check if approved" }, - "returns": { "_0": "boolean indicating if the address has been approved as sender" } - }, - "isTransactionForwarded((uint256,bytes))": { - "params": { "transaction": "the Transaction type data" }, - "returns": { "_0": "flag indicating if a transaction has been forwarded" } - }, - "isTransactionForwarded(bytes32)": { - "params": { "transactionId": "hashed id of the transaction" }, - "returns": { "_0": "flag indicating if a transaction has been forwarded" } - }, - "isTransactionReceivedByAdapter(bytes32,address)": { - "params": { - "bridgeAdapter": "address of the bridge adapter to check if it has bridged the message", - "transactionId": "id of the transaction as stored internally" - }, - "returns": { "_0": "boolean indicating if the message has been received" } - }, - "owner()": { "details": "Returns the address of the current owner." }, - "receiveCrossChainMessage(bytes,uint256)": { - "params": { - "encodedTransaction": "bytes containing the bridged information", - "originChainId": "id of the chain where the transaction originated" - } - }, - "removeSenders(address[])": { "params": { "senders": "list of addresses to remove" } }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "retryEnvelope((uint256,address,address,uint256,uint256,bytes),uint256)": { - "details": "This method will send an existing Envelope using a new Transaction.This method should be used when the intention is to send the Envelope as if it was a new message. This way on the Receiver side it will start from 0 to count for the required confirmations. (usual use case would be for when an envelope has been invalidated on Receiver side, and needs to be retried as a new message)", - "params": { "envelope": "the Envelope type data", "gasLimit": "gas cost on receiving side of the message" }, - "returns": { "_0": "the transaction id that has the retried envelope" } - }, - "retryTransaction(bytes,uint256,address[])": { - "details": "This method will send an existing Transaction with its Envelope to the specified adapters.Should be used when some of the bridges on the initial forwarding did not work (out of gas), and we want the Transaction with Envelope to still account for the required confirmations on the Receiver side", - "params": { - "bridgeAdaptersToRetry": "list of bridge adapters to be used for the transaction forwarding retry", - "encodedTransaction": "the encoded Transaction data", - "gasLimit": "limit of gas to spend on forwarding per bridge" - } - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "updateConfirmations((uint256,uint8)[])": { - "params": { - "newConfirmations": "array of objects with the chainId and the new number of needed confirmations" - } - }, - "updateGuardian(address)": { - "details": "method to update the guardian", - "params": { "newGuardian": "the new guardian address" } - }, - "updateMessagesValidityTimestamp((uint256,uint120)[])": { - "params": { - "newValidityTimestamp": "array of objects containing the chain and timestamp where all the previous unconfirmed messages must be invalidated." - } - }, - "whoCanRescue()": { "returns": { "_0": "the allowed address" } } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "allowReceiverBridgeAdapters((address,uint256[])[])": { - "notice": "method to add bridge adapters to the allowed list" - }, - "approveSenders(address[])": { "notice": "method to approve new sender addresses" }, - "deliverEnvelope((uint256,address,address,uint256,uint256,bytes))": { - "notice": "method to deliver an envelope to its destination" - }, - "disableBridgeAdapters((address,uint256[])[])": { "notice": "method to disable bridge adapters" }, - "disallowReceiverBridgeAdapters((address,uint256[])[])": { - "notice": "method to remove bridge adapters from the allowed list" - }, - "emergencyEtherTransfer(address,uint256)": { - "notice": "method called to rescue ether sent erroneously to the contract. Only callable by owner" - }, - "emergencyTokenTransfer(address,address,uint256)": { - "notice": "method called to rescue tokens sent erroneously to the contract. Only callable by owner" - }, - "enableBridgeAdapters((address,address,uint256)[])": { "notice": "method to enable bridge adapters" }, - "forwardMessage(uint256,address,uint256,bytes)": { - "notice": "method called to initiate message forwarding to other networks." - }, - "getConfigurationByChain(uint256)": { "notice": "method to get the current configuration of a chain" }, - "getCurrentEnvelopeNonce()": { "notice": "method to get the current valid envelope nonce" }, - "getCurrentTransactionNonce()": { "notice": "method to get the current valid transaction nonce" }, - "getEnvelopeState((uint256,address,address,uint256,uint256,bytes))": { - "notice": "method to get the internal state of an envelope" - }, - "getEnvelopeState(bytes32)": { "notice": "method to get the internal state of an envelope" }, - "getForwarderBridgeAdaptersByChain(uint256)": { - "notice": "method to get all the forwarder bridge adapters of a chain" - }, - "getReceiverBridgeAdaptersByChain(uint256)": { - "notice": "method to get the current allowed receiver bridge adapters for a chain" - }, - "getSupportedChains()": { - "notice": "method to get the current supported chains (at least one allowed bridge adapter)" - }, - "getTransactionState((uint256,bytes))": { "notice": "method to get the internal transaction information" }, - "getTransactionState(bytes32)": { "notice": "method to get the current state of a transaction" }, - "initialize(address,address,(uint256,uint8)[],(address,uint256[])[],(address,address,uint256)[],address[])": { - "notice": "method called to initialize the proxy" - }, - "isEnvelopeRegistered((uint256,address,address,uint256,uint256,bytes))": { - "notice": "method to check if a envelope has been previously forwarded." - }, - "isEnvelopeRegistered(bytes32)": { "notice": "method to check if a envelope has been previously forwarded." }, - "isReceiverBridgeAdapterAllowed(address,uint256)": { - "notice": "method to get if a bridge adapter is allowed" - }, - "isSenderApproved(address)": { "notice": "method to get if a sender is approved" }, - "isTransactionForwarded((uint256,bytes))": { "notice": "method to get if a transaction has been forwarded" }, - "isTransactionForwarded(bytes32)": { "notice": "method to get if a transaction has been forwarded" }, - "isTransactionReceivedByAdapter(bytes32,address)": { - "notice": "method to get if transaction has been received by bridge adapter" - }, - "receiveCrossChainMessage(bytes,uint256)": { - "notice": "method that receives a bridged transaction and tries to deliver the contents to destination if possible" - }, - "removeSenders(address[])": { "notice": "method to remove sender addresses" }, - "retryEnvelope((uint256,address,address,uint256,uint256,bytes),uint256)": { - "notice": "method called to re forward a previously sent envelope." - }, - "retryTransaction(bytes,uint256,address[])": { - "notice": "method to retry forwarding an already forwarded transaction" - }, - "updateConfirmations((uint256,uint8)[])": { - "notice": "method to update the number of confirmations necessary for the messages to be accepted as valid" - }, - "updateMessagesValidityTimestamp((uint256,uint120)[])": { - "notice": "method to set a new timestamp from where the messages will be valid." - }, - "whoCanRescue()": { "notice": "method that defines the address that is allowed to rescue tokens" } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@aave/core-v3/=lib/aave-address-book/lib/aave-v3-core/", - "@aave/periphery-v3/=lib/aave-address-book/lib/aave-v3-periphery/", - "@openzeppelin/=lib/openzeppelin-contracts/", - "aave-address-book/=lib/aave-address-book/src/", - "aave-v3-core/=lib/aave-address-book/lib/aave-v3-core/", - "aave-v3-periphery/=lib/aave-address-book/lib/aave-v3-periphery/", - "ds-test/=lib/forge-std/lib/ds-test/src/", - "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", - "forge-std/=lib/forge-std/src/", - "fx-portal/=lib/fx-portal/contracts/", - "hyperlane-monorepo/=lib/hyperlane-monorepo/solidity/contracts/", - "nitro-contracts/=lib/nitro-contracts/src/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/", - "openzeppelin/=lib/openzeppelin-contracts/contracts/", - "solidity-utils/=lib/solidity-utils/src/" - ], - "optimizer": { "enabled": true, "runs": 200 }, - "metadata": { "bytecodeHash": "ipfs" }, - "compilationTarget": { "src/contracts/CrossChainController.sol": "CrossChainController" }, - "evmVersion": "paris", - "libraries": {} - }, - "sources": { - "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { - "keccak256": "0x9f4357008a8f7d8c8bf5d48902e789637538d8c016be5766610901b4bba81514", - "urls": [ - "bzz-raw://20bf19b2b851f58a4c24543de80ae70b3e08621f9230eb335dc75e2d4f43f5df", - "dweb:/ipfs/QmSYuH1AhvJkPK8hNvoPqtExBcgTB42pPRHgTHkS5c5zYW" - ], - "license": "MIT" - }, - "lib/solidity-utils/src/contracts/access-control/OwnableWithGuardian.sol": { - "keccak256": "0x097e97cbceb38880d74db6311ffbaf158aa9e0735ec51367c60853d6eb811ff1", - "urls": [ - "bzz-raw://6f83b6aa842af14fe0a8bc1ec8f844d69bf490873d72cb324462ae5f59a9267b", - "dweb:/ipfs/QmRYv2HhJdULNQt9aTCsKWQdEVmDyjLfj3qJS3xUd4FyPF" - ], - "license": "MIT" - }, - "lib/solidity-utils/src/contracts/access-control/interfaces/IWithGuardian.sol": { - "keccak256": "0x2fd8f1a5a9da521eda9d424c0764e9ceac7c3d1afa90ac9124249c5a3c7d9d1a", - "urls": [ - "bzz-raw://75ac28fae9d3a5cf111c6abc70f8a410a89f852d0dd5835bd29f6e0d0e837bc5", - "dweb:/ipfs/QmcU48h5Lxc74jLfVrdzFkjWdLRStiz1w5GmBBx58kJo6s" - ], - "license": "MIT" - }, - "lib/solidity-utils/src/contracts/oz-common/Address.sol": { - "keccak256": "0xe641fb89c32466792ed9877ec915c699acfe5c04c655cf9e67738093a40c962c", - "urls": [ - "bzz-raw://597b0804825a4c6acbec4e466f30138a527da64a8dd3cc7ae69a68d046e8852e", - "dweb:/ipfs/QmVvhwnnWvMkaYNcfyeihW1ajwDiGhVV6KcTNoPD9HCVym" - ], - "license": "MIT" - }, - "lib/solidity-utils/src/contracts/oz-common/Context.sol": { - "keccak256": "0x6912c0cdc79f627eaa1511695fa0c14389681720812e5548645774d784bc24df", - "urls": [ - "bzz-raw://3f2ae1b63c4be0f695d721e28361b34fe22a2e7e05723ca466b3ad2dde73db6f", - "dweb:/ipfs/Qman92tY6xcqnXZa59TJiJKtf4Hhe5hhJrdERiStBV8EiK" - ], - "license": "MIT" - }, - "lib/solidity-utils/src/contracts/oz-common/Ownable.sol": { - "keccak256": "0x5566fcff7455a22cde32daecec5c44c893dddee1472063f2dcd301e844eabd00", - "urls": [ - "bzz-raw://306860d4e8ecf8cf5928dd757f0e8f8530f05791a0a133acfc9be91d8e75f24a", - "dweb:/ipfs/QmeuzENUkcz5GFTsXJUsMj1NpjbHg8hNJPDBtWzLAnEjkm" - ], - "license": "MIT" - }, - "lib/solidity-utils/src/contracts/oz-common/SafeERC20.sol": { - "keccak256": "0x42c6ca0e62e6a0d93137f11377ef4888c19d3c503169692f36f32076887059b6", - "urls": [ - "bzz-raw://1ac0120428aad94493baa9454143b7d0e0d1f063278abcad3ea24a1cadc84371", - "dweb:/ipfs/QmepMxuDv7SthD9c2EyD4wzPNkchHrRmDKcUEMg8ueV6Fr" - ], - "license": "MIT" - }, - "lib/solidity-utils/src/contracts/oz-common/interfaces/IERC20.sol": { - "keccak256": "0x510a088112e38933c8eff10816a3f74a0ea2365dc0914384b9097cdb62d8db69", - "urls": [ - "bzz-raw://a3f702a4bfbec4bb8604174d80de82d5960b8997cd5b832c6f9a1850593e4bd4", - "dweb:/ipfs/QmfXs5ejLkLQKYAg2RSm2woaAhZya6oVPeDs7T5yrAWBhT" - ], - "license": "MIT" - }, - "lib/solidity-utils/src/contracts/oz-common/interfaces/IERC20Permit.sol": { - "keccak256": "0xf455056affbe27997d7cdfbb7ee3b8e7cdef3c2f6b71d97cc204cb1621440193", - "urls": [ - "bzz-raw://0ce1d2a17f6d32246ec54ebf5e1fcfd72d48d606bb4c192a4e1051d08de2b20c", - "dweb:/ipfs/QmZSPGWfJAzBudcsLQaMXwhQvg3X2Jya5NvxkSGy7ViCFa" - ], - "license": "MIT" - }, - "lib/solidity-utils/src/contracts/transparent-proxy/Initializable.sol": { - "keccak256": "0x13984ac6962308e94d92148e47eb4cd31c113b2a4798246714f2235ab9d9d7a9", - "urls": [ - "bzz-raw://77edd0450d7c6bd07544bc4597845f2e7840ab19504d5286928f93a431e0e831", - "dweb:/ipfs/Qmddubpa2kF6UEsuiWtCuLjEDjk6EPz1AzqqyabwqJ1jaS" - ], - "license": "MIT" - }, - "lib/solidity-utils/src/contracts/utils/Rescuable.sol": { - "keccak256": "0xf7b7704dda57414708709251229583c917874f89a439e998b3347ee9340a95f9", - "urls": [ - "bzz-raw://59a79763e07df9fd1ead7eb7b474e5b42927065db1e63dfb012a715887667a27", - "dweb:/ipfs/QmbZ7v236pDXPZVm4GnsgLp5sQM2ii83r2q41G1ywpThba" - ], - "license": "MIT" - }, - "lib/solidity-utils/src/contracts/utils/interfaces/IRescuable.sol": { - "keccak256": "0xb7339cccbe91b2b0d9bd9adf4be58605ee75032eead9e3213304c6ae5ba108c1", - "urls": [ - "bzz-raw://09db6f6a18144eb4a47353163408cebd32499b2611972cc8ddffc257654780b1", - "dweb:/ipfs/Qmb6A7wFipu6seiUG3n2LoeWo91Nrj9xsapJKqEXExe7MX" - ], - "license": "MIT" - }, - "src/contracts/BaseCrossChainController.sol": { - "keccak256": "0x800641fd2b769118df88683020ffc0907a13ebc2a2817ef565c064152d0f35d5", - "urls": [ - "bzz-raw://2e86be71893e841b44f985f18af77071b7119587bfe09bb8aaf71d2f9a7edcac", - "dweb:/ipfs/QmTFgyzGdzRXe4ZNQn2tN51NcACgSdWAF2VAF7pExmEkU7" - ], - "license": "BUSL-1.1" - }, - "src/contracts/CrossChainController.sol": { - "keccak256": "0x3cf72ab0d7673cb4261965ab31a2b8ba9567bcce68e6f83283da94d36da8da76", - "urls": [ - "bzz-raw://e2b8a78275e8200fcd2e434ad11d178ba816faabfc53eda845724aa002940d1c", - "dweb:/ipfs/QmZ5FaZLnA92he1U95KFvEWdYKSu6SAEYnxQXJN1zMknsJ" - ], - "license": "BUSL-1.1" - }, - "src/contracts/CrossChainForwarder.sol": { - "keccak256": "0xbef311a4d79ee901ccae60b8ed8f88dd1559f799895458a48a92e6a6d114a6c3", - "urls": [ - "bzz-raw://3e237a8732716c69aaec8fd56d286ebe58a819c250b23ae7a693b1acd1350760", - "dweb:/ipfs/QmPtPfhUNQoXwYaHhDX15JNcHesn1zERix6sfSVyEyjGGn" - ], - "license": "BUSL-1.1" - }, - "src/contracts/CrossChainReceiver.sol": { - "keccak256": "0x9a3613b6a4e0c2bdf82c917c7d6f108320cd62ef33e3fef49c3ef87ae405c6b8", - "urls": [ - "bzz-raw://94bb65cfcdd811affe0947f90148b0c20fc78211444ca14b07c6dec4ded8f58c", - "dweb:/ipfs/QmVyn5oe8CYWS5dzUsk2BbXUoZ9ppx3w44vq9zp1bEKJ5C" - ], - "license": "BUSL-1.1" - }, - "src/contracts/adapters/IBaseAdapter.sol": { - "keccak256": "0x97ef80b6aeebf7ced38ac3816fd57e5eabd58ae251d47f17b63d2981b1f92e8b", - "urls": [ - "bzz-raw://57a009f5ed843cfa18508b9f36eeaa521f233563553c9d16e80eaba90f81369b", - "dweb:/ipfs/QmaABhvQyMjF43qshQAH5hWrNqkWfYhYqHSYBmAgq6icug" - ], - "license": "MIT" - }, - "src/contracts/interfaces/IBaseCrossChainController.sol": { - "keccak256": "0x5d226f4f433e4b73650f8f1a749eac15f44c537d2561b44fb8b979221d2fa22b", - "urls": [ - "bzz-raw://20ec37bc28bd5bb67940021014f169a90912b8c281f4220949ea9e6e940116c9", - "dweb:/ipfs/QmXH9QBmoApfSYR82ZRVpu2JGekdE4116puXrJgkfLEdYe" - ], - "license": "MIT" - }, - "src/contracts/interfaces/IBaseReceiverPortal.sol": { - "keccak256": "0x636561bf24807679c5a877b7394308545dc028fe76932d15257098be5991959f", - "urls": [ - "bzz-raw://2e5f47d74b026fc94aaeec2fd74adc081dca753881b8a84265a34a7462d31b7b", - "dweb:/ipfs/QmVWnGLdJshoWJJwMZKNZS76auTNBTZgswvLUduUxCoja2" - ], - "license": "MIT" - }, - "src/contracts/interfaces/ICrossChainController.sol": { - "keccak256": "0x3e7285b5e32f47a8c352d3583d8bd892f5e89dfd63f48a532f972fbdf238e954", - "urls": [ - "bzz-raw://d42a2ded743fd9f5d614a0d85a5065b05e90b4c517b6935f2a1076f7bbf23a7f", - "dweb:/ipfs/QmRhceFdsSYSjrpkMkWXxvGbxRduyLER5sBVBN8uiwHkwg" - ], - "license": "MIT" - }, - "src/contracts/interfaces/ICrossChainForwarder.sol": { - "keccak256": "0x7c67c32148d66de52ca28ae18c115b10753772aacd6dd020280590f137cc2056", - "urls": [ - "bzz-raw://4077ddc3e091ee38556a7c0797de9b1608f32765d9f62a07efea6505bbebfa7c", - "dweb:/ipfs/Qmbns917YEfng8nqn8wu3KnKBy562K7uWK3kxfzRsPdY27" - ], - "license": "MIT" - }, - "src/contracts/interfaces/ICrossChainReceiver.sol": { - "keccak256": "0xf55d606adfb99cf829845731241d6eff48ef3a36153290fb6daf7af2250e3ec5", - "urls": [ - "bzz-raw://1331b21d98f083181beb5f1f9b817757760a4ef3d79665e118fb4036ca7c056a", - "dweb:/ipfs/QmUXUZeess24rcSjXxo1geCu9BxG4X7ivEHGKhSy6bPbmW" - ], - "license": "MIT" - }, - "src/contracts/libs/EncodingUtils.sol": { - "keccak256": "0xe778561273ede6b3db73f2fb7b2b443cf0a733a209967af59db107406b68964a", - "urls": [ - "bzz-raw://7361dd55dee3cf7bd053d7cd289e148c9451e98c8126672e6287f4e769ab8fba", - "dweb:/ipfs/QmeH1cwptCar31XamSH2QHSeG4BrS86KNdAbnvk6VGFvLB" - ], - "license": "MIT" - }, - "src/contracts/libs/Errors.sol": { - "keccak256": "0x4a4502debe85d126eb37f8268d2d816636ae21c08b0dae7f26cb11d2bae0f80d", - "urls": [ - "bzz-raw://ab72c20ea1e07f3bf567cddd96a0749b9a0afb0beefdc9a6f589657f4f97bc39", - "dweb:/ipfs/QmXXu7CRbhhHqpjdvoBanTsf7wjD6N457ho3vE2dprSy2S" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "id": 178 -} diff --git a/l2-bridge-ethereum/src/watchers/agent-proxy-watcher.ts b/l2-bridge-ethereum/src/agent-proxy-watcher.ts similarity index 89% rename from l2-bridge-ethereum/src/watchers/agent-proxy-watcher.ts rename to l2-bridge-ethereum/src/agent-proxy-watcher.ts index 7f5351be..19a36915 100644 --- a/l2-bridge-ethereum/src/watchers/agent-proxy-watcher.ts +++ b/l2-bridge-ethereum/src/agent-proxy-watcher.ts @@ -15,18 +15,11 @@ import { STETH_ADDRESS, THIRD_PARTY_PROXY_EVENTS, WSTETH_ADDRESS, - BSC_L1_CROSS_CHAIN_CONTROLLER, - BSC_CHAIN_ID, -} from "../constants"; -import { ethersProvider } from "../ethers"; -import { - BaseAdapter__factory, - CrossChainController__factory, -} from "../generated"; +} from "./constants"; +import { ethersProvider } from "./ethers"; const lastImpls = new Map(); const lastAdmins = new Map(); -export const bscAdapters = new Map(); export const name = "ProxyWatcher"; @@ -42,33 +35,12 @@ export async function initialize( lastAdmins.set(proxyInfo.address, lastAdmin); }), ); - - await setBridgeAdaptersNamesMap(); - return { lastImpls: JSON.stringify(Object.fromEntries(lastImpls)), lastAdmins: JSON.stringify(Object.fromEntries(lastAdmins)), }; } -async function setBridgeAdaptersNamesMap() { - const cccContract = CrossChainController__factory.connect( - BSC_L1_CROSS_CHAIN_CONTROLLER, - ethersProvider, - ); - const adapters = - await cccContract.getForwarderBridgeAdaptersByChain(BSC_CHAIN_ID); - - for (const adapterAddress of adapters) { - const bridgeAdapterContract = BaseAdapter__factory.connect( - adapterAddress.currentChainBridgeAdapter, - ethersProvider, - ); - const adapterName = await bridgeAdapterContract.adapterName(); - bscAdapters.set(adapterAddress.currentChainBridgeAdapter, adapterName); - } -} - export async function handleTransaction(txEvent: TransactionEvent) { const findings: Finding[] = []; diff --git a/l2-bridge-ethereum/src/agent.ts b/l2-bridge-ethereum/src/agent.ts index 2706b790..12b6c99b 100644 --- a/l2-bridge-ethereum/src/agent.ts +++ b/l2-bridge-ethereum/src/agent.ts @@ -12,7 +12,7 @@ import { ethersProvider } from "./ethers"; import { argv } from "process"; -import * as agentProxy from "./watchers/agent-proxy-watcher"; +import * as agentProxy from "./agent-proxy-watcher"; import * as agentBridge from "./watchers/bridge-watcher"; import VERSION from "./version"; diff --git a/l2-bridge-ethereum/src/constants.ts b/l2-bridge-ethereum/src/constants.ts index e9d13166..612fbbff 100644 --- a/l2-bridge-ethereum/src/constants.ts +++ b/l2-bridge-ethereum/src/constants.ts @@ -3,7 +3,6 @@ import ossifiableProxyShortABI from "./abi/OssifiableProxyShortABI.json"; import proxyAdminABI from "./abi/ProxyAdminABI.json"; import { Result } from "@ethersproject/abi/lib"; import { formatAddress } from "forta-agent/dist/cli/utils"; -import { bscAdapters } from "./watchers/agent-proxy-watcher"; type EventOfNotice = { address: string; @@ -24,7 +23,12 @@ export interface BridgeProxyInfo { proxyAdminAddress: string | null; } -export const BSC_CHAIN_ID = 56; +// https://docs.chain.link/resources/link-token-contracts#ethereum-mainnet +export const LINK_TOKEN_ADDRESS = "0x514910771AF9Ca656af840dff83E8264EcF986CA"; +// https://docs.lido.fi/deployed-contracts/#adi-governance-forwarding +export const CROSS_CHAIN_CONTROLLER_PROXY_ADDRESS = + "0x93559892D3C7F66DE4570132d68b69BD3c369A7C"; + export const BRIDGE_ETH_MIN_BALANCE = 0.5; export const BRIDGE_LINK_MIN_BALANCE = 5; @@ -107,13 +111,9 @@ export const ARBITRUM_GATEWAY_SET_EVENT = export const LINEA_CUSTOM_CONTRACT_SET_EVENT = "event CustomContractSet(address indexed nativeToken, address indexed customContract, address indexed setBy);"; -// https://docs.lido.fi/deployed-contracts/#adi-governance-forwarding export const BSC_L1_CROSS_CHAIN_CONTROLLER = "0x93559892d3c7f66de4570132d68b69bd3c369a7c"; -// https://docs.chain.link/resources/link-token-contracts#ethereum-mainnet -export const LINK_TOKEN_ADDRESS = "0x514910771AF9Ca656af840dff83E8264EcF986CA"; - export const L1_ERC20_TOKEN_GATEWAYS = [ { name: "Optimism", @@ -584,54 +584,6 @@ const BSC_L1_CROSS_CHAIN_CONTROLLER_EVENTS = [ severity: FindingSeverity.Critical, type: FindingType.Info, }, - { - address: BSC_L1_CROSS_CHAIN_CONTROLLER, - event: "event AdminChanged(address previousAdmin, address newAdmin)", - alertId: "L1-BRIDGE-PROXY-ADMIN-CHANGED", - name: `🚨🚨🚨 L1 Cross-chain controller: Proxy admin changed`, - description: (args: Result) => - `Proxy admin for L1 CrossChainControllerAddress (${BSC_L1_CROSS_CHAIN_CONTROLLER}) ` + - `was changed from ${args.previousAdmin} to ${args.newAdmin}` + - `\n(detected by event)`, - severity: FindingSeverity.Critical, - type: FindingType.Info, - }, - { - address: BSC_L1_CROSS_CHAIN_CONTROLLER, - event: "event Upgraded(address indexed implementation)", - alertId: "L1-BRIDGE-PROXY-UPGRADED", - name: `🚨🚨🚨 L1 Cross-chain controller: Proxy upgraded`, - description: (args: Result) => - `Proxy for L1 CrossChainControllerAddress (${BSC_L1_CROSS_CHAIN_CONTROLLER}) ` + - `was updated to ${args.implementation}` + - `\n(detected by event)`, - severity: FindingSeverity.Critical, - type: FindingType.Info, - }, - { - address: BSC_L1_CROSS_CHAIN_CONTROLLER, - event: "event GuardianUpdated(address oldGuardian, address newGuardian)", - alertId: "L1-BRIDGE-GUARDIAN-UPDATED", - name: "🚨🚨🚨 L1 Cross-chain controller: Guardians updated", - description: (args: Result) => - `Guardian was updated from ` + - `${args.oldGuardian} to ${args.newGuardian}`, - severity: FindingSeverity.Critical, - type: FindingType.Info, - }, - { - address: BSC_L1_CROSS_CHAIN_CONTROLLER, - event: - "event TransactionForwardingAttempted(bytes32 transactionId, bytes32 indexed envelopeId, bytes encodedTransaction, uint256 destinationChainId, address indexed bridgeAdapter, address destinationBridgeAdapter, bool indexed adapterSuccessful, bytes returnData)", - alertId: "L1-BRIDGE-MESSAGE-SENT", - name: "ℹī¸ L1 Cross-chain controller: Message sent", - description: (args: Result) => - `Message was sent from L1 to BSC using ${ - bscAdapters.get(args.bridgeAdapter) || args.bridgeAdapter + " adapter" - } (envelopeId: ${args.envelopeId})`, - severity: FindingSeverity.Info, - type: FindingType.Info, - }, ]; export const THIRD_PARTY_PROXY_EVENTS: EventOfNotice[] = diff --git a/l2-bridge-ethereum/src/watchers/bridge-watcher/handlers.ts b/l2-bridge-ethereum/src/watchers/bridge-watcher/handlers.ts index 04c24a22..eff9d8a6 100644 --- a/l2-bridge-ethereum/src/watchers/bridge-watcher/handlers.ts +++ b/l2-bridge-ethereum/src/watchers/bridge-watcher/handlers.ts @@ -7,14 +7,14 @@ import { getEthersProvider, TransactionEvent, } from "forta-agent"; -import { formatEther } from "ethers/lib/utils"; import { BRIDGE_ETH_MIN_BALANCE, BRIDGE_LINK_MIN_BALANCE, - BSC_L1_CROSS_CHAIN_CONTROLLER, + CROSS_CHAIN_CONTROLLER_PROXY_ADDRESS, L1_BRIDGE_EVENTS, LINK_TOKEN_ADDRESS, } from "../../constants"; +import { formatEther } from "ethers"; import { networkAlert } from "../../helpers/finding"; export function handleL1BridgeTransactionEvents( @@ -51,7 +51,9 @@ export async function handleBridgeBalance(event: BlockEvent) { const provider = getEthersProvider(); try { - const ethBalance = await provider.getBalance(BSC_L1_CROSS_CHAIN_CONTROLLER); + const ethBalance = await provider.getBalance( + CROSS_CHAIN_CONTROLLER_PROXY_ADDRESS, + ); if (ethBalance.lt(BigInt(1e18 * BRIDGE_ETH_MIN_BALANCE))) { findings.push( Finding.fromObject({ @@ -85,7 +87,7 @@ export async function handleBridgeBalance(event: BlockEvent) { try { const linkBalance = (await linkContract.balanceOf( - BSC_L1_CROSS_CHAIN_CONTROLLER, + CROSS_CHAIN_CONTROLLER_PROXY_ADDRESS, )) as ethers.BigNumber; if (linkBalance.lt(BigInt(1e18 * BRIDGE_LINK_MIN_BALANCE))) { diff --git a/l2-bridge-ethereum/yarn.lock b/l2-bridge-ethereum/yarn.lock index 19dc474a..5b7d21e2 100644 --- a/l2-bridge-ethereum/yarn.lock +++ b/l2-bridge-ethereum/yarn.lock @@ -12,6 +12,13 @@ __metadata: languageName: node linkType: hard +"@adraffy/ens-normalize@npm:1.10.1": + version: 1.10.1 + resolution: "@adraffy/ens-normalize@npm:1.10.1" + checksum: 0836f394ea256972ec19a0b5e78cb7f5bcdfd48d8a32c7478afc94dd53ae44c04d1aa2303d7f3077b4f3ac2323b1f557ab9188e8059978748fdcd83e04a80dcc + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -1471,6 +1478,22 @@ __metadata: languageName: node linkType: hard +"@noble/curves@npm:1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": 1.3.2 + checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -1644,22 +1667,6 @@ __metadata: languageName: node linkType: hard -"@typechain/ethers-v5@npm:^11.1.2": - version: 11.1.2 - resolution: "@typechain/ethers-v5@npm:11.1.2" - dependencies: - lodash: ^4.17.15 - ts-essentials: ^7.0.1 - peerDependencies: - "@ethersproject/abi": ^5.0.0 - "@ethersproject/providers": ^5.0.0 - ethers: ^5.1.3 - typechain: ^8.3.2 - typescript: ">=4.3.0" - checksum: 4f2d458306094c8e57bc0e05c86c1def210bd8b2cadd1062218cbc35fe3f6ac98aca08646c935a6fa5e57599be9fc0ddd2d4f7cf960fe28e27bf3ed58906c71f - languageName: node - linkType: hard - "@types/babel__core@npm:^7.1.14": version: 7.20.0 resolution: "@types/babel__core@npm:7.20.0" @@ -1766,6 +1773,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:18.15.13": + version: 18.15.13 + resolution: "@types/node@npm:18.15.13" + checksum: 79cc5a2b5f98e8973061a4260a781425efd39161a0e117a69cd089603964816c1a14025e1387b4590c8e82d05133b7b4154fa53a7dffb3877890a66145e76515 + languageName: node + linkType: hard + "@types/nodemon@npm:^1.19.0": version: 1.19.2 resolution: "@types/nodemon@npm:1.19.2" @@ -1775,13 +1789,6 @@ __metadata: languageName: node linkType: hard -"@types/prettier@npm:^2.1.1": - version: 2.7.3 - resolution: "@types/prettier@npm:2.7.3" - checksum: 705384209cea6d1433ff6c187c80dcc0b95d99d5c5ce21a46a9a58060c527973506822e428789d842761e0280d25e3359300f017fbe77b9755bc772ab3dc2f83 - languageName: node - linkType: hard - "@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0": version: 7.5.6 resolution: "@types/semver@npm:7.5.6" @@ -2043,6 +2050,13 @@ __metadata: languageName: node linkType: hard +"aes-js@npm:4.0.0-beta.5": + version: 4.0.0-beta.5 + resolution: "aes-js@npm:4.0.0-beta.5" + checksum: cc2ea969d77df939c32057f7e361b6530aa6cb93cb10617a17a45cd164e6d761002f031ff6330af3e67e58b1f0a3a8fd0b63a720afd591a653b02f649470e15b + languageName: node + linkType: hard + "agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" @@ -2169,20 +2183,6 @@ __metadata: languageName: node linkType: hard -"array-back@npm:^3.0.1, array-back@npm:^3.1.0": - version: 3.1.0 - resolution: "array-back@npm:3.1.0" - checksum: 7205004fcd0f9edd926db921af901b083094608d5b265738d0290092f9822f73accb468e677db74c7c94ef432d39e5ed75a7b1786701e182efb25bbba9734209 - languageName: node - linkType: hard - -"array-back@npm:^4.0.1, array-back@npm:^4.0.2": - version: 4.0.2 - resolution: "array-back@npm:4.0.2" - checksum: f30603270771eeb54e5aad5f54604c62b3577a18b6db212a7272b2b6c32049121b49431f656654790ed1469411e45f387e7627c0de8fd0515995cc40df9b9294 - languageName: node - linkType: hard - "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -2654,7 +2654,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0": +"chalk@npm:^4.0.0, chalk@npm:^4.0.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -2814,30 +2814,6 @@ __metadata: languageName: node linkType: hard -"command-line-args@npm:^5.1.1": - version: 5.2.1 - resolution: "command-line-args@npm:5.2.1" - dependencies: - array-back: ^3.1.0 - find-replace: ^3.0.0 - lodash.camelcase: ^4.3.0 - typical: ^4.0.0 - checksum: e759519087be3cf2e86af8b9a97d3058b4910cd11ee852495be881a067b72891f6a32718fb685ee6d41531ab76b2b7bfb6602f79f882cd4b7587ff1e827982c7 - languageName: node - linkType: hard - -"command-line-usage@npm:^6.1.0": - version: 6.1.3 - resolution: "command-line-usage@npm:6.1.3" - dependencies: - array-back: ^4.0.2 - chalk: ^2.4.2 - table-layout: ^1.0.2 - typical: ^5.2.0 - checksum: 8261d4e5536eb0bcddee0ec5e89c05bb2abd18e5760785c8078ede5020bc1c612cbe28eb6586f5ed4a3660689748e5aaad4a72f21566f4ef39393694e2fa1a0b - languageName: node - linkType: hard - "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -2995,13 +2971,6 @@ __metadata: languageName: node linkType: hard -"deep-extend@npm:~0.6.0": - version: 0.6.0 - resolution: "deep-extend@npm:0.6.0" - checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 - languageName: node - linkType: hard - "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -3461,6 +3430,21 @@ __metadata: languageName: node linkType: hard +"ethers@npm:^6.13.2": + version: 6.13.2 + resolution: "ethers@npm:6.13.2" + dependencies: + "@adraffy/ens-normalize": 1.10.1 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@types/node": 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.17.1 + checksum: 981860c736c7ae121774ad38ea07e3611ce524a77d2fcb77db499b65afe0cbe8f344cd5204d94b68b316349ff770fd2a7d9c8b2039da41c072f98d9864099925 + languageName: node + linkType: hard + "evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": version: 1.0.3 resolution: "evp_bytestokey@npm:1.0.3" @@ -3619,15 +3603,6 @@ __metadata: languageName: node linkType: hard -"find-replace@npm:^3.0.0": - version: 3.0.0 - resolution: "find-replace@npm:3.0.0" - dependencies: - array-back: ^3.0.1 - checksum: 6b04bcfd79027f5b84aa1dfe100e3295da989bdac4b4de6b277f4d063e78f5c9e92ebc8a1fec6dd3b448c924ba404ee051cc759e14a3ee3e825fa1361025df08 - languageName: node - linkType: hard - "find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" @@ -3717,17 +3692,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^7.0.0": - version: 7.0.1 - resolution: "fs-extra@npm:7.0.1" - dependencies: - graceful-fs: ^4.1.2 - jsonfile: ^4.0.0 - universalify: ^0.1.0 - checksum: 141b9dccb23b66a66cefdd81f4cda959ff89282b1d721b98cea19ba08db3dcbe6f862f28841f3cf24bb299e0b7e6c42303908f65093cb7e201708e86ea5a8dcf - languageName: node - linkType: hard - "fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -3832,20 +3796,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:7.1.7": - version: 7.1.7 - resolution: "glob@npm:7.1.7" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.0.4 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8 - languageName: node - linkType: hard - "glob@npm:^7.0.0, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -3903,7 +3853,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 @@ -4794,7 +4744,7 @@ __metadata: languageName: node linkType: hard -"js-sha3@npm:0.8.0, js-sha3@npm:^0.8.0": +"js-sha3@npm:0.8.0": version: 0.8.0 resolution: "js-sha3@npm:0.8.0" checksum: 75df77c1fc266973f06cce8309ce010e9e9f07ec35ab12022ed29b7f0d9c8757f5a73e1b35aa24840dced0dea7059085aa143d817aea9e188e2a80d569d9adce @@ -4891,18 +4841,6 @@ __metadata: languageName: node linkType: hard -"jsonfile@npm:^4.0.0": - version: 4.0.0 - resolution: "jsonfile@npm:4.0.0" - dependencies: - graceful-fs: ^4.1.6 - dependenciesMeta: - graceful-fs: - optional: true - checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e - languageName: node - linkType: hard - "keccak@npm:3.0.1": version: 3.0.1 resolution: "keccak@npm:3.0.1" @@ -4958,7 +4896,6 @@ __metadata: dependencies: "@jest/globals": ^29.7.0 "@tsconfig/node20": ^20.1.4 - "@typechain/ethers-v5": ^11.1.2 "@types/jest": ^29.5.12 "@types/nodemon": ^1.19.0 "@typescript-eslint/eslint-plugin": ^6.12.0 @@ -4968,12 +4905,12 @@ __metadata: eslint-config-prettier: ^9.0.0 eslint-plugin-jest: ^27.6.0 eslint-plugin-prettier: ^5.0.1 + ethers: ^6.13.2 forta-agent: ^0.1.48 jest: ^29.7.0 nodemon: ^2.0.8 prettier: ^3.1.0 ts-jest: ^29.2.4 - typechain: ^8.3.2 typescript: ^5.3.2 languageName: unknown linkType: soft @@ -5024,7 +4961,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.15, lodash@npm:^4.17.21": +"lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -5800,15 +5737,6 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.3.1": - version: 2.8.8 - resolution: "prettier@npm:2.8.8" - bin: - prettier: bin-prettier.js - checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 - languageName: node - linkType: hard - "prettier@npm:^3.1.0": version: 3.1.0 resolution: "prettier@npm:3.1.0" @@ -6011,13 +5939,6 @@ __metadata: languageName: node linkType: hard -"reduce-flatten@npm:^2.0.0": - version: 2.0.0 - resolution: "reduce-flatten@npm:2.0.0" - checksum: 64393ef99a16b20692acfd60982d7fdbd7ff8d9f8f185c6023466444c6dd2abb929d67717a83cec7f7f8fb5f46a25d515b3b2bf2238fdbfcdbfd01d2a9e73cb8 - languageName: node - linkType: hard - "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -6405,13 +6326,6 @@ __metadata: languageName: node linkType: hard -"string-format@npm:^2.0.0": - version: 2.0.0 - resolution: "string-format@npm:2.0.0" - checksum: dada2ef95f6d36c66562c673d95315f80457fa7dce2f3609a2e75d1190b98c88319028cf0a5b6c043d01c18d581b2641579f79480584ba030d6ac6fceb30bc55 - languageName: node - linkType: hard - "string-length@npm:^4.0.1": version: 4.0.2 resolution: "string-length@npm:4.0.2" @@ -6523,18 +6437,6 @@ __metadata: languageName: node linkType: hard -"table-layout@npm:^1.0.2": - version: 1.0.2 - resolution: "table-layout@npm:1.0.2" - dependencies: - array-back: ^4.0.1 - deep-extend: ~0.6.0 - typical: ^5.2.0 - wordwrapjs: ^4.0.0 - checksum: 8f41b5671f101a5195747ec1727b1d35ea2cd5bf85addda11cc2f4b36892db9696ce3c2c7334b5b8a122505b34d19135fede50e25678df71b0439e0704fd953f - languageName: node - linkType: hard - "tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.1.14 resolution: "tar@npm:6.1.14" @@ -6617,29 +6519,6 @@ __metadata: languageName: node linkType: hard -"ts-command-line-args@npm:^2.2.0": - version: 2.5.1 - resolution: "ts-command-line-args@npm:2.5.1" - dependencies: - chalk: ^4.1.0 - command-line-args: ^5.1.1 - command-line-usage: ^6.1.0 - string-format: ^2.0.0 - bin: - write-markdown: dist/write-markdown.js - checksum: 7c0a7582e94f1d2160e3dd379851ec4f1758bc673ccd71bae07f839f83051b6b83e0ae14325c2d04ea728e5bde7b7eacfd2ab060b8fd4b8ab29e0bbf77f6c51e - languageName: node - linkType: hard - -"ts-essentials@npm:^7.0.1": - version: 7.0.3 - resolution: "ts-essentials@npm:7.0.3" - peerDependencies: - typescript: ">=3.7.0" - checksum: 74d75868acf7f8b95e447d8b3b7442ca21738c6894e576df9917a352423fde5eb43c5651da5f78997da6061458160ae1f6b279150b42f47ccc58b73e55acaa2f - languageName: node - linkType: hard - "ts-jest@npm:^29.2.4": version: 29.2.4 resolution: "ts-jest@npm:29.2.4" @@ -6677,6 +6556,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:2.4.0": + version: 2.4.0 + resolution: "tslib@npm:2.4.0" + checksum: 8c4aa6a3c5a754bf76aefc38026134180c053b7bd2f81338cb5e5ebf96fefa0f417bff221592bf801077f5bf990562f6264fecbc42cd3309b33872cb6fc3b113 + languageName: node + linkType: hard + "tslib@npm:^1.8.1": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -6739,28 +6625,6 @@ __metadata: languageName: node linkType: hard -"typechain@npm:^8.3.2": - version: 8.3.2 - resolution: "typechain@npm:8.3.2" - dependencies: - "@types/prettier": ^2.1.1 - debug: ^4.3.1 - fs-extra: ^7.0.0 - glob: 7.1.7 - js-sha3: ^0.8.0 - lodash: ^4.17.15 - mkdirp: ^1.0.4 - prettier: ^2.3.1 - ts-command-line-args: ^2.2.0 - ts-essentials: ^7.0.1 - peerDependencies: - typescript: ">=4.3.0" - bin: - typechain: dist/cli/cli.js - checksum: 146a1896fa93403404be78757790b0f95b5457efebcca16b61622e09c374d555ef4f837c1c4eedf77e03abc50276d96a2f33064ec09bb802f62d8cc2b13fce70 - languageName: node - linkType: hard - "typescript@npm:^5.3.2": version: 5.5.4 resolution: "typescript@npm:5.5.4" @@ -6781,20 +6645,6 @@ __metadata: languageName: node linkType: hard -"typical@npm:^4.0.0": - version: 4.0.0 - resolution: "typical@npm:4.0.0" - checksum: a242081956825328f535e6195a924240b34daf6e7fdb573a1809a42b9f37fb8114fa99c7ab89a695e0cdb419d4149d067f6723e4b95855ffd39c6c4ca378efb3 - languageName: node - linkType: hard - -"typical@npm:^5.2.0": - version: 5.2.0 - resolution: "typical@npm:5.2.0" - checksum: ccaeb151a9a556291b495571ca44c4660f736fb49c29314bbf773c90fad92e9485d3cc2b074c933866c1595abbbc962f2b8bfc6e0f52a8c6b0cdd205442036ac - languageName: node - linkType: hard - "undefsafe@npm:^2.0.5": version: 2.0.5 resolution: "undefsafe@npm:2.0.5" @@ -6820,13 +6670,6 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.1.0": - version: 0.1.2 - resolution: "universalify@npm:0.1.2" - checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff - languageName: node - linkType: hard - "untildify@npm:^4.0.0": version: 4.0.0 resolution: "untildify@npm:4.0.0" @@ -6936,16 +6779,6 @@ __metadata: languageName: node linkType: hard -"wordwrapjs@npm:^4.0.0": - version: 4.0.1 - resolution: "wordwrapjs@npm:4.0.1" - dependencies: - reduce-flatten: ^2.0.0 - typical: ^5.2.0 - checksum: 3d927f3c95d0ad990968da54c0ad8cde2801d8e91006cd7474c26e6b742cc8557250ce495c9732b2f9db1f903601cb74ec282e0f122ee0d02d7abe81e150eea8 - languageName: node - linkType: hard - "wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -6989,6 +6822,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:8.17.1": + version: 8.17.1 + resolution: "ws@npm:8.17.1" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 442badcce1f1178ec87a0b5372ae2e9771e07c4929a3180321901f226127f252441e8689d765aa5cfba5f50ac60dd830954afc5aeae81609aefa11d3ddf5cecf + languageName: node + linkType: hard + "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8"