Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 12792598 | 1210 days ago | IN | 0 ETH | 0.02551344 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
PermanentStorage
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.6.5; import "./interfaces/IPermanentStorage.sol"; import "./utils/lib_storage/PSStorage.sol"; contract PermanentStorage is IPermanentStorage { // Constants do not have storage slot. bytes32 public constant curveTokenIndexStorageId = 0xf4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc; // keccak256("curveTokenIndex") bytes32 public constant transactionSeenStorageId = 0x695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0; // keccak256("transactionSeen") bytes32 public constant relayerValidStorageId = 0x2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f61; // keccak256("relayerValid") // New supported Curve pools address public constant CURVE_renBTC_POOL = 0x93054188d876f558f4a66B2EF1d97d16eDf0895B; address public constant CURVE_sBTC_POOL = 0x7fC77b5c7614E1533320Ea6DDc2Eb61fa00A9714; address public constant CURVE_hBTC_POOL = 0x4CA9b3063Ec5866A4B82E437059D2C43d1be596F; address public constant CURVE_sETH_POOL = 0xc5424B857f758E906013F3555Dad202e4bdB4567; // Curve coins address private constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address private constant renBTC = 0xEB4C2781e4ebA804CE9a9803C67d0893436bB27D; address private constant wBTC = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599; address private constant sBTC = 0xfE18be6b3Bd88A2D2A7f928d00292E7a9963CfC6; address private constant hBTC = 0x0316EB71485b0Ab14103307bf65a021042c6d380; address private constant sETH = 0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb; // Below are the variables which consume storage slots. address public operator; string public version; // Current version of the contract mapping(bytes32 => mapping(address => bool)) private permission; // Operator events event TransferOwnership(address newOperator); event SetPermission(bytes32 storageId, address role, bool enabled); event UpgradeAMMWrapper(address newAMMWrapper); event UpgradePMM(address newPMM); event UpgradeRFQ(address newRFQ); event UpgradeWETH(address newWETH); /************************************************************ * Access control and ownership management * *************************************************************/ modifier onlyOperator() { require(operator == msg.sender, "PermanentStorage: not the operator"); _; } modifier validRole(bool _enabled, address _role) { if (_enabled) { require( (_role == operator) || (_role == ammWrapperAddr()) || (_role == pmmAddr() || (_role == rfqAddr())), "PermanentStorage: not a valid role" ); } _; } modifier isPermitted(bytes32 _storageId, address _role) { require(permission[_storageId][_role], "PermanentStorage: has no permission"); _; } function transferOwnership(address _newOperator) external onlyOperator { require(_newOperator != address(0), "PermanentStorage: operator can not be zero address"); operator = _newOperator; emit TransferOwnership(_newOperator); } /// @dev Set permission for entity to write certain storage. function setPermission(bytes32 _storageId, address _role, bool _enabled) external onlyOperator validRole(_enabled, _role) { permission[_storageId][_role] = _enabled; emit SetPermission(_storageId, _role, _enabled); } /************************************************************ * Constructor and init functions * *************************************************************/ /// @dev Replacing constructor and initialize the contract. This function should only be called once. function initialize() external { require( keccak256(abi.encodePacked(version)) == keccak256(abi.encodePacked("5.1.0")), "PermanentStorage: not upgrading from 5.1.0 version" ); // upgrade from 5.1.0 to 5.2.0 version = "5.2.0"; // register renBTC pool // coins, exchange AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_renBTC_POOL][renBTC] = 1; // renBTC AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_renBTC_POOL][wBTC] = 2; // wBTC AMMWrapperStorage.getStorage().curveSupportGetDx[CURVE_renBTC_POOL] = false; // register sBTC pool // coins, exchange AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_sBTC_POOL][renBTC] = 1; // renBTC AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_sBTC_POOL][wBTC] = 2; // wBTC AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_sBTC_POOL][sBTC] = 3; // sBTC AMMWrapperStorage.getStorage().curveSupportGetDx[CURVE_sBTC_POOL] = false; // register hBTC pool // coins, exchange AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_hBTC_POOL][hBTC] = 1; // hBTC AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_hBTC_POOL][wBTC] = 2; // wBTC AMMWrapperStorage.getStorage().curveSupportGetDx[CURVE_hBTC_POOL] = false; // register sETH pool // coins, exchange AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_sETH_POOL][ETH] = 1; // ETH AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[CURVE_sETH_POOL][sETH] = 2; // sETH AMMWrapperStorage.getStorage().curveSupportGetDx[CURVE_sETH_POOL] = false; } /************************************************************ * Getter functions * *************************************************************/ function hasPermission(bytes32 _storageId, address _role) external view returns (bool) { return permission[_storageId][_role]; } function ammWrapperAddr() public view returns (address) { return PSStorage.getStorage().ammWrapperAddr; } function pmmAddr() public view returns (address) { return PSStorage.getStorage().pmmAddr; } function rfqAddr() public view returns (address) { return PSStorage.getStorage().rfqAddr; } function wethAddr() override external view returns (address) { return PSStorage.getStorage().wethAddr; } function getCurvePoolInfo(address _makerAddr, address _takerAssetAddr, address _makerAssetAddr) override external view returns (int128 takerAssetIndex, int128 makerAssetIndex, uint16 swapMethod, bool supportGetDx) { // underlying_coins int128 i = AMMWrapperStorage.getStorage().curveTokenIndexes[_makerAddr][_takerAssetAddr]; int128 j = AMMWrapperStorage.getStorage().curveTokenIndexes[_makerAddr][_makerAssetAddr]; supportGetDx = AMMWrapperStorage.getStorage().curveSupportGetDx[_makerAddr]; swapMethod = 0; if (i != 0 && j != 0) { // in underlying_coins list takerAssetIndex = i; makerAssetIndex = j; // exchange_underlying swapMethod = 2; } else { // in coins list int128 iWrapped = AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[_makerAddr][_takerAssetAddr]; int128 jWrapped = AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[_makerAddr][_makerAssetAddr]; if (iWrapped != 0 && jWrapped != 0) { takerAssetIndex = iWrapped; makerAssetIndex = jWrapped; // exchange swapMethod = 1; } else { revert("PermanentStorage: invalid pair"); } } return (takerAssetIndex, makerAssetIndex, swapMethod, supportGetDx); } /* NOTE: `isTransactionSeen` is replaced by `isAMMTransactionSeen`. It is kept for backward compatability. It should be removed from AMM 5.2.1 upward. */ function isTransactionSeen(bytes32 _transactionHash) override external view returns (bool) { return AMMWrapperStorage.getStorage().transactionSeen[_transactionHash]; } function isAMMTransactionSeen(bytes32 _transactionHash) override external view returns (bool) { return AMMWrapperStorage.getStorage().transactionSeen[_transactionHash]; } function isRFQTransactionSeen(bytes32 _transactionHash) override external view returns (bool) { return RFQStorage.getStorage().transactionSeen[_transactionHash]; } function isRelayerValid(address _relayer) override external view returns (bool) { return AMMWrapperStorage.getStorage().relayerValid[_relayer]; } /************************************************************ * Management functions for Operator * *************************************************************/ /// @dev Update AMMWrapper contract address. function upgradeAMMWrapper(address _newAMMWrapper) external onlyOperator { PSStorage.getStorage().ammWrapperAddr = _newAMMWrapper; emit UpgradeAMMWrapper(_newAMMWrapper); } /// @dev Update PMM contract address. function upgradePMM(address _newPMM) external onlyOperator { PSStorage.getStorage().pmmAddr = _newPMM; emit UpgradePMM(_newPMM); } /// @dev Update RFQ contract address. function upgradeRFQ(address _newRFQ) external onlyOperator { PSStorage.getStorage().rfqAddr = _newRFQ; emit UpgradeRFQ(_newRFQ); } /// @dev Update WETH contract address. function upgradeWETH(address _newWETH) external onlyOperator { PSStorage.getStorage().wethAddr = _newWETH; emit UpgradeWETH(_newWETH); } /************************************************************ * External functions * *************************************************************/ function setCurvePoolInfo(address _makerAddr, address[] calldata _underlyingCoins, address[] calldata _coins, bool _supportGetDx) override external isPermitted(curveTokenIndexStorageId, msg.sender) { int128 underlyingCoinsLength = int128(_underlyingCoins.length); for (int128 i = 0 ; i < underlyingCoinsLength; i++) { address assetAddr = _underlyingCoins[uint256(i)]; // underlying coins for original DAI, USDC, TUSD AMMWrapperStorage.getStorage().curveTokenIndexes[_makerAddr][assetAddr] = i + 1; // Start the index from 1 } int128 coinsLength = int128(_coins.length); for (int128 i = 0 ; i < coinsLength; i++) { address assetAddr = _coins[uint256(i)]; // wrapped coins for cDAI, cUSDC, yDAI, yUSDC, yTUSD, yBUSD AMMWrapperStorage.getStorage().curveWrappedTokenIndexes[_makerAddr][assetAddr] = i + 1; // Start the index from 1 } AMMWrapperStorage.getStorage().curveSupportGetDx[_makerAddr] = _supportGetDx; } /* NOTE: `setTransactionSeen` is replaced by `setAMMTransactionSeen`. It is kept for backward compatability. It should be removed from AMM 5.2.1 upward. */ function setTransactionSeen(bytes32 _transactionHash) override external isPermitted(transactionSeenStorageId, msg.sender) { require(!AMMWrapperStorage.getStorage().transactionSeen[_transactionHash], "PermanentStorage: transaction seen before"); AMMWrapperStorage.getStorage().transactionSeen[_transactionHash] = true; } function setAMMTransactionSeen(bytes32 _transactionHash) override external isPermitted(transactionSeenStorageId, msg.sender) { require(!AMMWrapperStorage.getStorage().transactionSeen[_transactionHash], "PermanentStorage: transaction seen before"); AMMWrapperStorage.getStorage().transactionSeen[_transactionHash] = true; } function setRFQTransactionSeen(bytes32 _transactionHash) override external isPermitted(transactionSeenStorageId, msg.sender) { require(!RFQStorage.getStorage().transactionSeen[_transactionHash], "PermanentStorage: transaction seen before"); RFQStorage.getStorage().transactionSeen[_transactionHash] = true; } function setRelayersValid(address[] calldata _relayers, bool[] calldata _isValids) override external isPermitted(relayerValidStorageId, msg.sender) { require(_relayers.length == _isValids.length, "PermanentStorage: inputs length mismatch"); for (uint256 i = 0; i < _relayers.length; i++) { AMMWrapperStorage.getStorage().relayerValid[_relayers[i]] = _isValids[i]; } } }
pragma solidity ^0.6.0; interface IPermanentStorage { function wethAddr() external view returns (address); function getCurvePoolInfo(address _makerAddr, address _takerAssetAddr, address _makerAssetAddr) external view returns (int128 takerAssetIndex, int128 makerAssetIndex, uint16 swapMethod, bool supportGetDx); function setCurvePoolInfo(address _makerAddr, address[] calldata _underlyingCoins, address[] calldata _coins, bool _supportGetDx) external; function isTransactionSeen(bytes32 _transactionHash) external view returns (bool); // Kept for backward compatability. Should be removed from AMM 5.2.1 upward function isAMMTransactionSeen(bytes32 _transactionHash) external view returns (bool); function isRFQTransactionSeen(bytes32 _transactionHash) external view returns (bool); function isRelayerValid(address _relayer) external view returns (bool); function setTransactionSeen(bytes32 _transactionHash) external; // Kept for backward compatability. Should be removed from AMM 5.2.1 upward function setAMMTransactionSeen(bytes32 _transactionHash) external; function setRFQTransactionSeen(bytes32 _transactionHash) external; function setRelayersValid(address[] memory _relayers, bool[] memory _isValids) external; }
pragma solidity ^0.6.5; pragma experimental ABIEncoderV2; library PSStorage { bytes32 private constant STORAGE_SLOT = 0x92dd52b981a2dd69af37d8a3febca29ed6a974aede38ae66e4ef773173aba471; struct Storage { address ammWrapperAddr; address pmmAddr; address wethAddr; address rfqAddr; } /// @dev Get the storage bucket for this contract. function getStorage() internal pure returns (Storage storage stor) { assert(STORAGE_SLOT == bytes32(uint256(keccak256("permanent.storage.storage")) - 1)); bytes32 slot = STORAGE_SLOT; // Dip into assembly to change the slot pointed to by the local // variable `stor`. // See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries assembly { stor_slot := slot } } } library AMMWrapperStorage { bytes32 private constant STORAGE_SLOT = 0xd38d862c9fa97c2fa857a46e08022d272a3579c114ca4f335f1e5fcb692c045e; struct Storage { mapping(bytes32 => bool) transactionSeen; // curve pool => underlying token address => underlying token index mapping(address => mapping(address => int128)) curveTokenIndexes; mapping(address => bool) relayerValid; // 5.1.0 appended storage // curve pool => wrapped token address => wrapped token index mapping(address => mapping(address => int128)) curveWrappedTokenIndexes; mapping(address => bool) curveSupportGetDx; } /// @dev Get the storage bucket for this contract. function getStorage() internal pure returns (Storage storage stor) { assert(STORAGE_SLOT == bytes32(uint256(keccak256("permanent.ammwrapper.storage")) - 1)); bytes32 slot = STORAGE_SLOT; // Dip into assembly to change the slot pointed to by the local // variable `stor`. // See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries assembly { stor_slot := slot } } } library RFQStorage { bytes32 private constant STORAGE_SLOT = 0x9174e76494cfb023ddc1eb0effb6c12e107165382bbd0ecfddbc38ea108bbe52; struct Storage { mapping(bytes32 => bool) transactionSeen; } /// @dev Get the storage bucket for this contract. function getStorage() internal pure returns (Storage storage stor) { assert(STORAGE_SLOT == bytes32(uint256(keccak256("permanent.rfq.storage")) - 1)); bytes32 slot = STORAGE_SLOT; // Dip into assembly to change the slot pointed to by the local // variable `stor`. // See https://solidity.readthedocs.io/en/v0.6.8/assembly.html?highlight=slot#access-to-external-variables-functions-and-libraries assembly { stor_slot := slot } } }
{ "optimizer": { "enabled": true, "runs": 1000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"storageId","type":"bytes32"},{"indexed":false,"internalType":"address","name":"role","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetPermission","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOperator","type":"address"}],"name":"TransferOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAMMWrapper","type":"address"}],"name":"UpgradeAMMWrapper","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newPMM","type":"address"}],"name":"UpgradePMM","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRFQ","type":"address"}],"name":"UpgradeRFQ","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newWETH","type":"address"}],"name":"UpgradeWETH","type":"event"},{"inputs":[],"name":"CURVE_hBTC_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURVE_renBTC_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURVE_sBTC_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CURVE_sETH_POOL","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ammWrapperAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curveTokenIndexStorageId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_makerAddr","type":"address"},{"internalType":"address","name":"_takerAssetAddr","type":"address"},{"internalType":"address","name":"_makerAssetAddr","type":"address"}],"name":"getCurvePoolInfo","outputs":[{"internalType":"int128","name":"takerAssetIndex","type":"int128"},{"internalType":"int128","name":"makerAssetIndex","type":"int128"},{"internalType":"uint16","name":"swapMethod","type":"uint16"},{"internalType":"bool","name":"supportGetDx","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_storageId","type":"bytes32"},{"internalType":"address","name":"_role","type":"address"}],"name":"hasPermission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"isAMMTransactionSeen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"isRFQTransactionSeen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_relayer","type":"address"}],"name":"isRelayerValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"isTransactionSeen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pmmAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"relayerValidStorageId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rfqAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"setAMMTransactionSeen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_makerAddr","type":"address"},{"internalType":"address[]","name":"_underlyingCoins","type":"address[]"},{"internalType":"address[]","name":"_coins","type":"address[]"},{"internalType":"bool","name":"_supportGetDx","type":"bool"}],"name":"setCurvePoolInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_storageId","type":"bytes32"},{"internalType":"address","name":"_role","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"setRFQTransactionSeen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_relayers","type":"address[]"},{"internalType":"bool[]","name":"_isValids","type":"bool[]"}],"name":"setRelayersValid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transactionHash","type":"bytes32"}],"name":"setTransactionSeen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transactionSeenStorageId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOperator","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAMMWrapper","type":"address"}],"name":"upgradeAMMWrapper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPMM","type":"address"}],"name":"upgradePMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRFQ","type":"address"}],"name":"upgradeRFQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWETH","type":"address"}],"name":"upgradeWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wethAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50611dcf806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80637ecb557a1161010f578063b6f732ae116100a2578063df37438911610071578063df37438914610659578063e4e266e914610676578063e7cc2c8e1461067e578063f2fde38b146106a4576101e5565b8063b6f732ae14610575578063d24a06b71461057d578063d8dd97fb14610299578063dbd1a14a14610585576101e5565b806393e13c64116100de57806393e13c641461027c5780639a69e7341461052a578063a276b0a314610532578063b3bf50501461054f576101e5565b80637ecb557a1461048b5780638014bd97146104b15780638129fc1c146104b95780638ab4a8cc146104c1576101e5565b806354fd4d5011610187578063676ff9cf11610156578063676ff9cf1461043b578063723ca616146104615780637543f38e1461047b5780637d5aa5f414610483576101e5565b806354fd4d501461037a578063570ca735146103f7578063599e4c70146103ff57806365fea8b914610433576101e5565b80632feeea3a116101c35780632feeea3a1461025657806331f42f8e1461027c57806336ef42511461029957806354f0bc79146102b8576101e5565b806328545c0d146101ea578063288e7a121461022a578063298a91fd1461024e575b600080fd5b6102166004803603604081101561020057600080fd5b50803590602001356001600160a01b03166106ca565b604080519115158252519081900360200190f35b6102326106f5565b604080516001600160a01b039092168252519081900360200190f35b61023261070d565b6102166004803603602081101561026c57600080fd5b50356001600160a01b0316610729565b6102166004803603602081101561029257600080fd5b5035610758565b6102b6600480360360208110156102af57600080fd5b5035610776565b005b6102b6600480360360408110156102ce57600080fd5b8101906020810181356401000000008111156102e957600080fd5b8201836020820111156102fb57600080fd5b8035906020019184602083028401116401000000008311171561031d57600080fd5b91939092909160208101903564010000000081111561033b57600080fd5b82018360208201111561034d57600080fd5b8035906020019184602083028401116401000000008311171561036f57600080fd5b509092509050610888565b6103826109d1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103bc5781810151838201526020016103a4565b50505050905090810190601f1680156103e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610232610a5e565b6102b66004803603606081101561041557600080fd5b508035906001600160a01b0360208201351690604001351515610a6d565b610232610bed565b6102b66004803603602081101561045157600080fd5b50356001600160a01b0316610c05565b610469610cac565b60408051918252519081900360200190f35b610232610cd0565b610232610ce8565b6102b6600480360360208110156104a157600080fd5b50356001600160a01b0316610d04565b610232610da8565b6102b6610dc4565b6104f9600480360360608110156104d757600080fd5b506001600160a01b03813581169160208101358216916040909101351661140e565b60408051600f95860b81529390940b602084015261ffff909116828401521515606082015290519081900360800190f35b6104696115d6565b6102b66004803603602081101561054857600080fd5b50356115fa565b6102b66004803603602081101561056557600080fd5b50356001600160a01b03166116eb565b610232611792565b6102326117ab565b6102b66004803603608081101561059b57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156105c657600080fd5b8201836020820111156105d857600080fd5b803590602001918460208302840111640100000000831117156105fa57600080fd5b91939092909160208101903564010000000081111561061857600080fd5b82018360208201111561062a57600080fd5b8035906020019184602083028401116401000000008311171561064c57600080fd5b91935091503515156117c3565b6102166004803603602081101561066f57600080fd5b50356119c7565b6104696119d1565b6102b66004803603602081101561069457600080fd5b50356001600160a01b03166119f5565b6102b6600480360360208110156106ba57600080fd5b50356001600160a01b0316611a9c565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b73c5424b857f758e906013f3555dad202e4bdb456781565b6000610717611b7e565b600301546001600160a01b0316905090565b6000610733611ba2565b6001600160a01b03929092166000908152600290920160205250604090205460ff1690565b6000610762611ba2565b600092835260205250604090205460ff1690565b3360008181527f5a18bce76b80e4d4ce74360cf8c2ecc0cc16abd99c9fa544ea9e4efc857ede1b60205260409020547f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0919060ff166108065760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b61080e611ba2565b6000848152602091909152604090205460ff161561085d5760405162461bcd60e51b8152600401808060200182810382526029815260200180611ca66029913960400191505060405180910390fd5b6001610867611ba2565b60009485526020526040909320805460ff1916931515939093179092555050565b3360008181527f5d870303c431e6d36139ba5242eb8ff20cdc3a6fb8ce8e2e4557687eef8fc0d160205260409020547f2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f61919060ff166109185760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b8483146109565760405162461bcd60e51b8152600401808060200182810382526028815260200180611c7e6028913960400191505060405180910390fd5b60005b858110156109c85784848281811061096d57fe5b90506020020135151561097e611ba2565b600201600089898581811061098f57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101610959565b50505050505050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081565b6000546001600160a01b031681565b6000546001600160a01b03163314610ab65760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80828115610b72576000546001600160a01b0382811691161480610af25750610add611792565b6001600160a01b0316816001600160a01b0316145b80610b375750610b00610da8565b6001600160a01b0316816001600160a01b03161480610b375750610b2261070d565b6001600160a01b0316816001600160a01b0316145b610b725760405162461bcd60e51b8152600401808060200182810382526022815260200180611d236022913960400191505060405180910390fd5b60008581526002602090815260408083206001600160a01b03881680855290835292819020805487151560ff1990911681179091558151898152928301939093528181019290925290517fe9f5231bbfb4b32867755b94562215cff6c8998489de8ba20926f8d0980e78189181900360600190a15050505050565b737fc77b5c7614e1533320ea6ddc2eb61fa00a971481565b6000546001600160a01b03163314610c4e5760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80610c57611b7e565b60020180546001600160a01b0319166001600160a01b03928316179055604080519183168252517f428fc47aa2e09c6530ff76342b0c8f8dd404ccff45f05ab269d91245e8229157916020908290030190a150565b7f2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f6181565b734ca9b3063ec5866a4b82e437059d2c43d1be596f81565b6000610cf2611b7e565b600201546001600160a01b0316905090565b6000546001600160a01b03163314610d4d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80610d56611b7e565b80546001600160a01b0319166001600160a01b03928316179055604080519183168252517fe3f9ba76e59e03b4e1255783bc2d5340338b8bc071086d3e32e5ddff4fc85553916020908290030190a150565b6000610db2611b7e565b600101546001600160a01b0316905090565b60405160200180807f352e312e3000000000000000000000000000000000000000000000000000000081525060050190506040516020818303038152906040528051906020012060016040516020018082805460018160011615610100020316600290048015610e6b5780601f10610e49576101008083540402835291820191610e6b565b820191906000526020600020905b815481529060010190602001808311610e57575b50509150506040516020818303038152906040528051906020012014610ec25760405162461bcd60e51b8152600401808060200182810382526032815260200180611ccf6032913960400191505060405180910390fd5b6040805180820190915260058082527f352e322e300000000000000000000000000000000000000000000000000000006020909201918252610f0691600191611bea565b506001610f11611ba2565b7393054188d876f558f4a66b2ef1d97d16edf0895b60009081526003919091016020908152604080832073eb4c2781e4eba804ce9a9803c67d0893436bb27d845290915290208054600f9290920b6001600160801b03166001600160801b03199092169190911790556002610f84611ba2565b7393054188d876f558f4a66b2ef1d97d16edf0895b600090815260039190910160209081526040808320732260fac5e5542a773aa44fbcfedf7c193bc2c599845290915281208054600f9390930b6001600160801b03166001600160801b031990931692909217909155610ff6611ba2565b7393054188d876f558f4a66b2ef1d97d16edf0895b600090815260049190910160205260409020805460ff19169115159190911790556001611036611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a971460009081526003919091016020908152604080832073eb4c2781e4eba804ce9a9803c67d0893436bb27d845290915290208054600f9290920b6001600160801b03166001600160801b031990921691909117905560026110a9611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a97146000908152600391820160209081526040808320732260fac5e5542a773aa44fbcfedf7c193bc2c599845290915290208054600f9390930b6001600160801b03166001600160801b03199093169290921790915561111a611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a971460009081526003919091016020908152604080832073fe18be6b3bd88a2d2a7f928d00292e7a9963cfc6845290915281208054600f9390930b6001600160801b03166001600160801b03199093169290921790915561118c611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a9714600090815260049190910160205260409020805460ff191691151591909117905560016111cc611ba2565b734ca9b3063ec5866a4b82e437059d2c43d1be596f600090815260039190910160209081526040808320730316eb71485b0ab14103307bf65a021042c6d380845290915290208054600f9290920b6001600160801b03166001600160801b0319909216919091179055600261123f611ba2565b734ca9b3063ec5866a4b82e437059d2c43d1be596f600090815260039190910160209081526040808320732260fac5e5542a773aa44fbcfedf7c193bc2c599845290915281208054600f9390930b6001600160801b03166001600160801b0319909316929092179091556112b1611ba2565b734ca9b3063ec5866a4b82e437059d2c43d1be596f600090815260049190910160205260409020805460ff191691151591909117905560016112f1611ba2565b73c5424b857f758e906013f3555dad202e4bdb456760009081526003919091016020908152604080832073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee845290915290208054600f9290920b6001600160801b03166001600160801b03199092169190911790556002611364611ba2565b73c5424b857f758e906013f3555dad202e4bdb4567600090815260039190910160209081526040808320735e74c9036fb86bd7ecdcb084a0673efc32ea31cb845290915281208054600f9390930b6001600160801b03166001600160801b0319909316929092179091556113d6611ba2565b73c5424b857f758e906013f3555dad202e4bdb4567600090815260049190910160205260409020805460ff1916911515919091179055565b600080600080600061141e611ba2565b6001600160a01b03808a16600090815260019290920160209081526040808420928b168452919052812054600f0b9150611456611ba2565b6001600160a01b03808b16600090815260019290920160209081526040808420928b168452919052902054600f0b905061148e611ba2565b6001600160a01b038a166000908152600491909101602052604081205490945060ff169250600f82900b158015906114ca575080600f0b600014155b156114de57819550809450600293506115cb565b60006114e8611ba2565b6001600160a01b03808c16600090815260039290920160209081526040808420928d168452919052812054600f0b9150611520611ba2565b6001600160a01b03808d16600090815260039290920160209081526040808420928d168452919052902054600f90810b915082900b15801590611567575080600f0b600014155b1561157b57819750809650600195506115c8565b6040805162461bcd60e51b815260206004820152601e60248201527f5065726d616e656e7453746f726167653a20696e76616c696420706169720000604482015290519081900360640190fd5b50505b505093509350935093565b7f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d081565b3360008181527f5a18bce76b80e4d4ce74360cf8c2ecc0cc16abd99c9fa544ea9e4efc857ede1b60205260409020547f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0919060ff1661168a5760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b611692611bc6565b6000848152602091909152604090205460ff16156116e15760405162461bcd60e51b8152600401808060200182810382526029815260200180611ca66029913960400191505060405180910390fd5b6001610867611bc6565b6000546001600160a01b031633146117345760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b8061173d611b7e565b60030180546001600160a01b0319166001600160a01b03928316179055604080519183168252517f28e34087108910d7a3d1de15bdebe33e9b7ce4be78c6987103983875f4fbb903916020908290030190a150565b600061179c611b7e565b546001600160a01b0316905090565b7393054188d876f558f4a66b2ef1d97d16edf0895b81565b3360008181527f167956591df432401c2bb34aca57b58f945baf26fdec2c15edae08f4a2f06bed60205260409020547ff4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc919060ff166118535760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b8560005b81600f0b81600f0b12156118e9576000898983600f0b81811061187657fe5b905060200201356001600160a01b0316905081600101611894611ba2565b6001600160a01b03808e166000908152600192830160209081526040808320969093168252949094529092208054600f9290920b6001600160801b03166001600160801b031990921691909117905501611857565b508460005b81600f0b81600f0b1215611984576000888883600f0b81811061190d57fe5b905060200201356001600160a01b031690508160010161192b611ba2565b6001600160a01b03808f1660009081526003929092016020908152604080842095909216835293909352919091208054600f9290920b6001600160801b03166001600160801b03199092169190911790556001016118ee565b508461198e611ba2565b6001600160a01b039b909b1660009081526004909b016020526040909a20805460ff19169a15159a909a17909955505050505050505050565b6000610762611bc6565b7ff4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc81565b6000546001600160a01b03163314611a3e5760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80611a47611b7e565b60010180546001600160a01b0319166001600160a01b03928316179055604080519183168252517f474dbe0e44f4b1a24e66b1a543293f696f5f72651de8895adf45233e3c6948bb916020908290030190a150565b6000546001600160a01b03163314611ae55760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b6001600160a01b038116611b2a5760405162461bcd60e51b8152600401808060200182810382526032815260200180611d686032913960400191505060405180910390fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fcfaaa26691e16e66e73290fc725eee1a6b4e0e693a1640484937aac25ffb55a49181900360200190a150565b7f92dd52b981a2dd69af37d8a3febca29ed6a974aede38ae66e4ef773173aba47190565b7fd38d862c9fa97c2fa857a46e08022d272a3579c114ca4f335f1e5fcb692c045e90565b7f9174e76494cfb023ddc1eb0effb6c12e107165382bbd0ecfddbc38ea108bbe5290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611c2b57805160ff1916838001178555611c58565b82800160010185558215611c58579182015b82811115611c58578251825591602001919060010190611c3d565b50611c64929150611c68565b5090565b5b80821115611c645760008155600101611c6956fe5065726d616e656e7453746f726167653a20696e70757473206c656e677468206d69736d617463685065726d616e656e7453746f726167653a207472616e73616374696f6e207365656e206265666f72655065726d616e656e7453746f726167653a206e6f7420757067726164696e672066726f6d20352e312e302076657273696f6e5065726d616e656e7453746f726167653a206e6f7420746865206f70657261746f725065726d616e656e7453746f726167653a206e6f7420612076616c696420726f6c655065726d616e656e7453746f726167653a20686173206e6f207065726d697373696f6e5065726d616e656e7453746f726167653a206f70657261746f722063616e206e6f74206265207a65726f2061646472657373a264697066735822122065afd0c2cb931077cd35e9247e81473007383749c8362ecb0a44bd5f897745c064736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80637ecb557a1161010f578063b6f732ae116100a2578063df37438911610071578063df37438914610659578063e4e266e914610676578063e7cc2c8e1461067e578063f2fde38b146106a4576101e5565b8063b6f732ae14610575578063d24a06b71461057d578063d8dd97fb14610299578063dbd1a14a14610585576101e5565b806393e13c64116100de57806393e13c641461027c5780639a69e7341461052a578063a276b0a314610532578063b3bf50501461054f576101e5565b80637ecb557a1461048b5780638014bd97146104b15780638129fc1c146104b95780638ab4a8cc146104c1576101e5565b806354fd4d5011610187578063676ff9cf11610156578063676ff9cf1461043b578063723ca616146104615780637543f38e1461047b5780637d5aa5f414610483576101e5565b806354fd4d501461037a578063570ca735146103f7578063599e4c70146103ff57806365fea8b914610433576101e5565b80632feeea3a116101c35780632feeea3a1461025657806331f42f8e1461027c57806336ef42511461029957806354f0bc79146102b8576101e5565b806328545c0d146101ea578063288e7a121461022a578063298a91fd1461024e575b600080fd5b6102166004803603604081101561020057600080fd5b50803590602001356001600160a01b03166106ca565b604080519115158252519081900360200190f35b6102326106f5565b604080516001600160a01b039092168252519081900360200190f35b61023261070d565b6102166004803603602081101561026c57600080fd5b50356001600160a01b0316610729565b6102166004803603602081101561029257600080fd5b5035610758565b6102b6600480360360208110156102af57600080fd5b5035610776565b005b6102b6600480360360408110156102ce57600080fd5b8101906020810181356401000000008111156102e957600080fd5b8201836020820111156102fb57600080fd5b8035906020019184602083028401116401000000008311171561031d57600080fd5b91939092909160208101903564010000000081111561033b57600080fd5b82018360208201111561034d57600080fd5b8035906020019184602083028401116401000000008311171561036f57600080fd5b509092509050610888565b6103826109d1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103bc5781810151838201526020016103a4565b50505050905090810190601f1680156103e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610232610a5e565b6102b66004803603606081101561041557600080fd5b508035906001600160a01b0360208201351690604001351515610a6d565b610232610bed565b6102b66004803603602081101561045157600080fd5b50356001600160a01b0316610c05565b610469610cac565b60408051918252519081900360200190f35b610232610cd0565b610232610ce8565b6102b6600480360360208110156104a157600080fd5b50356001600160a01b0316610d04565b610232610da8565b6102b6610dc4565b6104f9600480360360608110156104d757600080fd5b506001600160a01b03813581169160208101358216916040909101351661140e565b60408051600f95860b81529390940b602084015261ffff909116828401521515606082015290519081900360800190f35b6104696115d6565b6102b66004803603602081101561054857600080fd5b50356115fa565b6102b66004803603602081101561056557600080fd5b50356001600160a01b03166116eb565b610232611792565b6102326117ab565b6102b66004803603608081101561059b57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156105c657600080fd5b8201836020820111156105d857600080fd5b803590602001918460208302840111640100000000831117156105fa57600080fd5b91939092909160208101903564010000000081111561061857600080fd5b82018360208201111561062a57600080fd5b8035906020019184602083028401116401000000008311171561064c57600080fd5b91935091503515156117c3565b6102166004803603602081101561066f57600080fd5b50356119c7565b6104696119d1565b6102b66004803603602081101561069457600080fd5b50356001600160a01b03166119f5565b6102b6600480360360208110156106ba57600080fd5b50356001600160a01b0316611a9c565b60009182526002602090815260408084206001600160a01b0393909316845291905290205460ff1690565b73c5424b857f758e906013f3555dad202e4bdb456781565b6000610717611b7e565b600301546001600160a01b0316905090565b6000610733611ba2565b6001600160a01b03929092166000908152600290920160205250604090205460ff1690565b6000610762611ba2565b600092835260205250604090205460ff1690565b3360008181527f5a18bce76b80e4d4ce74360cf8c2ecc0cc16abd99c9fa544ea9e4efc857ede1b60205260409020547f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0919060ff166108065760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b61080e611ba2565b6000848152602091909152604090205460ff161561085d5760405162461bcd60e51b8152600401808060200182810382526029815260200180611ca66029913960400191505060405180910390fd5b6001610867611ba2565b60009485526020526040909320805460ff1916931515939093179092555050565b3360008181527f5d870303c431e6d36139ba5242eb8ff20cdc3a6fb8ce8e2e4557687eef8fc0d160205260409020547f2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f61919060ff166109185760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b8483146109565760405162461bcd60e51b8152600401808060200182810382526028815260200180611c7e6028913960400191505060405180910390fd5b60005b858110156109c85784848281811061096d57fe5b90506020020135151561097e611ba2565b600201600089898581811061098f57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101610959565b50505050505050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a565780601f10610a2b57610100808354040283529160200191610a56565b820191906000526020600020905b815481529060010190602001808311610a3957829003601f168201915b505050505081565b6000546001600160a01b031681565b6000546001600160a01b03163314610ab65760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80828115610b72576000546001600160a01b0382811691161480610af25750610add611792565b6001600160a01b0316816001600160a01b0316145b80610b375750610b00610da8565b6001600160a01b0316816001600160a01b03161480610b375750610b2261070d565b6001600160a01b0316816001600160a01b0316145b610b725760405162461bcd60e51b8152600401808060200182810382526022815260200180611d236022913960400191505060405180910390fd5b60008581526002602090815260408083206001600160a01b03881680855290835292819020805487151560ff1990911681179091558151898152928301939093528181019290925290517fe9f5231bbfb4b32867755b94562215cff6c8998489de8ba20926f8d0980e78189181900360600190a15050505050565b737fc77b5c7614e1533320ea6ddc2eb61fa00a971481565b6000546001600160a01b03163314610c4e5760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80610c57611b7e565b60020180546001600160a01b0319166001600160a01b03928316179055604080519183168252517f428fc47aa2e09c6530ff76342b0c8f8dd404ccff45f05ab269d91245e8229157916020908290030190a150565b7f2c97779b4deaf24e9d46e02ec2699240a957d92782b51165b93878b09dd66f6181565b734ca9b3063ec5866a4b82e437059d2c43d1be596f81565b6000610cf2611b7e565b600201546001600160a01b0316905090565b6000546001600160a01b03163314610d4d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80610d56611b7e565b80546001600160a01b0319166001600160a01b03928316179055604080519183168252517fe3f9ba76e59e03b4e1255783bc2d5340338b8bc071086d3e32e5ddff4fc85553916020908290030190a150565b6000610db2611b7e565b600101546001600160a01b0316905090565b60405160200180807f352e312e3000000000000000000000000000000000000000000000000000000081525060050190506040516020818303038152906040528051906020012060016040516020018082805460018160011615610100020316600290048015610e6b5780601f10610e49576101008083540402835291820191610e6b565b820191906000526020600020905b815481529060010190602001808311610e57575b50509150506040516020818303038152906040528051906020012014610ec25760405162461bcd60e51b8152600401808060200182810382526032815260200180611ccf6032913960400191505060405180910390fd5b6040805180820190915260058082527f352e322e300000000000000000000000000000000000000000000000000000006020909201918252610f0691600191611bea565b506001610f11611ba2565b7393054188d876f558f4a66b2ef1d97d16edf0895b60009081526003919091016020908152604080832073eb4c2781e4eba804ce9a9803c67d0893436bb27d845290915290208054600f9290920b6001600160801b03166001600160801b03199092169190911790556002610f84611ba2565b7393054188d876f558f4a66b2ef1d97d16edf0895b600090815260039190910160209081526040808320732260fac5e5542a773aa44fbcfedf7c193bc2c599845290915281208054600f9390930b6001600160801b03166001600160801b031990931692909217909155610ff6611ba2565b7393054188d876f558f4a66b2ef1d97d16edf0895b600090815260049190910160205260409020805460ff19169115159190911790556001611036611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a971460009081526003919091016020908152604080832073eb4c2781e4eba804ce9a9803c67d0893436bb27d845290915290208054600f9290920b6001600160801b03166001600160801b031990921691909117905560026110a9611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a97146000908152600391820160209081526040808320732260fac5e5542a773aa44fbcfedf7c193bc2c599845290915290208054600f9390930b6001600160801b03166001600160801b03199093169290921790915561111a611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a971460009081526003919091016020908152604080832073fe18be6b3bd88a2d2a7f928d00292e7a9963cfc6845290915281208054600f9390930b6001600160801b03166001600160801b03199093169290921790915561118c611ba2565b737fc77b5c7614e1533320ea6ddc2eb61fa00a9714600090815260049190910160205260409020805460ff191691151591909117905560016111cc611ba2565b734ca9b3063ec5866a4b82e437059d2c43d1be596f600090815260039190910160209081526040808320730316eb71485b0ab14103307bf65a021042c6d380845290915290208054600f9290920b6001600160801b03166001600160801b0319909216919091179055600261123f611ba2565b734ca9b3063ec5866a4b82e437059d2c43d1be596f600090815260039190910160209081526040808320732260fac5e5542a773aa44fbcfedf7c193bc2c599845290915281208054600f9390930b6001600160801b03166001600160801b0319909316929092179091556112b1611ba2565b734ca9b3063ec5866a4b82e437059d2c43d1be596f600090815260049190910160205260409020805460ff191691151591909117905560016112f1611ba2565b73c5424b857f758e906013f3555dad202e4bdb456760009081526003919091016020908152604080832073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee845290915290208054600f9290920b6001600160801b03166001600160801b03199092169190911790556002611364611ba2565b73c5424b857f758e906013f3555dad202e4bdb4567600090815260039190910160209081526040808320735e74c9036fb86bd7ecdcb084a0673efc32ea31cb845290915281208054600f9390930b6001600160801b03166001600160801b0319909316929092179091556113d6611ba2565b73c5424b857f758e906013f3555dad202e4bdb4567600090815260049190910160205260409020805460ff1916911515919091179055565b600080600080600061141e611ba2565b6001600160a01b03808a16600090815260019290920160209081526040808420928b168452919052812054600f0b9150611456611ba2565b6001600160a01b03808b16600090815260019290920160209081526040808420928b168452919052902054600f0b905061148e611ba2565b6001600160a01b038a166000908152600491909101602052604081205490945060ff169250600f82900b158015906114ca575080600f0b600014155b156114de57819550809450600293506115cb565b60006114e8611ba2565b6001600160a01b03808c16600090815260039290920160209081526040808420928d168452919052812054600f0b9150611520611ba2565b6001600160a01b03808d16600090815260039290920160209081526040808420928d168452919052902054600f90810b915082900b15801590611567575080600f0b600014155b1561157b57819750809650600195506115c8565b6040805162461bcd60e51b815260206004820152601e60248201527f5065726d616e656e7453746f726167653a20696e76616c696420706169720000604482015290519081900360640190fd5b50505b505093509350935093565b7f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d081565b3360008181527f5a18bce76b80e4d4ce74360cf8c2ecc0cc16abd99c9fa544ea9e4efc857ede1b60205260409020547f695d523b8578c6379a2121164fd8de334b9c5b6b36dff5408bd4051a6b1704d0919060ff1661168a5760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b611692611bc6565b6000848152602091909152604090205460ff16156116e15760405162461bcd60e51b8152600401808060200182810382526029815260200180611ca66029913960400191505060405180910390fd5b6001610867611bc6565b6000546001600160a01b031633146117345760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b8061173d611b7e565b60030180546001600160a01b0319166001600160a01b03928316179055604080519183168252517f28e34087108910d7a3d1de15bdebe33e9b7ce4be78c6987103983875f4fbb903916020908290030190a150565b600061179c611b7e565b546001600160a01b0316905090565b7393054188d876f558f4a66b2ef1d97d16edf0895b81565b3360008181527f167956591df432401c2bb34aca57b58f945baf26fdec2c15edae08f4a2f06bed60205260409020547ff4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc919060ff166118535760405162461bcd60e51b8152600401808060200182810382526023815260200180611d456023913960400191505060405180910390fd5b8560005b81600f0b81600f0b12156118e9576000898983600f0b81811061187657fe5b905060200201356001600160a01b0316905081600101611894611ba2565b6001600160a01b03808e166000908152600192830160209081526040808320969093168252949094529092208054600f9290920b6001600160801b03166001600160801b031990921691909117905501611857565b508460005b81600f0b81600f0b1215611984576000888883600f0b81811061190d57fe5b905060200201356001600160a01b031690508160010161192b611ba2565b6001600160a01b03808f1660009081526003929092016020908152604080842095909216835293909352919091208054600f9290920b6001600160801b03166001600160801b03199092169190911790556001016118ee565b508461198e611ba2565b6001600160a01b039b909b1660009081526004909b016020526040909a20805460ff19169a15159a909a17909955505050505050505050565b6000610762611bc6565b7ff4c750cdce673f6c35898d215e519b86e3846b1f0532fb48b84fe9d80f6de2fc81565b6000546001600160a01b03163314611a3e5760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b80611a47611b7e565b60010180546001600160a01b0319166001600160a01b03928316179055604080519183168252517f474dbe0e44f4b1a24e66b1a543293f696f5f72651de8895adf45233e3c6948bb916020908290030190a150565b6000546001600160a01b03163314611ae55760405162461bcd60e51b8152600401808060200182810382526022815260200180611d016022913960400191505060405180910390fd5b6001600160a01b038116611b2a5760405162461bcd60e51b8152600401808060200182810382526032815260200180611d686032913960400191505060405180910390fd5b600080546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fcfaaa26691e16e66e73290fc725eee1a6b4e0e693a1640484937aac25ffb55a49181900360200190a150565b7f92dd52b981a2dd69af37d8a3febca29ed6a974aede38ae66e4ef773173aba47190565b7fd38d862c9fa97c2fa857a46e08022d272a3579c114ca4f335f1e5fcb692c045e90565b7f9174e76494cfb023ddc1eb0effb6c12e107165382bbd0ecfddbc38ea108bbe5290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611c2b57805160ff1916838001178555611c58565b82800160010185558215611c58579182015b82811115611c58578251825591602001919060010190611c3d565b50611c64929150611c68565b5090565b5b80821115611c645760008155600101611c6956fe5065726d616e656e7453746f726167653a20696e70757473206c656e677468206d69736d617463685065726d616e656e7453746f726167653a207472616e73616374696f6e207365656e206265666f72655065726d616e656e7453746f726167653a206e6f7420757067726164696e672066726f6d20352e312e302076657273696f6e5065726d616e656e7453746f726167653a206e6f7420746865206f70657261746f725065726d616e656e7453746f726167653a206e6f7420612076616c696420726f6c655065726d616e656e7453746f726167653a20686173206e6f207065726d697373696f6e5065726d616e656e7453746f726167653a206f70657261746f722063616e206e6f74206265207a65726f2061646472657373a264697066735822122065afd0c2cb931077cd35e9247e81473007383749c8362ecb0a44bd5f897745c064736f6c634300060c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.