@witnet/wrapped-wit
Version:
Wrapped/WIT Solidity contracts and CLI tools
1,307 lines • 124 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "WrappedWIT",
"sourceName": "contracts/WrappedWIT.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IWitOracleRadonRequestFactory",
"name": "_witOracleRadonRequestFactory",
"type": "address"
},
{
"internalType": "string",
"name": "_witCustodianBech32",
"type": "string"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "ECDSAInvalidSignature",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "length",
"type": "uint256"
}
],
"name": "ECDSAInvalidSignatureLength",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "ECDSAInvalidSignatureS",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "allowance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientAllowance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "ERC20InsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC20InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC20InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC20InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "ERC20InvalidSpender",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
}
],
"name": "ERC2612ExpiredSignature",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "signer",
"type": "address"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC2612InvalidSigner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "currentNonce",
"type": "uint256"
}
],
"name": "InvalidAccountNonce",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "InvalidShortString",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [
{
"internalType": "string",
"name": "str",
"type": "string"
}
],
"name": "StringTooLong",
"type": "error"
},
{
"inputs": [],
"name": "Unauthorized",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "CrosschainBurn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "CrosschainMint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "evmPrevCurator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "evmNewCurator",
"type": "address"
}
],
"name": "CuratorshipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "EIP712DomainChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "witCustodianUnwrapper",
"type": "string"
}
],
"name": "NewCustodianUnwrapper",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"indexed": false,
"internalType": "Witnet.Timestamp",
"name": "timestamp",
"type": "uint64"
},
{
"indexed": false,
"internalType": "Witnet.TransactionHash",
"name": "witDrtHash",
"type": "bytes32"
}
],
"name": "ReserveUpdate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "evmSender",
"type": "address"
},
{
"indexed": false,
"internalType": "string",
"name": "witRecipient",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "Unwrapped",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "witSender",
"type": "string"
},
{
"indexed": false,
"internalType": "address",
"name": "evmRecipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"indexed": false,
"internalType": "Witnet.TransactionHash",
"name": "witVttHash",
"type": "bytes32"
}
],
"name": "Wrapped",
"type": "event"
},
{
"inputs": [],
"name": "DOMAIN_SEPARATOR",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "crosschainBurn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "crosschainMint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "eip712Domain",
"outputs": [
{
"internalType": "bytes1",
"name": "fields",
"type": "bytes1"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "version",
"type": "string"
},
{
"internalType": "uint256",
"name": "chainId",
"type": "uint256"
},
{
"internalType": "address",
"name": "verifyingContract",
"type": "address"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
},
{
"internalType": "uint256[]",
"name": "extensions",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "evmCurator",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "Witnet.TransactionHash",
"name": "_witnetValueTransferTransactionHash",
"type": "bytes32"
}
],
"name": "getWrapTransactionLastQueryId",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "Witnet.TransactionHash",
"name": "_witnetValueTransferTransactionHash",
"type": "bytes32"
}
],
"name": "getWrapTransactionStatus",
"outputs": [
{
"internalType": "enum IWrappedWIT.WrappingStatus",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "Witnet.TransactionHash[]",
"name": "_hashes",
"type": "bytes32[]"
}
],
"name": "getWrapTransactionStatuses",
"outputs": [
{
"internalType": "enum IWrappedWIT.WrappingStatus[]",
"name": "_statuses",
"type": "uint8[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_evmCurator",
"type": "address"
},
{
"internalType": "string",
"name": "_witCustodianUnwrapperBech32",
"type": "string"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "permit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "Witnet.TransactionHash",
"name": "witDrTxHash",
"type": "bytes32"
},
{
"internalType": "Witnet.RadonHash",
"name": "queryRadHash",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint16",
"name": "witResultMaxSize",
"type": "uint16"
},
{
"internalType": "uint16",
"name": "witCommitteeSize",
"type": "uint16"
},
{
"internalType": "uint64",
"name": "witUnitaryReward",
"type": "uint64"
}
],
"internalType": "struct Witnet.QuerySLA",
"name": "queryParams",
"type": "tuple"
},
{
"internalType": "Witnet.Timestamp",
"name": "resultTimestamp",
"type": "uint64"
},
{
"internalType": "bytes",
"name": "resultCborBytes",
"type": "bytes"
}
],
"internalType": "struct Witnet.DataPushReport",
"name": "report",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "proof",
"type": "bytes"
}
],
"name": "pushDataReport",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "queryId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "queryResult",
"type": "bytes"
}
],
"name": "reportWitOracleQueryResult",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_from",
"type": "address"
}
],
"name": "reportableFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_witCustodianUnwrapperBech32",
"type": "string"
}
],
"name": "settleWitCustodianUnwrapper",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string[]",
"name": "_witRpcProviders",
"type": "string[]"
}
],
"name": "settleWitOracleCrossChainRpcProviders",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint16",
"name": "minWitnesses",
"type": "uint16"
},
{
"internalType": "uint16",
"name": "baseFeeOverhead100",
"type": "uint16"
},
{
"internalType": "uint64",
"name": "unitaryRewardNanowits",
"type": "uint64"
},
{
"internalType": "uint24",
"name": "responseCallbackGasLimit",
"type": "uint24"
}
],
"internalType": "struct IWrappedWIT.WitOracleSettings",
"name": "_settings",
"type": "tuple"
}
],
"name": "settleWitOracleSettings",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalReserveSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalUnwraps",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalWraps",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newCurator",
"type": "address"
}
],
"name": "transferCuratorship",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "value",
"type": "uint64"
},
{
"internalType": "string",
"name": "witRecipientBech32",
"type": "string"
}
],
"name": "unwrap",
"outputs": [
{
"internalType": "uint256",
"name": "evmUnwrapId",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "witCustodianUnwrapper",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "witCustodianWrapper",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "witOracle",
"outputs": [
{
"internalType": "contract WitOracle",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "witOracleCrossChainProofOfInclusionTemplate",
"outputs": [
{
"internalType": "contract IWitOracleRadonRequestModal",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "witOracleCrossChainProofOfReserveTemplate",
"outputs": [
{
"internalType": "contract IWitOracleRadonRequestModal",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "witOracleCrossChainRpcProviders",
"outputs": [
{
"internalType": "string[]",
"name": "",
"type": "string[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "evmGasPrice",
"type": "uint256"
}
],
"name": "witOracleEstimateWrappingFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "witOracleProofOfReserveLastUpdate",
"outputs": [
{
"internalType": "Witnet.Timestamp",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "witOracleProofOfReserveRadonBytecode",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "witOracleProofOfReserveRadonHash",
"outputs": [
{
"internalType": "Witnet.RadonHash",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "witOracleQuerySettings",
"outputs": [
{
"components": [
{
"internalType": "uint16",
"name": "minWitnesses",
"type": "uint16"
},
{
"internalType": "uint16",
"name": "baseFeeOverhead100",
"type": "uint16"
},
{
"internalType": "uint64",
"name": "unitaryRewardNanowits",
"type": "uint64"
},
{
"internalType": "uint24",
"name": "responseCallbackGasLimit",
"type": "uint24"
}
],
"internalType": "struct IWrappedWIT.WitOracleSettings",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "Witnet.TransactionHash",
"name": "_witnetValueTransferTransactionHash",
"type": "bytes32"
}
],
"name": "wrap",
"outputs": [
{
"internalType": "uint256",
"name": "_witOracleQueryId",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
}
],
"bytecode": "0x61020060405234801561001157600080fd5b5060405161697f38038061697f83398101604081905261003091611130565b6040518060400160405280600b81526020016a15dc985c1c19590bd5d25560aa1b81525080604051806040016040528060018152602001603160f81b8152506040518060400160405280600b81526020016a15dc985c1c19590815d25560aa1b8152506040518060400160405280600381526020016215d25560ea1b81525081600390816100be919061127b565b5060046100cb828261127b565b506100db91508390506005610593565b610120526100ea816006610593565b61014052815160208084019190912060e052815190820120610100524660a05261017760e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0525061018e81466001146105c6565b6001600160601b0319166101c052805160208201206101e052604080516001808252818301909252600091816020015b6101c66110b7565b8152602001906001900390816101be57905050905060405180604001604052806040518060400160405280600c81526020016b436f6e74656e742d5479706560a01b81525081526020016040518060400160405280601e81526020017f6170706c69636174696f6e2f6a736f6e3b636861727365743d5554462d3800008152508152508160008151811061025c5761025c611339565b6020026020010181905250826001600160a01b031663c96e201f6040518060800160405280600360048111156102945761029461134f565b81526020016040518060800160405280604a8152602001616935604a913981526020018481526020016040518060400160405280600f81526020016e83187782186666726573756c74186960881b81525081525060405180604001604052806002600b8111156103065761030661134f565b8152602001600060405190808252806020026020018201604052801561035357816020015b60408051808201909152600081526060602082015281526020019060019003908161032b5790505b508152506040518363ffffffff1660e01b815260040161037492919061143a565b6020604051808303816000875af1158015610393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103b79190611535565b6001600160a01b039081166101805260408051608081019091529084169063c96e201f9080600381526020016040518060a00160405280606b81526020016167ca606b913981526020018481526020016040518060400160405280600f81526020016e83187782186666726573756c74186960881b81525081525060405180604001604052806002600b8111156104505761045061134f565b8152602001600060405190808252806020026020018201604052801561049d57816020015b6040805180820190915260008152606060208201528152602001906001900390816104755790505b508152506040518363ffffffff1660e01b81526004016104be92919061143a565b6020604051808303816000875af11580156104dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105019190611535565b6001600160a01b03166101a0816001600160a01b031681525050826001600160a01b0316631014d3756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061057d9190611535565b6001600160a01b031661016052506115fc915050565b60006020835110156105af576105a883610684565b90506105c0565b816105ba848261127b565b5060ff90505b92915050565b6000816105d457602b6105d7565b602a5b60ff1683511461062e5760405162461bcd60e51b815260206004820152601660248201527f4265636833323a20696e76616c6964206c656e6774680000000000000000000060448201526064015b60405180910390fd5b61067a838361065957604051806040016040528060048152602001631d1dda5d60e21b8152506106c2565b604051806040016040528060038152602001621dda5d60ea1b8152506106c2565b60601b9392505050565b600080829050601f815111156106af578260405163305a27a960e01b81526004016106259190611559565b80516106ba8261156c565b179392505050565b60008060006106f2856040516020016106db9190611590565b60408051601f198184030181529190526001610745565b915091506107208460405160200161070a9190611590565b60408051601f1981840301815291905283610ae4565b6000610730826005600884610b45565b905061073b81610b5c565b9695505050505050565b6060806000605a8551111561079c5760405162461bcd60e51b815260206004820152601d60248201527f4265636833323a20696e76616c696420737472696e67206c656e6774680000006044820152606401610625565b60005b85518110156108a05760008682815181106107bc576107bc611339565b016020015160f81c9050602181108015906107db5750607e8160ff1611155b61081c5760405162461bcd60e51b81526020600482015260126024820152712132b1b419991d103bb937b7339031b430b960711b6044820152606401610625565b60301960ff8216016108975782158015610837575060018210155b8015610847575086518260070111155b6108935760405162461bcd60e51b815260206004820152601660248201527f4265636833323a2077726f6e6720706f73206f662031000000000000000000006044820152606401610625565b8192505b5060010161079f565b50806001600160401b038111156108b9576108b96110f6565b6040519080825280601f01601f1916602001820160405280156108e3576020820181803683370190505b50925060005b8181101561093f5785818151811061090357610903611339565b602001015160f81c60f81b84828151811061092057610920611339565b60200101906001600160f81b031916908160001a9053506001016108e9565b50600181865103036001600160401b0381111561095e5761095e6110f6565b604051908082528060200260200182016040528015610987578160200160208202803683370190505b50915060005b8251811015610a7a5760006040518061012001604052806101008152602001616835610100913987848401600101815181106109cb576109cb611339565b0160200151815160f89190911c9081106109e7576109e7611339565b01602001516001600160f81b03199081169150819003610a495760405162461bcd60e51b815260206004820152601c60248201527f4265636833323a2062797465206e6f7420696e20616c706861626574000000006044820152606401610625565b8060f81c848381518110610a5f57610a5f611339565b60ff909216602092830291909101909101525060010161098d565b50610a86838386610bb7565b610ad25760405162461bcd60e51b815260206004820152601660248201527f4265636833323a2077726f6e6720636865636b73756d000000000000000000006044820152606401610625565b50805160051901815290939092509050565b8080519060200120828051906020012014610b415760405162461bcd60e51b815260206004820152601460248201527f4265636833323a20687270206d69736d617463680000000000000000000000006044820152606401610625565b5050565b6060610b5385858585610ce5565b95945050505050565b60008151601414610baf5760405162461bcd60e51b815260206004820152601b60248201527f4265636833323a20696e76616c69642064617461206c656e67746800000000006044820152606401610625565b506014015190565b600080610bc385610ebc565b9050600084518251016001600160401b03811115610be357610be36110f6565b604051908082528060200260200182016040528015610c0c578160200160208202803683370190505b50905060005b8251811015610c6757828181518110610c2d57610c2d611339565b602002602001015160ff16828281518110610c4a57610c4a611339565b63ffffffff90921660209283029190910190910152600101610c12565b5060005b8551811015610cc357858181518110610c8657610c86611339565b602002602001015160ff16828451830181518110610ca657610ca6611339565b63ffffffff90921660209283029190910190910152600101610c6b565b5063ffffffff8416610cd482610fbd565b63ffffffff16149695505050505050565b606060008080610cf8600180881b6115ac565b905060005b8851811015610df5576000898281518110610d1a57610d1a611339565b6020908102919091010151905060ff8082168a1c1615610da25760405162461bcd60e51b815260206004820152603660248201527f4265636833323a2076616c7565206d757374206265206e6f6e2d6e656761746960448201527f766520616e642066697420696e2066726f6d62697473000000000000000000006064820152608401610625565b93881b60ff85161793928801925b878410610dec576040519388900393610dd690879087871c861660f81b906020016115cd565b6040516020818303038152906040529550610db0565b50600101610cfd565b508415610e3d578115610e38578381610e0e84896115ac565b85901b1660f81b604051602001610e269291906115cd565b60405160208183030381529060405293505b610eb1565b86821080610e57575080610e5183886115ac565b84901b16155b610eb15760405162461bcd60e51b815260206004820152602560248201527f4265636833323a20696e76616c69642070616464696e67206f722076616c75656044820152642073697a6560d81b6064820152608401610625565b505050949350505050565b606081518251016001016001600160401b03811115610edd57610edd6110f6565b604051908082528060200260200182016040528015610f06578160200160208202803683370190505b50905060005b8251811015610fb7576005838281518110610f2957610f29611339565b602001015160f81c60f81b60f81c60ff16901c828281518110610f4e57610f4e611339565b602002602001019060ff16908160ff1681525050828181518110610f7457610f74611339565b602001015160f81c60f81b60f81c601f16828451830160010181518110610f9d57610f9d611339565b60ff90921660209283029190910190910152600101610f0c565b50919050565b6040805160a081018252633b6a57b281526326508e6d6020820152631ea119fa91810191909152633d4233dd6060820152632a1462b36080820152600090600190825b84518163ffffffff1610156110ae57600060198463ffffffff16901c9050858263ffffffff168151811061103657611036611339565b60200260200101516005856301ffffff1663ffffffff16901b18935060005b60058163ffffffff1610156110a457600163ffffffff8381169083161c8116900361109c57838163ffffffff166005811061109257611092611339565b6020020151851894505b600101611055565b5050600101611000565b50909392505050565b60405180604001604052806002905b60608152602001906001900390816110c65790505090565b6001600160a01b03811681146110f357600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561112757818101518382015260200161110f565b50506000910152565b6000806040838503121561114357600080fd5b825161114e816110de565b60208401519092506001600160401b0381111561116a57600080fd5b8301601f8101851361117b57600080fd5b80516001600160401b03811115611194576111946110f6565b604051601f8201601f19908116603f011681016001600160401b03811182821017156111c2576111c26110f6565b6040528181528282016020018710156111da57600080fd5b6111eb82602083016020860161110c565b8093505050509250929050565b600181811c9082168061120c57607f821691505b602082108103610fb757634e487b7160e01b600052602260045260246000fd5b601f82111561127657806000526020600020601f840160051c810160208510156112535750805b601f840160051c820191505b81811015611273576000815560010161125f565b50505b505050565b81516001600160401b03811115611294576112946110f6565b6112a8816112a284546111f8565b8461122c565b6020601f8211600181146112dc57600083156112c45750848201515b600019600385901b1c1916600184901b178455611273565b600084815260208120601f198516915b8281101561130c57878501518255602094850194600190920191016112ec565b508482101561132a5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000815180845261137d81602086016020860161110c565b601f01601f19169290920160200192915050565b6000604083018251600c81106113a9576113a961134f565b84526020838101516040828701528051928390526060600584901b8701810193919092019186019060005b8181101561142e57878503605f1901835283518051600a81106113f9576113f961134f565b8087525060208101519050604060208701526114186040870182611365565b95505060209384019392909201916001016113d4565b50929695505050505050565b6040815260008351600581106114525761145261134f565b604083015260208401516080606084015261147060c0840182611365565b6040860151848203603f19016080860152805180835291925060209081019181840191600582901b85010160005b828110156114ff57858203601f190184528451826040810160005b60028110156114e75785820383526114d2828551611365565b602094850194939093019291506001016114b9565b5060209788019796909601959350505060010161149e565b506060890151878203603f190160a0890152945061151d8186611365565b9450505050508281036020840152610b538185611391565b60006020828403121561154757600080fd5b8151611552816110de565b9392505050565b6020815260006115526020830184611365565b80516020808301519190811015610fb75760001960209190910360031b1b16919050565b600082516115a281846020870161110c565b9190910192915050565b818103818111156105c057634e487b7160e01b600052601160045260246000fd5b600083516115df81846020880161110c565b6001600160f81b0319939093169190920190815260010192915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516150f06116da60003960008181611b23015261247d0152600081816112ef01526117fd01526000818161087f0152610b350152600081816103cc01526127de0152600081816103220152818161048901528181610b0d01528181610cf70152818161157c015281816116f0015281816119e10152611bdb015260006123a301526000612376015260006122a40152600061227c015260006121d7015260006122010152600061222b01526150f06000f3fe6080604052600436106102675760003560e01c806377cc7a3a11610144578063acb734bb116100b6578063dd62ed3e1161007a578063dd62ed3e146107c7578063ddb2bf5c1461080d578063ea9e96a61461082d578063f399e22e1461084d578063f69a00b61461086d578063fec53a14146108a157600080fd5b8063acb734bb1461073d578063b3f120a114610752578063c65a20f014610767578063d505accf14610787578063d6f29e81146107a757600080fd5b806391f4f96c1161010857806391f4f96c1461067957806395d89b411461068e578063a41942a4146106a3578063a53cb851146106c3578063a9059cbb146106f0578063aa22dc331461071057600080fd5b806377cc7a3a1461058e5780637ecebe00146105ae57806384b0196e146105ce578063873234cf146105f65780638a510f271461065957600080fd5b806330315dc4116101dd5780635f029ebe116101a15780635f029ebe146104ce5780636aaa54cf146104e15780636d0d6a7e146104f65780636df0627e1461051657806370a082311461053657806371d41eb31461056c57600080fd5b806330315dc41461040e578063313ce5671461043b5780633644e5151461045757806347a10e561461046c578063520a5495146104b957600080fd5b8063147040de1161022f578063147040de1461034457806318160ddd1461035957806318bf50771461037857806323b872dd1461039a57806327ae6883146103ba5780632b8c49e3146103ee57600080fd5b806301367f731461026c57806301ffc9a71461029e57806306fdde03146102ce578063095ea7b3146102f05780631014d37514610310575b600080fd5b34801561027857600080fd5b506102816108b6565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102aa57600080fd5b506102be6102b9366004613d2a565b6108cf565b6040519015158152602001610295565b3480156102da57600080fd5b506102e3610906565b6040516102959190613da4565b3480156102fc57600080fd5b506102be61030b366004613dcc565b610998565b34801561031c57600080fd5b506102817f000000000000000000000000000000000000000000000000000000000000000081565b34801561035057600080fd5b506102e36109b0565b34801561036557600080fd5b506002545b604051908152602001610295565b34801561038457600080fd5b50610398610393366004613dcc565b6109dd565b005b3480156103a657600080fd5b506102be6103b5366004613df8565b610a35565b3480156103c657600080fd5b506102817f000000000000000000000000000000000000000000000000000000000000000081565b3480156103fa57600080fd5b50610398610409366004613dcc565b610a59565b34801561041a57600080fd5b50610423610aa9565b6040516001600160401b039091168152602001610295565b34801561044757600080fd5b5060405160098152602001610295565b34801561046357600080fd5b5061036a610ac9565b34801561047857600080fd5b506102be610487366004613e39565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156104c557600080fd5b5061036a610ad3565b61036a6104dc366004613e56565b610af6565b3480156104ed57600080fd5b5061036a610c12565b34801561050257600080fd5b50610398610511366004613eb7565b610c35565b34801561052257600080fd5b50610398610531366004613f28565b610f15565b34801561054257600080fd5b5061036a610551366004613e39565b6001600160a01b031660009081526020819052604090205490565b34801561057857600080fd5b50610581610ff5565b6040516102959190613f93565b34801561059a57600080fd5b5061036a6105a9366004613e56565b6110d7565b3480156105ba57600080fd5b5061036a6105c9366004613e39565b6110f5565b3480156105da57600080fd5b506105e3611113565b6040516102959796959493929190613fa6565b34801561060257600080fd5b5061060b611159565b6040516102959190600060808201905061ffff835116825261ffff60208401511660208301526001600160401b03604084015116604083015262ffffff606084015116606083015292915050565b34801561066557600080fd5b5061036a61067436600461405e565b6111d8565b34801561068557600080fd5b5061036a611436565b34801561069a57600080fd5b506102e3611452565b3480156106af57600080fd5b506103986106be366004613e39565b611461565b3480156106cf57600080fd5b506106e36106de366004613e56565b611522565b60405161029591906140a8565b3480156106fc57600080fd5b506102be61070b366004613dcc565b61161c565b34801561071c57600080fd5b5061073061072b3660046140b6565b61162a565b604051610295919061412b565b34801561074957600080fd5b506102e36116ec565b34801561075e57600080fd5b506102e36117ed565b34801561077357600080fd5b50610398610782366004614176565b611826565b34801561079357600080fd5b506103986107a23660046141c6565b6118a2565b3480156107b357600080fd5b506103986107c2366004614237565b6119dc565b3480156107d357600080fd5b5061036a6107e2366004614269565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561081957600080fd5b5061036a610828366004613e56565b611bd4565b34801561083957600080fd5b5061039861084836600461436e565b611c00565b34801561085957600080fd5b5061039861086836600461448b565b611c85565b34801561087957600080fd5b506102817f000000000000000000000000000000000000000000000000000000000000000081565b3480156108ad57600080fd5b5061036a611fc2565b60006108c0611fd5565b546001600160a01b0316919050565b60006001600160e01b03198216630cccc66560e21b148061090057506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610915906144ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610941906144ab565b801561098e5780601f106109635761010080835404028352916020019161098e565b820191906000526020600020905b81548152906001019060200180831161097157829003601f168201915b5050505050905090565b6000336109a6818585611ff9565b5060019392505050565b60606109d8600146146109c1611fd5565b6002015460601b6001600160601b03191690612006565b905090565b6109e633612057565b6109f08282612086565b60405181815233906001600160a01b038416907fde22baff038e3a3e08407cbdf617deed74e869a7ba517df611e33131c6e6ea04906020015b60405180910390a35050565b600033610a438582856120bc565b610a4e858585612135565b506001949350505050565b610a6233612057565b610a6c8282612194565b60405181815233906001600160a01b038416907fb90795a66650155983e242cac3e1ac1a4dc26f8ed2987f3ce416a34e00111fd490602001610a29565b6000610ab3611fd5565b54600160c01b90046001600160401b0316919050565b60006109d86121ca565b6000610add611fd5565b60010154600160401b90046001600160401b0316919050565b604051633752120b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044810182905260009073__$928ef700fe09700756683be525388ce8a3$__90633752120b90606401602060405180830381865af4158015610ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc491906144df565b90506000198103610c0d5760405162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481b5a5b9d195960921b60448201526064015b60405180910390fd5b919050565b6000610c1c611fd5565b60010154600160801b90046001600160401b0316919050565b610c92610c40611fd5565b6003015461ffff16610c586080860160608701614508565b61ffff16101560405180604001604052806016815260200175696e73756666696369656e74207769746e657373657360501b8152506122f8565b610cdd610cad610ca0611fd5565b6005015460208601351490565b604051806040016040528060128152602001710d2dcecc2d8d2c840e4c2c8dedc40d0c2e6d60731b8152506122f8565b604051633686b53f60e11b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636d0d6a7e90610d3090879087908790600401614593565b6000604051808303816000875af1158015610d4f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d7791908101906147aa565b6040516367c4440f60e01b815290915073__$928ef700fe09700756683be525388ce8a3$__906367c4440f90610db1908490600401614861565b602060405180830381865af4925050508015610dea575060408051601f3d908101601f19168201909252610de79181019061494e565b60015b610e5e57610df661496b565b806308c379a003610e245750610e0a614986565b80610e155750610e26565b610e1e81612302565b50610f0f565b505b3d808015610e50576040519150601f19603f3d011682016040523d82523d6000602084013e610e55565b606091505b50610e1e612339565b60608083015160408085015181516001600160401b0380871682529093166020840152908201527f8a01b18bdca3d556adc5e6a85f562b83d2c1933f166e93421ff507cfccb09a07910160405180910390a180610eb9611fd5565b600101805467ffffffffffffffff19166001600160401b03929092169190911790556060820151610ee8611fd5565b80546001600160401b0392909216600160c01b026001600160c01b03909216919091179055505b50505050565b610f1d611fd5565b546001600160a01b0316336001600160a01b031614610f4e576040516282b42960e81b815260040160405180910390fd5b6003610f5d6020830183614508565b61ffff1610158015610f8357506032610f7c6040830160208401614508565b61ffff1611155b8015610fab5750630bebc200610f9f6060830160408401614a09565b6001600160401b031610155b8015610fce575062033450610fc66080830160608401614a37565b62ffffff1610155b610fda57610fda614a54565b80610fe3611fd5565b600301610ff08282614a6a565b505050565b6060610fff611fd5565b600401805480602002602001604051908101604052809291908181526020016000905b828210156110ce578382906000526020600020018054611041906144ab565b80601f016020809104026020016040519081016040528092919081815260200182805461106d906144ab565b80156110ba5780601f1061108f576101008083540402835291602001916110ba565b820191906000526020600020905b81548152906001019060200180831161109d57829003601f168201915b505050505081526020019060010190611022565b50505050905090565b60006110e1611fd5565b600092835260060160205250604090205490565b6001600160a01b038116600090815260076020526040812054610900565b60006060806000806000606061112761236f565b61112f61239c565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b604080516080810182526000808252602082018190529181018290526060810191909152611185611fd5565b604080516080810182526003929092015461ffff808216845262010000820416602084015264010000000081046001600160401b031691830191909152600160601b900462ffffff166060820152919050565b60006001600160401b0384166111ed33610551565b10156112305760405162461bcd60e51b81526020600482015260126024820152716e6f7420656e6f7567682062616c616e636560701b6044820152606401610c04565b600061123a611fd5565b600101546001600160401b039081169150851681101561129c5760405162461bcd60e51b815260206004820152601760248201527f63616e6e6f7420756e777261702074686174206d7563680000000000000000006044820152606401610c04565b60006112e285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250504660011491506123c99050565b90506001600160601b03197f00000000000000000000000000000000000000000000000000000000000000008116908216036113545760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606401610c04565b61135e8683614b32565b611366611fd55