More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 2,052 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unbundle | 19498994 | 182 days ago | IN | 0 ETH | 0.00289756 | ||||
Transfer | 19498976 | 182 days ago | IN | 0 ETH | 0.00131354 | ||||
Change | 19132963 | 233 days ago | IN | 0 ETH | 0.00157214 | ||||
Change | 13820407 | 1009 days ago | IN | 0 ETH | 0.0067703 | ||||
Change | 13820395 | 1009 days ago | IN | 0 ETH | 0.00733769 | ||||
Change | 13820356 | 1009 days ago | IN | 0 ETH | 0.00746917 | ||||
Change | 13820304 | 1009 days ago | IN | 0 ETH | 0.00793739 | ||||
Change | 13820266 | 1009 days ago | IN | 0 ETH | 0.00811773 | ||||
Change | 13820259 | 1009 days ago | IN | 0 ETH | 0.00708307 | ||||
Change | 13820248 | 1009 days ago | IN | 0 ETH | 0.00798354 | ||||
Change | 13820243 | 1009 days ago | IN | 0 ETH | 0.00801134 | ||||
Change | 13820235 | 1009 days ago | IN | 0 ETH | 0.00842652 | ||||
Change | 13820220 | 1009 days ago | IN | 0 ETH | 0.00768428 | ||||
Unbundle | 7866333 | 1940 days ago | IN | 0 ETH | 0.00039097 | ||||
Approve And Call | 7042155 | 2081 days ago | IN | 0 ETH | 0.00199169 | ||||
Transfer | 6586989 | 2157 days ago | IN | 0 ETH | 0.00036817 | ||||
Transfer | 6586463 | 2157 days ago | IN | 0 ETH | 0.00043016 | ||||
Transfer | 6586401 | 2157 days ago | IN | 0 ETH | 0.00048683 | ||||
Transfer | 6586331 | 2157 days ago | IN | 0 ETH | 0.00043016 | ||||
Transfer | 6586268 | 2157 days ago | IN | 0 ETH | 0.00043016 | ||||
Transfer | 6586197 | 2157 days ago | IN | 0 ETH | 0.00043016 | ||||
Transfer | 6586120 | 2157 days ago | IN | 0 ETH | 0.00048683 | ||||
Transfer | 6586055 | 2157 days ago | IN | 0 ETH | 0.00043815 | ||||
Transfer | 6585993 | 2157 days ago | IN | 0 ETH | 0.00053552 | ||||
Transfer | 6585931 | 2157 days ago | IN | 0 ETH | 0.00043016 |
Latest 2 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
6260087 | 2211 days ago | Contract Creation | 0 ETH | |||
6260087 | 2211 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
FeeMultiToken
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-09-02 */ pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/ext/CheckedERC20.sol library CheckedERC20 { using SafeMath for uint; function checkedTransfer(ERC20 _token, address _to, uint256 _value) internal { if (_value == 0) { return; } uint256 balance = _token.balanceOf(this); _token.transfer(_to, _value); require(_token.balanceOf(this) == balance.sub(_value), "checkedTransfer: Final balance didn't match"); } function checkedTransferFrom(ERC20 _token, address _from, address _to, uint256 _value) internal { if (_value == 0) { return; } uint256 toBalance = _token.balanceOf(_to); _token.transferFrom(_from, _to, _value); require(_token.balanceOf(_to) == toBalance.add(_value), "checkedTransfer: Final balance didn't match"); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @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 OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: contracts/ext/ERC1003Token.sol contract ERC1003Caller is Ownable { function makeCall(address _target, bytes _data) external payable onlyOwner returns (bool) { // solium-disable-next-line security/no-call-value return _target.call.value(msg.value)(_data); } } contract ERC1003Token is ERC20 { ERC1003Caller public caller_ = new ERC1003Caller(); address[] internal sendersStack_; function approveAndCall(address _to, uint256 _value, bytes _data) public payable returns (bool) { sendersStack_.push(msg.sender); approve(_to, _value); require(caller_.makeCall.value(msg.value)(_to, _data)); sendersStack_.length -= 1; return true; } function transferAndCall(address _to, uint256 _value, bytes _data) public payable returns (bool) { transfer(_to, _value); require(caller_.makeCall.value(msg.value)(_to, _data)); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { address from = (_from != address(caller_)) ? _from : sendersStack_[sendersStack_.length - 1]; return super.transferFrom(from, _to, _value); } } // File: contracts/interface/IBasicMultiToken.sol contract IBasicMultiToken is ERC20 { event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); function tokensCount() public view returns(uint256); function tokens(uint256 _index) public view returns(ERC20); function allTokens() public view returns(ERC20[]); function allDecimals() public view returns(uint8[]); function allBalances() public view returns(uint256[]); function allTokensDecimalsBalances() public view returns(ERC20[], uint8[], uint256[]); function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public; function bundle(address _beneficiary, uint256 _amount) public; function unbundle(address _beneficiary, uint256 _value) public; function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public; function denyBundling() public; function allowBundling() public; } // File: openzeppelin-solidity/contracts/token/ERC20/DetailedERC20.sol /** * @title DetailedERC20 token * @dev The decimals are only for visualization purposes. * All the operations are done using the smallest and indivisible token unit, * just as on Ethereum all the operations are done in wei. */ contract DetailedERC20 is ERC20 { string public name; string public symbol; uint8 public decimals; constructor(string _name, string _symbol, uint8 _decimals) public { name = _name; symbol = _symbol; decimals = _decimals; } } // File: openzeppelin-solidity/contracts/token/ERC20/BasicToken.sol /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } // File: openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval( address _spender, uint _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval( address _spender, uint _subtractedValue ) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } // File: contracts/BasicMultiToken.sol contract BasicMultiToken is Ownable, StandardToken, DetailedERC20, ERC1003Token, IBasicMultiToken { using CheckedERC20 for ERC20; ERC20[] public tokens; uint internal inLendingMode; bool public bundlingDenied; event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); event BundlingDenied(bool denied); modifier notInLendingMode { require(inLendingMode == 0, "Operation can't be performed while lending"); _; } modifier bundlingEnabled { require(!bundlingDenied, "Operation can't be performed because bundling is denied"); _; } constructor() public DetailedERC20("", "", 0) { } function init(ERC20[] _tokens, string _name, string _symbol, uint8 _decimals) public { require(decimals == 0, "init: contract was already initialized"); require(_decimals > 0, "init: _decimals should not be zero"); require(bytes(_name).length > 0, "init: _name should not be empty"); require(bytes(_symbol).length > 0, "init: _symbol should not be empty"); require(_tokens.length >= 2, "Contract do not support less than 2 inner tokens"); name = _name; symbol = _symbol; decimals = _decimals; tokens = _tokens; } function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public bundlingEnabled notInLendingMode { require(totalSupply_ == 0, "bundleFirstTokens: This method can be used with zero total supply only"); _bundle(_beneficiary, _amount, _tokenAmounts); } function bundle(address _beneficiary, uint256 _amount) public bundlingEnabled notInLendingMode { require(totalSupply_ != 0, "This method can be used with non zero total supply only"); uint256[] memory tokenAmounts = new uint256[](tokens.length); for (uint i = 0; i < tokens.length; i++) { tokenAmounts[i] = tokens[i].balanceOf(this).mul(_amount).div(totalSupply_); } _bundle(_beneficiary, _amount, tokenAmounts); } function unbundle(address _beneficiary, uint256 _value) public notInLendingMode { unbundleSome(_beneficiary, _value, tokens); } function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public notInLendingMode { require(_tokens.length > 0, "Array of tokens can't be empty"); uint256 totalSupply = totalSupply_; balances[msg.sender] = balances[msg.sender].sub(_value); totalSupply_ = totalSupply.sub(_value); emit Unbundle(msg.sender, _beneficiary, _value); emit Transfer(msg.sender, 0, _value); for (uint i = 0; i < _tokens.length; i++) { for (uint j = 0; j < i; j++) { require(_tokens[i] != _tokens[j], "unbundleSome: should not unbundle same token multiple times"); } uint256 tokenAmount = _tokens[i].balanceOf(this).mul(_value).div(totalSupply); _tokens[i].checkedTransfer(_beneficiary, tokenAmount); } } // Admin methods function denyBundling() public onlyOwner { require(!bundlingDenied); bundlingDenied = true; emit BundlingDenied(true); } function allowBundling() public onlyOwner { require(bundlingDenied); bundlingDenied = false; emit BundlingDenied(false); } // Internal methods function _bundle(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) internal { require(_amount != 0, "Bundling amount should be non-zero"); require(tokens.length == _tokenAmounts.length, "Lenghts of tokens and _tokenAmounts array should be equal"); for (uint i = 0; i < tokens.length; i++) { require(_tokenAmounts[i] != 0, "Token amount should be non-zero"); tokens[i].checkedTransferFrom(msg.sender, this, _tokenAmounts[i]); // Can't use require because not all ERC20 tokens return bool } totalSupply_ = totalSupply_.add(_amount); balances[_beneficiary] = balances[_beneficiary].add(_amount); emit Bundle(msg.sender, _beneficiary, _amount); emit Transfer(0, _beneficiary, _amount); } // Instant Loans function lend(address _to, ERC20 _token, uint256 _amount, address _target, bytes _data) public payable { uint256 prevBalance = _token.balanceOf(this); _token.transfer(_to, _amount); inLendingMode += 1; require(caller_.makeCall.value(msg.value)(_target, _data), "lend: arbitrary call failed"); inLendingMode -= 1; require(_token.balanceOf(this) >= prevBalance, "lend: lended token must be refilled"); } // Public Getters function tokensCount() public view returns(uint) { return tokens.length; } function tokens(uint _index) public view returns(ERC20) { return tokens[_index]; } function allTokens() public view returns(ERC20[] _tokens) { _tokens = tokens; } function allBalances() public view returns(uint256[] _balances) { _balances = new uint256[](tokens.length); for (uint i = 0; i < tokens.length; i++) { _balances[i] = tokens[i].balanceOf(this); } } function allDecimals() public view returns(uint8[] _decimals) { _decimals = new uint8[](tokens.length); for (uint i = 0; i < tokens.length; i++) { _decimals[i] = DetailedERC20(tokens[i]).decimals(); } } function allTokensDecimalsBalances() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances) { _tokens = allTokens(); _decimals = allDecimals(); _balances = allBalances(); } } // File: contracts/interface/IMultiToken.sol contract IMultiToken is IBasicMultiToken { event Update(); event Change(address indexed _fromToken, address indexed _toToken, address indexed _changer, uint256 _amount, uint256 _return); function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns (uint256 returnAmount); function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256 returnAmount); function allWeights() public view returns(uint256[] _weights); function allTokensDecimalsBalancesWeights() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances, uint256[] _weights); function denyChanges() public; } // File: contracts/MultiToken.sol contract MultiToken is IMultiToken, BasicMultiToken { using CheckedERC20 for ERC20; uint256 internal minimalWeight; mapping(address => uint256) public weights; bool public changesDenied; event ChangesDenied(); modifier changesEnabled { require(!changesDenied, "Operation can't be performed because changes are denied"); _; } function init(ERC20[] _tokens, uint256[] _weights, string _name, string _symbol, uint8 _decimals) public { super.init(_tokens, _name, _symbol, _decimals); require(_weights.length == tokens.length, "Lenghts of _tokens and _weights array should be equal"); for (uint i = 0; i < tokens.length; i++) { require(_weights[i] != 0, "The _weights array should not contains zeros"); require(weights[tokens[i]] == 0, "The _tokens array have duplicates"); weights[tokens[i]] = _weights[i]; if (minimalWeight == 0 || _weights[i] < minimalWeight) { minimalWeight = _weights[i]; } } } function init2(ERC20[] _tokens, uint256[] _weights, string _name, string _symbol, uint8 _decimals) public { init(_tokens, _weights, _name, _symbol, _decimals); } function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns(uint256 returnAmount) { if (weights[_fromToken] > 0 && weights[_toToken] > 0 && _fromToken != _toToken) { uint256 fromBalance = ERC20(_fromToken).balanceOf(this); uint256 toBalance = ERC20(_toToken).balanceOf(this); returnAmount = _amount.mul(toBalance).mul(weights[_fromToken]).div( _amount.mul(weights[_fromToken]).div(minimalWeight).add(fromBalance).mul(weights[_toToken]) ); } } function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public changesEnabled notInLendingMode returns(uint256 returnAmount) { returnAmount = getReturn(_fromToken, _toToken, _amount); require(returnAmount > 0, "The return amount is zero"); require(returnAmount >= _minReturn, "The return amount is less than _minReturn value"); ERC20(_fromToken).checkedTransferFrom(msg.sender, this, _amount); ERC20(_toToken).checkedTransfer(msg.sender, returnAmount); emit Change(_fromToken, _toToken, msg.sender, _amount, returnAmount); } // Admin methods function denyChanges() public onlyOwner { require(!changesDenied); changesDenied = true; emit ChangesDenied(); } // Public Getters function allWeights() public view returns(uint256[] _weights) { _weights = new uint256[](tokens.length); for (uint i = 0; i < tokens.length; i++) { _weights[i] = weights[tokens[i]]; } } function allTokensDecimalsBalancesWeights() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances, uint256[] _weights) { (_tokens, _decimals, _balances) = allTokensDecimalsBalances(); _weights = allWeights(); } } // File: contracts/FeeMultiToken.sol contract FeeMultiToken is Ownable, MultiToken { using CheckedERC20 for ERC20; uint256 public constant TOTAL_PERCRENTS = 1000000; uint256 public lendFee; uint256 public changeFee; uint256 public refferalFee; function init(ERC20[] _tokens, uint256[] _weights, string _name, string _symbol, uint8 /*_decimals*/) public { super.init(_tokens, _weights, _name, _symbol, 18); } function setLendFee(uint256 _lendFee) public onlyOwner { require(_lendFee <= 30000, "setLendFee: fee should be not greater than 3%"); lendFee = _lendFee; } function setChangeFee(uint256 _changeFee) public onlyOwner { require(_changeFee <= 30000, "setChangeFee: fee should be not greater than 3%"); changeFee = _changeFee; } function setRefferalFee(uint256 _refferalFee) public onlyOwner { require(_refferalFee <= 500000, "setChangeFee: fee should be not greater than 50% of changeFee"); refferalFee = _refferalFee; } function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns(uint256 returnAmount) { returnAmount = super.getReturn(_fromToken, _toToken, _amount).mul(TOTAL_PERCRENTS.sub(changeFee)).div(TOTAL_PERCRENTS); } function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns(uint256 returnAmount) { returnAmount = changeWithRef(_fromToken, _toToken, _amount, _minReturn, 0); } function changeWithRef(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn, address _ref) public returns(uint256 returnAmount) { returnAmount = super.change(_fromToken, _toToken, _amount, _minReturn); uint256 refferalAmount = returnAmount .mul(changeFee).div(TOTAL_PERCRENTS.sub(changeFee)) .mul(refferalFee).div(TOTAL_PERCRENTS); ERC20(_toToken).checkedTransfer(_ref, refferalAmount); } function lend(address _to, ERC20 _token, uint256 _amount, address _target, bytes _data) public payable { uint256 prevBalance = _token.balanceOf(this); super.lend(_to, _token, _amount, _target, _data); require(_token.balanceOf(this) >= prevBalance.mul(TOTAL_PERCRENTS.add(lendFee)).div(TOTAL_PERCRENTS), "lend: tokens must be returned with lend fee"); } } // File: contracts/registry/IDeployer.sol contract IDeployer is Ownable { function deploy(bytes data) external returns(address mtkn); } // File: contracts/registry/MultiTokenDeployer.sol contract MultiTokenDeployer is Ownable, IDeployer { function deploy(bytes data) external onlyOwner returns(address) { require( // init(address[],uint256[],string,string,uint8) (data[0] == 0x6f && data[1] == 0x5f && data[2] == 0x53 && data[3] == 0x5d) || // init2(address[],uint256[],string,string,uint8) (data[0] == 0x18 && data[1] == 0x2a && data[2] == 0x54 && data[3] == 0x15) ); FeeMultiToken mtkn = new FeeMultiToken(); require(address(mtkn).call(data)); mtkn.transferOwnership(msg.sender); return mtkn; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"changeFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"changesDenied","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_fromToken","type":"address"},{"name":"_toToken","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_minReturn","type":"uint256"},{"name":"_ref","type":"address"}],"name":"changeWithRef","outputs":[{"name":"returnAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_refferalFee","type":"uint256"}],"name":"setRefferalFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokens","type":"address[]"},{"name":"_weights","type":"uint256[]"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint8"}],"name":"init2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_fromToken","type":"address"},{"name":"_toToken","type":"address"},{"name":"_amount","type":"uint256"}],"name":"getReturn","outputs":[{"name":"returnAmount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_tokenAmounts","type":"uint256[]"}],"name":"bundleFirstTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allTokensDecimalsBalances","outputs":[{"name":"_tokens","type":"address[]"},{"name":"_decimals","type":"uint8[]"},{"name":"_balances","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"transferAndCall","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_tokens","type":"address[]"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint8"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lendFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"tokens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allBalances","outputs":[{"name":"_balances","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_fromToken","type":"address"},{"name":"_toToken","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_minReturn","type":"uint256"}],"name":"change","outputs":[{"name":"returnAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"allowBundling","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokens","type":"address[]"},{"name":"_weights","type":"uint256[]"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"","type":"uint8"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"allTokens","outputs":[{"name":"_tokens","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"weights","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bundlingDenied","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"allTokensDecimalsBalancesWeights","outputs":[{"name":"_tokens","type":"address[]"},{"name":"_decimals","type":"uint8[]"},{"name":"_balances","type":"uint256[]"},{"name":"_weights","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_value","type":"uint256"}],"name":"unbundle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_target","type":"address"},{"name":"_data","type":"bytes"}],"name":"lend","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_value","type":"uint256"},{"name":"_tokens","type":"address[]"}],"name":"unbundleSome","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_changeFee","type":"uint256"}],"name":"setChangeFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"allWeights","outputs":[{"name":"_weights","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"caller_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"denyBundling","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"refferalFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_lendFee","type":"uint256"}],"name":"setLendFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"denyChanges","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_amount","type":"uint256"}],"name":"bundle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOTAL_PERCRENTS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allDecimals","outputs":[{"name":"_decimals","type":"uint8[]"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[],"name":"ChangesDenied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Bundle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Unbundle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"denied","type":"bool"}],"name":"BundlingDenied","type":"event"},{"anonymous":false,"inputs":[],"name":"Update","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_fromToken","type":"address"},{"indexed":true,"name":"_toToken","type":"address"},{"indexed":true,"name":"_changer","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_return","type":"uint256"}],"name":"Change","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
60806040526200000e620000c7565b604051809103906000f0801580156200002b573d6000803e3d6000fd5b5060068054600160a060020a03929092166101000261010060a860020a0319909216919091179055604080516020818101808452600080845284519283019094528382528354600160a060020a031916331784558251929391926200009391600491620000d8565b508151620000a9906005906020850190620000d8565b506006805460ff191660ff92909216919091179055506200017d9050565b6040516102bf806200412b83390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200011b57805160ff19168380011785556200014b565b828001600101855582156200014b579182015b828111156200014b5782518255916020019190600101906200012e565b50620001599291506200015d565b5090565b6200017a91905b8082111562000159576000815560010162000164565b90565b613f9e806200018d6000396000f3006080604052600436106102365763ffffffff60e060020a60003504166240ff6c811461023b57806301d98d441461026257806306fdde031461028b578063095ea7b314610315578063179743991461033957806317986d831461036e57806318160ddd14610388578063182a54151461039d5780631e1401f8146104ac57806322393ef4146104d657806323b872dd1461053d578063313ce5671461056757806334f6bef3146105925780634000aea0146106855780634686b4be146106e15780634aea0aec146107b75780634f64b2be146107cc578063555b6162146108005780635e5144eb14610865578063661884631461089257806367bb474f146108b65780636f5f535d146108cb5780636ff97f1d146109da57806370a08231146109ef578063715018a614610a105780638da5cb5b14610a2557806395d89b4114610a3a578063a64ed8ba14610a4f578063a7cac84614610a64578063a8074b5514610a85578063a9059cbb14610a9a578063b36216d314610abe578063b4dc3dc714610bf6578063be5afb1a14610c1a578063be7e18ed14610c85578063c108adab14610cec578063c1f04f3c14610d04578063c2f490e914610d19578063c46b2d9d14610d2e578063cae9ca5114610d43578063d2b5d9e114610d9f578063d73dd62314610db4578063dd62ed3e14610dd8578063df1614cf14610dff578063e064c1ec14610e17578063eba3cdfe14610e2c578063f2fde38b14610e50578063f9f7d9de14610e71578063fc03441c14610e86575b600080fd5b34801561024757600080fd5b50610250610e9b565b60408051918252519081900360200190f35b34801561026e57600080fd5b50610277610ea1565b604080519115158252519081900360200190f35b34801561029757600080fd5b506102a0610eaa565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102da5781810151838201526020016102c2565b50505050905090810190601f1680156103075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032157600080fd5b50610277600160a060020a0360043516602435610f38565b34801561034557600080fd5b50610250600160a060020a03600435811690602435811690604435906064359060843516610f9f565b34801561037a57600080fd5b5061038660043561102a565b005b34801561039457600080fd5b506102506110c7565b3480156103a957600080fd5b506040805160206004803580820135838102808601850190965280855261038695369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050923560ff1693506110ce92505050565b3480156104b857600080fd5b50610250600160a060020a03600435811690602435166044356110e2565b3480156104e257600080fd5b506040805160206004604435818101358381028086018501909652808552610386958335600160a060020a03169560248035963696956064959394920192918291850190849080828437509497506111199650505050505050565b34801561054957600080fd5b50610277600160a060020a03600435811690602435166044356112a8565b34801561057357600080fd5b5061057c61130c565b6040805160ff9092168252519081900360200190f35b34801561059e57600080fd5b506105a7611315565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156105ef5781810151838201526020016105d7565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561062e578181015183820152602001610616565b50505050905001848103825285818151815260200191508051906020019060200280838360005b8381101561066d578181015183820152602001610655565b50505050905001965050505050505060405180910390f35b604080516020600460443581810135601f8101849004840285018401909552848452610277948235600160a060020a031694602480359536959460649492019190819084018382808284375094975061133d9650505050505050565b3480156106ed57600080fd5b50604080516020600480358082013583810280860185019096528085526103869536959394602494938501929182918501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050923560ff16935061146492505050565b3480156107c357600080fd5b50610250611708565b3480156107d857600080fd5b506107e460043561170e565b60408051600160a060020a039092168252519081900360200190f35b34801561080c57600080fd5b5061081561173a565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610851578181015183820152602001610839565b505050509050019250505060405180910390f35b34801561087157600080fd5b50610250600160a060020a0360043581169060243516604435606435611837565b34801561089e57600080fd5b50610277600160a060020a0360043516602435611847565b3480156108c257600080fd5b50610386611937565b3480156108d757600080fd5b506040805160206004803580820135838102808601850190965280855261038695369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050923560ff16935061199f92505050565b3480156109e657600080fd5b506108156119ad565b3480156109fb57600080fd5b50610250600160a060020a0360043516611a0f565b348015610a1c57600080fd5b50610386611a2a565b348015610a3157600080fd5b506107e4611a96565b348015610a4657600080fd5b506102a0611aa5565b348015610a5b57600080fd5b50610250611b00565b348015610a7057600080fd5b50610250600160a060020a0360043516611b06565b348015610a9157600080fd5b50610277611b18565b348015610aa657600080fd5b50610277600160a060020a0360043516602435611b21565b348015610aca57600080fd5b50610ad3611bf2565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b83811015610b1f578181015183820152602001610b07565b50505050905001858103845288818151815260200191508051906020019060200280838360005b83811015610b5e578181015183820152602001610b46565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015610b9d578181015183820152602001610b85565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015610bdc578181015183820152602001610bc4565b505050509050019850505050505050505060405180910390f35b348015610c0257600080fd5b50610386600160a060020a0360043516602435611c17565b604080516020600460843581810135601f8101849004840285018401909552848452610386948235600160a060020a0390811695602480358316966044359660643590941695369560a49493909101918190840183828082843750949750611cda9650505050505050565b348015610c9157600080fd5b506040805160206004604435818101358381028086018501909652808552610386958335600160a060020a0316956024803596369695606495939492019291829185019084908082843750949750611e8d9650505050505050565b348015610cf857600080fd5b506103866004356121c6565b348015610d1057600080fd5b50610815612262565b348015610d2557600080fd5b506107e46122ff565b348015610d3a57600080fd5b50610386612313565b604080516020600460443581810135601f8101849004840285018401909552848452610277948235600160a060020a031694602480359536959460649492019190819084018382808284375094975061237e9650505050505050565b348015610dab57600080fd5b50610250612505565b348015610dc057600080fd5b50610277600160a060020a036004351660243561250b565b348015610de457600080fd5b50610250600160a060020a03600435811690602435166125a4565b348015610e0b57600080fd5b506103866004356125cf565b348015610e2357600080fd5b5061038661266b565b348015610e3857600080fd5b50610386600160a060020a03600435166024356126ca565b348015610e5c57600080fd5b50610386600160a060020a036004351661290c565b348015610e7d57600080fd5b5061025061292f565b348015610e9257600080fd5b50610815612936565b600f5481565b600d5460ff1681565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610f305780601f10610f0557610100808354040283529160200191610f30565b820191906000526020600020905b815481529060010190602001808311610f1357829003601f168201915b505050505081565b336000818152600360209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b600080610fae87878787612a37565b9150611004620f4240610fec601054610ff8610fd8600f54620f4240612c9290919063ffffffff16565b600f54610fec90899063ffffffff612ca416565b9063ffffffff612ccd16565b9063ffffffff612ca416565b9050611020600160a060020a038716848363ffffffff612ce216565b5095945050505050565b600054600160a060020a0316331461104157600080fd5b6207a1208111156110c2576040805160e560020a62461bcd02815260206004820152603d60248201527f7365744368616e67654665653a206665652073686f756c64206265206e6f742060448201527f67726561746572207468616e20353025206f66206368616e6765466565000000606482015290519081900360840190fd5b601055565b6002545b90565b6110db858585858561199f565b5050505050565b6000611111620f4240610fec611106600f54620f4240612c9290919063ffffffff16565b610ff8888888612f05565b949350505050565b600a5460ff161561119a576040805160e560020a62461bcd02815260206004820152603760248201527f4f7065726174696f6e2063616e277420626520706572666f726d65642062656360448201527f617573652062756e646c696e672069732064656e696564000000000000000000606482015290519081900360840190fd5b600954156111f4576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613f338339815191526044820152600080516020613f13833981519152606482015290519081900360840190fd5b60025415611298576040805160e560020a62461bcd02815260206004820152604660248201527f62756e646c654669727374546f6b656e733a2054686973206d6574686f64206360448201527f616e20626520757365642077697468207a65726f20746f74616c20737570706c60648201527f79206f6e6c790000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6112a38383836130ec565b505050565b6006546000908190600160a060020a038681166101009092041614156112f4576007805460001981019081106112da57fe5b600091825260209091200154600160a060020a03166112f6565b845b9050611303818585613387565b95945050505050565b60065460ff1681565b60608060606113226119ad565b925061132c612936565b915061133661173a565b9050909192565b60006113498484611b21565b50600654604080517f1cb9ce63000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483019081526024830193845286516044840152865161010090950490911693631cb9ce639334938a93899390929160640190602085019080838360005b838110156113d65781810151838201526020016113be565b50505050905090810190601f1680156114035780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561142257600080fd5b505af1158015611436573d6000803e3d6000fd5b50505050506040513d602081101561144d57600080fd5b5051151561145a57600080fd5b5060019392505050565b60065460ff16156114e5576040805160e560020a62461bcd02815260206004820152602660248201527f696e69743a20636f6e74726163742077617320616c726561647920696e69746960448201527f616c697a65640000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600060ff821611611566576040805160e560020a62461bcd02815260206004820152602260248201527f696e69743a205f646563696d616c732073686f756c64206e6f74206265207a6560448201527f726f000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82516000106115bf576040805160e560020a62461bcd02815260206004820152601f60248201527f696e69743a205f6e616d652073686f756c64206e6f7420626520656d70747900604482015290519081900360640190fd5b815160001061163e576040805160e560020a62461bcd02815260206004820152602160248201527f696e69743a205f73796d626f6c2073686f756c64206e6f7420626520656d707460448201527f7900000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8351600211156116be576040805160e560020a62461bcd02815260206004820152603060248201527f436f6e747261637420646f206e6f7420737570706f7274206c6573732074686160448201527f6e203220696e6e657220746f6b656e7300000000000000000000000000000000606482015290519081900360840190fd5b82516116d1906004906020860190613dbf565b5081516116e5906005906020850190613dbf565b506006805460ff191660ff831617905583516110db906008906020870190613e39565b600e5481565b600060088281548110151561171f57fe5b600091825260209091200154600160a060020a031692915050565b6060600060088054905060405190808252806020026020018201604052801561176d578160200160208202803883390190505b509150600090505b60085481101561183357600880548290811061178d57fe5b60009182526020808320909101546040805160e060020a6370a082310281523060048201529051600160a060020a03909216936370a082319360248084019491939192918390030190829087803b1580156117e757600080fd5b505af11580156117fb573d6000803e3d6000fd5b505050506040513d602081101561181157600080fd5b5051825183908390811061182157fe5b60209081029091010152600101611775565b5090565b6000611303858585856000610f9f565b336000908152600360209081526040808320600160a060020a03861684529091528120548083111561189c57336000908152600360209081526040808320600160a060020a03881684529091528120556118d1565b6118ac818463ffffffff612c9216565b336000908152600360209081526040808320600160a060020a03891684529091529020555b336000818152600360209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600054600160a060020a0316331461194e57600080fd5b600a5460ff16151561195f57600080fd5b600a805460ff19169055604080516000815290517f321b57e1e24a3854d5850e49ea76e2022dfd91f1614f6f8dc4842d696a977f579181900360200190a1565b6110db8585858560126134ee565b60606008805480602002602001604051908101604052809291908181526020018280548015611a0557602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116119e7575b5050505050905090565b600160a060020a031660009081526001602052604090205490565b600054600160a060020a03163314611a4157600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031681565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610f305780601f10610f0557610100808354040283529160200191610f30565b60085490565b600c6020526000908152604090205481565b600a5460ff1681565b6000600160a060020a0383161515611b3857600080fd5b33600090815260016020526040902054821115611b5457600080fd5b33600090815260016020526040902054611b74908363ffffffff612c9216565b3360009081526001602052604080822092909255600160a060020a03851681522054611ba6908363ffffffff61377116565b600160a060020a038416600081815260016020908152604091829020939093558051858152905191923392600080516020613f538339815191529281900390910190a350600192915050565b606080606080611c00611315565b91955093509150611c0f612262565b905090919293565b60095415611c71576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613f338339815191526044820152600080516020613f13833981519152606482015290519081900360840190fd5b611cd682826008805480602002602001604051908101604052809291908181526020018280548015611ccc57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611cae575b5050505050611e8d565b5050565b6040805160e060020a6370a082310281523060048201529051600091600160a060020a038716916370a082319160248082019260209290919082900301818787803b158015611d2857600080fd5b505af1158015611d3c573d6000803e3d6000fd5b505050506040513d6020811015611d5257600080fd5b50519050611d63868686868661377e565b611d92620f4240610fec611d85600e54620f424061377190919063ffffffff16565b849063ffffffff612ca416565b6040805160e060020a6370a082310281523060048201529051600160a060020a038816916370a082319160248083019260209291908290030181600087803b158015611ddd57600080fd5b505af1158015611df1573d6000803e3d6000fd5b505050506040513d6020811015611e0757600080fd5b50511015611e85576040805160e560020a62461bcd02815260206004820152602b60248201527f6c656e643a20746f6b656e73206d7573742062652072657475726e656420776960448201527f7468206c656e6420666565000000000000000000000000000000000000000000606482015290519081900360840190fd5b505050505050565b6000806000806009546000141515611ef1576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613f338339815191526044820152600080516020613f13833981519152606482015290519081900360840190fd5b8451600010611f4a576040805160e560020a62461bcd02815260206004820152601e60248201527f4172726179206f6620746f6b656e732063616e277420626520656d7074790000604482015290519081900360640190fd5b60025433600090815260016020526040902054909450611f70908763ffffffff612c9216565b33600090815260016020526040902055611f90848763ffffffff612c9216565b600255604080518781529051600160a060020a0389169133917f8c85614f24f81c7b85c9837ab8277cfc5062dea12393fe90c757220926b07a7b9181900360200190a36040805187815290516000913391600080516020613f538339815191529181900360200190a3600092505b84518310156121bd57600091505b828210156120dd57848281518110151561202257fe5b90602001906020020151600160a060020a0316858481518110151561204357fe5b60209081029091010151600160a060020a031614156120d2576040805160e560020a62461bcd02815260206004820152603b60248201527f756e62756e646c65536f6d653a2073686f756c64206e6f7420756e62756e646c60448201527f652073616d6520746f6b656e206d756c7469706c652074696d65730000000000606482015290519081900360840190fd5b60019091019061200c565b61217d84610fec8888878151811015156120f357fe5b60209081029091018101516040805160e060020a6370a082310281523060048201529051600160a060020a03909216926370a08231926024808401938290030181600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050506040513d602081101561216f57600080fd5b50519063ffffffff612ca416565b90506121b28782878681518110151561219257fe5b60209081029091010151600160a060020a0316919063ffffffff612ce216565b600190920191611ffe565b50505050505050565b600054600160a060020a031633146121dd57600080fd5b61753081111561225d576040805160e560020a62461bcd02815260206004820152602f60248201527f7365744368616e67654665653a206665652073686f756c64206265206e6f742060448201527f67726561746572207468616e2033250000000000000000000000000000000000606482015290519081900360840190fd5b600f55565b60606000600880549050604051908082528060200260200182016040528015612295578160200160208202803883390190505b509150600090505b60085481101561183357600c60006008838154811015156122ba57fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205482518390839081106122ed57fe5b6020908102909101015260010161229d565b6006546101009004600160a060020a031681565b600054600160a060020a0316331461232a57600080fd5b600a5460ff161561233a57600080fd5b600a805460ff1916600190811790915560408051918252517f321b57e1e24a3854d5850e49ea76e2022dfd91f1614f6f8dc4842d696a977f579181900360200190a1565b6007805460018101825560009182527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805473ffffffffffffffffffffffffffffffffffffffff1916331790556123d68484610f38565b50600654604080517f1cb9ce63000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483019081526024830193845286516044840152865161010090950490911693631cb9ce639334938a93899390929160640190602085019080838360005b8381101561246357818101518382015260200161244b565b50505050905090810190601f1680156124905780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b1580156124af57600080fd5b505af11580156124c3573d6000803e3d6000fd5b50505050506040513d60208110156124da57600080fd5b505115156124e757600080fd5b6007805460001901906124fa9082613ea7565b506001949350505050565b60105481565b336000908152600360209081526040808320600160a060020a038616845290915281205461253f908363ffffffff61377116565b336000818152600360209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600054600160a060020a031633146125e657600080fd5b617530811115612666576040805160e560020a62461bcd02815260206004820152602d60248201527f7365744c656e644665653a206665652073686f756c64206265206e6f7420677260448201527f6561746572207468616e20332500000000000000000000000000000000000000606482015290519081900360840190fd5b600e55565b600054600160a060020a0316331461268257600080fd5b600d5460ff161561269257600080fd5b600d805460ff191660011790556040517fe3303657ddc260e5db6802cb30c890580e6fd9c716a85807fe6843d28da0dbd090600090a1565b600a5460609060009060ff1615612751576040805160e560020a62461bcd02815260206004820152603760248201527f4f7065726174696f6e2063616e277420626520706572666f726d65642062656360448201527f617573652062756e646c696e672069732064656e696564000000000000000000606482015290519081900360840190fd5b600954156127ab576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613f338339815191526044820152600080516020613f13833981519152606482015290519081900360840190fd5b600254151561282a576040805160e560020a62461bcd02815260206004820152603760248201527f54686973206d6574686f642063616e20626520757365642077697468206e6f6e60448201527f207a65726f20746f74616c20737570706c79206f6e6c79000000000000000000606482015290519081900360840190fd5b600854604080518281526020808402820101909152908015612856578160200160208202803883390190505b509150600090505b6008548110156128fb576128db600254610fec8560088581548110151561288157fe5b60009182526020808320909101546040805160e060020a6370a082310281523060048201529051600160a060020a03909216936370a082319360248084019491939192918390030190829087803b15801561214557600080fd5b82828151811015156128e957fe5b6020908102909101015260010161285e565b6129068484846130ec565b50505050565b600054600160a060020a0316331461292357600080fd5b61292c81613af7565b50565b620f424081565b60606000600880549050604051908082528060200260200182016040528015612969578160200160208202803883390190505b509150600090505b60085481101561183357600880548290811061298957fe5b9060005260206000200160009054906101000a9004600160a060020a0316600160a060020a031663313ce5676040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156129e457600080fd5b505af11580156129f8573d6000803e3d6000fd5b505050506040513d6020811015612a0e57600080fd5b50518251839083908110612a1e57fe5b60ff909216602092830290910190910152600101612971565b600d5460009060ff1615612abb576040805160e560020a62461bcd02815260206004820152603760248201527f4f7065726174696f6e2063616e277420626520706572666f726d65642062656360448201527f61757365206368616e676573206172652064656e696564000000000000000000606482015290519081900360840190fd5b60095415612b15576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613f338339815191526044820152600080516020613f13833981519152606482015290519081900360840190fd5b612b208585856110e2565b905060008111612b7a576040805160e560020a62461bcd02815260206004820152601960248201527f5468652072657475726e20616d6f756e74206973207a65726f00000000000000604482015290519081900360640190fd5b81811015612bf8576040805160e560020a62461bcd02815260206004820152602f60248201527f5468652072657475726e20616d6f756e74206973206c657373207468616e205f60448201527f6d696e52657475726e2076616c75650000000000000000000000000000000000606482015290519081900360840190fd5b612c13600160a060020a03861633308663ffffffff613b7416565b612c2d600160a060020a038516338363ffffffff612ce216565b33600160a060020a031684600160a060020a031686600160a060020a03167f24cee3d6b5651a987362aa6216b9d34a39212f0f1967dfd48c2c3a4fc3c576dc8685604051808381526020018281526020019250505060405180910390a4949350505050565b600082821115612c9e57fe5b50900390565b6000821515612cb557506000610f99565b50818102818382811515612cc557fe5b0414610f9957fe5b60008183811515612cda57fe5b049392505050565b6000811515612cf057612906565b6040805160e060020a6370a082310281523060048201529051600160a060020a038616916370a082319160248083019260209291908290030181600087803b158015612d3b57600080fd5b505af1158015612d4f573d6000803e3d6000fd5b505050506040513d6020811015612d6557600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820186905291519293509086169163a9059cbb916044808201926020929091908290030181600087803b158015612dd657600080fd5b505af1158015612dea573d6000803e3d6000fd5b505050506040513d6020811015612e0057600080fd5b50612e139050818363ffffffff612c9216565b6040805160e060020a6370a082310281523060048201529051600160a060020a038716916370a082319160248083019260209291908290030181600087803b158015612e5e57600080fd5b505af1158015612e72573d6000803e3d6000fd5b505050506040513d6020811015612e8857600080fd5b505114612906576040805160e560020a62461bcd02815260206004820152602b60248201527f636865636b65645472616e736665723a2046696e616c2062616c616e6365206460448201527f69646e2774206d61746368000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600c60205260408120548190819081108015612f465750600160a060020a0385166000908152600c6020526040812054115b8015612f64575084600160a060020a031686600160a060020a031614155b156130e3576040805160e060020a6370a082310281523060048201529051600160a060020a038816916370a082319160248083019260209291908290030181600087803b158015612fb457600080fd5b505af1158015612fc8573d6000803e3d6000fd5b505050506040513d6020811015612fde57600080fd5b50516040805160e060020a6370a082310281523060048201529051919350600160a060020a038716916370a08231916024808201926020929091908290030181600087803b15801561302f57600080fd5b505af1158015613043573d6000803e3d6000fd5b505050506040513d602081101561305957600080fd5b5051600160a060020a038087166000908152600c602052604080822054600b54938b1683529120549293506130e0926130b392610ff89187916130a791610fec908c9063ffffffff612ca416565b9063ffffffff61377116565b600160a060020a0388166000908152600c6020526040902054610fec90610ff8888663ffffffff612ca416565b92505b50509392505050565b600082151561316b576040805160e560020a62461bcd02815260206004820152602260248201527f42756e646c696e6720616d6f756e742073686f756c64206265206e6f6e2d7a6560448201527f726f000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8151600854146131eb576040805160e560020a62461bcd02815260206004820152603960248201527f4c656e67687473206f6620746f6b656e7320616e64205f746f6b656e416d6f7560448201527f6e74732061727261792073686f756c6420626520657175616c00000000000000606482015290519081900360840190fd5b5060005b6008548110156132be57818181518110151561320757fe5b602090810290910101511515613267576040805160e560020a62461bcd02815260206004820152601f60248201527f546f6b656e20616d6f756e742073686f756c64206265206e6f6e2d7a65726f00604482015290519081900360640190fd5b6132b63330848481518110151561327a57fe5b9060200190602002015160088581548110151561329357fe5b600091825260209091200154600160a060020a031692919063ffffffff613b7416565b6001016131ef565b6002546132d1908463ffffffff61377116565b600255600160a060020a0384166000908152600160205260409020546132fd908463ffffffff61377116565b600160a060020a0385166000818152600160209081526040918290209390935580518681529051919233927f6401d28c11d9f5749b7d2848c2af727680ae93ed2c51ac22e65ed498fb8dcb419281900390910190a3604080518481529051600160a060020a03861691600091600080516020613f538339815191529181900360200190a350505050565b6000600160a060020a038316151561339e57600080fd5b600160a060020a0384166000908152600160205260409020548211156133c357600080fd5b600160a060020a03841660009081526003602090815260408083203384529091529020548211156133f357600080fd5b600160a060020a03841660009081526001602052604090205461341c908363ffffffff612c9216565b600160a060020a038086166000908152600160205260408082209390935590851681522054613451908363ffffffff61377116565b600160a060020a038085166000908152600160209081526040808320949094559187168152600382528281203382529091522054613495908363ffffffff612c9216565b600160a060020a0380861660008181526003602090815260408083203384528252918290209490945580518681529051928716939192600080516020613f53833981519152929181900390910190a35060019392505050565b60006134fc86858585611464565b60085485511461357c576040805160e560020a62461bcd02815260206004820152603560248201527f4c656e67687473206f66205f746f6b656e7320616e64205f776569676874732060448201527f61727261792073686f756c6420626520657175616c0000000000000000000000606482015290519081900360840190fd5b5060005b600854811015611e8557848181518110151561359857fe5b60209081029091010151151561361e576040805160e560020a62461bcd02815260206004820152602c60248201527f546865205f776569676874732061727261792073686f756c64206e6f7420636f60448201527f6e7461696e73207a65726f730000000000000000000000000000000000000000606482015290519081900360840190fd5b600c600060088381548110151561363157fe5b6000918252602080832090910154600160a060020a03168352820192909252604001902054156136d1576040805160e560020a62461bcd02815260206004820152602160248201527f546865205f746f6b656e732061727261792068617665206475706c696361746560448201527f7300000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84818151811015156136df57fe5b90602001906020020151600c60006008848154811015156136fc57fe5b6000918252602080832090910154600160a060020a03168352820192909252604001902055600b5415806137485750600b54858281518110151561373c57fe5b90602001906020020151105b1561376957848181518110151561375b57fe5b60209081029091010151600b555b600101613580565b81810182811015610f9957fe5b6040805160e060020a6370a082310281523060048201529051600091600160a060020a038716916370a082319160248082019260209290919082900301818787803b1580156137cc57600080fd5b505af11580156137e0573d6000803e3d6000fd5b505050506040513d60208110156137f657600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0389811660048301526024820188905291519293509087169163a9059cbb916044808201926020929091908290030181600087803b15801561386757600080fd5b505af115801561387b573d6000803e3d6000fd5b505050506040513d602081101561389157600080fd5b5050600980546001019055600654604080517f1cb9ce63000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483019081526024830193845286516044840152865161010090950490911693631cb9ce639334938993899390929160640190602085019080838360005b83811015613928578181015183820152602001613910565b50505050905090810190601f1680156139555780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561397457600080fd5b505af1158015613988573d6000803e3d6000fd5b50505050506040513d602081101561399f57600080fd5b505115156139f7576040805160e560020a62461bcd02815260206004820152601b60248201527f6c656e643a206172626974726172792063616c6c206661696c65640000000000604482015290519081900360640190fd5b600980546000190190556040805160e060020a6370a0823102815230600482015290518291600160a060020a038816916370a08231916024808201926020929091908290030181600087803b158015613a4f57600080fd5b505af1158015613a63573d6000803e3d6000fd5b505050506040513d6020811015613a7957600080fd5b50511015611e85576040805160e560020a62461bcd02815260206004820152602360248201527f6c656e643a206c656e64656420746f6b656e206d75737420626520726566696c60448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0381161515613b0c57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000811515613b82576110db565b84600160a060020a03166370a08231846040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015613bdd57600080fd5b505af1158015613bf1573d6000803e3d6000fd5b505050506040513d6020811015613c0757600080fd5b5051604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301528681166024830152604482018690529151929350908716916323b872dd916064808201926020929091908290030181600087803b158015613c8057600080fd5b505af1158015613c94573d6000803e3d6000fd5b505050506040513d6020811015613caa57600080fd5b50613cbd9050818363ffffffff61377116565b85600160a060020a03166370a08231856040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015613d1857600080fd5b505af1158015613d2c573d6000803e3d6000fd5b505050506040513d6020811015613d4257600080fd5b5051146110db576040805160e560020a62461bcd02815260206004820152602b60248201527f636865636b65645472616e736665723a2046696e616c2062616c616e6365206460448201527f69646e2774206d61746368000000000000000000000000000000000000000000606482015290519081900360840190fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613e0057805160ff1916838001178555613e2d565b82800160010185558215613e2d579182015b82811115613e2d578251825591602001919060010190613e12565b50611833929150613ec7565b828054828255906000526020600020908101928215613e9b579160200282015b82811115613e9b578251825473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909116178255602090920191600190910190613e59565b50611833929150613ee1565b8154818355818111156112a3576000838152602090206112a39181019083015b6110cb91905b808211156118335760008155600101613ecd565b6110cb91905b8082111561183357805473ffffffffffffffffffffffffffffffffffffffff19168155600101613ee756006c65206c656e64696e67000000000000000000000000000000000000000000004f7065726174696f6e2063616e277420626520706572666f726d656420776869ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582089c39d0af4ca6b3ed51e14a51a464e0e49722ad057a2047c7ca612e34ba61b870029608060405260008054600160a060020a0319163317905561029a806100256000396000f3006080604052600436106100615763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631cb9ce638114610066578063715018a61461009a5780638da5cb5b146100b1578063f2fde38b146100e2575b600080fd5b61008660048035600160a060020a03169060248035908101910135610103565b604080519115158252519081900360200190f35b3480156100a657600080fd5b506100af610153565b005b3480156100bd57600080fd5b506100c66101bf565b60408051600160a060020a039092168252519081900360200190f35b3480156100ee57600080fd5b506100af600160a060020a03600435166101ce565b60008054600160a060020a0316331461011b57600080fd5b83600160a060020a03163484846040518083838082843782019150509250505060006040518083038185875af1979650505050505050565b600054600160a060020a0316331461016a57600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031681565b600054600160a060020a031633146101e557600080fd5b6101ee816101f1565b50565b600160a060020a038116151561020657600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555600a165627a7a7230582039d59b45b715101a09185b1755c7830869e338a2cd859e658c4553e45918f20b0029
Deployed Bytecode
0x6080604052600436106102365763ffffffff60e060020a60003504166240ff6c811461023b57806301d98d441461026257806306fdde031461028b578063095ea7b314610315578063179743991461033957806317986d831461036e57806318160ddd14610388578063182a54151461039d5780631e1401f8146104ac57806322393ef4146104d657806323b872dd1461053d578063313ce5671461056757806334f6bef3146105925780634000aea0146106855780634686b4be146106e15780634aea0aec146107b75780634f64b2be146107cc578063555b6162146108005780635e5144eb14610865578063661884631461089257806367bb474f146108b65780636f5f535d146108cb5780636ff97f1d146109da57806370a08231146109ef578063715018a614610a105780638da5cb5b14610a2557806395d89b4114610a3a578063a64ed8ba14610a4f578063a7cac84614610a64578063a8074b5514610a85578063a9059cbb14610a9a578063b36216d314610abe578063b4dc3dc714610bf6578063be5afb1a14610c1a578063be7e18ed14610c85578063c108adab14610cec578063c1f04f3c14610d04578063c2f490e914610d19578063c46b2d9d14610d2e578063cae9ca5114610d43578063d2b5d9e114610d9f578063d73dd62314610db4578063dd62ed3e14610dd8578063df1614cf14610dff578063e064c1ec14610e17578063eba3cdfe14610e2c578063f2fde38b14610e50578063f9f7d9de14610e71578063fc03441c14610e86575b600080fd5b34801561024757600080fd5b50610250610e9b565b60408051918252519081900360200190f35b34801561026e57600080fd5b50610277610ea1565b604080519115158252519081900360200190f35b34801561029757600080fd5b506102a0610eaa565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102da5781810151838201526020016102c2565b50505050905090810190601f1680156103075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032157600080fd5b50610277600160a060020a0360043516602435610f38565b34801561034557600080fd5b50610250600160a060020a03600435811690602435811690604435906064359060843516610f9f565b34801561037a57600080fd5b5061038660043561102a565b005b34801561039457600080fd5b506102506110c7565b3480156103a957600080fd5b506040805160206004803580820135838102808601850190965280855261038695369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050923560ff1693506110ce92505050565b3480156104b857600080fd5b50610250600160a060020a03600435811690602435166044356110e2565b3480156104e257600080fd5b506040805160206004604435818101358381028086018501909652808552610386958335600160a060020a03169560248035963696956064959394920192918291850190849080828437509497506111199650505050505050565b34801561054957600080fd5b50610277600160a060020a03600435811690602435166044356112a8565b34801561057357600080fd5b5061057c61130c565b6040805160ff9092168252519081900360200190f35b34801561059e57600080fd5b506105a7611315565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156105ef5781810151838201526020016105d7565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561062e578181015183820152602001610616565b50505050905001848103825285818151815260200191508051906020019060200280838360005b8381101561066d578181015183820152602001610655565b50505050905001965050505050505060405180910390f35b604080516020600460443581810135601f8101849004840285018401909552848452610277948235600160a060020a031694602480359536959460649492019190819084018382808284375094975061133d9650505050505050565b3480156106ed57600080fd5b50604080516020600480358082013583810280860185019096528085526103869536959394602494938501929182918501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050923560ff16935061146492505050565b3480156107c357600080fd5b50610250611708565b3480156107d857600080fd5b506107e460043561170e565b60408051600160a060020a039092168252519081900360200190f35b34801561080c57600080fd5b5061081561173a565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610851578181015183820152602001610839565b505050509050019250505060405180910390f35b34801561087157600080fd5b50610250600160a060020a0360043581169060243516604435606435611837565b34801561089e57600080fd5b50610277600160a060020a0360043516602435611847565b3480156108c257600080fd5b50610386611937565b3480156108d757600080fd5b506040805160206004803580820135838102808601850190965280855261038695369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497505050923560ff16935061199f92505050565b3480156109e657600080fd5b506108156119ad565b3480156109fb57600080fd5b50610250600160a060020a0360043516611a0f565b348015610a1c57600080fd5b50610386611a2a565b348015610a3157600080fd5b506107e4611a96565b348015610a4657600080fd5b506102a0611aa5565b348015610a5b57600080fd5b50610250611b00565b348015610a7057600080fd5b50610250600160a060020a0360043516611b06565b348015610a9157600080fd5b50610277611b18565b348015610aa657600080fd5b50610277600160a060020a0360043516602435611b21565b348015610aca57600080fd5b50610ad3611bf2565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b83811015610b1f578181015183820152602001610b07565b50505050905001858103845288818151815260200191508051906020019060200280838360005b83811015610b5e578181015183820152602001610b46565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015610b9d578181015183820152602001610b85565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015610bdc578181015183820152602001610bc4565b505050509050019850505050505050505060405180910390f35b348015610c0257600080fd5b50610386600160a060020a0360043516602435611c17565b604080516020600460843581810135601f8101849004840285018401909552848452610386948235600160a060020a0390811695602480358316966044359660643590941695369560a49493909101918190840183828082843750949750611cda9650505050505050565b348015610c9157600080fd5b506040805160206004604435818101358381028086018501909652808552610386958335600160a060020a0316956024803596369695606495939492019291829185019084908082843750949750611e8d9650505050505050565b348015610cf857600080fd5b506103866004356121c6565b348015610d1057600080fd5b50610815612262565b348015610d2557600080fd5b506107e46122ff565b348015610d3a57600080fd5b50610386612313565b604080516020600460443581810135601f8101849004840285018401909552848452610277948235600160a060020a031694602480359536959460649492019190819084018382808284375094975061237e9650505050505050565b348015610dab57600080fd5b50610250612505565b348015610dc057600080fd5b50610277600160a060020a036004351660243561250b565b348015610de457600080fd5b50610250600160a060020a03600435811690602435166125a4565b348015610e0b57600080fd5b506103866004356125cf565b348015610e2357600080fd5b5061038661266b565b348015610e3857600080fd5b50610386600160a060020a03600435166024356126ca565b348015610e5c57600080fd5b50610386600160a060020a036004351661290c565b348015610e7d57600080fd5b5061025061292f565b348015610e9257600080fd5b50610815612936565b600f5481565b600d5460ff1681565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610f305780601f10610f0557610100808354040283529160200191610f30565b820191906000526020600020905b815481529060010190602001808311610f1357829003601f168201915b505050505081565b336000818152600360209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b600080610fae87878787612a37565b9150611004620f4240610fec601054610ff8610fd8600f54620f4240612c9290919063ffffffff16565b600f54610fec90899063ffffffff612ca416565b9063ffffffff612ccd16565b9063ffffffff612ca416565b9050611020600160a060020a038716848363ffffffff612ce216565b5095945050505050565b600054600160a060020a0316331461104157600080fd5b6207a1208111156110c2576040805160e560020a62461bcd02815260206004820152603d60248201527f7365744368616e67654665653a206665652073686f756c64206265206e6f742060448201527f67726561746572207468616e20353025206f66206368616e6765466565000000606482015290519081900360840190fd5b601055565b6002545b90565b6110db858585858561199f565b5050505050565b6000611111620f4240610fec611106600f54620f4240612c9290919063ffffffff16565b610ff8888888612f05565b949350505050565b600a5460ff161561119a576040805160e560020a62461bcd02815260206004820152603760248201527f4f7065726174696f6e2063616e277420626520706572666f726d65642062656360448201527f617573652062756e646c696e672069732064656e696564000000000000000000606482015290519081900360840190fd5b600954156111f4576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613f338339815191526044820152600080516020613f13833981519152606482015290519081900360840190fd5b60025415611298576040805160e560020a62461bcd02815260206004820152604660248201527f62756e646c654669727374546f6b656e733a2054686973206d6574686f64206360448201527f616e20626520757365642077697468207a65726f20746f74616c20737570706c60648201527f79206f6e6c790000000000000000000000000000000000000000000000000000608482015290519081900360a40190fd5b6112a38383836130ec565b505050565b6006546000908190600160a060020a038681166101009092041614156112f4576007805460001981019081106112da57fe5b600091825260209091200154600160a060020a03166112f6565b845b9050611303818585613387565b95945050505050565b60065460ff1681565b60608060606113226119ad565b925061132c612936565b915061133661173a565b9050909192565b60006113498484611b21565b50600654604080517f1cb9ce63000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483019081526024830193845286516044840152865161010090950490911693631cb9ce639334938a93899390929160640190602085019080838360005b838110156113d65781810151838201526020016113be565b50505050905090810190601f1680156114035780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561142257600080fd5b505af1158015611436573d6000803e3d6000fd5b50505050506040513d602081101561144d57600080fd5b5051151561145a57600080fd5b5060019392505050565b60065460ff16156114e5576040805160e560020a62461bcd02815260206004820152602660248201527f696e69743a20636f6e74726163742077617320616c726561647920696e69746960448201527f616c697a65640000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600060ff821611611566576040805160e560020a62461bcd02815260206004820152602260248201527f696e69743a205f646563696d616c732073686f756c64206e6f74206265207a6560448201527f726f000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82516000106115bf576040805160e560020a62461bcd02815260206004820152601f60248201527f696e69743a205f6e616d652073686f756c64206e6f7420626520656d70747900604482015290519081900360640190fd5b815160001061163e576040805160e560020a62461bcd02815260206004820152602160248201527f696e69743a205f73796d626f6c2073686f756c64206e6f7420626520656d707460448201527f7900000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8351600211156116be576040805160e560020a62461bcd02815260206004820152603060248201527f436f6e747261637420646f206e6f7420737570706f7274206c6573732074686160448201527f6e203220696e6e657220746f6b656e7300000000000000000000000000000000606482015290519081900360840190fd5b82516116d1906004906020860190613dbf565b5081516116e5906005906020850190613dbf565b506006805460ff191660ff831617905583516110db906008906020870190613e39565b600e5481565b600060088281548110151561171f57fe5b600091825260209091200154600160a060020a031692915050565b6060600060088054905060405190808252806020026020018201604052801561176d578160200160208202803883390190505b509150600090505b60085481101561183357600880548290811061178d57fe5b60009182526020808320909101546040805160e060020a6370a082310281523060048201529051600160a060020a03909216936370a082319360248084019491939192918390030190829087803b1580156117e757600080fd5b505af11580156117fb573d6000803e3d6000fd5b505050506040513d602081101561181157600080fd5b5051825183908390811061182157fe5b60209081029091010152600101611775565b5090565b6000611303858585856000610f9f565b336000908152600360209081526040808320600160a060020a03861684529091528120548083111561189c57336000908152600360209081526040808320600160a060020a03881684529091528120556118d1565b6118ac818463ffffffff612c9216565b336000908152600360209081526040808320600160a060020a03891684529091529020555b336000818152600360209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b600054600160a060020a0316331461194e57600080fd5b600a5460ff16151561195f57600080fd5b600a805460ff19169055604080516000815290517f321b57e1e24a3854d5850e49ea76e2022dfd91f1614f6f8dc4842d696a977f579181900360200190a1565b6110db8585858560126134ee565b60606008805480602002602001604051908101604052809291908181526020018280548015611a0557602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116119e7575b5050505050905090565b600160a060020a031660009081526001602052604090205490565b600054600160a060020a03163314611a4157600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031681565b6005805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610f305780601f10610f0557610100808354040283529160200191610f30565b60085490565b600c6020526000908152604090205481565b600a5460ff1681565b6000600160a060020a0383161515611b3857600080fd5b33600090815260016020526040902054821115611b5457600080fd5b33600090815260016020526040902054611b74908363ffffffff612c9216565b3360009081526001602052604080822092909255600160a060020a03851681522054611ba6908363ffffffff61377116565b600160a060020a038416600081815260016020908152604091829020939093558051858152905191923392600080516020613f538339815191529281900390910190a350600192915050565b606080606080611c00611315565b91955093509150611c0f612262565b905090919293565b60095415611c71576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613f338339815191526044820152600080516020613f13833981519152606482015290519081900360840190fd5b611cd682826008805480602002602001604051908101604052809291908181526020018280548015611ccc57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611cae575b5050505050611e8d565b5050565b6040805160e060020a6370a082310281523060048201529051600091600160a060020a038716916370a082319160248082019260209290919082900301818787803b158015611d2857600080fd5b505af1158015611d3c573d6000803e3d6000fd5b505050506040513d6020811015611d5257600080fd5b50519050611d63868686868661377e565b611d92620f4240610fec611d85600e54620f424061377190919063ffffffff16565b849063ffffffff612ca416565b6040805160e060020a6370a082310281523060048201529051600160a060020a038816916370a082319160248083019260209291908290030181600087803b158015611ddd57600080fd5b505af1158015611df1573d6000803e3d6000fd5b505050506040513d6020811015611e0757600080fd5b50511015611e85576040805160e560020a62461bcd02815260206004820152602b60248201527f6c656e643a20746f6b656e73206d7573742062652072657475726e656420776960448201527f7468206c656e6420666565000000000000000000000000000000000000000000606482015290519081900360840190fd5b505050505050565b6000806000806009546000141515611ef1576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613f338339815191526044820152600080516020613f13833981519152606482015290519081900360840190fd5b8451600010611f4a576040805160e560020a62461bcd02815260206004820152601e60248201527f4172726179206f6620746f6b656e732063616e277420626520656d7074790000604482015290519081900360640190fd5b60025433600090815260016020526040902054909450611f70908763ffffffff612c9216565b33600090815260016020526040902055611f90848763ffffffff612c9216565b600255604080518781529051600160a060020a0389169133917f8c85614f24f81c7b85c9837ab8277cfc5062dea12393fe90c757220926b07a7b9181900360200190a36040805187815290516000913391600080516020613f538339815191529181900360200190a3600092505b84518310156121bd57600091505b828210156120dd57848281518110151561202257fe5b90602001906020020151600160a060020a0316858481518110151561204357fe5b60209081029091010151600160a060020a031614156120d2576040805160e560020a62461bcd02815260206004820152603b60248201527f756e62756e646c65536f6d653a2073686f756c64206e6f7420756e62756e646c60448201527f652073616d6520746f6b656e206d756c7469706c652074696d65730000000000606482015290519081900360840190fd5b60019091019061200c565b61217d84610fec8888878151811015156120f357fe5b60209081029091018101516040805160e060020a6370a082310281523060048201529051600160a060020a03909216926370a08231926024808401938290030181600087803b15801561214557600080fd5b505af1158015612159573d6000803e3d6000fd5b505050506040513d602081101561216f57600080fd5b50519063ffffffff612ca416565b90506121b28782878681518110151561219257fe5b60209081029091010151600160a060020a0316919063ffffffff612ce216565b600190920191611ffe565b50505050505050565b600054600160a060020a031633146121dd57600080fd5b61753081111561225d576040805160e560020a62461bcd02815260206004820152602f60248201527f7365744368616e67654665653a206665652073686f756c64206265206e6f742060448201527f67726561746572207468616e2033250000000000000000000000000000000000606482015290519081900360840190fd5b600f55565b60606000600880549050604051908082528060200260200182016040528015612295578160200160208202803883390190505b509150600090505b60085481101561183357600c60006008838154811015156122ba57fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205482518390839081106122ed57fe5b6020908102909101015260010161229d565b6006546101009004600160a060020a031681565b600054600160a060020a0316331461232a57600080fd5b600a5460ff161561233a57600080fd5b600a805460ff1916600190811790915560408051918252517f321b57e1e24a3854d5850e49ea76e2022dfd91f1614f6f8dc4842d696a977f579181900360200190a1565b6007805460018101825560009182527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805473ffffffffffffffffffffffffffffffffffffffff1916331790556123d68484610f38565b50600654604080517f1cb9ce63000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483019081526024830193845286516044840152865161010090950490911693631cb9ce639334938a93899390929160640190602085019080838360005b8381101561246357818101518382015260200161244b565b50505050905090810190601f1680156124905780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b1580156124af57600080fd5b505af11580156124c3573d6000803e3d6000fd5b50505050506040513d60208110156124da57600080fd5b505115156124e757600080fd5b6007805460001901906124fa9082613ea7565b506001949350505050565b60105481565b336000908152600360209081526040808320600160a060020a038616845290915281205461253f908363ffffffff61377116565b336000818152600360209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600054600160a060020a031633146125e657600080fd5b617530811115612666576040805160e560020a62461bcd02815260206004820152602d60248201527f7365744c656e644665653a206665652073686f756c64206265206e6f7420677260448201527f6561746572207468616e20332500000000000000000000000000000000000000606482015290519081900360840190fd5b600e55565b600054600160a060020a0316331461268257600080fd5b600d5460ff161561269257600080fd5b600d805460ff191660011790556040517fe3303657ddc260e5db6802cb30c890580e6fd9c716a85807fe6843d28da0dbd090600090a1565b600a5460609060009060ff1615612751576040805160e560020a62461bcd02815260206004820152603760248201527f4f7065726174696f6e2063616e277420626520706572666f726d65642062656360448201527f617573652062756e646c696e672069732064656e696564000000000000000000606482015290519081900360840190fd5b600954156127ab576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613f338339815191526044820152600080516020613f13833981519152606482015290519081900360840190fd5b600254151561282a576040805160e560020a62461bcd02815260206004820152603760248201527f54686973206d6574686f642063616e20626520757365642077697468206e6f6e60448201527f207a65726f20746f74616c20737570706c79206f6e6c79000000000000000000606482015290519081900360840190fd5b600854604080518281526020808402820101909152908015612856578160200160208202803883390190505b509150600090505b6008548110156128fb576128db600254610fec8560088581548110151561288157fe5b60009182526020808320909101546040805160e060020a6370a082310281523060048201529051600160a060020a03909216936370a082319360248084019491939192918390030190829087803b15801561214557600080fd5b82828151811015156128e957fe5b6020908102909101015260010161285e565b6129068484846130ec565b50505050565b600054600160a060020a0316331461292357600080fd5b61292c81613af7565b50565b620f424081565b60606000600880549050604051908082528060200260200182016040528015612969578160200160208202803883390190505b509150600090505b60085481101561183357600880548290811061298957fe5b9060005260206000200160009054906101000a9004600160a060020a0316600160a060020a031663313ce5676040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156129e457600080fd5b505af11580156129f8573d6000803e3d6000fd5b505050506040513d6020811015612a0e57600080fd5b50518251839083908110612a1e57fe5b60ff909216602092830290910190910152600101612971565b600d5460009060ff1615612abb576040805160e560020a62461bcd02815260206004820152603760248201527f4f7065726174696f6e2063616e277420626520706572666f726d65642062656360448201527f61757365206368616e676573206172652064656e696564000000000000000000606482015290519081900360840190fd5b60095415612b15576040805160e560020a62461bcd02815260206004820152602a6024820152600080516020613f338339815191526044820152600080516020613f13833981519152606482015290519081900360840190fd5b612b208585856110e2565b905060008111612b7a576040805160e560020a62461bcd02815260206004820152601960248201527f5468652072657475726e20616d6f756e74206973207a65726f00000000000000604482015290519081900360640190fd5b81811015612bf8576040805160e560020a62461bcd02815260206004820152602f60248201527f5468652072657475726e20616d6f756e74206973206c657373207468616e205f60448201527f6d696e52657475726e2076616c75650000000000000000000000000000000000606482015290519081900360840190fd5b612c13600160a060020a03861633308663ffffffff613b7416565b612c2d600160a060020a038516338363ffffffff612ce216565b33600160a060020a031684600160a060020a031686600160a060020a03167f24cee3d6b5651a987362aa6216b9d34a39212f0f1967dfd48c2c3a4fc3c576dc8685604051808381526020018281526020019250505060405180910390a4949350505050565b600082821115612c9e57fe5b50900390565b6000821515612cb557506000610f99565b50818102818382811515612cc557fe5b0414610f9957fe5b60008183811515612cda57fe5b049392505050565b6000811515612cf057612906565b6040805160e060020a6370a082310281523060048201529051600160a060020a038616916370a082319160248083019260209291908290030181600087803b158015612d3b57600080fd5b505af1158015612d4f573d6000803e3d6000fd5b505050506040513d6020811015612d6557600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0386811660048301526024820186905291519293509086169163a9059cbb916044808201926020929091908290030181600087803b158015612dd657600080fd5b505af1158015612dea573d6000803e3d6000fd5b505050506040513d6020811015612e0057600080fd5b50612e139050818363ffffffff612c9216565b6040805160e060020a6370a082310281523060048201529051600160a060020a038716916370a082319160248083019260209291908290030181600087803b158015612e5e57600080fd5b505af1158015612e72573d6000803e3d6000fd5b505050506040513d6020811015612e8857600080fd5b505114612906576040805160e560020a62461bcd02815260206004820152602b60248201527f636865636b65645472616e736665723a2046696e616c2062616c616e6365206460448201527f69646e2774206d61746368000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0383166000908152600c60205260408120548190819081108015612f465750600160a060020a0385166000908152600c6020526040812054115b8015612f64575084600160a060020a031686600160a060020a031614155b156130e3576040805160e060020a6370a082310281523060048201529051600160a060020a038816916370a082319160248083019260209291908290030181600087803b158015612fb457600080fd5b505af1158015612fc8573d6000803e3d6000fd5b505050506040513d6020811015612fde57600080fd5b50516040805160e060020a6370a082310281523060048201529051919350600160a060020a038716916370a08231916024808201926020929091908290030181600087803b15801561302f57600080fd5b505af1158015613043573d6000803e3d6000fd5b505050506040513d602081101561305957600080fd5b5051600160a060020a038087166000908152600c602052604080822054600b54938b1683529120549293506130e0926130b392610ff89187916130a791610fec908c9063ffffffff612ca416565b9063ffffffff61377116565b600160a060020a0388166000908152600c6020526040902054610fec90610ff8888663ffffffff612ca416565b92505b50509392505050565b600082151561316b576040805160e560020a62461bcd02815260206004820152602260248201527f42756e646c696e6720616d6f756e742073686f756c64206265206e6f6e2d7a6560448201527f726f000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8151600854146131eb576040805160e560020a62461bcd02815260206004820152603960248201527f4c656e67687473206f6620746f6b656e7320616e64205f746f6b656e416d6f7560448201527f6e74732061727261792073686f756c6420626520657175616c00000000000000606482015290519081900360840190fd5b5060005b6008548110156132be57818181518110151561320757fe5b602090810290910101511515613267576040805160e560020a62461bcd02815260206004820152601f60248201527f546f6b656e20616d6f756e742073686f756c64206265206e6f6e2d7a65726f00604482015290519081900360640190fd5b6132b63330848481518110151561327a57fe5b9060200190602002015160088581548110151561329357fe5b600091825260209091200154600160a060020a031692919063ffffffff613b7416565b6001016131ef565b6002546132d1908463ffffffff61377116565b600255600160a060020a0384166000908152600160205260409020546132fd908463ffffffff61377116565b600160a060020a0385166000818152600160209081526040918290209390935580518681529051919233927f6401d28c11d9f5749b7d2848c2af727680ae93ed2c51ac22e65ed498fb8dcb419281900390910190a3604080518481529051600160a060020a03861691600091600080516020613f538339815191529181900360200190a350505050565b6000600160a060020a038316151561339e57600080fd5b600160a060020a0384166000908152600160205260409020548211156133c357600080fd5b600160a060020a03841660009081526003602090815260408083203384529091529020548211156133f357600080fd5b600160a060020a03841660009081526001602052604090205461341c908363ffffffff612c9216565b600160a060020a038086166000908152600160205260408082209390935590851681522054613451908363ffffffff61377116565b600160a060020a038085166000908152600160209081526040808320949094559187168152600382528281203382529091522054613495908363ffffffff612c9216565b600160a060020a0380861660008181526003602090815260408083203384528252918290209490945580518681529051928716939192600080516020613f53833981519152929181900390910190a35060019392505050565b60006134fc86858585611464565b60085485511461357c576040805160e560020a62461bcd02815260206004820152603560248201527f4c656e67687473206f66205f746f6b656e7320616e64205f776569676874732060448201527f61727261792073686f756c6420626520657175616c0000000000000000000000606482015290519081900360840190fd5b5060005b600854811015611e8557848181518110151561359857fe5b60209081029091010151151561361e576040805160e560020a62461bcd02815260206004820152602c60248201527f546865205f776569676874732061727261792073686f756c64206e6f7420636f60448201527f6e7461696e73207a65726f730000000000000000000000000000000000000000606482015290519081900360840190fd5b600c600060088381548110151561363157fe5b6000918252602080832090910154600160a060020a03168352820192909252604001902054156136d1576040805160e560020a62461bcd02815260206004820152602160248201527f546865205f746f6b656e732061727261792068617665206475706c696361746560448201527f7300000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b84818151811015156136df57fe5b90602001906020020151600c60006008848154811015156136fc57fe5b6000918252602080832090910154600160a060020a03168352820192909252604001902055600b5415806137485750600b54858281518110151561373c57fe5b90602001906020020151105b1561376957848181518110151561375b57fe5b60209081029091010151600b555b600101613580565b81810182811015610f9957fe5b6040805160e060020a6370a082310281523060048201529051600091600160a060020a038716916370a082319160248082019260209290919082900301818787803b1580156137cc57600080fd5b505af11580156137e0573d6000803e3d6000fd5b505050506040513d60208110156137f657600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0389811660048301526024820188905291519293509087169163a9059cbb916044808201926020929091908290030181600087803b15801561386757600080fd5b505af115801561387b573d6000803e3d6000fd5b505050506040513d602081101561389157600080fd5b5050600980546001019055600654604080517f1cb9ce63000000000000000000000000000000000000000000000000000000008152600160a060020a03868116600483019081526024830193845286516044840152865161010090950490911693631cb9ce639334938993899390929160640190602085019080838360005b83811015613928578181015183820152602001613910565b50505050905090810190601f1680156139555780820380516001836020036101000a031916815260200191505b5093505050506020604051808303818588803b15801561397457600080fd5b505af1158015613988573d6000803e3d6000fd5b50505050506040513d602081101561399f57600080fd5b505115156139f7576040805160e560020a62461bcd02815260206004820152601b60248201527f6c656e643a206172626974726172792063616c6c206661696c65640000000000604482015290519081900360640190fd5b600980546000190190556040805160e060020a6370a0823102815230600482015290518291600160a060020a038816916370a08231916024808201926020929091908290030181600087803b158015613a4f57600080fd5b505af1158015613a63573d6000803e3d6000fd5b505050506040513d6020811015613a7957600080fd5b50511015611e85576040805160e560020a62461bcd02815260206004820152602360248201527f6c656e643a206c656e64656420746f6b656e206d75737420626520726566696c60448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0381161515613b0c57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000811515613b82576110db565b84600160a060020a03166370a08231846040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015613bdd57600080fd5b505af1158015613bf1573d6000803e3d6000fd5b505050506040513d6020811015613c0757600080fd5b5051604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0387811660048301528681166024830152604482018690529151929350908716916323b872dd916064808201926020929091908290030181600087803b158015613c8057600080fd5b505af1158015613c94573d6000803e3d6000fd5b505050506040513d6020811015613caa57600080fd5b50613cbd9050818363ffffffff61377116565b85600160a060020a03166370a08231856040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015613d1857600080fd5b505af1158015613d2c573d6000803e3d6000fd5b505050506040513d6020811015613d4257600080fd5b5051146110db576040805160e560020a62461bcd02815260206004820152602b60248201527f636865636b65645472616e736665723a2046696e616c2062616c616e6365206460448201527f69646e2774206d61746368000000000000000000000000000000000000000000606482015290519081900360840190fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613e0057805160ff1916838001178555613e2d565b82800160010185558215613e2d579182015b82811115613e2d578251825591602001919060010190613e12565b50611833929150613ec7565b828054828255906000526020600020908101928215613e9b579160200282015b82811115613e9b578251825473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909116178255602090920191600190910190613e59565b50611833929150613ee1565b8154818355818111156112a3576000838152602090206112a39181019083015b6110cb91905b808211156118335760008155600101613ecd565b6110cb91905b8082111561183357805473ffffffffffffffffffffffffffffffffffffffff19168155600101613ee756006c65206c656e64696e67000000000000000000000000000000000000000000004f7065726174696f6e2063616e277420626520706572666f726d656420776869ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582089c39d0af4ca6b3ed51e14a51a464e0e49722ad057a2047c7ca612e34ba61b870029
Swarm Source
bzzr://39d59b45b715101a09185b1755c7830869e338a2cd859e658c4553e45918f20b
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.