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
|
|||||
---|---|---|---|---|---|---|---|---|---|
Init | 11481421 | 1492 days ago | IN | 0 ETH | 0.00423632 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
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:
WalletImpl
Compiler Version
v0.7.0+commit.9e61f92b
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-08 */ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.7.0; // File: contracts/lib/Ownable.sol // Copyright 2017 Loopring Technology Limited. /// @title Ownable /// @author Brecht Devos - <[email protected]> /// @dev The Ownable contract has an owner address, and provides basic /// authorization control functions, this simplifies the implementation of /// "user permissions". contract Ownable { address public owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /// @dev The Ownable constructor sets the original `owner` of the contract /// to the sender. constructor() { owner = msg.sender; } /// @dev Throws if called by any account other than the owner. modifier onlyOwner() { require(msg.sender == owner, "UNAUTHORIZED"); _; } /// @dev Allows the current owner to transfer control of the contract to a /// new owner. /// @param newOwner The address to transfer ownership to. function transferOwnership( address newOwner ) public virtual onlyOwner { require(newOwner != address(0), "ZERO_ADDRESS"); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(owner, address(0)); owner = address(0); } } // File: contracts/iface/Wallet.sol // Copyright 2017 Loopring Technology Limited. /// @title Wallet /// @dev Base contract for smart wallets. /// Sub-contracts must NOT use non-default constructor to initialize /// wallet states, instead, `init` shall be used. This is to enable /// proxies to be deployed in front of the real wallet contract for /// saving gas. /// /// @author Daniel Wang - <[email protected]> interface Wallet { function version() external pure returns (string memory); function owner() external view returns (address); /// @dev Set a new owner. function setOwner(address newOwner) external; /// @dev Adds a new module. The `init` method of the module /// will be called with `address(this)` as the parameter. /// This method must throw if the module has already been added. /// @param _module The module's address. function addModule(address _module) external; /// @dev Removes an existing module. This method must throw if the module /// has NOT been added or the module is the wallet's only module. /// @param _module The module's address. function removeModule(address _module) external; /// @dev Checks if a module has been added to this wallet. /// @param _module The module to check. /// @return True if the module exists; False otherwise. function hasModule(address _module) external view returns (bool); /// @dev Binds a method from the given module to this /// wallet so the method can be invoked using this wallet's default /// function. /// Note that this method must throw when the given module has /// not been added to this wallet. /// @param _method The method's 4-byte selector. /// @param _module The module's address. Use address(0) to unbind the method. function bindMethod(bytes4 _method, address _module) external; /// @dev Returns the module the given method has been bound to. /// @param _method The method's 4-byte selector. /// @return _module The address of the bound module. If no binding exists, /// returns address(0) instead. function boundMethodModule(bytes4 _method) external view returns (address _module); /// @dev Performs generic transactions. Any module that has been added to this /// wallet can use this method to transact on any third-party contract with /// msg.sender as this wallet itself. /// /// Note: 1) this method must ONLY allow invocations from a module that has /// been added to this wallet. The wallet owner shall NOT be permitted /// to call this method directly. 2) Reentrancy inside this function should /// NOT cause any problems. /// /// @param mode The transaction mode, 1 for CALL, 2 for DELEGATECALL. /// @param to The desitination address. /// @param value The amount of Ether to transfer. /// @param data The data to send over using `to.call{value: value}(data)` /// @return returnData The transaction's return value. function transact( uint8 mode, address to, uint value, bytes calldata data ) external returns (bytes memory returnData); } // File: contracts/iface/Module.sol // Copyright 2017 Loopring Technology Limited. /// @title Module /// @dev Base contract for all smart wallet modules. /// /// @author Daniel Wang - <[email protected]> interface Module { /// @dev Activates the module for the given wallet (msg.sender) after the module is added. /// Warning: this method shall ONLY be callable by a wallet. function activate() external; /// @dev Deactivates the module for the given wallet (msg.sender) before the module is removed. /// Warning: this method shall ONLY be callable by a wallet. function deactivate() external; } // File: contracts/lib/ERC20.sol // Copyright 2017 Loopring Technology Limited. /// @title ERC20 Token Interface /// @dev see https://github.com/ethereum/EIPs/issues/20 /// @author Daniel Wang - <[email protected]> abstract contract ERC20 { function totalSupply() public view virtual returns (uint); function balanceOf( address who ) public view virtual returns (uint); function allowance( address owner, address spender ) public view virtual returns (uint); function transfer( address to, uint value ) public virtual returns (bool); function transferFrom( address from, address to, uint value ) public virtual returns (bool); function approve( address spender, uint value ) public virtual returns (bool); } // File: contracts/lib/ReentrancyGuard.sol // Copyright 2017 Loopring Technology Limited. /// @title ReentrancyGuard /// @author Brecht Devos - <[email protected]> /// @dev Exposes a modifier that guards a function against reentrancy /// Changing the value of the same storage value multiple times in a transaction /// is cheap (starting from Istanbul) so there is no need to minimize /// the number of times the value is changed contract ReentrancyGuard { //The default value must be 0 in order to work behind a proxy. uint private _guardValue; modifier nonReentrant() { require(_guardValue == 0, "REENTRANCY"); _guardValue = 1; _; _guardValue = 0; } } // File: contracts/iface/ModuleRegistry.sol // Copyright 2017 Loopring Technology Limited. /// @title ModuleRegistry /// @dev A registry for modules. /// /// @author Daniel Wang - <[email protected]> interface ModuleRegistry { /// @dev Registers and enables a new module. function registerModule(address module) external; /// @dev Disables a module function disableModule(address module) external; /// @dev Returns true if the module is registered and enabled. function isModuleEnabled(address module) external view returns (bool); /// @dev Returns the list of enabled modules. function enabledModules() external view returns (address[] memory _modules); /// @dev Returns the number of enbaled modules. function numOfEnabledModules() external view returns (uint); /// @dev Returns true if the module is ever registered. function isModuleRegistered(address module) external view returns (bool); } // File: contracts/base/Controller.sol // Copyright 2017 Loopring Technology Limited. /// @title Controller /// /// @author Daniel Wang - <[email protected]> abstract contract Controller { function moduleRegistry() external view virtual returns (ModuleRegistry); function walletFactory() external view virtual returns (address); } // File: contracts/base/BaseWallet.sol // Copyright 2017 Loopring Technology Limited. /// @title BaseWallet /// @dev This contract provides basic implementation for a Wallet. /// /// @author Daniel Wang - <[email protected]> abstract contract BaseWallet is ReentrancyGuard, Wallet { // WARNING: do not delete wallet state data to make this implementation // compatible with early versions. // // ----- DATA LAYOUT BEGINS ----- address internal _owner; mapping (address => bool) private modules; Controller public controller; mapping (bytes4 => address) internal methodToModule; // ----- DATA LAYOUT ENDS ----- event OwnerChanged (address newOwner); event ControllerChanged (address newController); event ModuleAdded (address module); event ModuleRemoved (address module); event MethodBound (bytes4 method, address module); event WalletSetup (address owner); modifier onlyFromModule { require(modules[msg.sender], "MODULE_UNAUTHORIZED"); _; } modifier onlyFromFactory { require( msg.sender == controller.walletFactory(), "UNAUTHORIZED" ); _; } /// @dev We need to make sure the Factory address cannot be changed without wallet owner's /// explicit authorization. modifier onlyFromFactoryOrModule { require( modules[msg.sender] || msg.sender == controller.walletFactory(), "UNAUTHORIZED" ); _; } /// @dev Set up this wallet by assigning an original owner /// /// Note that calling this method more than once will throw. /// /// @param _initialOwner The owner of this wallet, must not be address(0). function initOwner( address _initialOwner ) external onlyFromFactory { require(controller != Controller(0), "NO_CONTROLLER"); require(_owner == address(0), "INITIALIZED_ALREADY"); require(_initialOwner != address(0), "ZERO_ADDRESS"); _owner = _initialOwner; emit WalletSetup(_initialOwner); } /// @dev Set up this wallet by assigning a controller and initial modules. /// /// Note that calling this method more than once will throw. /// And this method must be invoked before owner is initialized /// /// @param _controller The Controller instance. /// @param _modules The initial modules. function init( Controller _controller, address[] calldata _modules ) external { require( _owner == address(0) && controller == Controller(0) && _controller != Controller(0), "CONTROLLER_INIT_FAILED" ); controller = _controller; ModuleRegistry moduleRegistry = controller.moduleRegistry(); for (uint i = 0; i < _modules.length; i++) { _addModule(_modules[i], moduleRegistry); } } function owner() override public view returns (address) { return _owner; } function setOwner(address newOwner) external override onlyFromModule { require(newOwner != address(0), "ZERO_ADDRESS"); require(newOwner != address(this), "PROHIBITED"); require(newOwner != _owner, "SAME_ADDRESS"); _owner = newOwner; emit OwnerChanged(newOwner); } function setController(Controller newController) external onlyFromModule { require(newController != controller, "SAME_CONTROLLER"); require(newController != Controller(0), "INVALID_CONTROLLER"); controller = newController; emit ControllerChanged(address(newController)); } function addModule(address _module) external override onlyFromFactoryOrModule { _addModule(_module, controller.moduleRegistry()); } function removeModule(address _module) external override onlyFromModule { // Allow deactivate to fail to make sure the module can be removed require(modules[_module], "MODULE_NOT_EXISTS"); try Module(_module).deactivate() {} catch {} delete modules[_module]; emit ModuleRemoved(_module); } function hasModule(address _module) public view override returns (bool) { return modules[_module]; } function bindMethod(bytes4 _method, address _module) external override onlyFromModule { require(_method != bytes4(0), "BAD_METHOD"); if (_module != address(0)) { require(modules[_module], "MODULE_UNAUTHORIZED"); } methodToModule[_method] = _module; emit MethodBound(_method, _module); } function boundMethodModule(bytes4 _method) public view override returns (address) { return methodToModule[_method]; } function transact( uint8 mode, address to, uint value, bytes calldata data ) external override onlyFromFactoryOrModule returns (bytes memory returnData) { bool success; (success, returnData) = _call(mode, to, value, data); if (!success) { assembly { returndatacopy(0, 0, returndatasize()) revert(0, returndatasize()) } } } receive() external payable { } /// @dev This default function can receive Ether or perform queries to modules /// using bound methods. fallback() external payable { address module = methodToModule[msg.sig]; require(modules[module], "MODULE_UNAUTHORIZED"); (bool success, bytes memory returnData) = module.call{value: msg.value}(msg.data); assembly { switch success case 0 { revert(add(returnData, 32), mload(returnData)) } default { return(add(returnData, 32), mload(returnData)) } } } function _addModule(address _module, ModuleRegistry moduleRegistry) internal { require(_module != address(0), "NULL_MODULE"); require(modules[_module] == false, "MODULE_EXISTS"); require( moduleRegistry.isModuleEnabled(_module), "INVALID_MODULE" ); modules[_module] = true; emit ModuleAdded(_module); Module(_module).activate(); } function _call( uint8 mode, address target, uint value, bytes calldata data ) private returns ( bool success, bytes memory returnData ) { if (mode == 1) { // solium-disable-next-line security/no-call-value (success, returnData) = target.call{value: value}(data); } else if (mode == 2) { // solium-disable-next-line security/no-call-value (success, returnData) = target.delegatecall(data); } else if (mode == 3) { require(value == 0, "INVALID_VALUE"); // solium-disable-next-line security/no-call-value (success, returnData) = target.staticcall(data); } else { revert("UNSUPPORTED_MODE"); } } } // File: contracts/modules/WalletImpl.sol // Copyright 2017 Loopring Technology Limited. /// @title WalletImpl contract WalletImpl is BaseWallet { function version() public override pure returns (string memory) { // 使用中国省会作为别名 return "1.2.0 (daqing)"; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newController","type":"address"}],"name":"ControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes4","name":"method","type":"bytes4"},{"indexed":false,"internalType":"address","name":"module","type":"address"}],"name":"MethodBound","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"module","type":"address"}],"name":"ModuleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"module","type":"address"}],"name":"ModuleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"WalletSetup","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_module","type":"address"}],"name":"addModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_method","type":"bytes4"},{"internalType":"address","name":"_module","type":"address"}],"name":"bindMethod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_method","type":"bytes4"}],"name":"boundMethodModule","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"contract Controller","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_module","type":"address"}],"name":"hasModule","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Controller","name":"_controller","type":"address"},{"internalType":"address[]","name":"_modules","type":"address[]"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"}],"name":"initOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_module","type":"address"}],"name":"removeModule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract Controller","name":"newController","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"mode","type":"uint8"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transact","outputs":[{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50611e15806100206000396000f3fe6080604052600436106100d65760003560e01c80638da5cb5b1161007f578063b149206e11610059578063b149206e14610582578063c7b2e596146105ea578063cf38db691461063e578063f77c47911461068a576100dd565b80638da5cb5b146104c457806392eefe9b14610502578063a063246114610542576100dd565b80633c5a3cea116100b05780633c5a3cea146102f757806354fd4d50146103915780637122b74c1461041b576100dd565b80630d0092971461023557806313af4035146102775780631ed86f19146102b7576100dd565b366100dd57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681526004602090815260408083205473ffffffffffffffffffffffffffffffffffffffff1680845260029092529091205460ff166101a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d4f44554c455f554e415554484f52495a454400000000000000000000000000604482015290519081900360640190fd5b600060608273ffffffffffffffffffffffffffffffffffffffff1634600036604051808383808284376040519201945060009350909150508083038185875af1925050503d8060008114610212576040519150601f19603f3d011682016040523d82523d6000602084013e610217565b606091505b5091509150816000811461022d57815160208301f35b815160208301fd5b34801561024157600080fd5b506102756004803603602081101561025857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661069f565b005b34801561028357600080fd5b506102756004803603602081101561029a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109ba565b3480156102c357600080fd5b50610275600480360360208110156102da57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c42565b34801561030357600080fd5b506102756004803603604081101561031a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561035257600080fd5b82018360208201111561036457600080fd5b8035906020019184602083028401116401000000008311171561038657600080fd5b509092509050610e13565b34801561039d57600080fd5b506103a6610ff1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e05781810151838201526020016103c8565b50505050905090810190601f16801561040d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042757600080fd5b506103a66004803603608081101561043e57600080fd5b60ff8235169173ffffffffffffffffffffffffffffffffffffffff602082013516916040820135919081019060808101606082013564010000000081111561048557600080fd5b82018360208201111561049757600080fd5b803590602001918460018302840111640100000000831117156104b957600080fd5b509092509050611028565b3480156104d057600080fd5b506104d9611188565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561050e57600080fd5b506102756004803603602081101561052557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111a4565b34801561054e57600080fd5b506102756004803603602081101561056557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113a7565b34801561058e57600080fd5b50610275600480360360408110156105a557600080fd5b5080357fffffffff0000000000000000000000000000000000000000000000000000000016906020013573ffffffffffffffffffffffffffffffffffffffff16611596565b3480156105f657600080fd5b5061062a6004803603602081101561060d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611801565b604080519115158252519081900360200190f35b34801561064a57600080fd5b506104d96004803603602081101561066157600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661182c565b34801561069657600080fd5b506104d9611876565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5c036996040518163ffffffff1660e01b815260040160206040518083038186803b15801561070757600080fd5b505afa15801561071b573d6000803e3d6000fd5b505050506040513d602081101561073157600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1633146107b657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff1661083a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e4f5f434f4e54524f4c4c455200000000000000000000000000000000000000604482015290519081900360640190fd5b60015473ffffffffffffffffffffffffffffffffffffffff16156108bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e495449414c495a45445f414c524541445900000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661094157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f414444524553530000000000000000000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517f2d09b2e98dd73e6a5c2de8f80056fba918b4d574202a95c8e11eab46f89a21b69181900360200190a150565b3360009081526002602052604090205460ff16610a3857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d4f44554c455f554e415554484f52495a454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610aba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f414444524553530000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116301415610b3f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f50524f4849424954454400000000000000000000000000000000000000000000604482015290519081900360640190fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161415610bc957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f53414d455f414444524553530000000000000000000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf369181900360200190a150565b3360009081526002602052604090205460ff1680610d085750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5c036996040518163ffffffff1660e01b815260040160206040518083038186803b158015610cc357600080fd5b505afa158015610cd7573d6000803e3d6000fd5b505050506040513d6020811015610ced57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1633145b610d7357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b610e1081600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b95459e46040518163ffffffff1660e01b815260040160206040518083038186803b158015610ddf57600080fd5b505afa158015610df3573d6000803e3d6000fd5b505050506040513d6020811015610e0957600080fd5b5051611892565b50565b60015473ffffffffffffffffffffffffffffffffffffffff16158015610e4f575060035473ffffffffffffffffffffffffffffffffffffffff16155b8015610e70575073ffffffffffffffffffffffffffffffffffffffff831615155b610edb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f434f4e54524f4c4c45525f494e49545f4641494c454400000000000000000000604482015290519081900360640190fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8581169190911791829055604080517fb95459e400000000000000000000000000000000000000000000000000000000815290516000939092169163b95459e491600480820192602092909190829003018186803b158015610f7757600080fd5b505afa158015610f8b573d6000803e3d6000fd5b505050506040513d6020811015610fa157600080fd5b5051905060005b82811015610fea57610fe2848483818110610fbf57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1683611892565b600101610fa8565b5050505050565b60408051808201909152600e81527f312e322e302028646171696e6729000000000000000000000000000000000000602082015290565b3360009081526002602052604090205460609060ff16806110f15750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5c036996040518163ffffffff1660e01b815260040160206040518083038186803b1580156110ac57600080fd5b505afa1580156110c0573d6000803e3d6000fd5b505050506040513d60208110156110d657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1633145b61115c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b600061116b8787878787611b8e565b925090508061117e573d6000803e3d6000fd5b5095945050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b3360009081526002602052604090205460ff1661122257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d4f44554c455f554e415554484f52495a454400000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff828116911614156112ac57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f53414d455f434f4e54524f4c4c45520000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661132e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f434f4e54524f4c4c45520000000000000000000000000000604482015290519081900360640190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517f027c3e080ed9215f564a9455a666f7e459b3edc0bb6e02a1bf842fde4d0ccfc19181900360200190a150565b3360009081526002602052604090205460ff1661142557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d4f44554c455f554e415554484f52495a454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff166114b957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d4f44554c455f4e4f545f455849535453000000000000000000000000000000604482015290519081900360640190fd5b8073ffffffffffffffffffffffffffffffffffffffff166351b42b006040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561150157600080fd5b505af1925050508015611512575060015b5073ffffffffffffffffffffffffffffffffffffffff811660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055815192835290517f0a1ee69f55c33d8467c69ca59ce2007a737a88603d75392972520bf67cb513b89281900390910190a150565b3360009081526002602052604090205460ff1661161457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d4f44554c455f554e415554484f52495a454400000000000000000000000000604482015290519081900360640190fd5b7fffffffff0000000000000000000000000000000000000000000000000000000082166116a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4241445f4d4554484f4400000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116156117525773ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff1661175257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d4f44554c455f554e415554484f52495a454400000000000000000000000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000821660008181526004602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915582519384529083015280517fe38e0cbd107669b7b8120e2f6edde6ac4731cb8b123c1ab8b6db9b6bf0536fb29281900390910190a15050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff821661191457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e554c4c5f4d4f44554c45000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090205460ff16156119a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d4f44554c455f45584953545300000000000000000000000000000000000000604482015290519081900360640190fd5b8073ffffffffffffffffffffffffffffffffffffffff16632d9ad53d836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a1057600080fd5b505afa158015611a24573d6000803e3d6000fd5b505050506040513d6020811015611a3a57600080fd5b5051611aa757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f4d4f44554c45000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835290517fead6a006345da1073a106d5f32372d2d2204f46cb0b4bca8f5ebafcbbed12b8a9281900390910190a18173ffffffffffffffffffffffffffffffffffffffff16630f15f4c06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b7257600080fd5b505af1158015611b86573d6000803e3d6000fd5b505050505050565b600060608660ff1660011415611c19578573ffffffffffffffffffffffffffffffffffffffff16858585604051808383808284376040519201945060009350909150508083038185875af1925050503d8060008114611c09576040519150601f19603f3d011682016040523d82523d6000602084013e611c0e565b606091505b509092509050611dd5565b8660ff1660021415611c8d578573ffffffffffffffffffffffffffffffffffffffff1684846040518083838082843760405192019450600093509091505080830381855af49150503d8060008114611c09576040519150601f19603f3d011682016040523d82523d6000602084013e611c0e565b8660ff1660031415611d6e578415611d0657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f56414c554500000000000000000000000000000000000000604482015290519081900360640190fd5b8573ffffffffffffffffffffffffffffffffffffffff1684846040518083838082843760405192019450600093509091505080830381855afa9150503d8060008114611c09576040519150601f19603f3d011682016040523d82523d6000602084013e611c0e565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e535550504f525445445f4d4f444500000000000000000000000000000000604482015290519081900360640190fd5b955095935050505056fea264697066735822122014c6d2b1be13a9f3aa4e61bf3379aafb2222afe1e4b02416a906b522d658387764736f6c63430007000033
Deployed Bytecode
0x6080604052600436106100d65760003560e01c80638da5cb5b1161007f578063b149206e11610059578063b149206e14610582578063c7b2e596146105ea578063cf38db691461063e578063f77c47911461068a576100dd565b80638da5cb5b146104c457806392eefe9b14610502578063a063246114610542576100dd565b80633c5a3cea116100b05780633c5a3cea146102f757806354fd4d50146103915780637122b74c1461041b576100dd565b80630d0092971461023557806313af4035146102775780631ed86f19146102b7576100dd565b366100dd57005b600080357fffffffff000000000000000000000000000000000000000000000000000000001681526004602090815260408083205473ffffffffffffffffffffffffffffffffffffffff1680845260029092529091205460ff166101a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d4f44554c455f554e415554484f52495a454400000000000000000000000000604482015290519081900360640190fd5b600060608273ffffffffffffffffffffffffffffffffffffffff1634600036604051808383808284376040519201945060009350909150508083038185875af1925050503d8060008114610212576040519150601f19603f3d011682016040523d82523d6000602084013e610217565b606091505b5091509150816000811461022d57815160208301f35b815160208301fd5b34801561024157600080fd5b506102756004803603602081101561025857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661069f565b005b34801561028357600080fd5b506102756004803603602081101561029a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109ba565b3480156102c357600080fd5b50610275600480360360208110156102da57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c42565b34801561030357600080fd5b506102756004803603604081101561031a57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516919081019060408101602082013564010000000081111561035257600080fd5b82018360208201111561036457600080fd5b8035906020019184602083028401116401000000008311171561038657600080fd5b509092509050610e13565b34801561039d57600080fd5b506103a6610ff1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e05781810151838201526020016103c8565b50505050905090810190601f16801561040d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042757600080fd5b506103a66004803603608081101561043e57600080fd5b60ff8235169173ffffffffffffffffffffffffffffffffffffffff602082013516916040820135919081019060808101606082013564010000000081111561048557600080fd5b82018360208201111561049757600080fd5b803590602001918460018302840111640100000000831117156104b957600080fd5b509092509050611028565b3480156104d057600080fd5b506104d9611188565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561050e57600080fd5b506102756004803603602081101561052557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111a4565b34801561054e57600080fd5b506102756004803603602081101561056557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113a7565b34801561058e57600080fd5b50610275600480360360408110156105a557600080fd5b5080357fffffffff0000000000000000000000000000000000000000000000000000000016906020013573ffffffffffffffffffffffffffffffffffffffff16611596565b3480156105f657600080fd5b5061062a6004803603602081101561060d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611801565b604080519115158252519081900360200190f35b34801561064a57600080fd5b506104d96004803603602081101561066157600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661182c565b34801561069657600080fd5b506104d9611876565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5c036996040518163ffffffff1660e01b815260040160206040518083038186803b15801561070757600080fd5b505afa15801561071b573d6000803e3d6000fd5b505050506040513d602081101561073157600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1633146107b657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff1661083a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4e4f5f434f4e54524f4c4c455200000000000000000000000000000000000000604482015290519081900360640190fd5b60015473ffffffffffffffffffffffffffffffffffffffff16156108bf57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f494e495449414c495a45445f414c524541445900000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661094157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f414444524553530000000000000000000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517f2d09b2e98dd73e6a5c2de8f80056fba918b4d574202a95c8e11eab46f89a21b69181900360200190a150565b3360009081526002602052604090205460ff16610a3857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d4f44554c455f554e415554484f52495a454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610aba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5a45524f5f414444524553530000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116301415610b3f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f50524f4849424954454400000000000000000000000000000000000000000000604482015290519081900360640190fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161415610bc957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f53414d455f414444524553530000000000000000000000000000000000000000604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fa2ea9883a321a3e97b8266c2b078bfeec6d50c711ed71f874a90d500ae2eaf369181900360200190a150565b3360009081526002602052604090205460ff1680610d085750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5c036996040518163ffffffff1660e01b815260040160206040518083038186803b158015610cc357600080fd5b505afa158015610cd7573d6000803e3d6000fd5b505050506040513d6020811015610ced57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1633145b610d7357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b610e1081600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b95459e46040518163ffffffff1660e01b815260040160206040518083038186803b158015610ddf57600080fd5b505afa158015610df3573d6000803e3d6000fd5b505050506040513d6020811015610e0957600080fd5b5051611892565b50565b60015473ffffffffffffffffffffffffffffffffffffffff16158015610e4f575060035473ffffffffffffffffffffffffffffffffffffffff16155b8015610e70575073ffffffffffffffffffffffffffffffffffffffff831615155b610edb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f434f4e54524f4c4c45525f494e49545f4641494c454400000000000000000000604482015290519081900360640190fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8581169190911791829055604080517fb95459e400000000000000000000000000000000000000000000000000000000815290516000939092169163b95459e491600480820192602092909190829003018186803b158015610f7757600080fd5b505afa158015610f8b573d6000803e3d6000fd5b505050506040513d6020811015610fa157600080fd5b5051905060005b82811015610fea57610fe2848483818110610fbf57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1683611892565b600101610fa8565b5050505050565b60408051808201909152600e81527f312e322e302028646171696e6729000000000000000000000000000000000000602082015290565b3360009081526002602052604090205460609060ff16806110f15750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5c036996040518163ffffffff1660e01b815260040160206040518083038186803b1580156110ac57600080fd5b505afa1580156110c0573d6000803e3d6000fd5b505050506040513d60208110156110d657600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1633145b61115c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a45440000000000000000000000000000000000000000604482015290519081900360640190fd5b600061116b8787878787611b8e565b925090508061117e573d6000803e3d6000fd5b5095945050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b3360009081526002602052604090205460ff1661122257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d4f44554c455f554e415554484f52495a454400000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff828116911614156112ac57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f53414d455f434f4e54524f4c4c45520000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661132e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f494e56414c49445f434f4e54524f4c4c45520000000000000000000000000000604482015290519081900360640190fd5b6003805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517f027c3e080ed9215f564a9455a666f7e459b3edc0bb6e02a1bf842fde4d0ccfc19181900360200190a150565b3360009081526002602052604090205460ff1661142557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d4f44554c455f554e415554484f52495a454400000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff166114b957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4d4f44554c455f4e4f545f455849535453000000000000000000000000000000604482015290519081900360640190fd5b8073ffffffffffffffffffffffffffffffffffffffff166351b42b006040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561150157600080fd5b505af1925050508015611512575060015b5073ffffffffffffffffffffffffffffffffffffffff811660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055815192835290517f0a1ee69f55c33d8467c69ca59ce2007a737a88603d75392972520bf67cb513b89281900390910190a150565b3360009081526002602052604090205460ff1661161457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d4f44554c455f554e415554484f52495a454400000000000000000000000000604482015290519081900360640190fd5b7fffffffff0000000000000000000000000000000000000000000000000000000082166116a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4241445f4d4554484f4400000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116156117525773ffffffffffffffffffffffffffffffffffffffff811660009081526002602052604090205460ff1661175257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d4f44554c455f554e415554484f52495a454400000000000000000000000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000821660008181526004602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915582519384529083015280517fe38e0cbd107669b7b8120e2f6edde6ac4731cb8b123c1ab8b6db9b6bf0536fb29281900390910190a15050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526002602052604090205460ff1690565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff821661191457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f4e554c4c5f4d4f44554c45000000000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602052604090205460ff16156119a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4d4f44554c455f45584953545300000000000000000000000000000000000000604482015290519081900360640190fd5b8073ffffffffffffffffffffffffffffffffffffffff16632d9ad53d836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a1057600080fd5b505afa158015611a24573d6000803e3d6000fd5b505050506040513d6020811015611a3a57600080fd5b5051611aa757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f4d4f44554c45000000000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821660008181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835290517fead6a006345da1073a106d5f32372d2d2204f46cb0b4bca8f5ebafcbbed12b8a9281900390910190a18173ffffffffffffffffffffffffffffffffffffffff16630f15f4c06040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b7257600080fd5b505af1158015611b86573d6000803e3d6000fd5b505050505050565b600060608660ff1660011415611c19578573ffffffffffffffffffffffffffffffffffffffff16858585604051808383808284376040519201945060009350909150508083038185875af1925050503d8060008114611c09576040519150601f19603f3d011682016040523d82523d6000602084013e611c0e565b606091505b509092509050611dd5565b8660ff1660021415611c8d578573ffffffffffffffffffffffffffffffffffffffff1684846040518083838082843760405192019450600093509091505080830381855af49150503d8060008114611c09576040519150601f19603f3d011682016040523d82523d6000602084013e611c0e565b8660ff1660031415611d6e578415611d0657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f494e56414c49445f56414c554500000000000000000000000000000000000000604482015290519081900360640190fd5b8573ffffffffffffffffffffffffffffffffffffffff1684846040518083838082843760405192019450600093509091505080830381855afa9150503d8060008114611c09576040519150601f19603f3d011682016040523d82523d6000602084013e611c0e565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f554e535550504f525445445f4d4f444500000000000000000000000000000000604482015290519081900360640190fd5b955095935050505056fea264697066735822122014c6d2b1be13a9f3aa4e61bf3379aafb2222afe1e4b02416a906b522d658387764736f6c63430007000033
Deployed Bytecode Sourcemap
16780:234:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14921:14;14953:7;;;;14938:23;;:14;:23;;;;;;;;;;;14980:15;;;:7;:15;;;;;;;;;14972:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15033:12;15047:23;15074:6;:11;;15093:9;15104:8;;15074:39;;;;;;;;;;;;;;-1:-1:-1;15074:39:0;;-1:-1:-1;15074:39:0;;-1:-1:-1;;15074:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15032:81;;;;15155:7;15181:1;15176:57;;;;15291:10;15285:17;15280:2;15268:10;15264:19;15257:46;15176:57;15219:10;15213:17;15208:2;15196:10;15192:19;15185:46;10720:385;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10720:385:0;;;;:::i;:::-;;12148:346;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12148:346:0;;;;:::i;12846:177::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12846:177:0;;;;:::i;11455:548::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11455:548:0;;-1:-1:-1;11455:548:0;-1:-1:-1;11455:548:0;:::i;16821:190::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14144:522;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14144:522:0;;-1:-1:-1;14144:522:0;-1:-1:-1;14144:522:0;:::i;12011:129::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12502:336;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12502:336:0;;;;:::i;13031:371::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13031:371:0;;;;:::i;13573:383::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13573:383:0;;;;;;;;;;;:::i;13410:155::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13410:155:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;13964:172;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13964:172:0;;;;:::i;9393:28::-;;;;;;;;;;;;;:::i;10720:385::-;10057:10;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10057:26:0;10043:40;;:10;:40;10021:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10849:10:::1;::::0;:27:::1;:10;10841:53;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10913:6;::::0;:20:::1;:6;:20:::0;10905:52:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10976:27;::::0;::::1;10968:52;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;11033:6;:22:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;11071:26:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;10720:385:::0;:::o;12148:346::-;9917:10;9909:19;;;;:7;:19;;;;;;;;9901:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12268:22:::1;::::0;::::1;12260:47;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12326:25;::::0;::::1;12346:4;12326:25;;12318:48;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12397:6;::::0;::::1;12385:18:::0;;::::1;12397:6:::0;::::1;12385:18;;12377:43;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12431:6;:17:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;12464:22:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;12148:346:::0;:::o;12846:177::-;10364:10;10356:19;;;;:7;:19;;;;;;;;;:63;;;10393:10;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10393:26:0;10379:40;;:10;:40;10356:63;10334:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12967:48:::1;12978:7;12987:10;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12987:27:0;12967:10:::1;:48::i;:::-;12846:177:::0;:::o;11455:548::-;11608:6;;:20;:6;:20;:64;;;;-1:-1:-1;11645:10:0;;:27;:10;:27;11608:64;:109;;;;-1:-1:-1;11689:28:0;;;;;11608:109;11586:181;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11780:10;:24;;;;;;;;;;;;;;;;11849:27;;;;;;;;-1:-1:-1;;11849:10:0;;;;:25;;:27;;;;;;;;;;;;;;;:10;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11849:27:0;;-1:-1:-1;11892:6:0;11887:109;11904:19;;;11887:109;;;11945:39;11956:8;;11965:1;11956:11;;;;;;;;;;;;;;;11969:14;11945:10;:39::i;:::-;11925:3;;11887:109;;;;11455:548;;;;:::o;16821:190::-;16980:23;;;;;;;;;;;;;;;;;16821:190;:::o;14144:522::-;10364:10;10356:19;;;;:7;:19;;;;;;14364:23;;10356:19;;;:63;;;10393:10;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10393:26:0;10379:40;;:10;:40;10356:63;10334:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14405:12:::1;14452:28;14458:4;14464:2;14468:5;14475:4;;14452:5;:28::i;:::-;14428:52:::0;-1:-1:-1;14428:52:0;-1:-1:-1;14428:52:0;14493:166:::1;;14571:16;14568:1;::::0;14550:38:::1;14616:16;14568:1;14606:27;14531:117;10470:1;14144:522:::0;;;;;;;:::o;12011:129::-;12126:6;;;;12011:129;:::o;12502:336::-;9917:10;9909:19;;;;:7;:19;;;;;;;;9901:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12634:10:::1;::::0;::::1;12617:27:::0;;::::1;12634:10:::0;::::1;12617:27;;12609:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12683:30;::::0;::::1;12675:61;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12747:10;:26:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;12789:41:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;12502:336:::0;:::o;13031:371::-;9917:10;9909:19;;;;:7;:19;;;;;;;;9901:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13230:16:::1;::::0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;::::1;;13222:46;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13290:7;13283:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;13279:44:::0;13340:16:::1;::::0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;;13333:23;;;::::1;::::0;;13372:22;;;;;;;::::1;::::0;;;;;;;;::::1;13031:371:::0;:::o;13573:383::-;9917:10;9909:19;;;;:7;:19;;;;;;;;9901:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13710:20;;::::1;13702:43;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13760:21;::::0;::::1;::::0;13756:102:::1;;13806:16;::::0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;::::1;;13798:48;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13870:23:::0;;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:33;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;13919:29;;;;;;;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;13573:383:::0;;:::o;13410:155::-;13541:16;;13512:4;13541:16;;;:7;:16;;;;;;;;;13410:155::o;13964:172::-;14105:23;;14073:7;14105:23;;;:14;:23;;;;;;;;;13964:172::o;9393:28::-;;;;;;:::o;15331:438::-;15441:21;;;15433:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15497:16;;;;;;;:7;:16;;;;;;;;:25;15489:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15573:14;:30;;;15604:7;15573:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15573:39:0;15551:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15665:16;;;;;;;:7;:16;;;;;;;;;:23;;;;15684:4;15665:23;;;15704:20;;;;;;;;;;;;;;;;;15742:7;15735:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15331:438;;:::o;15777:874::-;15975:12;16002:23;16057:4;:9;;16065:1;16057:9;16053:591;;;16171:6;:11;;16190:5;16197:4;;16171:31;;;;;;;;;;;;;;-1:-1:-1;16171:31:0;;-1:-1:-1;16171:31:0;;-1:-1:-1;;16171:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16147:55:0;;-1:-1:-1;16147:55:0;-1:-1:-1;16053:591:0;;;16224:4;:9;;16232:1;16224:9;16220:424;;;16338:6;:19;;16358:4;;16338:25;;;;;;;;;;;;;;-1:-1:-1;16338:25:0;;-1:-1:-1;16338:25:0;;-1:-1:-1;;16338:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16220:424;16385:4;:9;;16393:1;16385:9;16381:263;;;16419:10;;16411:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16550:6;:17;;16568:4;;16550:23;;;;;;;;;;;;;;-1:-1:-1;16550:23:0;;-1:-1:-1;16550:23:0;;-1:-1:-1;;16550:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16381:263;16606:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16381:263;15777:874;;;;;;;;:::o
Swarm Source
ipfs://14c6d2b1be13a9f3aa4e61bf3379aafb2222afe1e4b02416a906b522d6583877
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.