false
true
0

Contract Address Details

0x41479d43D274C6E61e88132125e2B97874569551

Contract Name
ArtistV2
Creator
0xc37f3a–b56de7 at 0xd62231–44f48d
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
26348633
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
ArtistV2




Optimization enabled
true
Compiler version
v0.5.17+commit.d19bba13




Optimization runs
800
EVM Version
istanbul




Verified at
2026-04-22T09:55:24.911509Z

artistv2.sol

// SPDX-License-Identifier: BUSL-1.1

pragma solidity ^0.5.16;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.5.16;

contract IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) public view returns (uint256 balance);
    function ownerOf(uint256 tokenId) public view returns (address owner);
    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) public;
    function isApprovedForAll(address owner, address operator) public view returns (bool);
    function transferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}

pragma solidity ^0.5.16;

contract IERC721Receiver {
    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
    public returns (bytes4);
}

pragma solidity ^0.5.16;

library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b);
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0);
        uint256 c = a / b;
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;
        return c;
    }
    
    function sub0(uint256 a, uint256 b) internal pure returns (uint256) {
        if(b > a){
            return 0;
        }
        uint256 c = a - b;
        return c;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
    
    
}

pragma solidity ^0.5.16;

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

pragma solidity ^0.5.16;

contract ERC165 is IERC165 {
    bytes4 internal constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () internal {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff);
        _supportedInterfaces[interfaceId] = true;
    }
}

pragma solidity ^0.5.16;

contract ERC721 is ERC165, IERC721 {
    using SafeMath for uint256;
    using Address for address;

    bytes4 internal constant _ERC721_RECEIVED = 0x150b7a02;
    mapping (uint256 => address) private _tokenOwner;
    mapping (uint256 => address) private _tokenApprovals;
    mapping (address => uint256) private _ownedTokensCount;
    mapping (address => mapping (address => bool)) private _operatorApprovals;
    bytes4 internal constant _INTERFACE_ID_ERC721 = 0x80ac58cd;

    constructor () public {
        _registerInterface(_INTERFACE_ID_ERC721);
    }

    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0));
        return _ownedTokensCount[owner];
    }

    function ownerOf(uint256 tokenId) public view returns (address) {
        address owner = _tokenOwner[tokenId];
        require(owner != address(0));
        return owner;
    }

    function approve(address to, uint256 tokenId) public {
        address owner = ownerOf(tokenId);
        require(to != owner);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender));

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view returns (address) {
        require(_exists(tokenId));
        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address to, bool approved) public {
        require(to != msg.sender);
        _operatorApprovals[msg.sender][to] = approved;
        emit ApprovalForAll(msg.sender, to, approved);
    }

    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(address from, address to, uint256 tokenId) public {
        require(_isApprovedOrOwner(msg.sender, tokenId));
        _transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
        transferFrom(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data));
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        address owner = _tokenOwner[tokenId];
        return owner != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    function _mint(address to, uint256 tokenId) internal {
        require(to != address(0));
        require(!_exists(tokenId));

        _tokenOwner[tokenId] = to;
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);

        emit Transfer(address(0), to, tokenId);
    }

    function _transferFrom(address from, address to, uint256 tokenId) internal {
        require(ownerOf(tokenId) == from);
        require(to != address(0));

        _clearApproval(tokenId);

        _ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);
        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        internal returns (bool)
    {
        if (!to.isContract()) {
            return true;
        }

        bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    function _clearApproval(uint256 tokenId) private {
        if (_tokenApprovals[tokenId] != address(0)) {
            _tokenApprovals[tokenId] = address(0);
        }
    }

}

pragma solidity ^0.5.16;

contract IERC721Enumerable is IERC721 {
    function totalSupply() public view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId);
    function tokenByIndex(uint256 index) public view returns (uint256);
}

pragma solidity ^0.5.16;

contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {

    mapping(address => uint256[]) private _ownedTokens;
    mapping(uint256 => uint256) private _ownedTokensIndex;
    uint256[] private _allTokens;
    mapping(uint256 => uint256) private _allTokensIndex;
    bytes4 internal constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;

    constructor () public {
        _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
    }

    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
        require(index < balanceOf(owner));
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index) public view returns (uint256) {
        require(index < totalSupply());
        return _allTokens[index];
    }

    function _transferFrom(address from, address to, uint256 tokenId) internal {
        super._transferFrom(from, to, tokenId);
        _removeTokenFromOwnerEnumeration(from, tokenId);
        _addTokenToOwnerEnumeration(to, tokenId);
    }

    function _mint(address to, uint256 tokenId) internal {
        super._mint(to, tokenId);
        _addTokenToOwnerEnumeration(to, tokenId);
        _addTokenToAllTokensEnumeration(tokenId);
    }

    function _tokensOfOwner(address owner) internal view returns (uint256[] storage) {
        return _ownedTokens[owner];
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        _ownedTokensIndex[tokenId] = _ownedTokens[to].length;
        _ownedTokens[to].push(tokenId);
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        uint256 lastTokenIndex = _ownedTokens[from].length.sub(1);
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
            _ownedTokens[from][tokenIndex] = lastTokenId;
            _ownedTokensIndex[lastTokenId] = tokenIndex;
        }

        _ownedTokens[from].length--;
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {

        uint256 lastTokenIndex = _allTokens.length.sub(1);
        uint256 tokenIndex = _allTokensIndex[tokenId];
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId;
        _allTokensIndex[lastTokenId] = tokenIndex;

        _allTokens.length--;
        _allTokensIndex[tokenId] = 0;
    }
}

pragma solidity ^0.5.16;

contract IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}


pragma solidity ^0.5.16;

contract ERC721Metadata is ERC165, ERC721, IERC721Metadata {

    string internal _name;
    string internal _symbol;

    bytes4 internal constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;

    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _registerInterface(_INTERFACE_ID_ERC721_METADATA);
    }

    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

}

pragma solidity ^0.5.16;

contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata {
    constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) {
   }
}
pragma solidity ^0.5.16;

contract IRadicalNFT is IERC165 {
    function round(uint256 _tokenid) external view returns (uint256 _round);
    function price(uint256 _round) public returns (uint256 _price);
    function getBidStartTime(uint256 tokenid)external view returns(uint64);
    function bid(address inviterAddress, uint256 tokenid) external payable;
}
contract RadicalNFT is ERC165,IRadicalNFT {

    bytes4 internal constant _INTERFACE_ID_RADICALNFT = 0x9203c74e;
 //       bytes4(keccak256('round(uint256)')) ^
 //       bytes4(keccak256('price(uint256)')) ^
 //       bytes4(keccak256('getBidStartTime(uint256)')) ^
 //   

    constructor () public {
       _registerInterface(_INTERFACE_ID_RADICALNFT);
    }
}

contract Ownable {
  address  owner;

    constructor() public {
    owner = msg.sender;
  }


  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  function transferOwnership(address newOwner) onlyOwner public {
    if (newOwner != address(0)) {
      owner = newOwner;
    }
  }

}

contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 internal constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 internal _status;

    constructor ()public {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}
