UNPKG

witnet-solidity-bridge

Version:

Witnet Solidity Bridge contracts for EVM-compatible chains

1,407 lines 115 kB
{ "_format": "hh3-artifact-1", "contractName": "WitPriceFeedsLegacyUpgradable", "sourceName": "contracts/apps/WitPriceFeedsLegacyUpgradable.sol", "abi": [ { "inputs": [ { "internalType": "contract WitOracle", "name": "_witOracle", "type": "address" }, { "internalType": "bytes32", "name": "_versionTag", "type": "bytes32" }, { "internalType": "bool", "name": "_upgradable", "type": "bool" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "solver", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "codehash", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "constructorParams", "type": "bytes" } ], "name": "NewPriceFeedsSolver", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "evmOrigin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "evmSender", "type": "address" }, { "indexed": false, "internalType": "bytes4", "name": "erc2362Id4", "type": "bytes4" }, { "indexed": false, "internalType": "uint256", "name": "witOracleQueryId", "type": "uint256" } ], "name": "PullingUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "baseAddr", "type": "address" }, { "indexed": true, "internalType": "bytes32", "name": "baseCodehash", "type": "bytes32" }, { "indexed": false, "internalType": "string", "name": "versionTag", "type": "string" } ], "name": "Upgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "caption", "type": "string" }, { "indexed": false, "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "WitFeedDeleted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "caption", "type": "string" }, { "indexed": false, "internalType": "bytes4", "name": "feedId", "type": "bytes4" }, { "indexed": false, "internalType": "bytes32", "name": "radHash", "type": "bytes32" } ], "name": "WitFeedSettled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "caption", "type": "string" }, { "indexed": false, "internalType": "bytes4", "name": "feedId", "type": "bytes4" }, { "indexed": false, "internalType": "address", "name": "solver", "type": "address" } ], "name": "WitFeedSolverSettled", "type": "event" }, { "stateMutability": "nonpayable", "type": "fallback" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "base", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseFeeOverheadPercentage", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "class", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "codehash", "outputs": [ { "internalType": "bytes32", "name": "_codehash", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dataType", "outputs": [ { "internalType": "enum Witnet.RadonDataTypes", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultRadonSLA", "outputs": [ { "components": [ { "internalType": "uint8", "name": "numWitnesses", "type": "uint8" }, { "internalType": "uint8", "name": "minConsensusPercentage", "type": "uint8" }, { "internalType": "uint64", "name": "witnessReward", "type": "uint64" }, { "internalType": "uint64", "name": "witnessCollateral", "type": "uint64" }, { "internalType": "uint64", "name": "minerCommitRevealFee", "type": "uint64" } ], "internalType": "struct IWitPriceFeedsLegacy.RadonSLAv1", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "caption", "type": "string" } ], "name": "deleteFeed", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "deleteFeeds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "initcode", "type": "bytes" }, { "internalType": "bytes", "name": "constructorParams", "type": "bytes" } ], "name": "deployPriceSolver", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "deployer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "initcode", "type": "bytes" }, { "internalType": "bytes", "name": "constructorParams", "type": "bytes" } ], "name": "determinePriceSolverAddress", "outputs": [ { "internalType": "address", "name": "_address", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_evmGasPrice", "type": "uint256" } ], "name": "estimateUpdateBaseFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "footprint", "outputs": [ { "internalType": "bytes4", "name": "_footprint", "type": "bytes4" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "caption", "type": "string" } ], "name": "hash", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes", "name": "_initData", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isUpgradable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" } ], "name": "isUpgradableFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "lastValidQueryId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "lastValidQueryResponse", "outputs": [ { "components": [ { "internalType": "address", "name": "reporter", "type": "address" }, { "internalType": "Witnet.Timestamp", "name": "resultTimestamp", "type": "uint64" }, { "internalType": "Witnet.TransactionHash", "name": "resultDrTxHash", "type": "bytes32" }, { "internalType": "bytes", "name": "resultCborBytes", "type": "bytes" }, { "internalType": "address", "name": "disputer", "type": "address" } ], "internalType": "struct Witnet.QueryResponse", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "latestPrice", "outputs": [ { "components": [ { "internalType": "uint64", "name": "value", "type": "uint64" }, { "internalType": "Witnet.Timestamp", "name": "timestamp", "type": "uint64" }, { "internalType": "Witnet.TransactionHash", "name": "drTxHash", "type": "bytes32" }, { "internalType": "enum IWitPriceFeedsLegacySolver.LatestUpdateStatus", "name": "latestStatus", "type": "uint8" } ], "internalType": "struct IWitPriceFeedsLegacySolver.Price", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4[]", "name": "feedIds", "type": "bytes4[]" } ], "name": "latestPrices", "outputs": [ { "components": [ { "internalType": "uint64", "name": "value", "type": "uint64" }, { "internalType": "Witnet.Timestamp", "name": "timestamp", "type": "uint64" }, { "internalType": "Witnet.TransactionHash", "name": "drTxHash", "type": "bytes32" }, { "internalType": "enum IWitPriceFeedsLegacySolver.LatestUpdateStatus", "name": "latestStatus", "type": "uint8" } ], "internalType": "struct IWitPriceFeedsLegacySolver.Price[]", "name": "_prices", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "latestUpdateQueryId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "latestUpdateQueryRequest", "outputs": [ { "components": [ { "internalType": "address", "name": "requester", "type": "address" }, { "internalType": "uint24", "name": "callbackGas", "type": "uint24" }, { "internalType": "bytes", "name": "radonBytecode", "type": "bytes" }, { "internalType": "Witnet.RadonHash", "name": "radonHash", "type": "bytes32" } ], "internalType": "struct Witnet.QueryRequest", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "latestUpdateResponse", "outputs": [ { "components": [ { "internalType": "address", "name": "reporter", "type": "address" }, { "internalType": "Witnet.Timestamp", "name": "resultTimestamp", "type": "uint64" }, { "internalType": "Witnet.TransactionHash", "name": "resultDrTxHash", "type": "bytes32" }, { "internalType": "bytes", "name": "resultCborBytes", "type": "bytes" }, { "internalType": "address", "name": "disputer", "type": "address" } ], "internalType": "struct Witnet.QueryResponse", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "latestUpdateResponseStatus", "outputs": [ { "internalType": "enum IWitOracleLegacy.QueryResponseStatus", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "latestUpdateResultError", "outputs": [ { "components": [ { "internalType": "uint8", "name": "code", "type": "uint8" }, { "internalType": "string", "name": "reason", "type": "string" } ], "internalType": "struct IWitOracleLegacy.ResultError", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "lookupCaption", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "lookupDecimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "lookupPriceSolver", "outputs": [ { "internalType": "address", "name": "_solverAddress", "type": "address" }, { "internalType": "string[]", "name": "_solverDeps", "type": "string[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "lookupWitnetBytecode", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "lookupWitnetRadHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "lookupWitnetRetrievals", "outputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonRetrievalMethods", "name": "method", "type": "uint8" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "dataType", "type": "uint8" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "radonScript", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval[]", "name": "_retrievals", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "prefix", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" } ], "name": "requestUpdate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "feedId", "type": "bytes4" }, { "components": [ { "internalType": "uint8", "name": "numWitnesses", "type": "uint8" }, { "internalType": "uint64", "name": "unitaryReward", "type": "uint64" } ], "internalType": "struct IWitPriceFeedsLegacy.RadonSLAv2", "name": "legacySLA", "type": "tuple" } ], "name": "requestUpdate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_baseFeeOverheadPercentage", "type": "uint16" } ], "name": "settleBaseFeeOverheadPercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "numWitnesses", "type": "uint8" }, { "internalType": "uint64", "name": "unitaryReward", "type": "uint64" } ], "internalType": "struct IWitPriceFeedsLegacy.RadonSLAv2", "name": "radonSLAv2", "type": "tuple" } ], "name": "settleDefaultRadonSLA", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "caption", "type": "string" }, { "internalType": "bytes32", "name": "radHash", "type": "bytes32" } ], "name": "settleFeedRequest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "caption", "type": "string" }, { "internalType": "contract IWitOracleRequest", "name": "request", "type": "address" } ], "name": "settleFeedRequest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "caption", "type": "string" }, { "internalType": "contract IWitOracleRequestTemplate", "name": "template", "type": "address" }, { "internalType": "string[][]", "name": "args", "type": "string[][]" } ], "name": "settleFeedRequest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "caption", "type": "string" }, { "internalType": "address", "name": "solver", "type": "address" }, { "internalType": "string[]", "name": "deps", "type": "string[]" } ], "name": "settleFeedSolver", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "specs", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "supportedFeeds", "outputs": [ { "internalType": "bytes4[]", "name": "_ids", "type": "bytes4[]" }, { "internalType": "string[]", "name": "_captions", "type": "string[]" }, { "internalType": "bytes32[]", "name": "_solvers", "type": "bytes32[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "caption", "type": "string" } ], "name": "supportsCaption", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalFeeds", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "feedId", "type": "bytes32" } ], "name": "valueFor", "outputs": [ { "internalType": "int256", "name": "_value", "type": "int256" }, { "internalType": "uint256", "name": "_timestamp", "type": "uint256" }, { "internalType": "uint256", "name": "_status", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "witOracle", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "witnet", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x6101c060405260046080526550726963652d60d01b60a0523361014052348015610027575f5ffd5b5060405161508c38038061508c833981016040819052610046916102cf565b60408051808201909152601f81527f696f2e7769746e65742e70726f786961626c652e66656564732e7072696365006020820152819083908233806100a557604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100ae816101e6565b503060c052151561010052600160025561012091909152805160209182012061016052604080518082019091526011815270696e6578697374656e74206f7261636c6560781b9181019190915261011391506001600160a01b0385163b151590610202565b6101d2637cd906ed60e11b636d11bc5160e11b186001600160e01b031916846001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561016d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610191919061031e565b6001600160e01b0319161460405180604001604052806012815260200171756e636f6d706c69616e74206f7261636c6560701b81525061020260201b60201c565b50506001600160a01b0316610180526103c1565b600180546001600160a01b03191690556101ff81610214565b50565b816102105761021081610263565b5050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60408051808201909152601d81527f576974507269636546656564734c656761637955706772616461626c650000006020820152816040516020016102a9929190610363565b60408051601f198184030181529082905262461bcd60e51b825261009c9160040161038c565b5f5f5f606084860312156102e1575f5ffd5b83516001600160a01b03811681146102f7575f5ffd5b6020850151604086015191945092508015158114610313575f5ffd5b809150509250925092565b5f6020828403121561032e575f5ffd5b81516001600160e01b031981168114610345575f5ffd5b9392505050565b5f81518060208401855e5f93019283525090919050565b5f61036e828561034c565b6101d160f51b8152610383600282018561034c565b95945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051614bd66104b65f395f50505f81816104bf0152818161056601528181610d70015281816112560152818161142c01528181611ca201528181611eca01528181611efc01528181611fb4015281816121640152818161278e01528181612b8f0152612f4201525f61062501525f610ade01525f6113b701525f818161065501526114f801525f50505f81816105f001528181610925015281816110e2015281816111530152818161119a01526111bc01525f8181610e2e01526115f801525f81816106f501526116b10152614bd65ff3fe60806040526004361061034f575f3560e01c80638da5cb5b116101c5578063d3471e34116100f6578063f14cb81211610094578063f9f34bb61161006e578063f9f34bb614610c21578063fae91a5114610c4d578063ff24fb4f14610c6c578063ff75890f14610c8b5761034f565b8063f14cb81214610b9c578063f2fde38b14610bc8578063f78eea8314610be75761034f565b8063e1c9e3c0116100d0578063e1c9e3c014610b33578063e30c397814610b47578063eb92b29b14610b5b578063ef1dff2b14610b7d5761034f565b8063d3471e3414610aae578063d5f3948814610acd578063d6a3614f14610b005761034f565b8063b411ee9411610163578063c064d3721161013d578063c064d37214610a18578063c3d98ea814610a37578063c5010d1714610a63578063cfae692914610a825761034f565b8063b411ee9414610995578063b8d38c96146109b4578063bff852fa146109d35761034f565b8063a9e954b91161019f578063a9e954b914610917578063abc86c6e1461094a578063ac82c6081461095d578063adb7c3f71461097c5761034f565b80638da5cb5b146108bd5780638df3fdfd146108d9578063a55b471c146108f85761034f565b806354fd4d501161029f578063715018a61161023d578063806d7e8f11610217578063806d7e8f1461082657806384292f071461085257806386ac03e0146108715780638a416ea9146108905761034f565b8063715018a6146107ea57806375dadb32146107fe57806379ba5097146108125761034f565b80636175ff00116102795780636175ff00146106e45780636ab221f8146107245780636b58960a146107555780636d1178e5146107745761034f565b806354fd4d50146106855780635be93984146106995780635c0d9d80146106b85761034f565b8063439fab911161030c5780634efef9c0116102e65780634efef9c0146105b65780635001f3b5146105e257806352d1902d146106145780635479d940146106475761034f565b8063439fab911461053957806346d1d21a1461055857806349492ef11461058a5761034f565b8063029db9581461043a5780630306732e1461046c57806303f3813d1461048f5780631014d375146104ae578063384ac938146104f95780633e088e1214610526575b34801561035a575f5ffd5b505f356001600160e01b03191663e0d20f7360e01b14801561037b57503330145b15610408575f6103a160206103903684613333565b6001600160c01b031916901b610caa565b6006015460408051808201909152601081526f3ab739b2ba3a3632b21039b7b63b32b960811b60208201526001600160a01b0390911691506103e69082151590610ce3565b604051365f82375f5f3683855af43d805f843e818015610404578184f35b8184fd5b6104386040518060400160405280600f81526020016e1b9bdd081a5b5c1b195b595b9d1959608a1b815250610cf5565b005b348015610445575f5ffd5b5061045961045436600461337e565b610d6a565b6040519081526020015b60405180910390f35b348015610477575f5ffd5b50610480610d9b565b60405161046393929190613421565b34801561049a575f5ffd5b506104386104a9366004613556565b610e18565b3480156104b9575f5ffd5b506104e17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610463565b348015610504575f5ffd5b5061051861051336600461337e565b610fb1565b6040516104639291906135d6565b61045961053436600461337e565b610fc6565b348015610544575f5ffd5b50610438610553366004613713565b61100c565b348015610563575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006104e1565b348015610595575f5ffd5b506105a96105a436600461337e565b611240565b6040516104639190613757565b3480156105c1575f5ffd5b506105d56105d036600461337e565b6112eb565b604051610463919061377e565b3480156105ed575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000006104e1565b34801561061f575f5ffd5b506104597f000000000000000000000000000000000000000000000000000000000000000081565b348015610652575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040519015158152602001610463565b348015610690575f5ffd5b506105d56113b0565b3480156106a4575f5ffd5b506104596106b336600461337e565b6113e0565b3480156106c3575f5ffd5b506106d76106d236600461337e565b6113f4565b6040516104639190613790565b3480156106ef575f5ffd5b506107177f000000000000000000000000000000000000000000000000000000000000000081565b604051610463919061380a565b34801561072f575f5ffd5b5061074361073e36600461337e565b6114ca565b60405160ff9091168152602001610463565b348015610760575f5ffd5b5061067561076f366004613818565b6114e1565b34801561077f575f5ffd5b5061078861153a565b60405161046391905f60a08201905060ff835116825260ff60208401511660208301526001600160401b0360408401511660408301526001600160401b0360608401511660608301526001600160401b03608084015116608083015292915050565b3480156107f5575f5ffd5b506104386115de565b348015610809575f5ffd5b506105d56115f1565b34801561081d575f5ffd5b5061043861161c565b348015610831575f5ffd5b5061084561084036600461337e565b611624565b60405161046391906138c0565b34801561085d575f5ffd5b5061043861086c3660046139b1565b6116a4565b34801561087c575f5ffd5b5061043861088b3660046139f8565b611873565b34801561089b575f5ffd5b506108a4611948565b6040516001600160e01b03199091168152602001610463565b3480156108c8575f5ffd5b505f546001600160a01b03166104e1565b3480156108e4575f5ffd5b506104596108f336600461337e565b611a46565b348015610903575f5ffd5b506104e1610912366004613a36565b611a5a565b348015610922575f5ffd5b507f00000000000000000000000000000000000000000000000000000000000000003f610459565b610459610958366004613ab0565b611b9e565b348015610968575f5ffd5b50610438610977366004613ae4565b611bbf565b348015610987575f5ffd5b506331f74adb60e11b6108a4565b3480156109a0575f5ffd5b506108a46109af366004613713565b611c2c565b3480156109bf575f5ffd5b506104386109ce366004613b45565b611c3a565b3480156109de575f5ffd5b5060408051808201909152601d81527f576974507269636546656564734c656761637955706772616461626c6500000060208201526105d5565b348015610a23575f5ffd5b50610459610a32366004613b60565b611c5a565b348015610a42575f5ffd5b50610a56610a5136600461337e565b611c64565b6040516104639190613bc1565b348015610a6e575f5ffd5b50610675610a7d3660046139f8565b611da7565b348015610a8d575f5ffd5b50610aa1610a9c36600461337e565b611e9f565b6040516104639190613bcf565b348015610ab9575f5ffd5b50610aa1610ac836600461337e565b611f89565b348015610ad8575f5ffd5b506104e17f000000000000000000000000000000000000000000000000000000000000000081565b348015610b0b575f5ffd5b507fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d20054610459565b348015610b3e575f5ffd5b50610438611fea565b348015610b52575f5ffd5b506104e16120b5565b348015610b66575f5ffd5b5060045460405161ffff9091168152602001610463565b348015610b88575f5ffd5b506105d5610b9736600461337e565b6120c8565b348015610ba7575f5ffd5b50610bbb610bb636600461337e565b612161565b6040516104639190613c3a565b348015610bd3575f5ffd5b50610438610be2366004613818565b6121f7565b348015610bf2575f5ffd5b50610c06610c01366004613b60565b612208565b60408051938452602084019290925290820152606001610463565b348015610c2c575f5ffd5b50610c40610c3b366004613c54565b612292565b6040516104639190613c86565b348015610c58575f5ffd5b50610438610c67366004613cd3565b612367565b348015610c77575f5ffd5b50610438610c86366004613556565b612443565b348015610c96575f5ffd5b506104e1610ca5366004613a36565b61249a565b6001600160e01b0319165f9081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d2016020526040902090565b81610cf157610cf181610cf5565b5050565b60408051808201909152601d81527f576974507269636546656564734c656761637955706772616461626c65000000602082015281604051602001610d3b929190613d04565b60408051601f198184030181529082905262461bcd60e51b8252610d619160040161377e565b60405180910390fd5b5f610d957f000000000000000000000000000000000000000000000000000000000000000083612524565b92915050565b606080606073__$434fc99454de0befe5e255c48ea2d383e7$__630306732e6040518163ffffffff1660e01b81526004015f60405180830381865af4158015610de6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e0d9190810190613e9e565b925092509250909192565b610e206125d1565b610e936001600160d01b03197f000000000000000000000000000000000000000000000000000000000000000016610e588688613f97565b6001600160d01b03191614604051806040016040528060128152602001710c4c2c840c6c2e0e8d2dedc40e0e4caccd2f60731b815250610ce3565b6040805180820190915260118152706e6f20736f6c766572206164647265737360781b6020820152610ed1906001600160a01b038516151590610ce3565b6040516303f3813d60e01b815273__$434fc99454de0befe5e255c48ea2d383e7$__906303f3813d90610f109088908890889088908890600401614036565b5f6040518083038186803b158015610f26575f5ffd5b505af4925050508015610f37575060015b610faa57610f436140c4565b806308c379a003610f715750610f576140dc565b80610f625750610f73565b610f6b81610cf5565b50610faa565b505b3d808015610f9c576040519150601f19603f3d011682016040523d82523d5f602084013e610fa1565b606091505b50610f6b6125fd565b5050505050565b5f6060610fbd8361260d565b91509150915091565b6040805160608101825260035461ffff808216835262010000820416602083015264010000000090046001600160401b0316918101919091525f90610d95908390612763565b5f546001600160a01b0316806110425781806020019051810190611030919061415e565b9250905061103d816129e6565b61108a565b336001600160a01b0382161461108a5760405162461bcd60e51b815260206004820152600d60248201526c3737ba103a34329037bbb732b960991b6044820152606401610d61565b611093826129ff565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe541580159061110457507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbe547f00000000000000000000000000000000000000000000000000000000000000003f145b156111515760405162461bcd60e51b815260206004820152601c60248201527f616c726561647920696e697469616c697a656420636f646568617368000000006044820152606401610d61565b7f00000000000000000000000000000000000000000000000000000000000000003f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc600201557f00000000000000000000000000000000000000000000000000000000000000003f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166111f55f546001600160a01b031690565b6001600160a01b03167fe73e754121f0bad1327816970101955bfffdf53d270ac509d777c25be070d7f66112276113b0565b604051611234919061377e565b60405180910390a45050565b604080518082019091525f8152606060208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a77fc1a461128c846113e0565b6040518263ffffffff1660e01b81526004016112aa91815260200190565b5f60405180830381865afa1580156112c4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d9591908101906141c4565b60605f6112f783610caa565b905061132f81600501545f5f1b14156040518060400160405280600b81526020016a0dcde40a4828840d0c2e6d60ab1b815250610ce3565b611337612b8c565b6001600160a01b0316638a22776482600501546040518263ffffffff1660e01b815260040161136891815260200190565b5f60405180830381865afa158015611382573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526113a99190810190614245565b9392505050565b60606113db7f0000000000000000000000000000000000000000000000000000000000000000612c0d565b905090565b5f6113ea82610caa565b6004015492915050565b61142a60405180608001604052805f6001600160a01b031681526020015f62ffffff168152602001606081526020015f81525090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a667533f611462846113e0565b6040516001600160e01b031960e084901b1681526001600160401b0390911660048201526024015f60405180830381865afa1580156114a3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d959190810190614276565b5f6114d482610caa565b6001015460ff1692915050565b5f5f6114f45f546001600160a01b031690565b90507f000000000000000000000000000000000000000000000000000000000000000080156113a95750826001600160a01b0316816001600160a01b0316149392505050565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091526003546040805160a08101825262010000830460ff8116808352603360208401526401000000009094046001600160401b031692820183905261ffff169260608201906115b19084614331565b6001600160401b031681526020016115cc60ff851684614367565b6001600160401b031690529392505050565b6115e66125d1565b6115ef5f6129e6565b565b60606113db7f0000000000000000000000000000000000000000000000000000000000000000612cae565b6115ef612d4f565b606061162e612b8c565b6001600160a01b03166377c1125961164584611a46565b6040518263ffffffff1660e01b815260040161166391815260200190565b5f60405180830381865afa15801561167d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d95919081019061449b565b6116ac6125d1565b6117997f000000000000000000000000000000000000000000000000000000000000000060138111156116e1576116e16137e2565b6116e9612b8c565b6001600160a01b0316634c729104846040518263ffffffff1660e01b815260040161171691815260200190565b602060405180830381865afa158015611731573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117559190614648565b6013811115611766576117666137e2565b146040518060400160405280601481526020017362616420726573756c742064617461207479706560601b815250610ce3565b6040516384292f0760e01b815273__$434fc99454de0befe5e255c48ea2d383e7$__906384292f07906117d490869086908690600401614661565b5f6040518083038186803b1580156117ea575f5ffd5b505af49250505080156117fb575060015b61186e576118076140c4565b806308c379a003611835575061181b6140dc565b806118265750611837565b61182f81610cf5565b50505050565b505b3d808015611860576040519150601f19603f3d011682016040523d82523d5f602084013e611865565b606091505b5061182f6125fd565b505050565b61187b6125d1565b604051630435601f60e51b815273__$434fc99454de0befe5e255c48ea2d383e7$__906386ac03e0906118b49085908590600401614684565b5f6040518083038186803b1580156118ca575f5ffd5b505af49250505080156118db575060015b610cf1576118e76140c4565b806308c379a00361190f57506118fb6140dc565b806119065750611911565b61186e81610cf5565b505b3d80801561193a576040519150601f19603f3d011682016040523d82523d5f602084013e61193f565b606091505b5061186e6125fd565b7fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d200545f9015611a43576119cf7fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d1ff6001015f815481106119a9576119a9614697565b905f5260205f2090600891828204019190066004029054906101000a900460e01b612dca565b905060015b7fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d20054811015611a4157611a357fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d1ff60010182815481106119a9576119a9614697565b909118906001016119d4565b505b90565b5f611a5082610caa565b6005015492915050565b5f611a636125d1565b604051632956d1c760e21b815273__$434fc99454de0befe5e255c48ea2d383e7$__9063a55b471c90611aa09088908890889088906004016146ab565b602060405180830381865af4925050508015611ad9575060408051601f3d908101601f19168201909252611ad6918101906146dc565b60015b611b4c57611ae56140c4565b806308c379a003611b135750611af96140dc565b80611b045750611b15565b611b0d81610cf5565b50611b96565b505b3d808015611b3e576040519150601f19603f3d011682016040523d82523d5f602084013e611b43565b606091505b50611b0d6125fd565b7f18678abae9a91a452648053bebd7d23122fb9204cddc206fa8193750abb8940f81826001600160a01b03163f8686604051611b8b94939291906146f7565b60405180910390a190505b949350505050565b5f6113a983611bba611bb53686900386018661473c565b612e53565b612763565b611bc76125d1565b61186e8383836001600160a01b0316631eef90526040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c08573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086c9190614781565b805160208201205f90610d95565b611c426125d1565b6004805461ffff191661ffff92909216919091179055565b5f610d9582612f26565b611c8b604080516080810182525f8082526020820181905291810182905290606082015290565b6040516384ee241160e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660048201526001600160e01b03198316602482015273__$434fc99454de0befe5e255c48ea2d383e7$__906384ee241190604401608060405180830381865af4925050508015611d2f575060408051601f3d908101601f19168201909252611d2c91810190614798565b60015b610d9557611d3b6140c4565b806308c379a003611d695750611d4f6140dc565b80611d5a5750611d6b565b611d6381610cf5565b50919050565b505b3d808015611d94576040519150601f19603f3d011682016040523d82523d5f602084013e611d99565b606091505b50611d636125fd565b919050565b5f5f611de784848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611c2c92505050565b90506001600160e01b03198116611e8c611e0083610caa565b8054611e0b906147fd565b80601f0160208091040260200160405190810160405280929190818152602001828054611e37906147fd565b8015611e825780601f10611e5957610100808354040283529160200191611e82565b820191905f5260205f20905b815481529060010190602001808311611e6557829003601f168201915b5050505050611c2c565b6001600160e01b03191614949350505050565b6040805160a0810182525f8082526020820181905291810182905260608082015260808101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca7da98b611f217f000000000000000000000000000000000000000000000000000000000000000085612524565b6040516001600160e01b031960e084901b1681526001600160401b0390911660048201526024015f60405180830381865afa158015611f62573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d95919081019061482f565b6040805160a0810182525f8082526020820181905291810182905260608082015260808101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ca7da98b611f21846113e0565b611ff26125d1565b73__$434fc99454de0befe5e255c48ea2d383e7$__63e1c9e3c06040518163ffffffff1660e01b81526004015f6040518083038186803b158015612034575f5ffd5b505af4925050508015612045575060015b6115ef576120516140c4565b806308c379a00361207c57506120656140dc565b80612070575061207e565b61207981610cf55