Source Code
Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Initialize | 24002075 | 71 days ago | IN | 0 ETH | 0.00000335 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
UserProxy
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 1000 runs
Other Settings:
istanbul EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.7.6;
pragma abicoder v2;
import "./utils/UserProxyStorage.sol";
import "./utils/Multicall.sol";
/**
* @dev UserProxy contract
*/
contract UserProxy is Multicall {
// Below are the variables which consume storage slots.
address public operator;
string public version; // Current version of the contract
address private nominatedOperator;
// Operator events
event OperatorNominated(address indexed newOperator);
event OperatorChanged(address indexed oldOperator, address indexed newOperator);
event SetAMMStatus(bool enable);
event UpgradeAMMWrapper(address newAMMWrapper);
event SetPMMStatus(bool enable);
event UpgradePMM(address newPMM);
event SetRFQStatus(bool enable);
event UpgradeRFQ(address newRFQ);
event SetRFQv2Status(bool enable);
event UpgradeRFQv2(address newRFQv2);
event SetLimitOrderStatus(bool enable);
event UpgradeLimitOrder(address newLimitOrder);
receive() external payable {}
/************************************************************
* Access control and ownership management *
*************************************************************/
modifier onlyOperator() {
require(operator == msg.sender, "UserProxy: not the operator");
_;
}
function nominateNewOperator(address _newOperator) external onlyOperator {
require(_newOperator != address(0), "UserProxy: operator can not be zero address");
nominatedOperator = _newOperator;
emit OperatorNominated(_newOperator);
}
function acceptOwnership() external {
require(msg.sender == nominatedOperator, "UserProxy: not nominated");
emit OperatorChanged(operator, nominatedOperator);
operator = nominatedOperator;
nominatedOperator = address(0);
}
/************************************************************
* Constructor and init functions *
*************************************************************/
/// @dev Replacing constructor and initialize the contract. This function should only be called once.
function initialize(address _operator) external {
require(keccak256(abi.encodePacked(version)) == keccak256(abi.encodePacked("")), "UserProxy: not upgrading from empty");
require(_operator != address(0), "UserProxy: operator can not be zero address");
operator = _operator;
// Upgrade version
version = "5.3.0";
}
/************************************************************
* Getter functions *
*************************************************************/
function ammWrapperAddr() public view returns (address) {
return AMMWrapperStorage.getStorage().ammWrapperAddr;
}
function isAMMEnabled() public view returns (bool) {
return AMMWrapperStorage.getStorage().isEnabled;
}
function pmmAddr() public view returns (address) {
return PMMStorage.getStorage().pmmAddr;
}
function isPMMEnabled() public view returns (bool) {
return PMMStorage.getStorage().isEnabled;
}
function rfqAddr() public view returns (address) {
return RFQStorage.getStorage().rfqAddr;
}
function isRFQEnabled() public view returns (bool) {
return RFQStorage.getStorage().isEnabled;
}
function rfqv2Addr() public view returns (address) {
return RFQv2Storage.getStorage().rfqv2Addr;
}
function isRFQv2Enabled() public view returns (bool) {
return RFQv2Storage.getStorage().isEnabled;
}
function limitOrderAddr() public view returns (address) {
return LimitOrderStorage.getStorage().limitOrderAddr;
}
function isLimitOrderEnabled() public view returns (bool) {
return LimitOrderStorage.getStorage().isEnabled;
}
/************************************************************
* Management functions for Operator *
*************************************************************/
function setAMMStatus(bool _enable) public onlyOperator {
AMMWrapperStorage.getStorage().isEnabled = _enable;
emit SetAMMStatus(_enable);
}
function upgradeAMMWrapper(address _newAMMWrapperAddr, bool _enable) external onlyOperator {
AMMWrapperStorage.getStorage().ammWrapperAddr = _newAMMWrapperAddr;
AMMWrapperStorage.getStorage().isEnabled = _enable;
emit UpgradeAMMWrapper(_newAMMWrapperAddr);
emit SetAMMStatus(_enable);
}
function setPMMStatus(bool _enable) public onlyOperator {
PMMStorage.getStorage().isEnabled = _enable;
emit SetPMMStatus(_enable);
}
function upgradePMM(address _newPMMAddr, bool _enable) external onlyOperator {
PMMStorage.getStorage().pmmAddr = _newPMMAddr;
PMMStorage.getStorage().isEnabled = _enable;
emit UpgradePMM(_newPMMAddr);
emit SetPMMStatus(_enable);
}
function setRFQStatus(bool _enable) public onlyOperator {
RFQStorage.getStorage().isEnabled = _enable;
emit SetRFQStatus(_enable);
}
function upgradeRFQ(address _newRFQAddr, bool _enable) external onlyOperator {
RFQStorage.getStorage().rfqAddr = _newRFQAddr;
RFQStorage.getStorage().isEnabled = _enable;
emit UpgradeRFQ(_newRFQAddr);
emit SetRFQStatus(_enable);
}
function setRFQv2Status(bool _enable) public onlyOperator {
RFQv2Storage.getStorage().isEnabled = _enable;
emit SetRFQv2Status(_enable);
}
function upgradeRFQv2(address _newRFQv2Addr, bool _enable) external onlyOperator {
RFQv2Storage.getStorage().rfqv2Addr = _newRFQv2Addr;
RFQv2Storage.getStorage().isEnabled = _enable;
emit UpgradeRFQv2(_newRFQv2Addr);
emit SetRFQv2Status(_enable);
}
function setLimitOrderStatus(bool _enable) public onlyOperator {
LimitOrderStorage.getStorage().isEnabled = _enable;
emit SetLimitOrderStatus(_enable);
}
function upgradeLimitOrder(address _newLimitOrderAddr, bool _enable) external onlyOperator {
LimitOrderStorage.getStorage().limitOrderAddr = _newLimitOrderAddr;
LimitOrderStorage.getStorage().isEnabled = _enable;
emit UpgradeLimitOrder(_newLimitOrderAddr);
emit SetLimitOrderStatus(_enable);
}
/************************************************************
* External functions *
*************************************************************/
/**
* @dev proxy the call to AMM
*/
function toAMM(bytes calldata _payload) external payable {
require(isAMMEnabled(), "UserProxy: AMM is disabled");
(bool callSucceed, ) = ammWrapperAddr().call{ value: msg.value }(_payload);
if (!callSucceed) {
// revert with data from last call
assembly {
let ptr := mload(0x40)
let size := returndatasize()
returndatacopy(ptr, 0, size)
revert(ptr, size)
}
}
}
/**
* @dev proxy the call to PMM
*/
function toPMM(bytes calldata _payload) external payable {
require(isPMMEnabled(), "UserProxy: PMM is disabled");
require(msg.sender == tx.origin, "UserProxy: only EOA");
(bool callSucceed, ) = pmmAddr().call{ value: msg.value }(_payload);
if (!callSucceed) {
// revert with data from last call
assembly {
let ptr := mload(0x40)
let size := returndatasize()
returndatacopy(ptr, 0, size)
revert(ptr, size)
}
}
}
/**
* @dev proxy the call to RFQ
*/
function toRFQ(bytes calldata _payload) external payable {
require(isRFQEnabled(), "UserProxy: RFQ is disabled");
require(msg.sender == tx.origin, "UserProxy: only EOA");
(bool callSucceed, ) = rfqAddr().call{ value: msg.value }(_payload);
if (!callSucceed) {
// revert with data from last call
assembly {
let ptr := mload(0x40)
let size := returndatasize()
returndatacopy(ptr, 0, size)
revert(ptr, size)
}
}
}
/**
* @dev proxy the call to RFQv2
*/
function toRFQv2(bytes calldata _payload) external payable {
require(isRFQv2Enabled(), "UserProxy: RFQv2 is disabled");
require(msg.sender == tx.origin, "UserProxy: only EOA");
(bool callSucceed, ) = rfqv2Addr().call{ value: msg.value }(_payload);
if (!callSucceed) {
// revert with data from last call
assembly {
let ptr := mload(0x40)
let size := returndatasize()
returndatacopy(ptr, 0, size)
revert(ptr, size)
}
}
}
/**
* @dev proxy the call to Limit Order
*/
function toLimitOrder(bytes calldata _payload) external {
require(isLimitOrderEnabled(), "UserProxy: Limit Order is disabled");
require(msg.sender == tx.origin, "UserProxy: only EOA");
(bool callSucceed, ) = limitOrderAddr().call(_payload);
if (!callSucceed) {
// revert with data from last call
assembly {
let ptr := mload(0x40)
let size := returndatasize()
returndatacopy(ptr, 0, size)
revert(ptr, size)
}
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;
library AMMWrapperStorage {
bytes32 private constant STORAGE_SLOT = 0xbf49677e3150252dfa801a673d2d5ec21eaa360a4674864e55e79041e3f65a6b;
/// @dev Storage bucket for proxy contract.
struct Storage {
// The address of the AMMWrapper contract.
address ammWrapperAddr;
// Is AMM enabled
bool isEnabled;
}
/// @dev Get the storage bucket for this contract.
function getStorage() internal pure returns (Storage storage stor) {
assert(STORAGE_SLOT == bytes32(uint256(keccak256("userproxy.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 PMMStorage {
bytes32 private constant STORAGE_SLOT = 0x8f135983375ba6442123d61647e7325c1753eabc2e038e44d3b888a970def89a;
/// @dev Storage bucket for proxy contract.
struct Storage {
// The address of the PMM contract.
address pmmAddr;
// Is PMM enabled
bool isEnabled;
}
/// @dev Get the storage bucket for this contract.
function getStorage() internal pure returns (Storage storage stor) {
assert(STORAGE_SLOT == bytes32(uint256(keccak256("userproxy.pmm.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 = 0x857df08bd185dc66e3cc5e11acb4e1dd65290f3fee6426f52f84e8faccf229cf;
/// @dev Storage bucket for proxy contract.
struct Storage {
// The address of the RFQ contract.
address rfqAddr;
// Is RFQ enabled
bool isEnabled;
}
/// @dev Get the storage bucket for this contract.
function getStorage() internal pure returns (Storage storage stor) {
assert(STORAGE_SLOT == bytes32(uint256(keccak256("userproxy.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
}
}
}
library RFQv2Storage {
bytes32 private constant STORAGE_SLOT = 0xd5f1768ede616e352f32123fd6fe01064898ae4e55a2678c79b8ad79680ff744;
/// @dev Storage bucket for proxy contract.
struct Storage {
// The address of the RFQv2 contract.
address rfqv2Addr;
// Is RFQv2 enabled
bool isEnabled;
}
/// @dev Get the storage bucket for this contract.
function getStorage() internal pure returns (Storage storage stor) {
assert(STORAGE_SLOT == bytes32(uint256(keccak256("userproxy.rfqv2.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 LimitOrderStorage {
bytes32 private constant STORAGE_SLOT = 0xf1a59a985b4002cdf0db464f05bed7182ee06372a999d820ea1883b8bf067ce5;
/// @dev Storage bucket for proxy contract.
struct Storage {
// The address of the Limit Order contract.
address limitOrderAddr;
// Is Limit Order enabled
bool isEnabled;
}
/// @dev Get the storage bucket for this contract.
function getStorage() internal pure returns (Storage storage stor) {
assert(STORAGE_SLOT == bytes32(uint256(keccak256("userproxy.limitorder.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
}
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.7.6;
pragma abicoder v2;
import "../interfaces/IMulticall.sol";
// Modified from https://github.com/Uniswap/uniswap-v3-periphery/blob/v1.1.1/contracts/base/Multicall.sol
abstract contract Multicall is IMulticall {
function multicall(bytes[] calldata data, bool revertOnFail) external override returns (bool[] memory successes, bytes[] memory results) {
successes = new bool[](data.length);
results = new bytes[](data.length);
for (uint256 i = 0; i < data.length; ++i) {
(bool success, bytes memory result) = address(this).delegatecall(data[i]);
successes[i] = success;
results[i] = result;
if (!success) {
// Get failed reason
string memory revertReason;
if (result.length < 68) {
revertReason = "Delegatecall failed";
} else {
assembly {
result := add(result, 0x04)
}
revertReason = abi.decode(result, (string));
}
if (revertOnFail) {
revert(revertReason);
}
emit MulticallFailure(i, revertReason);
}
}
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.7.0;
pragma abicoder v2;
interface IMulticall {
event MulticallFailure(uint256 index, string reason);
function multicall(bytes[] calldata data, bool revertOnFail) external returns (bool[] memory successes, bytes[] memory results);
}{
"remappings": [
"@openzeppelin/=lib/openzeppelin-contracts/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/"
],
"optimizer": {
"enabled": true,
"runs": 1000
},
"metadata": {
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "istanbul",
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"MulticallFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"SetAMMStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"SetLimitOrderStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"SetPMMStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"SetRFQStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"SetRFQv2Status","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":"newLimitOrder","type":"address"}],"name":"UpgradeLimitOrder","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":"newRFQv2","type":"address"}],"name":"UpgradeRFQv2","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ammWrapperAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isAMMEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLimitOrderEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPMMEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRFQEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRFQv2Enabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitOrderAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"},{"internalType":"bool","name":"revertOnFail","type":"bool"}],"name":"multicall","outputs":[{"internalType":"bool[]","name":"successes","type":"bool[]"},{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOperator","type":"address"}],"name":"nominateNewOperator","outputs":[],"stateMutability":"nonpayable","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":"rfqAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rfqv2Addr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setAMMStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setLimitOrderStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setPMMStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setRFQStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setRFQv2Status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"toAMM","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"toLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"toPMM","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"toRFQ","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"toRFQv2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAMMWrapperAddr","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"upgradeAMMWrapper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newLimitOrderAddr","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"upgradeLimitOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPMMAddr","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"upgradePMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRFQAddr","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"upgradeRFQ","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRFQv2Addr","type":"address"},{"internalType":"bool","name":"_enable","type":"bool"}],"name":"upgradeRFQv2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801561001057600080fd5b50611bf7806100206000396000f3fe6080604052600436106101dc5760003560e01c80638014bd9711610102578063bbd3f63811610095578063de83cd5411610064578063de83cd54146104dd578063e47d166c146104fd578063e5f23b1614610510578063ec55908414610530576101e3565b8063bbd3f63814610468578063c37197d31461047d578063c3e920751461049d578063c4d66de8146104bd576101e3565b8063a32fe0a1116100d1578063a32fe0a11461040b578063a9204ecf1461041e578063a9dc9f691461043e578063b6f732ae14610453576101e3565b80638014bd97146103b957806393811c8a146103ce578063994dd72e146103e3578063a1728b0d146103f8576101e3565b80634ff62bf51161017a578063706b4eb811610149578063706b4eb81461034f57806379ba50971461036f5780637c305b1d146103845780637f54479a146103a4576101e3565b80634ff62bf5146102e357806354fd4d5014610305578063570ca73514610327578063628930b91461033c576101e3565b8063298a91fd116101b6578063298a91fd1461026157806341fc048d1461028357806346f04170146102a35780634daadf12146102c3576101e3565b80630d6274ac146101e85780631e9701d41461020a578063223196b314610241576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611546565b610545565b005b34801561021657600080fd5b5061022a610225366004611578565b610635565b6040516102389291906117d7565b60405180910390f35b34801561024d57600080fd5b5061020861025c366004611525565b610857565b34801561026d57600080fd5b506102766108f1565b60405161023891906117c3565b34801561028f57600080fd5b5061020861029e3660046115f6565b61090a565b3480156102af57600080fd5b506102086102be366004611546565b610992565b3480156102cf57600080fd5b506102086102de3660046115f6565b610a6d565b3480156102ef57600080fd5b506102f8610aea565b604051610238919061186e565b34801561031157600080fd5b5061031a610b04565b6040516102389190611879565b34801561033357600080fd5b50610276610b91565b61020861034a366004611610565b610ba0565b34801561035b57600080fd5b5061020861036a366004611610565b610c64565b34801561037b57600080fd5b50610208610d07565b34801561039057600080fd5b5061020861039f366004611546565b610d95565b3480156103b057600080fd5b506102f8610e70565b3480156103c557600080fd5b50610276610e7a565b3480156103da57600080fd5b50610276610e84565b3480156103ef57600080fd5b50610276610e8e565b610208610406366004611610565b610e98565b610208610419366004611610565b610ee5565b34801561042a57600080fd5b506102086104393660046115f6565b610f32565b34801561044a57600080fd5b506102f8610faf565b34801561045f57600080fd5b50610276610fb9565b34801561047457600080fd5b506102f8610fc3565b34801561048957600080fd5b50610208610498366004611546565b610fcd565b3480156104a957600080fd5b506102086104b8366004611546565b6110a8565b3480156104c957600080fd5b506102086104d8366004611525565b611183565b3480156104e957600080fd5b506102086104f83660046115f6565b611276565b61020861050b366004611610565b6112f3565b34801561051c57600080fd5b5061020861052b3660046115f6565b611321565b34801561053c57600080fd5b506102f861139e565b6000546001600160a01b031633146105785760405162461bcd60e51b815260040161056f90611a59565b60405180910390fd5b816105816113a4565b80546001600160a01b0319166001600160a01b0392909216919091179055806105a86113a4565b8054911515600160a01b0260ff60a01b199092169190911790556040517f28e34087108910d7a3d1de15bdebe33e9b7ce4be78c6987103983875f4fbb903906105f29084906117c3565b60405180910390a17f85600615329dbd38415d95ab88a1870aa23283ed03ea8339bbaf7c53cb6889eb81604051610629919061186e565b60405180910390a15050565b6060808367ffffffffffffffff8111801561064f57600080fd5b50604051908082528060200260200182016040528015610679578160200160208202803683370190505b5091508367ffffffffffffffff8111801561069357600080fd5b506040519080825280602002602001820160405280156106c757816020015b60608152602001906001900390816106b25790505b50905060005b8481101561084e57600080308888858181106106e557fe5b90506020028101906106f79190611b45565b604051610705929190611740565b600060405180830381855af49150503d8060008114610740576040519150601f19603f3d011682016040523d82523d6000602084013e610745565b606091505b50915091508185848151811061075757fe5b6020026020010190151590811515815250508084848151811061077657fe5b6020026020010181905250816108445760606044825110156107cc575060408051808201909152601381527f44656c656761746563616c6c206661696c65640000000000000000000000000060208201526107e9565b600482019150818060200190518101906107e6919061167d565b90505b8615610809578060405162461bcd60e51b815260040161056f9190611879565b7f8227e69dc43e5a3dff3c9e10930295a5383b9e7736b0508e15d46d05efecb4a6848260405161083a929190611b24565b60405180910390a1505b50506001016106cd565b50935093915050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161056f90611a59565b6001600160a01b0381166108a75760405162461bcd60e51b815260040161056f9061188c565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f8cc0f93a743dada018f348511be65ee8585206ca96e058f4d70c41f276e57bde90600090a250565b60006108fb6113a4565b546001600160a01b0316905090565b6000546001600160a01b031633146109345760405162461bcd60e51b815260040161056f90611a59565b8061093d6113c8565b8054911515600160a01b0260ff60a01b199092169190911790556040517f69013db8b04c8782a3bfb1988607e4cb48e1476125c4a9f2e08199916281becf9061098790839061186e565b60405180910390a150565b6000546001600160a01b031633146109bc5760405162461bcd60e51b815260040161056f90611a59565b816109c56113ec565b80546001600160a01b0319166001600160a01b0392909216919091179055806109ec6113ec565b8054911515600160a01b0260ff60a01b199092169190911790556040517f474dbe0e44f4b1a24e66b1a543293f696f5f72651de8895adf45233e3c6948bb90610a369084906117c3565b60405180910390a17f75f3afb50142265ab5ffa96a1281463cb3a39821dfcafd44d5bcda0dbf1c482581604051610629919061186e565b6000546001600160a01b03163314610a975760405162461bcd60e51b815260040161056f90611a59565b80610aa06113ec565b8054911515600160a01b0260ff60a01b199092169190911790556040517f75f3afb50142265ab5ffa96a1281463cb3a39821dfcafd44d5bcda0dbf1c48259061098790839061186e565b6000610af4611410565b54600160a01b900460ff16919050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610b895780601f10610b5e57610100808354040283529160200191610b89565b820191906000526020600020905b815481529060010190602001808311610b6c57829003601f168201915b505050505081565b6000546001600160a01b031681565b610ba8610aea565b610bc45760405162461bcd60e51b815260040161056f9061197d565b333214610be35760405162461bcd60e51b815260040161056f90611946565b6000610bed610e84565b6001600160a01b0316348484604051610c07929190611740565b60006040518083038185875af1925050503d8060008114610c44576040519150601f19603f3d011682016040523d82523d6000602084013e610c49565b606091505b5050905080610c5f576040513d806000833e8082fd5b505050565b610c6c610faf565b610c885760405162461bcd60e51b815260040161056f906118e9565b333214610ca75760405162461bcd60e51b815260040161056f90611946565b6000610cb1610e8e565b6001600160a01b03168383604051610cca929190611740565b6000604051808303816000865af19150503d8060008114610c44576040519150601f19603f3d011682016040523d82523d6000602084013e610c49565b6002546001600160a01b03163314610d315760405162461bcd60e51b815260040161056f906119eb565b600254600080546040516001600160a01b0393841693909116917fd58299b712891143e76310d5e664c4203c940a67db37cf856bdaa3c5c76a802c91a360028054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b03163314610dbf5760405162461bcd60e51b815260040161056f90611a59565b81610dc8611434565b80546001600160a01b0319166001600160a01b039290921691909117905580610def611434565b8054911515600160a01b0260ff60a01b199092169190911790556040517fc4b713388b13f13226268ec85c363aa606bfc124242892bef245909669b35d0c90610e399084906117c3565b60405180910390a17f77a57cd075e1e4d27ea05938d55fc48c8967f71d9edeeb249010daccce25e45b81604051610629919061186e565b6000610af46113ec565b60006108fb6113ec565b60006108fb611410565b60006108fb611434565b610ea061139e565b610ebc5760405162461bcd60e51b815260040161056f90611a22565b333214610edb5760405162461bcd60e51b815260040161056f90611946565b6000610bed6108f1565b610eed610e70565b610f095760405162461bcd60e51b815260040161056f906119b4565b333214610f285760405162461bcd60e51b815260040161056f90611946565b6000610bed610e7a565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b815260040161056f90611a59565b80610f65611434565b8054911515600160a01b0260ff60a01b199092169190911790556040517f77a57cd075e1e4d27ea05938d55fc48c8967f71d9edeeb249010daccce25e45b9061098790839061186e565b6000610af4611434565b60006108fb6113c8565b6000610af46113c8565b6000546001600160a01b03163314610ff75760405162461bcd60e51b815260040161056f90611a59565b81611000611410565b80546001600160a01b0319166001600160a01b039290921691909117905580611027611410565b8054911515600160a01b0260ff60a01b199092169190911790556040517fed44209623383e0a37e30095e7056f3e879411ab3edf075836dd94a2f4973580906110719084906117c3565b60405180910390a17ff39273fb8850aade529594fa8aa09c79be1dd5d16a8cff2c20496e048539e41881604051610629919061186e565b6000546001600160a01b031633146110d25760405162461bcd60e51b815260040161056f90611a59565b816110db6113c8565b80546001600160a01b0319166001600160a01b0392909216919091179055806111026113c8565b8054911515600160a01b0260ff60a01b199092169190911790556040517fe3f9ba76e59e03b4e1255783bc2d5340338b8bc071086d3e32e5ddff4fc855539061114c9084906117c3565b60405180910390a17f69013db8b04c8782a3bfb1988607e4cb48e1476125c4a9f2e08199916281becf81604051610629919061186e565b604051602001611192906117c0565b6040516020818303038152906040528051906020012060016040516020016111ba9190611750565b60405160208183030381529060405280519060200120146111ed5760405162461bcd60e51b815260040161056f90611ac7565b6001600160a01b0381166112135760405162461bcd60e51b815260040161056f9061188c565b600080546001600160a01b0319166001600160a01b0383161790556040805180820190915260058082527f352e332e30000000000000000000000000000000000000000000000000000000602090920191825261127291600191611458565b5050565b6000546001600160a01b031633146112a05760405162461bcd60e51b815260040161056f90611a59565b806112a96113a4565b8054911515600160a01b0260ff60a01b199092169190911790556040517f85600615329dbd38415d95ab88a1870aa23283ed03ea8339bbaf7c53cb6889eb9061098790839061186e565b6112fb610fc3565b6113175760405162461bcd60e51b815260040161056f90611a90565b6000610bed610fb9565b6000546001600160a01b0316331461134b5760405162461bcd60e51b815260040161056f90611a59565b80611354611410565b8054911515600160a01b0260ff60a01b199092169190911790556040517ff39273fb8850aade529594fa8aa09c79be1dd5d16a8cff2c20496e048539e4189061098790839061186e565b6000610af45b7f857df08bd185dc66e3cc5e11acb4e1dd65290f3fee6426f52f84e8faccf229cf90565b7fbf49677e3150252dfa801a673d2d5ec21eaa360a4674864e55e79041e3f65a6b90565b7f8f135983375ba6442123d61647e7325c1753eabc2e038e44d3b888a970def89a90565b7fd5f1768ede616e352f32123fd6fe01064898ae4e55a2678c79b8ad79680ff74490565b7ff1a59a985b4002cdf0db464f05bed7182ee06372a999d820ea1883b8bf067ce590565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261148e57600085556114d4565b82601f106114a757805160ff19168380011785556114d4565b828001600101855582156114d4579182015b828111156114d45782518255916020019190600101906114b9565b506114e09291506114e4565b5090565b5b808211156114e057600081556001016114e5565b80356001600160a01b038116811461151057600080fd5b919050565b8035801515811461151057600080fd5b600060208284031215611536578081fd5b61153f826114f9565b9392505050565b60008060408385031215611558578081fd5b611561836114f9565b915061156f60208401611515565b90509250929050565b60008060006040848603121561158c578081fd5b833567ffffffffffffffff808211156115a3578283fd5b818601915086601f8301126115b6578283fd5b8135818111156115c4578384fd5b87602080830285010111156115d7578384fd5b6020928301955093506115ed9186019050611515565b90509250925092565b600060208284031215611607578081fd5b61153f82611515565b60008060208385031215611622578182fd5b823567ffffffffffffffff80821115611639578384fd5b818501915085601f83011261164c578384fd5b81358181111561165a578485fd5b86602082850101111561166b578485fd5b60209290920196919550909350505050565b60006020828403121561168e578081fd5b815167ffffffffffffffff808211156116a5578283fd5b818401915084601f8301126116b8578283fd5b8151818111156116c457fe5b604051601f8201601f1916810160200183811182821017156116e257fe5b6040528181528382016020018710156116f9578485fd5b61170a826020830160208701611b91565b9695505050505050565b6000815180845261172c816020860160208601611b91565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b600080835460018082166000811461176f5760018114611786576117b5565b60ff198316865260028304607f16860193506117b5565b600283048786526020808720875b838110156117ad5781548a820152908501908201611794565b505050860193505b509195945050505050565b90565b6001600160a01b0391909116815260200190565b604080825283519082018190526000906020906060840190828701845b828110156118125781511515845292840192908401906001016117f4565b5050508381038285015284518082528282019080840283018401878501865b8381101561185f57601f1986840301855261184d838351611714565b94870194925090860190600101611831565b50909998505050505050505050565b901515815260200190565b60006020825261153f6020830184611714565b6020808252602b908201527f5573657250726f78793a206f70657261746f722063616e206e6f74206265207a60408201527f65726f2061646472657373000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f5573657250726f78793a204c696d6974204f726465722069732064697361626c60408201527f6564000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526013908201527f5573657250726f78793a206f6e6c7920454f4100000000000000000000000000604082015260600190565b6020808252601c908201527f5573657250726f78793a2052465176322069732064697361626c656400000000604082015260600190565b6020808252601a908201527f5573657250726f78793a20504d4d2069732064697361626c6564000000000000604082015260600190565b60208082526018908201527f5573657250726f78793a206e6f74206e6f6d696e617465640000000000000000604082015260600190565b6020808252601a908201527f5573657250726f78793a205246512069732064697361626c6564000000000000604082015260600190565b6020808252601b908201527f5573657250726f78793a206e6f7420746865206f70657261746f720000000000604082015260600190565b6020808252601a908201527f5573657250726f78793a20414d4d2069732064697361626c6564000000000000604082015260600190565b60208082526023908201527f5573657250726f78793a206e6f7420757067726164696e672066726f6d20656d60408201527f7074790000000000000000000000000000000000000000000000000000000000606082015260800190565b600083825260406020830152611b3d6040830184611714565b949350505050565b6000808335601e19843603018112611b5b578283fd5b83018035915067ffffffffffffffff821115611b75578283fd5b602001915036819003821315611b8a57600080fd5b9250929050565b60005b83811015611bac578181015183820152602001611b94565b83811115611bbb576000848401525b5050505056fea264697066735822122073472f6f5e79471eeaf04b2ff08bab94017e08b9a37a071d37ba11168188a20664736f6c63430007060033
Deployed Bytecode
0x6080604052600436106101dc5760003560e01c80638014bd9711610102578063bbd3f63811610095578063de83cd5411610064578063de83cd54146104dd578063e47d166c146104fd578063e5f23b1614610510578063ec55908414610530576101e3565b8063bbd3f63814610468578063c37197d31461047d578063c3e920751461049d578063c4d66de8146104bd576101e3565b8063a32fe0a1116100d1578063a32fe0a11461040b578063a9204ecf1461041e578063a9dc9f691461043e578063b6f732ae14610453576101e3565b80638014bd97146103b957806393811c8a146103ce578063994dd72e146103e3578063a1728b0d146103f8576101e3565b80634ff62bf51161017a578063706b4eb811610149578063706b4eb81461034f57806379ba50971461036f5780637c305b1d146103845780637f54479a146103a4576101e3565b80634ff62bf5146102e357806354fd4d5014610305578063570ca73514610327578063628930b91461033c576101e3565b8063298a91fd116101b6578063298a91fd1461026157806341fc048d1461028357806346f04170146102a35780634daadf12146102c3576101e3565b80630d6274ac146101e85780631e9701d41461020a578063223196b314610241576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611546565b610545565b005b34801561021657600080fd5b5061022a610225366004611578565b610635565b6040516102389291906117d7565b60405180910390f35b34801561024d57600080fd5b5061020861025c366004611525565b610857565b34801561026d57600080fd5b506102766108f1565b60405161023891906117c3565b34801561028f57600080fd5b5061020861029e3660046115f6565b61090a565b3480156102af57600080fd5b506102086102be366004611546565b610992565b3480156102cf57600080fd5b506102086102de3660046115f6565b610a6d565b3480156102ef57600080fd5b506102f8610aea565b604051610238919061186e565b34801561031157600080fd5b5061031a610b04565b6040516102389190611879565b34801561033357600080fd5b50610276610b91565b61020861034a366004611610565b610ba0565b34801561035b57600080fd5b5061020861036a366004611610565b610c64565b34801561037b57600080fd5b50610208610d07565b34801561039057600080fd5b5061020861039f366004611546565b610d95565b3480156103b057600080fd5b506102f8610e70565b3480156103c557600080fd5b50610276610e7a565b3480156103da57600080fd5b50610276610e84565b3480156103ef57600080fd5b50610276610e8e565b610208610406366004611610565b610e98565b610208610419366004611610565b610ee5565b34801561042a57600080fd5b506102086104393660046115f6565b610f32565b34801561044a57600080fd5b506102f8610faf565b34801561045f57600080fd5b50610276610fb9565b34801561047457600080fd5b506102f8610fc3565b34801561048957600080fd5b50610208610498366004611546565b610fcd565b3480156104a957600080fd5b506102086104b8366004611546565b6110a8565b3480156104c957600080fd5b506102086104d8366004611525565b611183565b3480156104e957600080fd5b506102086104f83660046115f6565b611276565b61020861050b366004611610565b6112f3565b34801561051c57600080fd5b5061020861052b3660046115f6565b611321565b34801561053c57600080fd5b506102f861139e565b6000546001600160a01b031633146105785760405162461bcd60e51b815260040161056f90611a59565b60405180910390fd5b816105816113a4565b80546001600160a01b0319166001600160a01b0392909216919091179055806105a86113a4565b8054911515600160a01b0260ff60a01b199092169190911790556040517f28e34087108910d7a3d1de15bdebe33e9b7ce4be78c6987103983875f4fbb903906105f29084906117c3565b60405180910390a17f85600615329dbd38415d95ab88a1870aa23283ed03ea8339bbaf7c53cb6889eb81604051610629919061186e565b60405180910390a15050565b6060808367ffffffffffffffff8111801561064f57600080fd5b50604051908082528060200260200182016040528015610679578160200160208202803683370190505b5091508367ffffffffffffffff8111801561069357600080fd5b506040519080825280602002602001820160405280156106c757816020015b60608152602001906001900390816106b25790505b50905060005b8481101561084e57600080308888858181106106e557fe5b90506020028101906106f79190611b45565b604051610705929190611740565b600060405180830381855af49150503d8060008114610740576040519150601f19603f3d011682016040523d82523d6000602084013e610745565b606091505b50915091508185848151811061075757fe5b6020026020010190151590811515815250508084848151811061077657fe5b6020026020010181905250816108445760606044825110156107cc575060408051808201909152601381527f44656c656761746563616c6c206661696c65640000000000000000000000000060208201526107e9565b600482019150818060200190518101906107e6919061167d565b90505b8615610809578060405162461bcd60e51b815260040161056f9190611879565b7f8227e69dc43e5a3dff3c9e10930295a5383b9e7736b0508e15d46d05efecb4a6848260405161083a929190611b24565b60405180910390a1505b50506001016106cd565b50935093915050565b6000546001600160a01b031633146108815760405162461bcd60e51b815260040161056f90611a59565b6001600160a01b0381166108a75760405162461bcd60e51b815260040161056f9061188c565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f8cc0f93a743dada018f348511be65ee8585206ca96e058f4d70c41f276e57bde90600090a250565b60006108fb6113a4565b546001600160a01b0316905090565b6000546001600160a01b031633146109345760405162461bcd60e51b815260040161056f90611a59565b8061093d6113c8565b8054911515600160a01b0260ff60a01b199092169190911790556040517f69013db8b04c8782a3bfb1988607e4cb48e1476125c4a9f2e08199916281becf9061098790839061186e565b60405180910390a150565b6000546001600160a01b031633146109bc5760405162461bcd60e51b815260040161056f90611a59565b816109c56113ec565b80546001600160a01b0319166001600160a01b0392909216919091179055806109ec6113ec565b8054911515600160a01b0260ff60a01b199092169190911790556040517f474dbe0e44f4b1a24e66b1a543293f696f5f72651de8895adf45233e3c6948bb90610a369084906117c3565b60405180910390a17f75f3afb50142265ab5ffa96a1281463cb3a39821dfcafd44d5bcda0dbf1c482581604051610629919061186e565b6000546001600160a01b03163314610a975760405162461bcd60e51b815260040161056f90611a59565b80610aa06113ec565b8054911515600160a01b0260ff60a01b199092169190911790556040517f75f3afb50142265ab5ffa96a1281463cb3a39821dfcafd44d5bcda0dbf1c48259061098790839061186e565b6000610af4611410565b54600160a01b900460ff16919050565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610b895780601f10610b5e57610100808354040283529160200191610b89565b820191906000526020600020905b815481529060010190602001808311610b6c57829003601f168201915b505050505081565b6000546001600160a01b031681565b610ba8610aea565b610bc45760405162461bcd60e51b815260040161056f9061197d565b333214610be35760405162461bcd60e51b815260040161056f90611946565b6000610bed610e84565b6001600160a01b0316348484604051610c07929190611740565b60006040518083038185875af1925050503d8060008114610c44576040519150601f19603f3d011682016040523d82523d6000602084013e610c49565b606091505b5050905080610c5f576040513d806000833e8082fd5b505050565b610c6c610faf565b610c885760405162461bcd60e51b815260040161056f906118e9565b333214610ca75760405162461bcd60e51b815260040161056f90611946565b6000610cb1610e8e565b6001600160a01b03168383604051610cca929190611740565b6000604051808303816000865af19150503d8060008114610c44576040519150601f19603f3d011682016040523d82523d6000602084013e610c49565b6002546001600160a01b03163314610d315760405162461bcd60e51b815260040161056f906119eb565b600254600080546040516001600160a01b0393841693909116917fd58299b712891143e76310d5e664c4203c940a67db37cf856bdaa3c5c76a802c91a360028054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b03163314610dbf5760405162461bcd60e51b815260040161056f90611a59565b81610dc8611434565b80546001600160a01b0319166001600160a01b039290921691909117905580610def611434565b8054911515600160a01b0260ff60a01b199092169190911790556040517fc4b713388b13f13226268ec85c363aa606bfc124242892bef245909669b35d0c90610e399084906117c3565b60405180910390a17f77a57cd075e1e4d27ea05938d55fc48c8967f71d9edeeb249010daccce25e45b81604051610629919061186e565b6000610af46113ec565b60006108fb6113ec565b60006108fb611410565b60006108fb611434565b610ea061139e565b610ebc5760405162461bcd60e51b815260040161056f90611a22565b333214610edb5760405162461bcd60e51b815260040161056f90611946565b6000610bed6108f1565b610eed610e70565b610f095760405162461bcd60e51b815260040161056f906119b4565b333214610f285760405162461bcd60e51b815260040161056f90611946565b6000610bed610e7a565b6000546001600160a01b03163314610f5c5760405162461bcd60e51b815260040161056f90611a59565b80610f65611434565b8054911515600160a01b0260ff60a01b199092169190911790556040517f77a57cd075e1e4d27ea05938d55fc48c8967f71d9edeeb249010daccce25e45b9061098790839061186e565b6000610af4611434565b60006108fb6113c8565b6000610af46113c8565b6000546001600160a01b03163314610ff75760405162461bcd60e51b815260040161056f90611a59565b81611000611410565b80546001600160a01b0319166001600160a01b039290921691909117905580611027611410565b8054911515600160a01b0260ff60a01b199092169190911790556040517fed44209623383e0a37e30095e7056f3e879411ab3edf075836dd94a2f4973580906110719084906117c3565b60405180910390a17ff39273fb8850aade529594fa8aa09c79be1dd5d16a8cff2c20496e048539e41881604051610629919061186e565b6000546001600160a01b031633146110d25760405162461bcd60e51b815260040161056f90611a59565b816110db6113c8565b80546001600160a01b0319166001600160a01b0392909216919091179055806111026113c8565b8054911515600160a01b0260ff60a01b199092169190911790556040517fe3f9ba76e59e03b4e1255783bc2d5340338b8bc071086d3e32e5ddff4fc855539061114c9084906117c3565b60405180910390a17f69013db8b04c8782a3bfb1988607e4cb48e1476125c4a9f2e08199916281becf81604051610629919061186e565b604051602001611192906117c0565b6040516020818303038152906040528051906020012060016040516020016111ba9190611750565b60405160208183030381529060405280519060200120146111ed5760405162461bcd60e51b815260040161056f90611ac7565b6001600160a01b0381166112135760405162461bcd60e51b815260040161056f9061188c565b600080546001600160a01b0319166001600160a01b0383161790556040805180820190915260058082527f352e332e30000000000000000000000000000000000000000000000000000000602090920191825261127291600191611458565b5050565b6000546001600160a01b031633146112a05760405162461bcd60e51b815260040161056f90611a59565b806112a96113a4565b8054911515600160a01b0260ff60a01b199092169190911790556040517f85600615329dbd38415d95ab88a1870aa23283ed03ea8339bbaf7c53cb6889eb9061098790839061186e565b6112fb610fc3565b6113175760405162461bcd60e51b815260040161056f90611a90565b6000610bed610fb9565b6000546001600160a01b0316331461134b5760405162461bcd60e51b815260040161056f90611a59565b80611354611410565b8054911515600160a01b0260ff60a01b199092169190911790556040517ff39273fb8850aade529594fa8aa09c79be1dd5d16a8cff2c20496e048539e4189061098790839061186e565b6000610af45b7f857df08bd185dc66e3cc5e11acb4e1dd65290f3fee6426f52f84e8faccf229cf90565b7fbf49677e3150252dfa801a673d2d5ec21eaa360a4674864e55e79041e3f65a6b90565b7f8f135983375ba6442123d61647e7325c1753eabc2e038e44d3b888a970def89a90565b7fd5f1768ede616e352f32123fd6fe01064898ae4e55a2678c79b8ad79680ff74490565b7ff1a59a985b4002cdf0db464f05bed7182ee06372a999d820ea1883b8bf067ce590565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261148e57600085556114d4565b82601f106114a757805160ff19168380011785556114d4565b828001600101855582156114d4579182015b828111156114d45782518255916020019190600101906114b9565b506114e09291506114e4565b5090565b5b808211156114e057600081556001016114e5565b80356001600160a01b038116811461151057600080fd5b919050565b8035801515811461151057600080fd5b600060208284031215611536578081fd5b61153f826114f9565b9392505050565b60008060408385031215611558578081fd5b611561836114f9565b915061156f60208401611515565b90509250929050565b60008060006040848603121561158c578081fd5b833567ffffffffffffffff808211156115a3578283fd5b818601915086601f8301126115b6578283fd5b8135818111156115c4578384fd5b87602080830285010111156115d7578384fd5b6020928301955093506115ed9186019050611515565b90509250925092565b600060208284031215611607578081fd5b61153f82611515565b60008060208385031215611622578182fd5b823567ffffffffffffffff80821115611639578384fd5b818501915085601f83011261164c578384fd5b81358181111561165a578485fd5b86602082850101111561166b578485fd5b60209290920196919550909350505050565b60006020828403121561168e578081fd5b815167ffffffffffffffff808211156116a5578283fd5b818401915084601f8301126116b8578283fd5b8151818111156116c457fe5b604051601f8201601f1916810160200183811182821017156116e257fe5b6040528181528382016020018710156116f9578485fd5b61170a826020830160208701611b91565b9695505050505050565b6000815180845261172c816020860160208601611b91565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b600080835460018082166000811461176f5760018114611786576117b5565b60ff198316865260028304607f16860193506117b5565b600283048786526020808720875b838110156117ad5781548a820152908501908201611794565b505050860193505b509195945050505050565b90565b6001600160a01b0391909116815260200190565b604080825283519082018190526000906020906060840190828701845b828110156118125781511515845292840192908401906001016117f4565b5050508381038285015284518082528282019080840283018401878501865b8381101561185f57601f1986840301855261184d838351611714565b94870194925090860190600101611831565b50909998505050505050505050565b901515815260200190565b60006020825261153f6020830184611714565b6020808252602b908201527f5573657250726f78793a206f70657261746f722063616e206e6f74206265207a60408201527f65726f2061646472657373000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f5573657250726f78793a204c696d6974204f726465722069732064697361626c60408201527f6564000000000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526013908201527f5573657250726f78793a206f6e6c7920454f4100000000000000000000000000604082015260600190565b6020808252601c908201527f5573657250726f78793a2052465176322069732064697361626c656400000000604082015260600190565b6020808252601a908201527f5573657250726f78793a20504d4d2069732064697361626c6564000000000000604082015260600190565b60208082526018908201527f5573657250726f78793a206e6f74206e6f6d696e617465640000000000000000604082015260600190565b6020808252601a908201527f5573657250726f78793a205246512069732064697361626c6564000000000000604082015260600190565b6020808252601b908201527f5573657250726f78793a206e6f7420746865206f70657261746f720000000000604082015260600190565b6020808252601a908201527f5573657250726f78793a20414d4d2069732064697361626c6564000000000000604082015260600190565b60208082526023908201527f5573657250726f78793a206e6f7420757067726164696e672066726f6d20656d60408201527f7074790000000000000000000000000000000000000000000000000000000000606082015260800190565b600083825260406020830152611b3d6040830184611714565b949350505050565b6000808335601e19843603018112611b5b578283fd5b83018035915067ffffffffffffffff821115611b75578283fd5b602001915036819003821315611b8a57600080fd5b9250929050565b60005b83811015611bac578181015183820152602001611b94565b83811115611bbb576000848401525b5050505056fea264697066735822122073472f6f5e79471eeaf04b2ff08bab94017e08b9a37a071d37ba11168188a20664736f6c63430007060033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.