contract ArtistBase is Ownable,ERC721Full,RadicalNFT,ReentrancyGuard {
    
    using SafeMath for uint256;
    
    bool public paused = false;
    address public cfoAddress;
    address cooAddress;
    
    address public  VBID_ADDRESS;
    address public  bonusPoolAddress;
    address public  devPoolAddress;  
    uint256[] private priceList;

    /// @dev The main art struct. 
    struct Art {

        uint256 id;

        // The timestamp from the block when aution startTime
        uint64 bidStartTime;
        uint64 bidEndTime;
        uint64 lastTime;
        uint64 round;
        //bid issue privileges
        bool bid;
        string ipfs;
    }


    uint256 public lastBidTime=0;
    Art[] public arts;

    //current id 
    uint256 curid;
    
    uint256 public bidInterval;
    uint256 private defaultBidTokenId;
    //this is defined by vbid. 
    //min(18% ✖️(1000000 - 该艺术家合约接收的总veBID数),0)
    //can only updated by contract of vbid 
    uint256 public tbdivident;
    //bid token address
    IERC20  bidtoken;

    //do NOT change memory map
    
    modifier onlyCLevel() {
        require(
            msg.sender == cooAddress 
        );
        _;
    }
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /// @dev Modifier to allow actions only when the contract IS paused
    modifier whenPaused {
        require(paused);
        _;
    }


    function pause() external onlyCLevel whenNotPaused {
        paused = true;
    }

    function unpause() public onlyCLevel whenPaused {
        paused = false;
    }
    

    function creatArt2(
        bool bidflag,
        string memory ipfsaddr,
        uint64 startTime,
        uint64 _bidEndTime

    )
        public
        whenNotPaused
        returns (uint256)
    {
         require(msg.sender == owner, "ERR_NOT_OWNER");


        if(lastBidTime==0){
            bidflag=false;
        }else if((now-lastBidTime)<bidInterval){
            bidflag=false;
        }else{
            if(bidflag){
                lastBidTime=now;
            }
        }


        if(_bidEndTime==0){
            _bidEndTime=uint64(-1);
        }
        Art memory _art = Art({
            id: curid,
            bidStartTime: startTime,
            bidEndTime:_bidEndTime,
            lastTime:uint64(now),
            round: 0,
            bid: bidflag,
            ipfs: ipfsaddr

        });
        curid = arts.push(_art) ;

        _mint(owner, curid-1);

        return curid;
    }

    
    function updateTopbidderDivident(uint256 _tb) 
        external
    {
        require(VBID_ADDRESS==msg.sender, "ERR_INVALID_VBID"); 
        if(_tb>=1000000 ether){
            tbdivident=0;
        }else{
            tbdivident=(1000000 ether-_tb).mul(1800).div(1000000 ether);
        }       
    }

    function setVBIDContract(address _vbid) 
        external
    {
         require(msg.sender == cfoAddress, "ERR_NOT_CFO");
        tbdivident=1800;
        VBID_ADDRESS=_vbid;    
    }
    
    function tokenURI(uint256 tokenId) external view returns (string memory) {
        require(_exists(tokenId));
        return arts[tokenId].ipfs;
    }

    function checkArtBidable(uint256 tokenId) external view returns (bool) {
        require(_exists(tokenId));
        return arts[tokenId].bid;
    }

    function openBidTokenAuthority() 
        external
        onlyCLevel
        {
            lastBidTime=now - bidInterval;
        }

    function closeBidTokenAuthority() 
        external
        onlyCLevel
        {
            lastBidTime=0;
        }

    function setBidInterval(uint256 interval) 
        external
        onlyCLevel
        {
            bidInterval=interval;
        }
        
    function changeArtData(uint256 tokenid,string calldata ipfs) 
        external
        onlyCLevel
        {
            require(tokenid<curid, "ERR_ARTID_TOOBIG");
            arts[tokenid].ipfs=ipfs;
        }
    function editArtData(uint256 tokenid,string calldata ipfs) 
        external
        onlyOwner
        {
            require(tokenid<curid, "ERR_ARTID_TOOBIG");
            require(arts[tokenid].bidStartTime>now,"ERR_ALREADY_START");
            arts[tokenid].ipfs=ipfs;
        }


    function checkBidable() view
        external
        returns (bool){
        
            if(lastBidTime==0){
                return false;
            }else if((now-lastBidTime)<bidInterval){
                return false;
            }else{
                return true;
            }
        
        }
    function getLatestTokenID() view
        external
        returns (uint256){
            return curid;
        }
        
    function setBidStartTime(uint256 tokenid,uint64 startTime) 
        external
        onlyOwner
        {
            require(tokenid<curid, "ERR_TOKEN_ID_ERROR");
            require(arts[tokenid].bidStartTime>now,"ERR_ALREADY_START");
            arts[tokenid].bidStartTime=startTime;
        }

    function getBidStartTime(uint256 tokenid) view
        external
        returns(uint64)
        {
            require(tokenid<curid, "ERR_TOKEN_ID_ERROR");
            return arts[tokenid].bidStartTime;
        }
        
    function setDefaultBidId(uint256 tokenid) 
        external
        onlyOwner
        {
            require(tokenid<curid, "ERR_TOKEN_ID_ERROR");

            defaultBidTokenId=tokenid;
        }
        
    function round(uint256 tokenid) view 
        external
        returns (uint256){
            return arts[tokenid].round;
        }
        

    event LOG_AUCTION_V2(
        uint256  artid,
        uint256  lastPrice,
        uint256  curPrice,
        uint256  bid,
        address  lastOwner,
        address  buyer,
        address  inviterAddress,
        uint256  artistdivident,
        uint256  tax
    );

    function () external
    whenNotPaused
     payable {
        _bid(devPoolAddress,defaultBidTokenId);
         
    }
   
      function bid(address inviterAddress, uint256 artid) payable
    whenNotPaused
     public {
        _bid(inviterAddress,artid); 
     }

     function price(uint256 _round) public
     returns (uint256)
     {
         //this round start from 1
         if(_round<10){
             return _round.mul(0.05 ether);
         }else if(_round==10){
             return 0.50 ether;
         }else{
             
             uint256 lastValue=priceList[priceList.length-1];
             for(uint256 i=priceList.length;i<(_round-9);i++){
                 lastValue=lastValue.mul(11).div(10);
                 priceList.push(lastValue);
             }
             
             return priceList[_round-10];
         }
     }     
     //you can NOT change init fuction as it has ready been executed
     function initRoundPrice() internal
     returns (uint256)
     {
         priceList.push(0.50 ether);
     }
     function dealBid(uint256 tokenid) internal
     returns (uint256)
     {
             
        uint256 x=0;
        if(arts[tokenid].bid){
            uint256 r=arts[tokenid].round;
            x=r<10?50 ether:((r+1).mul(5 ether));
            if(bidtoken.balanceOf(cfoAddress)>=x){
                bidtoken.transferFrom(cfoAddress,msg.sender,x);
            }else{
                x=0;
            }
        }
        return x;
     }
    uint256 constant baseprice=0.05 ether;
    //event DebugString(address indexed from, address indexed to, uint256 value, string  str);
    function _bid(address inviterAddress, uint256 artid) nonReentrant internal
     {
         require(artid<curid, "ERR_ARTID_TOOBIG");  
         address lastOwner=ownerOf(artid);
         require(lastOwner!=msg.sender, "ERR_CAN_NOT_PURCHASE_OWN_ART");       
         require(arts[artid].bidStartTime<now,"ERR_BID_NOT_START_YET");
         require(arts[artid].bidEndTime>now,"ERR_BID_END_ALREADY");
         uint256 r=arts[artid].round;
         
         if(r==0){
             
             {
                 require(msg.value>=baseprice, "ERR_NOT_ENOUGH_MONEY");
                  //return extra
                  
                  (bool success, ) =address(uint160(msg.sender)).call.value(msg.value.sub(baseprice))("");
                  require(success,"ERR refund to payer,maybe gas fail");
                  //pay artist
                  (bool success1, ) =address(uint160(owner)).call.value(baseprice)("");
                  require(success1,"ERR contract transfer eth to owner,maybe gas fail");
              }

             arts[artid].round++;
            _transferFrom(lastOwner, msg.sender, artid);

            if(arts[artid].bidEndTime<now+300){
                arts[artid].bidEndTime+=300;
            }
            arts[artid].lastTime=uint64(now);
            emit LOG_AUCTION_V2(artid,baseprice,baseprice,dealBid(artid),lastOwner,msg.sender,inviterAddress,0,0 );
            return;
         }

         
        uint256 curprice=price(r);
        uint256 payprice=price(r+1);
        require(msg.value>=payprice, "ERR_NOT_ENOUGH_MONEY");
        
         uint256 artistdivident=5000+1800-tbdivident;
         uint256 tax=0;
         {//only for stack deep issue
            //refund extra money
            (bool success2, ) =address(uint160(msg.sender)).call.value(msg.value.sub(payprice))("");
            require(success2,"ERR refund to payer,maybe gas fail");
         
             uint256 smoney=payprice-curprice;
             address(uint160(inviterAddress)).send(smoney.mul(2).div(100));
             smoney=smoney.mul(98).div(100);
             tax=tbdivident;

            address(uint160(bonusPoolAddress)).transfer(smoney.mul(tax).div(9800));
             
            (bool success, ) =address(uint160(owner)).call.value(smoney.mul(artistdivident).div(9800))("");
            require(success,"ERR contract transfer eth to owner,maybe gas fail");
    
            (bool success1, ) =address(uint160(lastOwner)).call.value(smoney.mul(9800 - artistdivident - tax ).div(9800).add(curprice))("");
            require(success1,"ERR pay to lastOwner,maybe gas fail");
         }

         arts[artid].round++;
    
          _transferFrom(lastOwner, msg.sender, artid);

        if(arts[artid].bidEndTime<now+300){
            arts[artid].bidEndTime+=300;
        }
        arts[artid].lastTime=uint64(now);
        emit LOG_AUCTION_V2(artid, curprice,payprice,dealBid(artid),lastOwner,msg.sender,inviterAddress,artistdivident,tax);
         
    }

}


interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address account) external view returns (uint);
    function transfer(address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
}

