ETH Price: $3,297.00 (-0.08%)

Token

Deflationary (DEF)
 

Overview

Max Total Supply

996,197,709,604,349.661461265 DEF

Holders

32 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
checknow.eth
Balance
42,752,688,643.350167103 DEF

Value
$0.00
0x5453e6725c73ccb1CeFdB8C991e5B82951197823
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Deflationary (DEF) is the native utility token for DEFswap Finance platform. DEF is a true deflationary token with a use case and the goal of creating financial literacy. Inflation is a lifetime problem and $DEF has a lifetime deflationary solution.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Deflationary

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-26
*/

/**
 *Submitted for verification at Etherscan.io on 2023-01-20
*/

// SPDX-License-Identifier: UNILICENSE
pragma solidity ^0.8.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract Deflationary is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);

    uint256 private _tTotal = 1000000000000000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tRfiFeeTotal;
    uint256 private _tBurnFeeTotal;

    string private constant _name = "Deflationary";
    string private constant _symbol = "DEF";

    struct feeRatesStruct {
      uint8 rfi;
      uint8 burn;
    }

    feeRatesStruct public feeRates = feeRatesStruct(
     {rfi: 0,
      burn: 3
    });

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rBurn;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tBurn;
    }

    event FeesChanged();

    constructor () {
        _rOwned[owner()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        
        emit Transfer(address(0), owner(), _tTotal);
    }

    //std ERC20:
    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    //override ERC20:
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalRfiFees() public view returns (uint256) {
        return _tRfiFeeTotal;
    }

    function totalBurnFees() public view returns (uint256) {
        return _tBurnFeeTotal;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferRfi) {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true);
            return s.rTransferAmount;
        }
    }


    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    //@dev kept original RFI naming -> "reward" as in reflection
    function excludeFromReward(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function setFeeRates(uint8 _burn) public onlyOwner {
      feeRates.burn = _burn;
      emit FeesChanged();
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal = _rTotal.sub(rRfi);
        _tRfiFeeTotal = _tRfiFeeTotal.add(tRfi);
    }

    function _takeBurn(uint256 rBurn, uint256 tBurn) private {
        _tBurnFeeTotal=_tBurnFeeTotal.add(tBurn);
        _tTotal = _tTotal.sub(tBurn);
        _rTotal = _rTotal.sub(rBurn);
    }

    function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi,to_return.rBurn) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }

    function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) {

        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
        s.tRfi = tAmount.mul(feeRates.rfi).div(100);
        s.tBurn = tAmount.mul(feeRates.burn).div(100);
        s.tTransferAmount = tAmount.sub(s.tRfi).sub(s.tBurn);
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rBurn) {
        rAmount = tAmount.mul(currentRate);

        if(!takeFee) {
          return(rAmount, rAmount, 0,0);
        }

        rRfi = s.tRfi.mul(currentRate);
        rBurn = s.tBurn.mul(currentRate);
        rTransferAmount =  rAmount.sub(rRfi).sub(rBurn);
        return (rAmount, rTransferAmount, rRfi,rBurn);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }


    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");
        
        _tokenTransfer(from, to, amount, !(_isExcludedFromFee[from] || _isExcludedFromFee[to]));
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private {

        valuesFromGetValues memory s = _getValues(tAmount, takeFee);

        if (_isExcluded[sender] && !_isExcluded[recipient]) {  //from excluded
                _tOwned[sender] = _tOwned[sender].sub(tAmount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) { //to excluded
                _tOwned[recipient] = _tOwned[recipient].add(s.tTransferAmount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) { //both excl
                _tOwned[sender] = _tOwned[sender].sub(tAmount);
                _tOwned[recipient] = _tOwned[recipient].add(s.tTransferAmount);
        }

        _rOwned[sender] = _rOwned[sender].sub(s.rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(s.rTransferAmount);
        _reflectRfi(s.rRfi, s.tRfi);
        _takeBurn(s.rBurn,s.tBurn);
        emit Transfer(sender, recipient, s.tTransferAmount);
        emit Transfer(sender, address(0), s.tBurn);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeRates","outputs":[{"internalType":"uint8","name":"rfi","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_burn","type":"uint8"}],"name":"setFeeRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRfiFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052620000126009600a620002c6565b620000259066038d7ea4c68000620002de565b60078190556200003890600019620002f8565b62000046906000196200031b565b60085560408051808201909152600081526003602090910152600b805461ffff19166103001790553480156200007b57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060085460016000620000d76000546001600160a01b031690565b6001600160a01b03166001600160a01b031681526020019081526020016000208190555060016004600062000111620001a260201b60201c565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200014c6000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040516200019491815260200190565b60405180910390a362000331565b6000546001600160a01b031690565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000208578160001904821115620001ec57620001ec620001b1565b80851615620001fa57918102915b93841c9390800290620001cc565b509250929050565b6000826200022157506001620002c0565b816200023057506000620002c0565b8160018114620002495760028114620002545762000274565b6001915050620002c0565b60ff841115620002685762000268620001b1565b50506001821b620002c0565b5060208310610133831016604e8410600b841016171562000299575081810a620002c0565b620002a58383620001c7565b8060001904821115620002bc57620002bc620001b1565b0290505b92915050565b6000620002d760ff84168362000210565b9392505050565b8082028115828204841417620002c057620002c0620001b1565b6000826200031657634e487b7160e01b600052601260045260246000fd5b500690565b81810381811115620002c057620002c0620001b1565b61192d80620003416000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de57806395d89b4111610097578063d4deb14111610071578063d4deb141146103b6578063dd62ed3e146103be578063ea2f0b37146103f7578063f2fde38b1461040a57600080fd5b806395d89b4114610371578063a457c2d714610390578063a9059cbb146103a357600080fd5b806370a08231146102cc578063715018a6146102df5780637688c584146102e757806388f82020146103175780638da5cb5b146103435780639417ac7c1461035e57600080fd5b8063317653e01161014b578063437823ec11610125578063437823ec146102675780634549b0391461027a57806352390c021461028d5780635342acb4146102a057600080fd5b8063317653e0146102375780633685d4191461023f578063395093511461025457600080fd5b806306fdde0314610193578063095ea7b3146101cd57806318160ddd146101f057806323b872dd146102025780632d83811914610215578063313ce56714610228575b600080fd5b60408051808201909152600c81526b4465666c6174696f6e61727960a01b60208201525b6040516101c4919061162c565b60405180910390f35b6101e06101db366004611696565b61041d565b60405190151581526020016101c4565b6007545b6040519081526020016101c4565b6101e06102103660046116c0565b610434565b6101f46102233660046116fc565b61049d565b604051600981526020016101c4565b600a546101f4565b61025261024d366004611715565b610526565b005b6101e0610262366004611696565b6106dc565b610252610275366004611715565b610712565b6101f4610288366004611730565b610760565b61025261029b366004611715565b6107ea565b6101e06102ae366004611715565b6001600160a01b031660009081526004602052604090205460ff1690565b6101f46102da366004611715565b61093d565b61025261099c565b600b546102fd9060ff8082169161010090041682565b6040805160ff9384168152929091166020830152016101c4565b6101e0610325366004611715565b6001600160a01b031660009081526005602052604090205460ff1690565b6000546040516001600160a01b0390911681526020016101c4565b61025261036c366004611765565b610a10565b6040805180820190915260038152622222a360e91b60208201526101b7565b6101e061039e366004611696565b610a7a565b6101e06103b1366004611696565b610ac9565b6009546101f4565b6101f46103cc366004611788565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b610252610405366004611715565b610ad6565b610252610418366004611715565b610b21565b600061042a338484610c0b565b5060015b92915050565b6000610441848484610d2f565b610493843361048e856040518060600160405280602881526020016118ab602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190610f1d565b610c0b565b5060019392505050565b60006008548211156105095760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610513610f49565b905061051f8382610f6c565b9392505050565b6000546001600160a01b031633146105505760405162461bcd60e51b8152600401610500906117bb565b6001600160a01b03811660009081526005602052604090205460ff166105b85760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610500565b60005b6006548110156106d857816001600160a01b0316600682815481106105e2576105e26117f0565b6000918252602090912001546001600160a01b0316036106c6576006805461060c9060019061181c565b8154811061061c5761061c6117f0565b600091825260209091200154600680546001600160a01b039092169183908110610648576106486117f0565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560068054806106a0576106a061182f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806106d081611845565b9150506105bb565b5050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161042a91859061048e9086610f78565b6000546001600160a01b0316331461073c5760405162461bcd60e51b8152600401610500906117bb565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006007548311156107b45760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610500565b816107d05760006107c6846001610f84565b51915061042e9050565b60006107dd846001610f84565b60200151915061042e9050565b6000546001600160a01b031633146108145760405162461bcd60e51b8152600401610500906117bb565b6001600160a01b03811660009081526005602052604090205460ff161561087d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610500565b6001600160a01b038116600090815260016020526040902054156108d7576001600160a01b0381166000908152600160205260409020546108bd9061049d565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff161561097a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461042e9061049d565b6000546001600160a01b031633146109c65760405162461bcd60e51b8152600401610500906117bb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610a3a5760405162461bcd60e51b8152600401610500906117bb565b600b805461ff00191661010060ff8416021790556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150565b600061042a338461048e856040518060600160405280602581526020016118d3602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190610f1d565b600061042a338484610d2f565b6000546001600160a01b03163314610b005760405162461bcd60e51b8152600401610500906117bb565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314610b4b5760405162461bcd60e51b8152600401610500906117bb565b6001600160a01b038116610bb05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610500565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610c6d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610500565b6001600160a01b038216610cce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610500565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610d935760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610500565b6001600160a01b038216610df55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610500565b60008111610e575760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610500565b610e608361093d565b811115610ec95760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610500565b6001600160a01b038316600090815260046020526040902054610f189084908490849060ff1680610f1257506001600160a01b03861660009081526004602052604090205460ff165b15610ffa565b505050565b60008184841115610f415760405162461bcd60e51b8152600401610500919061162c565b505050900390565b6000806000610f56611319565b9092509050610f658282610f6c565b9250505090565b600061051f828461185e565b600061051f8284611880565b610fc46040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610fce838361149b565b9050610fe3818484610fde610f49565b611559565b606085015260408401526020830152815292915050565b60006110068383610f84565b6001600160a01b03861660009081526005602052604090205490915060ff16801561104a57506001600160a01b03841660009081526005602052604090205460ff16155b15611090576001600160a01b03851660009081526002602052604090205461107290846115bc565b6001600160a01b0386166000908152600260205260409020556111d3565b6001600160a01b03851660009081526005602052604090205460ff161580156110d157506001600160a01b03841660009081526005602052604090205460ff165b1561111b5760808101516001600160a01b0385166000908152600260205260409020546110fd91610f78565b6001600160a01b0385166000908152600260205260409020556111d3565b6001600160a01b03851660009081526005602052604090205460ff16801561115b57506001600160a01b03841660009081526005602052604090205460ff165b156111d3576001600160a01b03851660009081526002602052604090205461118390846115bc565b6001600160a01b03808716600090815260026020526040808220939093556080840151918716815291909120546111b991610f78565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b0386166000908152600160205260409020546111f7916115bc565b6001600160a01b038087166000908152600160209081526040808320949094558401519187168152919091205461122d91610f78565b6001600160a01b038516600090815260016020526040908190209190915581015160a082015161125d91906115c8565b61126f81606001518260c001516115ec565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516112b891815260200190565b60405180910390a360006001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161130a91815260200190565b60405180910390a35050505050565b6008546007546000918291825b60065481101561146b57826001600060068481548110611348576113486117f0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806113b3575081600260006006848154811061138c5761138c6117f0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156113c957600854600754945094505050509091565b61140f60016000600684815481106113e3576113e36117f0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906115bc565b9250611457600260006006848154811061142b5761142b6117f0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906115bc565b91508061146381611845565b915050611326565b5060075460085461147b91610f6c565b821015611492576008546007549350935050509091565b90939092509050565b6114db6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b816114ec576080810183905261042e565b600b5461150a9060649061150490869060ff16611620565b90610f6c565b60a0820152600b5461152c90606490611504908690610100900460ff16611620565b60c0820181905260a082015161154e91906115489086906115bc565b906115bc565b608082015292915050565b60008080806115688786611620565b93508561157d575082915060009050806115b1565b60a088015161158c9086611620565b60c089015190925061159e9086611620565b90506115ae8161154886856115bc565b92505b945094509450949050565b600061051f828461181c565b6008546115d590836115bc565b6008556009546115e59082610f78565b6009555050565b600a546115f99082610f78565b600a5560075461160990826115bc565b60075560085461161990836115bc565b6008555050565b600061051f8284611893565b600060208083528351808285015260005b818110156116595785810183015185820160400152820161163d565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461169157600080fd5b919050565b600080604083850312156116a957600080fd5b6116b28361167a565b946020939093013593505050565b6000806000606084860312156116d557600080fd5b6116de8461167a565b92506116ec6020850161167a565b9150604084013590509250925092565b60006020828403121561170e57600080fd5b5035919050565b60006020828403121561172757600080fd5b61051f8261167a565b6000806040838503121561174357600080fd5b823591506020830135801515811461175a57600080fd5b809150509250929050565b60006020828403121561177757600080fd5b813560ff8116811461051f57600080fd5b6000806040838503121561179b57600080fd5b6117a48361167a565b91506117b26020840161167a565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561042e5761042e611806565b634e487b7160e01b600052603160045260246000fd5b60006001820161185757611857611806565b5060010190565b60008261187b57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561042e5761042e611806565b808202811582820484141761042e5761042e61180656fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dadf848fb1f6fa7697c83c734766f4a2c5d7f99a04503eaaee9081a2fc760c9b64736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806370a08231116100de57806395d89b4111610097578063d4deb14111610071578063d4deb141146103b6578063dd62ed3e146103be578063ea2f0b37146103f7578063f2fde38b1461040a57600080fd5b806395d89b4114610371578063a457c2d714610390578063a9059cbb146103a357600080fd5b806370a08231146102cc578063715018a6146102df5780637688c584146102e757806388f82020146103175780638da5cb5b146103435780639417ac7c1461035e57600080fd5b8063317653e01161014b578063437823ec11610125578063437823ec146102675780634549b0391461027a57806352390c021461028d5780635342acb4146102a057600080fd5b8063317653e0146102375780633685d4191461023f578063395093511461025457600080fd5b806306fdde0314610193578063095ea7b3146101cd57806318160ddd146101f057806323b872dd146102025780632d83811914610215578063313ce56714610228575b600080fd5b60408051808201909152600c81526b4465666c6174696f6e61727960a01b60208201525b6040516101c4919061162c565b60405180910390f35b6101e06101db366004611696565b61041d565b60405190151581526020016101c4565b6007545b6040519081526020016101c4565b6101e06102103660046116c0565b610434565b6101f46102233660046116fc565b61049d565b604051600981526020016101c4565b600a546101f4565b61025261024d366004611715565b610526565b005b6101e0610262366004611696565b6106dc565b610252610275366004611715565b610712565b6101f4610288366004611730565b610760565b61025261029b366004611715565b6107ea565b6101e06102ae366004611715565b6001600160a01b031660009081526004602052604090205460ff1690565b6101f46102da366004611715565b61093d565b61025261099c565b600b546102fd9060ff8082169161010090041682565b6040805160ff9384168152929091166020830152016101c4565b6101e0610325366004611715565b6001600160a01b031660009081526005602052604090205460ff1690565b6000546040516001600160a01b0390911681526020016101c4565b61025261036c366004611765565b610a10565b6040805180820190915260038152622222a360e91b60208201526101b7565b6101e061039e366004611696565b610a7a565b6101e06103b1366004611696565b610ac9565b6009546101f4565b6101f46103cc366004611788565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b610252610405366004611715565b610ad6565b610252610418366004611715565b610b21565b600061042a338484610c0b565b5060015b92915050565b6000610441848484610d2f565b610493843361048e856040518060600160405280602881526020016118ab602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190610f1d565b610c0b565b5060019392505050565b60006008548211156105095760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610513610f49565b905061051f8382610f6c565b9392505050565b6000546001600160a01b031633146105505760405162461bcd60e51b8152600401610500906117bb565b6001600160a01b03811660009081526005602052604090205460ff166105b85760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610500565b60005b6006548110156106d857816001600160a01b0316600682815481106105e2576105e26117f0565b6000918252602090912001546001600160a01b0316036106c6576006805461060c9060019061181c565b8154811061061c5761061c6117f0565b600091825260209091200154600680546001600160a01b039092169183908110610648576106486117f0565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff1916905560068054806106a0576106a061182f565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b806106d081611845565b9150506105bb565b5050565b3360008181526003602090815260408083206001600160a01b0387168452909152812054909161042a91859061048e9086610f78565b6000546001600160a01b0316331461073c5760405162461bcd60e51b8152600401610500906117bb565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b60006007548311156107b45760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610500565b816107d05760006107c6846001610f84565b51915061042e9050565b60006107dd846001610f84565b60200151915061042e9050565b6000546001600160a01b031633146108145760405162461bcd60e51b8152600401610500906117bb565b6001600160a01b03811660009081526005602052604090205460ff161561087d5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610500565b6001600160a01b038116600090815260016020526040902054156108d7576001600160a01b0381166000908152600160205260409020546108bd9061049d565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff161561097a57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461042e9061049d565b6000546001600160a01b031633146109c65760405162461bcd60e51b8152600401610500906117bb565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610a3a5760405162461bcd60e51b8152600401610500906117bb565b600b805461ff00191661010060ff8416021790556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150565b600061042a338461048e856040518060600160405280602581526020016118d3602591393360009081526003602090815260408083206001600160a01b038d1684529091529020549190610f1d565b600061042a338484610d2f565b6000546001600160a01b03163314610b005760405162461bcd60e51b8152600401610500906117bb565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314610b4b5760405162461bcd60e51b8152600401610500906117bb565b6001600160a01b038116610bb05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610500565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316610c6d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610500565b6001600160a01b038216610cce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610500565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610d935760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610500565b6001600160a01b038216610df55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610500565b60008111610e575760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610500565b610e608361093d565b811115610ec95760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610500565b6001600160a01b038316600090815260046020526040902054610f189084908490849060ff1680610f1257506001600160a01b03861660009081526004602052604090205460ff165b15610ffa565b505050565b60008184841115610f415760405162461bcd60e51b8152600401610500919061162c565b505050900390565b6000806000610f56611319565b9092509050610f658282610f6c565b9250505090565b600061051f828461185e565b600061051f8284611880565b610fc46040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b610fce838361149b565b9050610fe3818484610fde610f49565b611559565b606085015260408401526020830152815292915050565b60006110068383610f84565b6001600160a01b03861660009081526005602052604090205490915060ff16801561104a57506001600160a01b03841660009081526005602052604090205460ff16155b15611090576001600160a01b03851660009081526002602052604090205461107290846115bc565b6001600160a01b0386166000908152600260205260409020556111d3565b6001600160a01b03851660009081526005602052604090205460ff161580156110d157506001600160a01b03841660009081526005602052604090205460ff165b1561111b5760808101516001600160a01b0385166000908152600260205260409020546110fd91610f78565b6001600160a01b0385166000908152600260205260409020556111d3565b6001600160a01b03851660009081526005602052604090205460ff16801561115b57506001600160a01b03841660009081526005602052604090205460ff165b156111d3576001600160a01b03851660009081526002602052604090205461118390846115bc565b6001600160a01b03808716600090815260026020526040808220939093556080840151918716815291909120546111b991610f78565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b0386166000908152600160205260409020546111f7916115bc565b6001600160a01b038087166000908152600160209081526040808320949094558401519187168152919091205461122d91610f78565b6001600160a01b038516600090815260016020526040908190209190915581015160a082015161125d91906115c8565b61126f81606001518260c001516115ec565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83608001516040516112b891815260200190565b60405180910390a360006001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161130a91815260200190565b60405180910390a35050505050565b6008546007546000918291825b60065481101561146b57826001600060068481548110611348576113486117f0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806113b3575081600260006006848154811061138c5761138c6117f0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156113c957600854600754945094505050509091565b61140f60016000600684815481106113e3576113e36117f0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906115bc565b9250611457600260006006848154811061142b5761142b6117f0565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906115bc565b91508061146381611845565b915050611326565b5060075460085461147b91610f6c565b821015611492576008546007549350935050509091565b90939092509050565b6114db6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b816114ec576080810183905261042e565b600b5461150a9060649061150490869060ff16611620565b90610f6c565b60a0820152600b5461152c90606490611504908690610100900460ff16611620565b60c0820181905260a082015161154e91906115489086906115bc565b906115bc565b608082015292915050565b60008080806115688786611620565b93508561157d575082915060009050806115b1565b60a088015161158c9086611620565b60c089015190925061159e9086611620565b90506115ae8161154886856115bc565b92505b945094509450949050565b600061051f828461181c565b6008546115d590836115bc565b6008556009546115e59082610f78565b6009555050565b600a546115f99082610f78565b600a5560075461160990826115bc565b60075560085461161990836115bc565b6008555050565b600061051f8284611893565b600060208083528351808285015260005b818110156116595785810183015185820160400152820161163d565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461169157600080fd5b919050565b600080604083850312156116a957600080fd5b6116b28361167a565b946020939093013593505050565b6000806000606084860312156116d557600080fd5b6116de8461167a565b92506116ec6020850161167a565b9150604084013590509250925092565b60006020828403121561170e57600080fd5b5035919050565b60006020828403121561172757600080fd5b61051f8261167a565b6000806040838503121561174357600080fd5b823591506020830135801515811461175a57600080fd5b809150509250929050565b60006020828403121561177757600080fd5b813560ff8116811461051f57600080fd5b6000806040838503121561179b57600080fd5b6117a48361167a565b91506117b26020840161167a565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561042e5761042e611806565b634e487b7160e01b600052603160045260246000fd5b60006001820161185757611857611806565b5060010190565b60008261187b57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561042e5761042e611806565b808202811582820484141761042e5761042e61180656fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220dadf848fb1f6fa7697c83c734766f4a2c5d7f99a04503eaaee9081a2fc760c9b64736f6c63430008110033

Deployed Bytecode Sourcemap

8546:10199:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9995:83;10065:5;;;;;;;;;;;;-1:-1:-1;;;10065:5:0;;;;9995:83;;;;;;;:::i;:::-;;;;;;;;10926:161;;;;;;:::i;:::-;;:::i;:::-;;;1169:14:1;;1162:22;1144:41;;1132:2;1117:18;10926:161:0;1004:187:1;10291:95:0;10371:7;;10291:95;;;1342:25:1;;;1330:2;1315:18;10291:95:0;1196:177:1;11095:313:0;;;;;;:::i;:::-;;:::i;12717:253::-;;;;;;:::i;:::-;;:::i;10177:83::-;;;9030:1;2038:36:1;;2026:2;2011:18;10177:83:0;1896:184:1;12148:95:0;12221:14;;12148:95;;13385:475;;;;;;:::i;:::-;;:::i;:::-;;11416:218;;;;;;:::i;:::-;;:::i;13868:111::-;;;;;;:::i;:::-;;:::i;12251:456::-;;;;;;:::i;:::-;;:::i;13044:333::-;;;;;;:::i;:::-;;:::i;14105:123::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14193:27:0;14169:4;14193:27;;;:18;:27;;;;;;;;;14105:123;10394:198;;;;;;:::i;:::-;;:::i;8139:148::-;;;:::i;9461:86::-;;;;;;;;;;;;;;;;;;;;2818:4:1;2806:17;;;2788:36;;2860:17;;;;2855:2;2840:18;;2833:45;2761:18;9461:86:0;2622:262:1;11919:120:0;;;;;;:::i;:::-;-1:-1:-1;;;;;12011:20:0;11987:4;12011:20;;;:11;:20;;;;;;;;;11919:120;7916:87;7962:7;7989:6;7916:87;;-1:-1:-1;;;;;7989:6:0;;;3035:51:1;;3023:2;3008:18;7916:87:0;2889:203:1;14236:116:0;;;;;;:::i;:::-;;:::i;10084:87::-;10156:7;;;;;;;;;;;;-1:-1:-1;;;10156:7:0;;;;10084:87;;11642:269;;;;;;:::i;:::-;;:::i;10600:167::-;;;;;;:::i;:::-;;:::i;12047:93::-;12119:13;;12047:93;;10775:143;;;;;;:::i;:::-;-1:-1:-1;;;;;10883:18:0;;;10856:7;10883:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10775:143;13987:110;;;;;;:::i;:::-;;:::i;8295:244::-;;;;;;:::i;:::-;;:::i;10926:161::-;11001:4;11018:39;3618:10;11041:7;11050:6;11018:8;:39::i;:::-;-1:-1:-1;11075:4:0;10926:161;;;;;:::o;11095:313::-;11193:4;11210:36;11220:6;11228:9;11239:6;11210:9;:36::i;:::-;11257:121;11266:6;3618:10;11288:89;11326:6;11288:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11288:19:0;;;;;;:11;:19;;;;;;;;3618:10;11288:33;;;;;;;;;;:37;:89::i;:::-;11257:8;:121::i;:::-;-1:-1:-1;11396:4:0;11095:313;;;;;:::o;12717:253::-;12783:7;12822;;12811;:18;;12803:73;;;;-1:-1:-1;;;12803:73:0;;3838:2:1;12803:73:0;;;3820:21:1;3877:2;3857:18;;;3850:30;3916:34;3896:18;;;3889:62;-1:-1:-1;;;3967:18:1;;;3960:40;4017:19;;12803:73:0;;;;;;;;;12887:19;12910:10;:8;:10::i;:::-;12887:33;-1:-1:-1;12938:24:0;:7;12887:33;12938:11;:24::i;:::-;12931:31;12717:253;-1:-1:-1;;;12717:253:0:o;13385:475::-;7962:7;7989:6;-1:-1:-1;;;;;7989:6:0;3618:10;8051:23;8043:68;;;;-1:-1:-1;;;8043:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13467:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;13459:56;;;::::0;-1:-1:-1;;;13459:56:0;;4610:2:1;13459:56:0::1;::::0;::::1;4592:21:1::0;4649:2;4629:18;;;4622:30;4688:25;4668:18;;;4661:53;4731:18;;13459:56:0::1;4408:347:1::0;13459:56:0::1;13531:9;13526:327;13550:9;:16:::0;13546:20;::::1;13526:327;;;13608:7;-1:-1:-1::0;;;;;13592:23:0::1;:9;13602:1;13592:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;13592:12:0::1;:23:::0;13588:254:::1;;13651:9;13661:16:::0;;:20:::1;::::0;13680:1:::1;::::0;13661:20:::1;:::i;:::-;13651:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;13636:9:::1;:12:::0;;-1:-1:-1;;;;;13651:31:0;;::::1;::::0;13646:1;;13636:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;13636:46:0::1;-1:-1:-1::0;;;;;13636:46:0;;::::1;;::::0;;13701:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;13740:11:::1;:20:::0;;;;:28;;-1:-1:-1;;13740:28:0::1;::::0;;13787:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;13787:15:0;;;;;-1:-1:-1;;;;;;13787:15:0::1;::::0;;;;;13526:327:::1;13385:475:::0;:::o;13588:254::-:1;13568:3:::0;::::1;::::0;::::1;:::i;:::-;;;;13526:327;;;;13385:475:::0;:::o;11416:218::-;3618:10;11504:4;11553:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11553:34:0;;;;;;;;;;11504:4;;11521:83;;11544:7;;11553:50;;11592:10;11553:38;:50::i;13868:111::-;7962:7;7989:6;-1:-1:-1;;;;;7989:6:0;3618:10;8051:23;8043:68;;;;-1:-1:-1;;;8043:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13937:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;13937:34:0::1;13967:4;13937:34;::::0;;13868:111::o;12251:456::-;12341:7;12380;;12369;:18;;12361:62;;;;-1:-1:-1;;;12361:62:0;;5631:2:1;12361:62:0;;;5613:21:1;5670:2;5650:18;;;5643:30;5709:33;5689:18;;;5682:61;5760:18;;12361:62:0;5429:355:1;12361:62:0;12439:17;12434:266;;12473:28;12504:25;12515:7;12524:4;12504:10;:25::i;:::-;12551:9;;-1:-1:-1;12544:16:0;;-1:-1:-1;12544:16:0;12434:266;12593:28;12624:25;12635:7;12644:4;12624:10;:25::i;:::-;12671:17;;;;-1:-1:-1;12664:24:0;;-1:-1:-1;12664:24:0;13044:333;7962:7;7989:6;-1:-1:-1;;;;;7989:6:0;3618:10;8051:23;8043:68;;;;-1:-1:-1;;;8043:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13127:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;13126:21;13118:61;;;::::0;-1:-1:-1;;;13118:61:0;;5991:2:1;13118:61:0::1;::::0;::::1;5973:21:1::0;6030:2;6010:18;;;6003:30;6069:29;6049:18;;;6042:57;6116:18;;13118:61:0::1;5789:351:1::0;13118:61:0::1;-1:-1:-1::0;;;;;13193:16:0;::::1;13212:1;13193:16:::0;;;:7:::1;:16;::::0;;;;;:20;13190:108:::1;;-1:-1:-1::0;;;;;13269:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;13249:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;13230:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;13190:108:::1;-1:-1:-1::0;;;;;13308:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;13308:27:0::1;13331:4;13308:27:::0;;::::1;::::0;;;13346:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;13346:23:0::1;::::0;;::::1;::::0;;13044:333::o;10394:198::-;-1:-1:-1;;;;;10484:20:0;;10460:7;10484:20;;;:11;:20;;;;;;;;10480:49;;;-1:-1:-1;;;;;;10513:16:0;;;;;:7;:16;;;;;;;10394:198::o;10480:49::-;-1:-1:-1;;;;;10567:16:0;;;;;;:7;:16;;;;;;10547:37;;:19;:37::i;8139:148::-;7962:7;7989:6;-1:-1:-1;;;;;7989:6:0;3618:10;8051:23;8043:68;;;;-1:-1:-1;;;8043:68:0;;;;;;;:::i;:::-;8246:1:::1;8230:6:::0;;8209:40:::1;::::0;-1:-1:-1;;;;;8230:6:0;;::::1;::::0;8209:40:::1;::::0;8246:1;;8209:40:::1;8277:1;8260:19:::0;;-1:-1:-1;;;;;;8260:19:0::1;::::0;;8139:148::o;14236:116::-;7962:7;7989:6;-1:-1:-1;;;;;7989:6:0;3618:10;8051:23;8043:68;;;;-1:-1:-1;;;8043:68:0;;;;;;;:::i;:::-;14296:8:::1;:21:::0;;-1:-1:-1;;14296:21:0::1;;;::::0;::::1;;;::::0;;14331:13:::1;::::0;::::1;::::0;-1:-1:-1;;14331:13:0::1;14236:116:::0;:::o;11642:269::-;11735:4;11752:129;3618:10;11775:7;11784:96;11823:15;11784:96;;;;;;;;;;;;;;;;;3618:10;11784:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11784:34:0;;;;;;;;;;;;:38;:96::i;10600:167::-;10678:4;10695:42;3618:10;10719:9;10730:6;10695:9;:42::i;13987:110::-;7962:7;7989:6;-1:-1:-1;;;;;7989:6:0;3618:10;8051:23;8043:68;;;;-1:-1:-1;;;8043:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14054:27:0::1;14084:5;14054:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;14054:35:0::1;::::0;;13987:110::o;8295:244::-;7962:7;7989:6;-1:-1:-1;;;;;7989:6:0;3618:10;8051:23;8043:68;;;;-1:-1:-1;;;8043:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8384:22:0;::::1;8376:73;;;::::0;-1:-1:-1;;;8376:73:0;;6347:2:1;8376:73:0::1;::::0;::::1;6329:21:1::0;6386:2;6366:18;;;6359:30;6425:34;6405:18;;;6398:62;-1:-1:-1;;;6476:18:1;;;6469:36;6522:19;;8376:73:0::1;6145:402:1::0;8376:73:0::1;8486:6;::::0;;8465:38:::1;::::0;-1:-1:-1;;;;;8465:38:0;;::::1;::::0;8486:6;::::1;::::0;8465:38:::1;::::0;::::1;8514:6;:17:::0;;-1:-1:-1;;;;;;8514:17:0::1;-1:-1:-1::0;;;;;8514:17:0;;;::::1;::::0;;;::::1;::::0;;8295:244::o;16755:335::-;-1:-1:-1;;;;;16848:19:0;;16840:68;;;;-1:-1:-1;;;16840:68:0;;6754:2:1;16840:68:0;;;6736:21:1;6793:2;6773:18;;;6766:30;6832:34;6812:18;;;6805:62;-1:-1:-1;;;6883:18:1;;;6876:34;6927:19;;16840:68:0;6552:400:1;16840:68:0;-1:-1:-1;;;;;16927:21:0;;16919:68;;;;-1:-1:-1;;;16919:68:0;;7159:2:1;16919:68:0;;;7141:21:1;7198:2;7178:18;;;7171:30;7237:34;7217:18;;;7210:62;-1:-1:-1;;;7288:18:1;;;7281:32;7330:19;;16919:68:0;6957:398:1;16919:68:0;-1:-1:-1;;;;;16998:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17050:32;;1342:25:1;;;17050:32:0;;1315:18:1;17050:32:0;;;;;;;16755:335;;;:::o;17098:511::-;-1:-1:-1;;;;;17186:18:0;;17178:68;;;;-1:-1:-1;;;17178:68:0;;7562:2:1;17178:68:0;;;7544:21:1;7601:2;7581:18;;;7574:30;7640:34;7620:18;;;7613:62;-1:-1:-1;;;7691:18:1;;;7684:35;7736:19;;17178:68:0;7360:401:1;17178:68:0;-1:-1:-1;;;;;17265:16:0;;17257:64;;;;-1:-1:-1;;;17257:64:0;;7968:2:1;17257:64:0;;;7950:21:1;8007:2;7987:18;;;7980:30;8046:34;8026:18;;;8019:62;-1:-1:-1;;;8097:18:1;;;8090:33;8140:19;;17257:64:0;7766:399:1;17257:64:0;17349:1;17340:6;:10;17332:64;;;;-1:-1:-1;;;17332:64:0;;8372:2:1;17332:64:0;;;8354:21:1;8411:2;8391:18;;;8384:30;8450:34;8430:18;;;8423:62;-1:-1:-1;;;8501:18:1;;;8494:39;8550:19;;17332:64:0;8170:405:1;17332:64:0;17425:15;17435:4;17425:9;:15::i;:::-;17415:6;:25;;17407:86;;;;-1:-1:-1;;;17407:86:0;;8782:2:1;17407:86:0;;;8764:21:1;8821:2;8801:18;;;8794:30;8860:34;8840:18;;;8833:62;-1:-1:-1;;;8911:18:1;;;8904:47;8968:19;;17407:86:0;8580:413:1;17407:86:0;-1:-1:-1;;;;;17549:24:0;;;;;;:18;:24;;;;;;17514:87;;17529:4;;17535:2;;17539:6;;17549:24;;;:50;;-1:-1:-1;;;;;;17577:22:0;;;;;;:18;:22;;;;;;;;17549:50;17547:53;17514:14;:87::i;:::-;17098:511;;;:::o;2764:240::-;2884:7;2945:12;2937:6;;;;2929:29;;;;-1:-1:-1;;;2929:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2980:5:0;;;2764:240::o;16019:163::-;16060:7;16081:15;16098;16117:19;:17;:19::i;:::-;16080:56;;-1:-1:-1;16080:56:0;-1:-1:-1;16154:20:0;16080:56;;16154:11;:20::i;:::-;16147:27;;;;16019:163;:::o;2552:98::-;2610:7;2637:5;2641:1;2637;:5;:::i;2234:98::-;2292:7;2319:5;2323:1;2319;:5;:::i;14723:342::-;14796:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14796:36:0;14857:29;14869:7;14878;14857:11;:29::i;:::-;14845:41;;14978:52;14990:9;15001:7;15010;15019:10;:8;:10::i;:::-;14978:11;:52::i;:::-;14959:15;;;14897:133;14944:14;;;14897:133;14917:25;;;14897:133;;;14723:342;;;;:::o;17690:1052::-;17801:28;17832;17843:7;17852;17832:10;:28::i;:::-;-1:-1:-1;;;;;17877:19:0;;;;;;:11;:19;;;;;;17801:59;;-1:-1:-1;17877:19:0;;:46;;;;-1:-1:-1;;;;;;17901:22:0;;;;;;:11;:22;;;;;;;;17900:23;17877:46;17873:538;;;-1:-1:-1;;;;;17979:15:0;;;;;;:7;:15;;;;;;:28;;17999:7;17979:19;:28::i;:::-;-1:-1:-1;;;;;17961:15:0;;;;;;:7;:15;;;;;:46;17873:538;;;-1:-1:-1;;;;;18030:19:0;;;;;;:11;:19;;;;;;;;18029:20;:46;;;;-1:-1:-1;;;;;;18053:22:0;;;;;;:11;:22;;;;;;;;18029:46;18025:386;;;18154:17;;;;-1:-1:-1;;;;;18131:18:0;;;;;;:7;:18;;;;;;:41;;:22;:41::i;:::-;-1:-1:-1;;;;;18110:18:0;;;;;;:7;:18;;;;;:62;18025:386;;;-1:-1:-1;;;;;18194:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;18217:22:0;;;;;;:11;:22;;;;;;;;18194:45;18190:221;;;-1:-1:-1;;;;;18290:15:0;;;;;;:7;:15;;;;;;:28;;18310:7;18290:19;:28::i;:::-;-1:-1:-1;;;;;18272:15:0;;;;;;;:7;:15;;;;;;:46;;;;18381:17;;;;18358:18;;;;;;;;;;:41;;:22;:41::i;:::-;-1:-1:-1;;;;;18337:18:0;;;;;;:7;:18;;;;;:62;18190:221;18461:9;;-1:-1:-1;;;;;18441:15:0;;18461:9;18441:15;;;:7;:15;;;;;;:30;;:19;:30::i;:::-;-1:-1:-1;;;;;18423:15:0;;;;;;;:7;:15;;;;;;;;:48;;;;18526:17;;;18503:18;;;;;;;;;;:41;;:22;:41::i;:::-;-1:-1:-1;;;;;18482:18:0;;;;;;:7;:18;;;;;;;:62;;;;18567:6;;;18575;;;;18555:27;;18567:6;18555:11;:27::i;:::-;18593:26;18603:1;:7;;;18611:1;:7;;;18593:9;:26::i;:::-;18652:9;-1:-1:-1;;;;;18635:46:0;18644:6;-1:-1:-1;;;;;18635:46:0;;18663:1;:17;;;18635:46;;;;1342:25:1;;1330:2;1315:18;;1196:177;18635:46:0;;;;;;;;18722:1;-1:-1:-1;;;;;18697:37:0;18706:6;-1:-1:-1;;;;;18697:37:0;;18726:1;:7;;;18697:37;;;;1342:25:1;;1330:2;1315:18;;1196:177;18697:37:0;;;;;;;;17788:954;17690:1052;;;;:::o;16190:555::-;16287:7;;16323;;16240;;;;;16341:289;16365:9;:16;16361:20;;16341:289;;;16431:7;16407;:21;16415:9;16425:1;16415:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16415:12:0;16407:21;;;;;;;;;;;;;:31;;:66;;;16466:7;16442;:21;16450:9;16460:1;16450:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16450:12:0;16442:21;;;;;;;;;;;;;:31;16407:66;16403:97;;;16483:7;;16492;;16475:25;;;;;;;16190:555;;:::o;16403:97::-;16525:34;16537:7;:21;16545:9;16555:1;16545:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16545:12:0;16537:21;;;;;;;;;;;;;16525:7;;:11;:34::i;:::-;16515:44;;16584:34;16596:7;:21;16604:9;16614:1;16604:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;16604:12:0;16596:21;;;;;;;;;;;;;16584:7;;:11;:34::i;:::-;16574:44;-1:-1:-1;16383:3:0;;;;:::i;:::-;;;;16341:289;;;-1:-1:-1;16666:7:0;;16654;;:20;;:11;:20::i;:::-;16644:7;:30;16640:61;;;16684:7;;16693;;16676:25;;;;;;16190:555;;:::o;16640:61::-;16720:7;;16729;;-1:-1:-1;16190:555:0;-1:-1:-1;16190:555:0:o;15073:402::-;15147:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15147:28:0;15194:7;15190:86;;15216:17;;;:27;;;15256:8;;15190:86;15307:8;:12;15295:34;;15325:3;;15295:25;;:7;;15307:12;;15295:11;:25::i;:::-;:29;;:34::i;:::-;15286:6;;;:43;15362:8;:13;15350:35;;15381:3;;15350:26;;:7;;15362:13;;;;;15350:11;:26::i;:35::-;15340:7;;;:45;;;15428:6;;;;15416:32;;15340:45;15416:19;;:7;;:11;:19::i;:::-;:23;;:32::i;:::-;15396:17;;;:52;15073:402;;;;:::o;15483:528::-;15608:15;;;;15700:24;:7;15712:11;15700;:24::i;:::-;15690:34;;15741:7;15737:67;;-1:-1:-1;15770:7:0;;-1:-1:-1;15788:1:0;;-1:-1:-1;15788:1:0;15763:29;;15737:67;15823:6;;;;:23;;15834:11;15823:10;:23::i;:::-;15865:7;;;;15816:30;;-1:-1:-1;15865:24:0;;15877:11;15865;:24::i;:::-;15857:32;-1:-1:-1;15919:28:0;15857:32;15919:17;:7;15931:4;15919:11;:17::i;:28::-;15900:47;;15483:528;;;;;;;;;;:::o;2340:98::-;2398:7;2425:5;2429:1;2425;:5;:::i;14360:153::-;14438:7;;:17;;14450:4;14438:11;:17::i;:::-;14428:7;:27;14482:13;;:23;;14500:4;14482:17;:23::i;:::-;14466:13;:39;-1:-1:-1;;14360:153:0:o;14521:194::-;14604:14;;:25;;14623:5;14604:18;:25::i;:::-;14589:14;:40;14650:7;;:18;;14662:5;14650:11;:18::i;:::-;14640:7;:28;14689:7;;:18;;14701:5;14689:11;:18::i;:::-;14679:7;:28;-1:-1:-1;;14521:194:0:o;2446:98::-;2504:7;2531:5;2535:1;2531;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:173::-;635:20;;-1:-1:-1;;;;;684:31:1;;674:42;;664:70;;730:1;727;720:12;664:70;567:173;;;:::o;745:254::-;813:6;821;874:2;862:9;853:7;849:23;845:32;842:52;;;890:1;887;880:12;842:52;913:29;932:9;913:29;:::i;:::-;903:39;989:2;974:18;;;;961:32;;-1:-1:-1;;;745:254:1:o;1378:328::-;1455:6;1463;1471;1524:2;1512:9;1503:7;1499:23;1495:32;1492:52;;;1540:1;1537;1530:12;1492:52;1563:29;1582:9;1563:29;:::i;:::-;1553:39;;1611:38;1645:2;1634:9;1630:18;1611:38;:::i;:::-;1601:48;;1696:2;1685:9;1681:18;1668:32;1658:42;;1378:328;;;;;:::o;1711:180::-;1770:6;1823:2;1811:9;1802:7;1798:23;1794:32;1791:52;;;1839:1;1836;1829:12;1791:52;-1:-1:-1;1862:23:1;;1711:180;-1:-1:-1;1711:180:1:o;2085:186::-;2144:6;2197:2;2185:9;2176:7;2172:23;2168:32;2165:52;;;2213:1;2210;2203:12;2165:52;2236:29;2255:9;2236:29;:::i;2276:341::-;2341:6;2349;2402:2;2390:9;2381:7;2377:23;2373:32;2370:52;;;2418:1;2415;2408:12;2370:52;2454:9;2441:23;2431:33;;2514:2;2503:9;2499:18;2486:32;2561:5;2554:13;2547:21;2540:5;2537:32;2527:60;;2583:1;2580;2573:12;2527:60;2606:5;2596:15;;;2276:341;;;;;:::o;3097:269::-;3154:6;3207:2;3195:9;3186:7;3182:23;3178:32;3175:52;;;3223:1;3220;3213:12;3175:52;3262:9;3249:23;3312:4;3305:5;3301:16;3294:5;3291:27;3281:55;;3332:1;3329;3322:12;3371:260;3439:6;3447;3500:2;3488:9;3479:7;3475:23;3471:32;3468:52;;;3516:1;3513;3506:12;3468:52;3539:29;3558:9;3539:29;:::i;:::-;3529:39;;3587:38;3621:2;3610:9;3606:18;3587:38;:::i;:::-;3577:48;;3371:260;;;;;:::o;4047:356::-;4249:2;4231:21;;;4268:18;;;4261:30;4327:34;4322:2;4307:18;;4300:62;4394:2;4379:18;;4047:356::o;4760:127::-;4821:10;4816:3;4812:20;4809:1;4802:31;4852:4;4849:1;4842:15;4876:4;4873:1;4866:15;4892:127;4953:10;4948:3;4944:20;4941:1;4934:31;4984:4;4981:1;4974:15;5008:4;5005:1;4998:15;5024:128;5091:9;;;5112:11;;;5109:37;;;5126:18;;:::i;5157:127::-;5218:10;5213:3;5209:20;5206:1;5199:31;5249:4;5246:1;5239:15;5273:4;5270:1;5263:15;5289:135;5328:3;5349:17;;;5346:43;;5369:18;;:::i;:::-;-1:-1:-1;5416:1:1;5405:13;;5289:135::o;8998:217::-;9038:1;9064;9054:132;;9108:10;9103:3;9099:20;9096:1;9089:31;9143:4;9140:1;9133:15;9171:4;9168:1;9161:15;9054:132;-1:-1:-1;9200:9:1;;8998:217::o;9220:125::-;9285:9;;;9306:10;;;9303:36;;;9319:18;;:::i;9350:168::-;9423:9;;;9454;;9471:15;;;9465:22;;9451:37;9441:71;;9492:18;;:::i

Swarm Source

ipfs://dadf848fb1f6fa7697c83c734766f4a2c5d7f99a04503eaaee9081a2fc760c9b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.