interface IArtistSetup {
    function setup_constructor(string calldata name,string calldata symbol,address artistaddr,
    address auditor,address _bid,address _bonusPool,address _devPool,address _vbid) external ;
}
contract ArtistV2 is ArtistBase,IArtistSetup{
    
    constructor() ERC721Full("MasterCopy","")
    public {
       owner=address(1);
    }

    function setup_constructor(string calldata name,string calldata symbol,address artistaddr,
    address auditor,address _bid,address _bonusPool,address _devPool,address _vbid)  external {
        require(address(0)==owner,"owner not zero error");
        _name=name;
        _symbol=symbol;
        bonusPoolAddress=_bonusPool;
        devPoolAddress=_devPool;
        bidtoken=IERC20(_bid);
        owner=artistaddr;
        cfoAddress=msg.sender;
        cooAddress=auditor;
        bidInterval=30 days;
        tbdivident=1800;
        VBID_ADDRESS=_vbid;
        
        _status = _NOT_ENTERED;
        initRoundPrice();
    }
    function setCOO(address _newCOO) external onlyCLevel {
        require(_newCOO != address(0));

        cooAddress = _newCOO;
    }
    function rescueETH(address _address) external onlyCLevel {
        address(uint160(_address)).transfer(address(this).balance);
    }
    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return (interfaceId==_INTERFACE_ID_ERC165)
        ||(interfaceId==_ERC721_RECEIVED)
        ||(interfaceId==_INTERFACE_ID_ERC721)
        ||(interfaceId==_INTERFACE_ID_ERC721_ENUMERABLE)
        ||(interfaceId==_INTERFACE_ID_ERC721_METADATA)
        ||(interfaceId==_INTERFACE_ID_RADICALNFT)
;
    }


    function getOwner()
        external view
        returns (address)
    {
        return owner;
    }

    function getBuildNumber() external view returns (uint256) {
        return 1168;
    }
 
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":800,"enabled":true},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"artistv2.sol":"ArtistV2"}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"approved","internalType":"address","indexed":true},{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"event","name":"ApprovalForAll","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"operator","internalType":"address","indexed":true},{"type":"bool","name":"approved","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"LOG_AUCTION_V2","inputs":[{"type":"uint256","name":"artid","internalType":"uint256","indexed":false},{"type":"uint256","name":"lastPrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"curPrice","internalType":"uint256","indexed":false},{"type":"uint256","name":"bid","internalType":"uint256","indexed":false},{"type":"address","name":"lastOwner","internalType":"address","indexed":false},{"type":"address","name":"buyer","internalType":"address","indexed":false},{"type":"address","name":"inviterAddress","internalType":"address","indexed":false},{"type":"uint256","name":"artistdivident","internalType":"uint256","indexed":false},{"type":"uint256","name":"tax","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"tokenId","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"fallback","stateMutability":"payable","payable":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"VBID_ADDRESS","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"approve","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"id","internalType":"uint256"},{"type":"uint64","name":"bidStartTime","internalType":"uint64"},{"type":"uint64","name":"bidEndTime","internalType":"uint64"},{"type":"uint64","name":"lastTime","internalType":"uint64"},{"type":"uint64","name":"round","internalType":"uint64"},{"type":"bool","name":"bid","internalType":"bool"},{"type":"string","name":"ipfs","internalType":"string"}],"name":"arts","inputs":[{"type":"uint256","name":"","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"owner","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"payable","payable":true,"outputs":[],"name":"bid","inputs":[{"type":"address","name":"inviterAddress","internalType":"address"},{"type":"uint256","name":"artid","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"bidInterval","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"bonusPoolAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"cfoAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"changeArtData","inputs":[{"type":"uint256","name":"tokenid","internalType":"uint256"},{"type":"string","name":"ipfs","internalType":"string"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"checkArtBidable","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"checkBidable","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"closeBidTokenAuthority","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"creatArt2","inputs":[{"type":"bool","name":"bidflag","internalType":"bool"},{"type":"string","name":"ipfsaddr","internalType":"string"},{"type":"uint64","name":"startTime","internalType":"uint64"},{"type":"uint64","name":"_bidEndTime","internalType":"uint64"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"devPoolAddress","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"editArtData","inputs":[{"type":"uint256","name":"tokenid","internalType":"uint256"},{"type":"string","name":"ipfs","internalType":"string"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getApproved","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint64","name":"","internalType":"uint64"}],"name":"getBidStartTime","inputs":[{"type":"uint256","name":"tokenid","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getBuildNumber","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLatestTokenID","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isApprovedForAll","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"operator","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastBidTime","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"openBidTokenAuthority","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"ownerOf","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"pause","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"paused","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"price","inputs":[{"type":"uint256","name":"_round","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"rescueETH","inputs":[{"type":"address","name":"_address","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"round","inputs":[{"type":"uint256","name":"tokenid","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"safeTransferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"},{"type":"bytes","name":"_data","internalType":"bytes"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setApprovalForAll","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"bool","name":"approved","internalType":"bool"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setBidInterval","inputs":[{"type":"uint256","name":"interval","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setBidStartTime","inputs":[{"type":"uint256","name":"tokenid","internalType":"uint256"},{"type":"uint64","name":"startTime","internalType":"uint64"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setCOO","inputs":[{"type":"address","name":"_newCOO","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setDefaultBidId","inputs":[{"type":"uint256","name":"tokenid","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setVBIDContract","inputs":[{"type":"address","name":"_vbid","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"setup_constructor","inputs":[{"type":"string","name":"name","internalType":"string"},{"type":"string","name":"symbol","internalType":"string"},{"type":"address","name":"artistaddr","internalType":"address"},{"type":"address","name":"auditor","internalType":"address"},{"type":"address","name":"_bid","internalType":"address"},{"type":"address","name":"_bonusPool","internalType":"address"},{"type":"address","name":"_devPool","internalType":"address"},{"type":"address","name":"_vbid","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceId","internalType":"bytes4"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tbdivident","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenByIndex","inputs":[{"type":"uint256","name":"index","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokenOfOwnerByIndex","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"uint256","name":"index","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"tokenURI","inputs":[{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"tokenId","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"unpause","inputs":[],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"updateTopbidderDivident","inputs":[{"type":"uint256","name":"_tb","internalType":"uint256"}],"constant":false}]
              

Contract Creation Code

Verify & Publish
0x6080604052600d805460ff1916905560006013553480156200002057600080fd5b50604080518082018252600a8152694d6173746572436f707960b01b6020808301919091528251908101909252600080835280546001600160a01b03191633179055908181620000806301ffc9a760e01b6001600160e01b036200013e16565b6200009b6380ac58cd60e01b6001600160e01b036200013e16565b620000b663780e9d6360e01b6001600160e01b036200013e16565b8151620000cb90600a9060208501906200017e565b508051620000e190600b9060208401906200017e565b50620000fd635b5e139f60e01b6001600160e01b036200013e16565b506200011e9250634901e3a760e11b9150506001600160e01b036200013e16565b6001600c819055600080546001600160a01b031916909117905562000223565b6001600160e01b031980821614156200015657600080fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001c157805160ff1916838001178555620001f1565b82800160010185558215620001f1579182015b82811115620001f1578251825591602001919060010190620001d4565b50620001ff92915062000203565b5090565b6200022091905b80821115620001ff57600081556001016200020a565b90565b61363a80620002336000396000f3fe6080604052600436106103295760003560e01c806370a08231116101a5578063b046229d116100ec578063d9a4cda711610095578063e985e9c51161006f578063e985e9c514610eae578063f0588e7c14610ee9578063f2fde38b14610efe578063fd9dc24b14610f3157610329565b8063d9a4cda714610d32578063da95f1d414610d79578063e57a104a14610d8e57610329565b8063bb4cc1d0116100c6578063bb4cc1d014610bf2578063c87b56dd14610cf3578063cf59e70514610d1d57610329565b8063b046229d14610af5578063b0b7d30c14610b0a578063b88d4fde14610b1f57610329565b8063893d20e81161014e578063a22cb46511610128578063a22cb465146109bd578063a5c087de146109f8578063a8d4868014610acb57610329565b8063893d20e81461090f5780638a9bfa031461092457806395d89b41146109a857610329565b806381c0f3da1161017f57806381c0f3da146108bb5780638456cb59146108e557806384efd675146108fa57610329565b806370a0823114610840578063750e8370146108735780637eda3065146108a657610329565b80632ba73c1511610274578063583058c61161021d5780635c975abb116101f75780635c975abb146107d75780636352211e146107ec578063642ab4b1146108165780636604a6a31461082b57610329565b8063583058c61461076c57806359d667a5146107815780635a4d8e54146107ad57610329565b80633f4ba83a1161024e5780633f4ba83a146106ea57806342842e0e146106ff5780634f6ccce71461074257610329565b80632ba73c15146106545780632f745c591461068757806334d5f37b146106c057610329565b80630d64ca03116102d657806325c5edf4116102b057806325c5edf41461059157806326a49e37146106155780632971e14d1461063f57610329565b80630d64ca03146104ed57806318160ddd1461052757806323b872dd1461054e57610329565b806306fdde031161030757806306fdde0314610400578063081812fc1461048a578063095ea7b3146104b457610329565b806301ffc9a71461035457806304824e701461039c5780630519ce79146103cf575b600d5460ff161561033957600080fd5b601154601754610352916001600160a01b031690610f5b565b005b34801561036057600080fd5b506103886004803603602081101561037757600080fd5b50356001600160e01b0319166119ec565b604080519115158252519081900360200190f35b3480156103a857600080fd5b50610352600480360360208110156103bf57600080fd5b50356001600160a01b0316611a91565b3480156103db57600080fd5b506103e4611ae1565b604080516001600160a01b039092168252519081900360200190f35b34801561040c57600080fd5b50610415611af5565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561044f578181015183820152602001610437565b50505050905090810190601f16801561047c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049657600080fd5b506103e4600480360360208110156104ad57600080fd5b5035611b8c565b3480156104c057600080fd5b50610352600480360360408110156104d757600080fd5b506001600160a01b038135169060200135611bbc565b3480156104f957600080fd5b506103526004803603604081101561051057600080fd5b508035906020013567ffffffffffffffff16611c69565b34801561053357600080fd5b5061053c611d92565b60408051918252519081900360200190f35b34801561055a57600080fd5b506103526004803603606081101561057157600080fd5b506001600160a01b03813581169160208101359091169060400135611d98565b34801561059d57600080fd5b50610352600480360360408110156105b457600080fd5b813591908101906040810160208201356401000000008111156105d657600080fd5b8201836020820111156105e857600080fd5b8035906020019184600183028401116401000000008311171561060a57600080fd5b509092509050611dbb565b34801561062157600080fd5b5061053c6004803603602081101561063857600080fd5b5035611ecc565b34801561064b57600080fd5b5061053c611fba565b34801561066057600080fd5b506103526004803603602081101561067757600080fd5b50356001600160a01b0316611fc0565b34801561069357600080fd5b5061053c600480360360408110156106aa57600080fd5b506001600160a01b03813516906020013561200c565b3480156106cc57600080fd5b5061053c600480360360208110156106e357600080fd5b503561205a565b3480156106f657600080fd5b50610352612094565b34801561070b57600080fd5b506103526004803603606081101561072257600080fd5b506001600160a01b038135811691602081013590911690604001356120c6565b34801561074e57600080fd5b5061053c6004803603602081101561076557600080fd5b50356120e1565b34801561077857600080fd5b506103e4612115565b6103526004803603604081101561079757600080fd5b506001600160a01b038135169060200135612124565b3480156107b957600080fd5b50610352600480360360208110156107d057600080fd5b503561213e565b3480156107e357600080fd5b5061038861215a565b3480156107f857600080fd5b506103e46004803603602081101561080f57600080fd5b5035612163565b34801561082257600080fd5b5061053c612185565b34801561083757600080fd5b506103e461218b565b34801561084c57600080fd5b5061053c6004803603602081101561086357600080fd5b50356001600160a01b031661219a565b34801561087f57600080fd5b506103526004803603602081101561089657600080fd5b50356001600160a01b03166121cb565b3480156108b257600080fd5b5061053c612257565b3480156108c757600080fd5b50610388600480360360208110156108de57600080fd5b503561225d565b3480156108f157600080fd5b5061035261229b565b34801561090657600080fd5b506103e46122d1565b34801561091b57600080fd5b506103e46122e0565b34801561093057600080fd5b506103526004803603604081101561094757600080fd5b8135919081019060408101602082013564010000000081111561096957600080fd5b82018360208201111561097b57600080fd5b8035906020019184600183028401116401000000008311171561099d57600080fd5b5090925090506122ef565b3480156109b457600080fd5b5061041561234f565b3480156109c957600080fd5b50610352600480360360408110156109e057600080fd5b506001600160a01b03813516906020013515156123b0565b348015610a0457600080fd5b5061053c60048036036080811015610a1b57600080fd5b813515159190810190604081016020820135640100000000811115610a3f57600080fd5b820183602082011115610a5157600080fd5b80359060200191846001830284011164010000000083111715610a7357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505067ffffffffffffffff83358116945060209093013590921691506124349050565b348015610ad757600080fd5b5061035260048036036020811015610aee57600080fd5b50356126d5565b348015610b0157600080fd5b5061053c61273c565b348015610b1657600080fd5b50610352612742565b348015610b2b57600080fd5b5061035260048036036080811015610b4257600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610b7d57600080fd5b820183602082011115610b8f57600080fd5b80359060200191846001830284011164010000000083111715610bb157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612763945050505050565b348015610bfe57600080fd5b506103526004803603610100811015610c1657600080fd5b810190602081018135640100000000811115610c3157600080fd5b820183602082011115610c4357600080fd5b80359060200191846001830284011164010000000083111715610c6557600080fd5b919390929091602081019035640100000000811115610c8357600080fd5b820183602082011115610c9557600080fd5b80359060200191846001830284011164010000000083111715610cb757600080fd5b91935091506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a0013516612783565b348015610cff57600080fd5b5061041560048036036020811015610d1657600080fd5b50356128b2565b348015610d2957600080fd5b5061053c612975565b348015610d3e57600080fd5b50610d5c60048036036020811015610d5557600080fd5b503561297b565b6040805167ffffffffffffffff9092168252519081900360200190f35b348015610d8557600080fd5b506103886129f9565b348015610d9a57600080fd5b50610db860048036036020811015610db157600080fd5b5035612a2c565b604051808881526020018767ffffffffffffffff1667ffffffffffffffff1681526020018667ffffffffffffffff1667ffffffffffffffff1681526020018567ffffffffffffffff1667ffffffffffffffff1681526020018467ffffffffffffffff1667ffffffffffffffff1681526020018315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610e6d578181015183820152602001610e55565b50505050905090810190601f168015610e9a5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b348015610eba57600080fd5b5061038860048036036040811015610ed157600080fd5b506001600160a01b0381358116916020013516612b20565b348015610ef557600080fd5b50610352612b4e565b348015610f0a57600080fd5b5061035260048036036020811015610f2157600080fd5b50356001600160a01b0316612b6c565b348015610f3d57600080fd5b5061035260048036036020811015610f5457600080fd5b5035612bb1565b6002600c541415610fb3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600c556015548110611001576040805162461bcd60e51b815260206004820152601060248201526f4552525f41525449445f544f4f42494760801b604482015290519081900360640190fd5b600061100c82612163565b90506001600160a01b03811633141561106c576040805162461bcd60e51b815260206004820152601c60248201527f4552525f43414e5f4e4f545f50555243484153455f4f574e5f41525400000000604482015290519081900360640190fd5b426014838154811061107a57fe5b600091825260209091206001600490920201015467ffffffffffffffff16106110ea576040805162461bcd60e51b815260206004820152601560248201527f4552525f4249445f4e4f545f53544152545f5945540000000000000000000000604482015290519081900360640190fd5b42601483815481106110f857fe5b6000918252602090912060049091020160010154600160401b900467ffffffffffffffff161161116f576040805162461bcd60e51b815260206004820152601360248201527f4552525f4249445f454e445f414c524541445900000000000000000000000000604482015290519081900360640190fd5b60006014838154811061117e57fe5b6000918252602090912060049091020160010154600160c01b900467ffffffffffffffff169050806114ff5766b1a2bc2ec50000341015611206576040805162461bcd60e51b815260206004820152601460248201527f4552525f4e4f545f454e4f5547485f4d4f4e4559000000000000000000000000604482015290519081900360640190fd5b6000336112203466b1a2bc2ec5000063ffffffff612c5316565b604051600081818185875af1925050503d806000811461125c576040519150601f19603f3d011682016040523d82523d6000602084013e611261565b606091505b50509050806112a15760405162461bcd60e51b81526004018080602001828103825260228152602001806135c16022913960400191505060405180910390fd5b600080546040516001600160a01b039091169066b1a2bc2ec50000908381818185875af1925050503d80600081146112f5576040519150601f19603f3d011682016040523d82523d6000602084013e6112fa565b606091505b505090508061133a5760405162461bcd60e51b81526004018080602001828103825260318152602001806135906031913960400191505060405180910390fd5b50506014838154811061134957fe5b6000918252602090912060016004909202018101805467ffffffffffffffff600160c01b8083048216909401169092026001600160c01b03909216919091179055611395823385612c68565b4261012c01601484815481106113a757fe5b6000918252602090912060049091020160010154600160401b900467ffffffffffffffff16101561142d5761012c601484815481106113e257fe5b60009182526020909120600160049092020101805467ffffffffffffffff600160401b8083048216909401169092026fffffffffffffffff0000000000000000199092169190911790555b426014848154811061143b57fe5b906000526020600020906004020160010160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f77f549a9207f95a5b71f53fe90262ac4af29b94e2d67160e48ba268976080f3b8366b1a2bc2ec50000806114a687612c87565b6040805194855260208501939093528383019190915260608301526001600160a01b0380861660808401523360a0840152871660c0830152600060e0830181905261010083015251908190036101200190a150506119e3565b600061150a82611ecc565b9050600061151a83600101611ecc565b905080341015611571576040805162461bcd60e51b815260206004820152601460248201527f4552525f4e4f545f454e4f5547485f4d4f4e4559000000000000000000000000604482015290519081900360640190fd5b601854611a90036000803361158c348663ffffffff612c5316565b604051600081818185875af1925050503d80600081146115c8576040519150601f19603f3d011682016040523d82523d6000602084013e6115cd565b606091505b505090508061160d5760405162461bcd60e51b81526004018080602001828103825260228152602001806135c16022913960400191505060405180910390fd5b8484036001600160a01b038a166108fc61163f606461163385600263ffffffff612e4d16565b9063ffffffff612e7b16565b6040518115909202916000818181858888f19350505050506116706064611633606284612e4d90919063ffffffff16565b6018546010549094509091506001600160a01b03166108fc61169e612648611633858863ffffffff612e4d16565b6040518115909202916000818181858888f193505050501580156116c6573d6000803e3d6000fd5b50600080546001600160a01b03166116ea612648611633858963ffffffff612e4d16565b604051600081818185875af1925050503d8060008114611726576040519150601f19603f3d011682016040523d82523d6000602084013e61172b565b606091505b505090508061176b5760405162461bcd60e51b81526004018080602001828103825260318152602001806135906031913960400191505060405180910390fd5b60006001600160a01b038a166117a289611796612648611633888c83038c900363ffffffff612e4d16565b9063ffffffff612e9d16565b604051600081818185875af1925050503d80600081146117de576040519150601f19603f3d011682016040523d82523d6000602084013e6117e3565b606091505b50509050806118235760405162461bcd60e51b81526004018080602001828103825260238152602001806135e36023913960400191505060405180910390fd5b505050506014878154811061183457fe5b6000918252602090912060016004909202018101805467ffffffffffffffff600160c01b8083048216909401169092026001600160c01b03909216919091179055611880863389612c68565b4261012c016014888154811061189257fe5b6000918252602090912060049091020160010154600160401b900467ffffffffffffffff1610156119185761012c601488815481106118cd57fe5b60009182526020909120600160049092020101805467ffffffffffffffff600160401b8083048216909401169092026fffffffffffffffff0000000000000000199092169190911790555b426014888154811061192657fe5b906000526020600020906004020160010160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f77f549a9207f95a5b71f53fe90262ac4af29b94e2d67160e48ba268976080f3b87858561198a8b612c87565b6040805194855260208501939093528383019190915260608301526001600160a01b03808a1660808401523360a08401528b1660c083015260e08201859052610100820184905251908190036101200190a15050505050505b50506001600c55565b60006001600160e01b031982166301ffc9a760e01b1480611a1d57506001600160e01b03198216630a85bd0160e11b145b80611a3857506001600160e01b031982166380ac58cd60e01b145b80611a5357506001600160e01b0319821663780e9d6360e01b145b80611a6e57506001600160e01b03198216635b5e139f60e01b145b80611a8957506001600160e01b03198216634901e3a760e11b145b90505b919050565b600e546001600160a01b03163314611aa857600080fd5b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015611add573d6000803e3d6000fd5b5050565b600d5461010090046001600160a01b031681565b600a8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015611b815780601f10611b5657610100808354040283529160200191611b81565b820191906000526020600020905b815481529060010190602001808311611b6457829003601f168201915b505050505090505b90565b6000611b9782612eaf565b611ba057600080fd5b506000908152600360205260409020546001600160a01b031690565b6000611bc782612163565b9050806001600160a01b0316836001600160a01b03161415611be857600080fd5b336001600160a01b0382161480611c045750611c048133612b20565b611c0d57600080fd5b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000546001600160a01b03163314611c8057600080fd5b6015548210611ccb576040805162461bcd60e51b815260206004820152601260248201527122a9292faa27a5a2a72fa4a22fa2a92927a960711b604482015290519081900360640190fd5b4260148381548110611cd957fe5b600091825260209091206001600490920201015467ffffffffffffffff1611611d49576040805162461bcd60e51b815260206004820152601160248201527f4552525f414c52454144595f5354415254000000000000000000000000000000604482015290519081900360640190fd5b8060148381548110611d5757fe5b906000526020600020906004020160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b60085490565b611da23382612ecc565b611dab57600080fd5b611db6838383612c68565b505050565b6000546001600160a01b03163314611dd257600080fd5b6015548310611e1b576040805162461bcd60e51b815260206004820152601060248201526f4552525f41525449445f544f4f42494760801b604482015290519081900360640190fd5b4260148481548110611e2957fe5b600091825260209091206001600490920201015467ffffffffffffffff1611611e99576040805162461bcd60e51b815260206004820152601160248201527f4552525f414c52454144595f5354415254000000000000000000000000000000604482015290519081900360640190fd5b818160148581548110611ea857fe5b90600052602060002090600402016003019190611ec692919061342b565b50505050565b6000600a821015611ef557611eee8266b1a2bc2ec5000063ffffffff612e4d16565b9050611a8c565b81600a1415611f0d57506706f05b59d3b20000611a8c565b60128054600091906000198101908110611f2357fe5b6000918252602090912001546012549091505b60098403811015611f9657611f57600a61163384600b63ffffffff612e4d16565b60128054600181810183556000929092527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440182905590925001611f36565b506012600a840381548110611fa757fe5b9060005260206000200154915050611a8c565b60185481565b600e546001600160a01b03163314611fd757600080fd5b6001600160a01b038116611fea57600080fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b60006120178361219a565b821061202257600080fd5b6001600160a01b038316600090815260066020526040902080548390811061204657fe5b906000526020600020015490505b92915050565b60006014828154811061206957fe5b6000918252602090912060049091020160010154600160c01b900467ffffffffffffffff1692915050565b600e546001600160a01b031633146120ab57600080fd5b600d5460ff166120ba57600080fd5b600d805460ff19169055565b611db683838360405180602001604052806000815250612763565b60006120eb611d92565b82106120f657600080fd5b6008828154811061210357fe5b90600052602060002001549050919050565b600f546001600160a01b031681565b600d5460ff161561213457600080fd5b611add8282610f5b565b600e546001600160a01b0316331461215557600080fd5b601655565b600d5460ff1681565b6000818152600260205260408120546001600160a01b031680611a8957600080fd5b60135481565b6010546001600160a01b031681565b60006001600160a01b0382166121af57600080fd5b506001600160a01b031660009081526004602052604090205490565b600d5461010090046001600160a01b0316331461222f576040805162461bcd60e51b815260206004820152600b60248201527f4552525f4e4f545f43464f000000000000000000000000000000000000000000604482015290519081900360640190fd5b610708601855600f80546001600160a01b0319166001600160a01b0392909216919091179055565b61049090565b600061226882612eaf565b61227157600080fd5b6014828154811061227e57fe5b600091825260209091206004909102016002015460ff1692915050565b600e546001600160a01b031633146122b257600080fd5b600d5460ff16156122c257600080fd5b600d805460ff19166001179055565b6011546001600160a01b031681565b6000546001600160a01b031690565b600e546001600160a01b0316331461230657600080fd5b6015548310611e99576040805162461bcd60e51b815260206004820152601060248201526f4552525f41525449445f544f4f42494760801b604482015290519081900360640190fd5b600b8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015611b815780601f10611b5657610100808354040283529160200191611b81565b6001600160a01b0382163314156123c657600080fd5b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600d5460009060ff161561244757600080fd5b6000546001600160a01b031633146124a6576040805162461bcd60e51b815260206004820152600d60248201527f4552525f4e4f545f4f574e455200000000000000000000000000000000000000604482015290519081900360640190fd5b6013546124b657600094506124d8565b601654601354420310156124cd57600094506124d8565b84156124d857426013555b67ffffffffffffffff82166124ed5760001991505b6124f56134a9565b506040805160e081018252601554815267ffffffffffffffff8581166020808401918252868316948401948552428316606085019081526000608086018181528c151560a0880190815260c088018d815260148054600181018083559190955289517fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec600490960295860190815597517fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ed860180549c519751955167ffffffffffffffff19909d16918b16919091176fffffffffffffffff00000000000000001916600160401b978b1697909702969096177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b948a1694909402939093176001600160c01b0316600160c01b9a909816999099029690961790925593517fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ee8501805460ff19169115159190911790559451805194959486946126a3937fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ef9091019201906134e7565b50505060158190556000546126c7916001600160a01b039091169060001901612f23565b50506015545b949350505050565b6000546001600160a01b031633146126ec57600080fd5b6015548110612737576040805162461bcd60e51b815260206004820152601260248201527122a9292faa27a5a2a72fa4a22fa2a92927a960711b604482015290519081900360640190fd5b601755565b60155490565b600e546001600160a01b0316331461275957600080fd5b6016544203601355565b61276e848484611d98565b61277a84848484612f40565b611ec657600080fd5b6000546001600160a01b0316156127e1576040805162461bcd60e51b815260206004820152601460248201527f6f776e6572206e6f74207a65726f206572726f72000000000000000000000000604482015290519081900360640190fd5b6127ed600a8b8b61342b565b506127fa600b898961342b565b50601080546001600160a01b03199081166001600160a01b0386811691909117909255601180548216858416179055601980548216878416179055600080548216898416179055600d80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101003302179055600e8054821688841617905562278d00601655610708601855600f80549091169183169190911790556001600c556128a5613073565b5050505050505050505050565b60606128bd82612eaf565b6128c657600080fd5b601482815481106128d357fe5b6000918252602091829020600360049092020101805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156129695780601f1061293e57610100808354040283529160200191612969565b820191906000526020600020905b81548152906001019060200180831161294c57829003601f168201915b50505050509050919050565b60165481565b600060155482106129c8576040805162461bcd60e51b815260206004820152601260248201527122a9292faa27a5a2a72fa4a22fa2a92927a960711b604482015290519081900360640190fd5b601482815481106129d557fe5b600091825260209091206004909102016001015467ffffffffffffffff1692915050565b600060135460001415612a0e57506000611b89565b60165460135442031015612a2457506000611b89565b506001611b89565b60148181548110612a3957fe5b60009182526020918290206004919091020180546001808301546002808501546003860180546040805161010097831615979097026000190190911693909304601f810189900489028601890190935282855294975067ffffffffffffffff80841697600160401b8504821697600160801b8604831697600160c01b9096049092169560ff90931694919390830182828015612b165780601f10612aeb57610100808354040283529160200191612b16565b820191906000526020600020905b815481529060010190602001808311612af957829003601f168201915b5050505050905087565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600e546001600160a01b03163314612b6557600080fd5b6000601355565b6000546001600160a01b03163314612b8357600080fd5b6001600160a01b03811615612bae57600080546001600160a01b0319166001600160a01b0383161790555b50565b600f546001600160a01b03163314612c10576040805162461bcd60e51b815260206004820152601060248201527f4552525f494e56414c49445f5642494400000000000000000000000000000000604482015290519081900360640190fd5b69d3c21bcecceda10000008110612c2b576000601855612bae565b612c4d69d3c21bcecceda100000061163383820361070863ffffffff612e4d16565b60185550565b600082821115612c6257600080fd5b50900390565b612c738383836130b3565b612c7d83826131c0565b611db682826132b5565b6000806000905060148381548110612c9b57fe5b600091825260209091206002600490920201015460ff1615611a8957600060148481548110612cc657fe5b6000918252602090912060049091020160010154600160c01b900467ffffffffffffffff169050600a8110612d1557612d1060018201674563918244f4000063ffffffff612e4d16565b612d20565b6802b5e3af16b18800005b601954600d54604080516370a0823160e01b81526101009092046001600160a01b039081166004840152905193955085939216916370a0823191602480820192602092909190829003018186803b158015612d7a57600080fd5b505afa158015612d8e573d6000803e3d6000fd5b505050506040513d6020811015612da457600080fd5b505110612e4157601954600d54604080516323b872dd60e01b81526101009092046001600160a01b0390811660048401523360248401526044830186905290519216916323b872dd916064808201926020929091908290030181600087803b158015612e0f57600080fd5b505af1158015612e23573d6000803e3d6000fd5b505050506040513d6020811015612e3957600080fd5b50612e469050565b600091505b5092915050565b600082612e5c57506000612054565b82820282848281612e6957fe5b0414612e7457600080fd5b9392505050565b6000808211612e8957600080fd5b6000828481612e9457fe5b04949350505050565b600082820183811015612e7457600080fd5b6000908152600260205260409020546001600160a01b0316151590565b600080612ed883612163565b9050806001600160a01b0316846001600160a01b03161480612f135750836001600160a01b0316612f0884611b8c565b6001600160a01b0316145b806126cd57506126cd8185612b20565b612f2d82826132f3565b612f3782826132b5565b611add816133a6565b6000612f54846001600160a01b03166133ea565b612f60575060016126cd565b604051630a85bd0160e11b815233600482018181526001600160a01b03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b83811015612fda578181015183820152602001612fc2565b50505050905090810190601f1680156130075780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561302957600080fd5b505af115801561303d573d6000803e3d6000fd5b505050506040513d602081101561305357600080fd5b50516001600160e01b031916630a85bd0160e11b14915050949350505050565b6012805460018101825560009182526706f05b59d3b200007fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34449091015590565b826001600160a01b03166130c682612163565b6001600160a01b0316146130d957600080fd5b6001600160a01b0382166130ec57600080fd5b6130f5816133f0565b6001600160a01b03831660009081526004602052604090205461311f90600163ffffffff612c5316565b6001600160a01b03808516600090815260046020526040808220939093559084168152205461315590600163ffffffff612e9d16565b6001600160a01b038084166000818152600460209081526040808320959095558582526002905283812080546001600160a01b031916831790559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b0382166000908152600660205260408120546131ea90600163ffffffff612c5316565b600083815260076020526040902054909150808214613285576001600160a01b038416600090815260066020526040812080548490811061322757fe5b906000526020600020015490508060066000876001600160a01b03166001600160a01b03168152602001908152602001600020838154811061326557fe5b600091825260208083209091019290925591825260079052604090208190555b6001600160a01b03841660009081526006602052604090208054906132ae906000198301613555565b5050505050565b6001600160a01b0390911660009081526006602081815260408084208054868652600784529185208290559282526001810183559183529091200155565b6001600160a01b03821661330657600080fd5b61330f81612eaf565b1561331957600080fd5b600081815260026020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600490915290205461335b906001612e9d565b6001600160a01b0383166000818152600460205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b3b151590565b6000818152600360205260409020546001600160a01b031615612bae57600090815260036020526040902080546001600160a01b0319169055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061346c5782800160ff19823516178555613499565b82800160010185558215613499579182015b8281111561349957823582559160200191906001019061347e565b506134a5929150613575565b5090565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820183905260a082019290925260c081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061352857805160ff1916838001178555613499565b82800160010185558215613499579182015b8281111561349957825182559160200191906001019061353a565b815481835581811115611db657600083815260209020611db69181019083015b611b8991905b808211156134a5576000815560010161357b56fe45525220636f6e7472616374207472616e736665722065746820746f206f776e65722c6d6179626520676173206661696c45525220726566756e6420746f2070617965722c6d6179626520676173206661696c4552522070617920746f206c6173744f776e65722c6d6179626520676173206661696ca265627a7a72315820ce37f3b43e8baa7f32825d92d31a0477802b08ef0d17f2123664d61e274d419264736f6c63430005110032

Deployed ByteCode

0x6080604052600436106103295760003560e01c806370a08231116101a5578063b046229d116100ec578063d9a4cda711610095578063e985e9c51161006f578063e985e9c514610eae578063f0588e7c14610ee9578063f2fde38b14610efe578063fd9dc24b14610f3157610329565b8063d9a4cda714610d32578063da95f1d414610d79578063e57a104a14610d8e57610329565b8063bb4cc1d0116100c6578063bb4cc1d014610bf2578063c87b56dd14610cf3578063cf59e70514610d1d57610329565b8063b046229d14610af5578063b0b7d30c14610b0a578063b88d4fde14610b1f57610329565b8063893d20e81161014e578063a22cb46511610128578063a22cb465146109bd578063a5c087de146109f8578063a8d4868014610acb57610329565b8063893d20e81461090f5780638a9bfa031461092457806395d89b41146109a857610329565b806381c0f3da1161017f57806381c0f3da146108bb5780638456cb59146108e557806384efd675146108fa57610329565b806370a0823114610840578063750e8370146108735780637eda3065146108a657610329565b80632ba73c1511610274578063583058c61161021d5780635c975abb116101f75780635c975abb146107d75780636352211e146107ec578063642ab4b1146108165780636604a6a31461082b57610329565b8063583058c61461076c57806359d667a5146107815780635a4d8e54146107ad57610329565b80633f4ba83a1161024e5780633f4ba83a146106ea57806342842e0e146106ff5780634f6ccce71461074257610329565b80632ba73c15146106545780632f745c591461068757806334d5f37b146106c057610329565b80630d64ca03116102d657806325c5edf4116102b057806325c5edf41461059157806326a49e37146106155780632971e14d1461063f57610329565b80630d64ca03146104ed57806318160ddd1461052757806323b872dd1461054e57610329565b806306fdde031161030757806306fdde0314610400578063081812fc1461048a578063095ea7b3146104b457610329565b806301ffc9a71461035457806304824e701461039c5780630519ce79146103cf575b600d5460ff161561033957600080fd5b601154601754610352916001600160a01b031690610f5b565b005b34801561036057600080fd5b506103886004803603602081101561037757600080fd5b50356001600160e01b0319166119ec565b604080519115158252519081900360200190f35b3480156103a857600080fd5b50610352600480360360208110156103bf57600080fd5b50356001600160a01b0316611a91565b3480156103db57600080fd5b506103e4611ae1565b604080516001600160a01b039092168252519081900360200190f35b34801561040c57600080fd5b50610415611af5565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561044f578181015183820152602001610437565b50505050905090810190601f16801561047c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561049657600080fd5b506103e4600480360360208110156104ad57600080fd5b5035611b8c565b3480156104c057600080fd5b50610352600480360360408110156104d757600080fd5b506001600160a01b038135169060200135611bbc565b3480156104f957600080fd5b506103526004803603604081101561051057600080fd5b508035906020013567ffffffffffffffff16611c69565b34801561053357600080fd5b5061053c611d92565b60408051918252519081900360200190f35b34801561055a57600080fd5b506103526004803603606081101561057157600080fd5b506001600160a01b03813581169160208101359091169060400135611d98565b34801561059d57600080fd5b50610352600480360360408110156105b457600080fd5b813591908101906040810160208201356401000000008111156105d657600080fd5b8201836020820111156105e857600080fd5b8035906020019184600183028401116401000000008311171561060a57600080fd5b509092509050611dbb565b34801561062157600080fd5b5061053c6004803603602081101561063857600080fd5b5035611ecc565b34801561064b57600080fd5b5061053c611fba565b34801561066057600080fd5b506103526004803603602081101561067757600080fd5b50356001600160a01b0316611fc0565b34801561069357600080fd5b5061053c600480360360408110156106aa57600080fd5b506001600160a01b03813516906020013561200c565b3480156106cc57600080fd5b5061053c600480360360208110156106e357600080fd5b503561205a565b3480156106f657600080fd5b50610352612094565b34801561070b57600080fd5b506103526004803603606081101561072257600080fd5b506001600160a01b038135811691602081013590911690604001356120c6565b34801561074e57600080fd5b5061053c6004803603602081101561076557600080fd5b50356120e1565b34801561077857600080fd5b506103e4612115565b6103526004803603604081101561079757600080fd5b506001600160a01b038135169060200135612124565b3480156107b957600080fd5b50610352600480360360208110156107d057600080fd5b503561213e565b3480156107e357600080fd5b5061038861215a565b3480156107f857600080fd5b506103e46004803603602081101561080f57600080fd5b5035612163565b34801561082257600080fd5b5061053c612185565b34801561083757600080fd5b506103e461218b565b34801561084c57600080fd5b5061053c6004803603602081101561086357600080fd5b50356001600160a01b031661219a565b34801561087f57600080fd5b506103526004803603602081101561089657600080fd5b50356001600160a01b03166121cb565b3480156108b257600080fd5b5061053c612257565b3480156108c757600080fd5b50610388600480360360208110156108de57600080fd5b503561225d565b3480156108f157600080fd5b5061035261229b565b34801561090657600080fd5b506103e46122d1565b34801561091b57600080fd5b506103e46122e0565b34801561093057600080fd5b506103526004803603604081101561094757600080fd5b8135919081019060408101602082013564010000000081111561096957600080fd5b82018360208201111561097b57600080fd5b8035906020019184600183028401116401000000008311171561099d57600080fd5b5090925090506122ef565b3480156109b457600080fd5b5061041561234f565b3480156109c957600080fd5b50610352600480360360408110156109e057600080fd5b506001600160a01b03813516906020013515156123b0565b348015610a0457600080fd5b5061053c60048036036080811015610a1b57600080fd5b813515159190810190604081016020820135640100000000811115610a3f57600080fd5b820183602082011115610a5157600080fd5b80359060200191846001830284011164010000000083111715610a7357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505067ffffffffffffffff83358116945060209093013590921691506124349050565b348015610ad757600080fd5b5061035260048036036020811015610aee57600080fd5b50356126d5565b348015610b0157600080fd5b5061053c61273c565b348015610b1657600080fd5b50610352612742565b348015610b2b57600080fd5b5061035260048036036080811015610b4257600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610b7d57600080fd5b820183602082011115610b8f57600080fd5b80359060200191846001830284011164010000000083111715610bb157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612763945050505050565b348015610bfe57600080fd5b506103526004803603610100811015610c1657600080fd5b810190602081018135640100000000811115610c3157600080fd5b820183602082011115610c4357600080fd5b80359060200191846001830284011164010000000083111715610c6557600080fd5b919390929091602081019035640100000000811115610c8357600080fd5b820183602082011115610c9557600080fd5b80359060200191846001830284011164010000000083111715610cb757600080fd5b91935091506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a0013516612783565b348015610cff57600080fd5b5061041560048036036020811015610d1657600080fd5b50356128b2565b348015610d2957600080fd5b5061053c612975565b348015610d3e57600080fd5b50610d5c60048036036020811015610d5557600080fd5b503561297b565b6040805167ffffffffffffffff9092168252519081900360200190f35b348015610d8557600080fd5b506103886129f9565b348015610d9a57600080fd5b50610db860048036036020811015610db157600080fd5b5035612a2c565b604051808881526020018767ffffffffffffffff1667ffffffffffffffff1681526020018667ffffffffffffffff1667ffffffffffffffff1681526020018567ffffffffffffffff1667ffffffffffffffff1681526020018467ffffffffffffffff1667ffffffffffffffff1681526020018315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610e6d578181015183820152602001610e55565b50505050905090810190601f168015610e9a5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b348015610eba57600080fd5b5061038860048036036040811015610ed157600080fd5b506001600160a01b0381358116916020013516612b20565b348015610ef557600080fd5b50610352612b4e565b348015610f0a57600080fd5b5061035260048036036020811015610f2157600080fd5b50356001600160a01b0316612b6c565b348015610f3d57600080fd5b5061035260048036036020811015610f5457600080fd5b5035612bb1565b6002600c541415610fb3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600c556015548110611001576040805162461bcd60e51b815260206004820152601060248201526f4552525f41525449445f544f4f42494760801b604482015290519081900360640190fd5b600061100c82612163565b90506001600160a01b03811633141561106c576040805162461bcd60e51b815260206004820152601c60248201527f4552525f43414e5f4e4f545f50555243484153455f4f574e5f41525400000000604482015290519081900360640190fd5b426014838154811061107a57fe5b600091825260209091206001600490920201015467ffffffffffffffff16106110ea576040805162461bcd60e51b815260206004820152601560248201527f4552525f4249445f4e4f545f53544152545f5945540000000000000000000000604482015290519081900360640190fd5b42601483815481106110f857fe5b6000918252602090912060049091020160010154600160401b900467ffffffffffffffff161161116f576040805162461bcd60e51b815260206004820152601360248201527f4552525f4249445f454e445f414c524541445900000000000000000000000000604482015290519081900360640190fd5b60006014838154811061117e57fe5b6000918252602090912060049091020160010154600160c01b900467ffffffffffffffff169050806114ff5766b1a2bc2ec50000341015611206576040805162461bcd60e51b815260206004820152601460248201527f4552525f4e4f545f454e4f5547485f4d4f4e4559000000000000000000000000604482015290519081900360640190fd5b6000336112203466b1a2bc2ec5000063ffffffff612c5316565b604051600081818185875af1925050503d806000811461125c576040519150601f19603f3d011682016040523d82523d6000602084013e611261565b606091505b50509050806112a15760405162461bcd60e51b81526004018080602001828103825260228152602001806135c16022913960400191505060405180910390fd5b600080546040516001600160a01b039091169066b1a2bc2ec50000908381818185875af1925050503d80600081146112f5576040519150601f19603f3d011682016040523d82523d6000602084013e6112fa565b606091505b505090508061133a5760405162461bcd60e51b81526004018080602001828103825260318152602001806135906031913960400191505060405180910390fd5b50506014838154811061134957fe5b6000918252602090912060016004909202018101805467ffffffffffffffff600160c01b8083048216909401169092026001600160c01b03909216919091179055611395823385612c68565b4261012c01601484815481106113a757fe5b6000918252602090912060049091020160010154600160401b900467ffffffffffffffff16101561142d5761012c601484815481106113e257fe5b60009182526020909120600160049092020101805467ffffffffffffffff600160401b8083048216909401169092026fffffffffffffffff0000000000000000199092169190911790555b426014848154811061143b57fe5b906000526020600020906004020160010160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f77f549a9207f95a5b71f53fe90262ac4af29b94e2d67160e48ba268976080f3b8366b1a2bc2ec50000806114a687612c87565b6040805194855260208501939093528383019190915260608301526001600160a01b0380861660808401523360a0840152871660c0830152600060e0830181905261010083015251908190036101200190a150506119e3565b600061150a82611ecc565b9050600061151a83600101611ecc565b905080341015611571576040805162461bcd60e51b815260206004820152601460248201527f4552525f4e4f545f454e4f5547485f4d4f4e4559000000000000000000000000604482015290519081900360640190fd5b601854611a90036000803361158c348663ffffffff612c5316565b604051600081818185875af1925050503d80600081146115c8576040519150601f19603f3d011682016040523d82523d6000602084013e6115cd565b606091505b505090508061160d5760405162461bcd60e51b81526004018080602001828103825260228152602001806135c16022913960400191505060405180910390fd5b8484036001600160a01b038a166108fc61163f606461163385600263ffffffff612e4d16565b9063ffffffff612e7b16565b6040518115909202916000818181858888f19350505050506116706064611633606284612e4d90919063ffffffff16565b6018546010549094509091506001600160a01b03166108fc61169e612648611633858863ffffffff612e4d16565b6040518115909202916000818181858888f193505050501580156116c6573d6000803e3d6000fd5b50600080546001600160a01b03166116ea612648611633858963ffffffff612e4d16565b604051600081818185875af1925050503d8060008114611726576040519150601f19603f3d011682016040523d82523d6000602084013e61172b565b606091505b505090508061176b5760405162461bcd60e51b81526004018080602001828103825260318152602001806135906031913960400191505060405180910390fd5b60006001600160a01b038a166117a289611796612648611633888c83038c900363ffffffff612e4d16565b9063ffffffff612e9d16565b604051600081818185875af1925050503d80600081146117de576040519150601f19603f3d011682016040523d82523d6000602084013e6117e3565b606091505b50509050806118235760405162461bcd60e51b81526004018080602001828103825260238152602001806135e36023913960400191505060405180910390fd5b505050506014878154811061183457fe5b6000918252602090912060016004909202018101805467ffffffffffffffff600160c01b8083048216909401169092026001600160c01b03909216919091179055611880863389612c68565b4261012c016014888154811061189257fe5b6000918252602090912060049091020160010154600160401b900467ffffffffffffffff1610156119185761012c601488815481106118cd57fe5b60009182526020909120600160049092020101805467ffffffffffffffff600160401b8083048216909401169092026fffffffffffffffff0000000000000000199092169190911790555b426014888154811061192657fe5b906000526020600020906004020160010160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507f77f549a9207f95a5b71f53fe90262ac4af29b94e2d67160e48ba268976080f3b87858561198a8b612c87565b6040805194855260208501939093528383019190915260608301526001600160a01b03808a1660808401523360a08401528b1660c083015260e08201859052610100820184905251908190036101200190a15050505050505b50506001600c55565b60006001600160e01b031982166301ffc9a760e01b1480611a1d57506001600160e01b03198216630a85bd0160e11b145b80611a3857506001600160e01b031982166380ac58cd60e01b145b80611a5357506001600160e01b0319821663780e9d6360e01b145b80611a6e57506001600160e01b03198216635b5e139f60e01b145b80611a8957506001600160e01b03198216634901e3a760e11b145b90505b919050565b600e546001600160a01b03163314611aa857600080fd5b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015611add573d6000803e3d6000fd5b5050565b600d5461010090046001600160a01b031681565b600a8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015611b815780601f10611b5657610100808354040283529160200191611b81565b820191906000526020600020905b815481529060010190602001808311611b6457829003601f168201915b505050505090505b90565b6000611b9782612eaf565b611ba057600080fd5b506000908152600360205260409020546001600160a01b031690565b6000611bc782612163565b9050806001600160a01b0316836001600160a01b03161415611be857600080fd5b336001600160a01b0382161480611c045750611c048133612b20565b611c0d57600080fd5b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000546001600160a01b03163314611c8057600080fd5b6015548210611ccb576040805162461bcd60e51b815260206004820152601260248201527122a9292faa27a5a2a72fa4a22fa2a92927a960711b604482015290519081900360640190fd5b4260148381548110611cd957fe5b600091825260209091206001600490920201015467ffffffffffffffff1611611d49576040805162461bcd60e51b815260206004820152601160248201527f4552525f414c52454144595f5354415254000000000000000000000000000000604482015290519081900360640190fd5b8060148381548110611d5757fe5b906000526020600020906004020160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b60085490565b611da23382612ecc565b611dab57600080fd5b611db6838383612c68565b505050565b6000546001600160a01b03163314611dd257600080fd5b6015548310611e1b576040805162461bcd60e51b815260206004820152601060248201526f4552525f41525449445f544f4f42494760801b604482015290519081900360640190fd5b4260148481548110611e2957fe5b600091825260209091206001600490920201015467ffffffffffffffff1611611e99576040805162461bcd60e51b815260206004820152601160248201527f4552525f414c52454144595f5354415254000000000000000000000000000000604482015290519081900360640190fd5b818160148581548110611ea857fe5b90600052602060002090600402016003019190611ec692919061342b565b50505050565b6000600a821015611ef557611eee8266b1a2bc2ec5000063ffffffff612e4d16565b9050611a8c565b81600a1415611f0d57506706f05b59d3b20000611a8c565b60128054600091906000198101908110611f2357fe5b6000918252602090912001546012549091505b60098403811015611f9657611f57600a61163384600b63ffffffff612e4d16565b60128054600181810183556000929092527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440182905590925001611f36565b506012600a840381548110611fa757fe5b9060005260206000200154915050611a8c565b60185481565b600e546001600160a01b03163314611fd757600080fd5b6001600160a01b038116611fea57600080fd5b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b60006120178361219a565b821061202257600080fd5b6001600160a01b038316600090815260066020526040902080548390811061204657fe5b906000526020600020015490505b92915050565b60006014828154811061206957fe5b6000918252602090912060049091020160010154600160c01b900467ffffffffffffffff1692915050565b600e546001600160a01b031633146120ab57600080fd5b600d5460ff166120ba57600080fd5b600d805460ff19169055565b611db683838360405180602001604052806000815250612763565b60006120eb611d92565b82106120f657600080fd5b6008828154811061210357fe5b90600052602060002001549050919050565b600f546001600160a01b031681565b600d5460ff161561213457600080fd5b611add8282610f5b565b600e546001600160a01b0316331461215557600080fd5b601655565b600d5460ff1681565b6000818152600260205260408120546001600160a01b031680611a8957600080fd5b60135481565b6010546001600160a01b031681565b60006001600160a01b0382166121af57600080fd5b506001600160a01b031660009081526004602052604090205490565b600d5461010090046001600160a01b0316331461222f576040805162461bcd60e51b815260206004820152600b60248201527f4552525f4e4f545f43464f000000000000000000000000000000000000000000604482015290519081900360640190fd5b610708601855600f80546001600160a01b0319166001600160a01b0392909216919091179055565b61049090565b600061226882612eaf565b61227157600080fd5b6014828154811061227e57fe5b600091825260209091206004909102016002015460ff1692915050565b600e546001600160a01b031633146122b257600080fd5b600d5460ff16156122c257600080fd5b600d805460ff19166001179055565b6011546001600160a01b031681565b6000546001600160a01b031690565b600e546001600160a01b0316331461230657600080fd5b6015548310611e99576040805162461bcd60e51b815260206004820152601060248201526f4552525f41525449445f544f4f42494760801b604482015290519081900360640190fd5b600b8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015611b815780601f10611b5657610100808354040283529160200191611b81565b6001600160a01b0382163314156123c657600080fd5b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b600d5460009060ff161561244757600080fd5b6000546001600160a01b031633146124a6576040805162461bcd60e51b815260206004820152600d60248201527f4552525f4e4f545f4f574e455200000000000000000000000000000000000000604482015290519081900360640190fd5b6013546124b657600094506124d8565b601654601354420310156124cd57600094506124d8565b84156124d857426013555b67ffffffffffffffff82166124ed5760001991505b6124f56134a9565b506040805160e081018252601554815267ffffffffffffffff8581166020808401918252868316948401948552428316606085019081526000608086018181528c151560a0880190815260c088018d815260148054600181018083559190955289517fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec600490960295860190815597517fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ed860180549c519751955167ffffffffffffffff19909d16918b16919091176fffffffffffffffff00000000000000001916600160401b978b1697909702969096177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff16600160801b948a1694909402939093176001600160c01b0316600160c01b9a909816999099029690961790925593517fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ee8501805460ff19169115159190911790559451805194959486946126a3937fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ef9091019201906134e7565b50505060158190556000546126c7916001600160a01b039091169060001901612f23565b50506015545b949350505050565b6000546001600160a01b031633146126ec57600080fd5b6015548110612737576040805162461bcd60e51b815260206004820152601260248201527122a9292faa27a5a2a72fa4a22fa2a92927a960711b604482015290519081900360640190fd5b601755565b60155490565b600e546001600160a01b0316331461275957600080fd5b6016544203601355565b61276e848484611d98565b61277a84848484612f40565b611ec657600080fd5b6000546001600160a01b0316156127e1576040805162461bcd60e51b815260206004820152601460248201527f6f776e6572206e6f74207a65726f206572726f72000000000000000000000000604482015290519081900360640190fd5b6127ed600a8b8b61342b565b506127fa600b898961342b565b50601080546001600160a01b03199081166001600160a01b0386811691909117909255601180548216858416179055601980548216878416179055600080548216898416179055600d80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101003302179055600e8054821688841617905562278d00601655610708601855600f80549091169183169190911790556001600c556128a5613073565b5050505050505050505050565b60606128bd82612eaf565b6128c657600080fd5b601482815481106128d357fe5b6000918252602091829020600360049092020101805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156129695780601f1061293e57610100808354040283529160200191612969565b820191906000526020600020905b81548152906001019060200180831161294c57829003601f168201915b50505050509050919050565b60165481565b600060155482106129c8576040805162461bcd60e51b815260206004820152601260248201527122a9292faa27a5a2a72fa4a22fa2a92927a960711b604482015290519081900360640190fd5b601482815481106129d557fe5b600091825260209091206004909102016001015467ffffffffffffffff1692915050565b600060135460001415612a0e57506000611b89565b60165460135442031015612a2457506000611b89565b506001611b89565b60148181548110612a3957fe5b60009182526020918290206004919091020180546001808301546002808501546003860180546040805161010097831615979097026000190190911693909304601f810189900489028601890190935282855294975067ffffffffffffffff80841697600160401b8504821697600160801b8604831697600160c01b9096049092169560ff90931694919390830182828015612b165780601f10612aeb57610100808354040283529160200191612b16565b820191906000526020600020905b815481529060010190602001808311612af957829003601f168201915b5050505050905087565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600e546001600160a01b03163314612b6557600080fd5b6000601355565b6000546001600160a01b03163314612b8357600080fd5b6001600160a01b03811615612bae57600080546001600160a01b0319166001600160a01b0383161790555b50565b600f546001600160a01b03163314612c10576040805162461bcd60e51b815260206004820152601060248201527f4552525f494e56414c49445f5642494400000000000000000000000000000000604482015290519081900360640190fd5b69d3c21bcecceda10000008110612c2b576000601855612bae565b612c4d69d3c21bcecceda100000061163383820361070863ffffffff612e4d16565b60185550565b600082821115612c6257600080fd5b50900390565b612c738383836130b3565b612c7d83826131c0565b611db682826132b5565b6000806000905060148381548110612c9b57fe5b600091825260209091206002600490920201015460ff1615611a8957600060148481548110612cc657fe5b6000918252602090912060049091020160010154600160c01b900467ffffffffffffffff169050600a8110612d1557612d1060018201674563918244f4000063ffffffff612e4d16565b612d20565b6802b5e3af16b18800005b601954600d54604080516370a0823160e01b81526101009092046001600160a01b039081166004840152905193955085939216916370a0823191602480820192602092909190829003018186803b158015612d7a57600080fd5b505afa158015612d8e573d6000803e3d6000fd5b505050506040513d6020811015612da457600080fd5b505110612e4157601954600d54604080516323b872dd60e01b81526101009092046001600160a01b0390811660048401523360248401526044830186905290519216916323b872dd916064808201926020929091908290030181600087803b158015612e0f57600080fd5b505af1158015612e23573d6000803e3d6000fd5b505050506040513d6020811015612e3957600080fd5b50612e469050565b600091505b5092915050565b600082612e5c57506000612054565b82820282848281612e6957fe5b0414612e7457600080fd5b9392505050565b6000808211612e8957600080fd5b6000828481612e9457fe5b04949350505050565b600082820183811015612e7457600080fd5b6000908152600260205260409020546001600160a01b0316151590565b600080612ed883612163565b9050806001600160a01b0316846001600160a01b03161480612f135750836001600160a01b0316612f0884611b8c565b6001600160a01b0316145b806126cd57506126cd8185612b20565b612f2d82826132f3565b612f3782826132b5565b611add816133a6565b6000612f54846001600160a01b03166133ea565b612f60575060016126cd565b604051630a85bd0160e11b815233600482018181526001600160a01b03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b83811015612fda578181015183820152602001612fc2565b50505050905090810190601f1680156130075780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561302957600080fd5b505af115801561303d573d6000803e3d6000fd5b505050506040513d602081101561305357600080fd5b50516001600160e01b031916630a85bd0160e11b14915050949350505050565b6012805460018101825560009182526706f05b59d3b200007fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34449091015590565b826001600160a01b03166130c682612163565b6001600160a01b0316146130d957600080fd5b6001600160a01b0382166130ec57600080fd5b6130f5816133f0565b6001600160a01b03831660009081526004602052604090205461311f90600163ffffffff612c5316565b6001600160a01b03808516600090815260046020526040808220939093559084168152205461315590600163ffffffff612e9d16565b6001600160a01b038084166000818152600460209081526040808320959095558582526002905283812080546001600160a01b031916831790559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6001600160a01b0382166000908152600660205260408120546131ea90600163ffffffff612c5316565b600083815260076020526040902054909150808214613285576001600160a01b038416600090815260066020526040812080548490811061322757fe5b906000526020600020015490508060066000876001600160a01b03166001600160a01b03168152602001908152602001600020838154811061326557fe5b600091825260208083209091019290925591825260079052604090208190555b6001600160a01b03841660009081526006602052604090208054906132ae906000198301613555565b5050505050565b6001600160a01b0390911660009081526006602081815260408084208054868652600784529185208290559282526001810183559183529091200155565b6001600160a01b03821661330657600080fd5b61330f81612eaf565b1561331957600080fd5b600081815260026020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558352600490915290205461335b906001612e9d565b6001600160a01b0383166000818152600460205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b3b151590565b6000818152600360205260409020546001600160a01b031615612bae57600090815260036020526040902080546001600160a01b0319169055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061346c5782800160ff19823516178555613499565b82800160010185558215613499579182015b8281111561349957823582559160200191906001019061347e565b506134a5929150613575565b5090565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820183905260a082019290925260c081019190915290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061352857805160ff1916838001178555613499565b82800160010185558215613499579182015b8281111561349957825182559160200191906001019061353a565b815481835581811115611db657600083815260209020611db69181019083015b611b8991905b808211156134a5576000815560010161357b56fe45525220636f6e7472616374207472616e736665722065746820746f206f776e65722c6d6179626520676173206661696c45525220726566756e6420746f2070617965722c6d6179626520676173206661696c4552522070617920746f206c6173744f776e65722c6d6179626520676173206661696ca265627a7a72315820ce37f3b43e8baa7f32825d92d31a0477802b08ef0d17f2123664d61e274d419264736f6c63430005110032