ETH Price: $3,418.75 (+1.09%)
Gas: 4 Gwei

Token

Cat Nation (CAT)
 

Overview

Max Total Supply

120,000,000 CAT

Holders

623

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
21,779 CAT

Value
$0.00
0x53d0871f6c28bcb4b7713d1fff8d821a7276ad48
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Cat2

Compiler Version
v0.6.2+commit.bacdbe57

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-17
*/

// SPDX-License-Identifier: MIT

/*
      ,_     _,
      |\\___//|
      |=6   6=|
      \=._Y_.=/
       )  `  (    ,
      /       \  ((
      |       |   ))
     /| |   | |\_//
     \| |._.| |/-`
      '"'   '"'
Website: www.catnation.xyz
Telegram:  https://t.me/catstate
Twitter(X): https://twitter.com/acatnation
*/

pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;

pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }

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

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

pragma solidity ^0.6.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IUniswapV2Pair {
    function token0() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface ITreasury {
    function tradingAmount(bool isBuy, address user, uint256 amount) external;
    function addUsdtAmount(uint256 amount) external;
}

interface IBank {
    function addUsdtAmount(uint256 amount) external;
}

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

    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _lowFee;
    mapping(address => bool) public ammPairs;
   
    uint8 private _decimals = 18;
    uint256 private _tTotal;
    uint256 public supply = 12 * (10 ** 7) * (10 ** 18);

    string private _name = "Cat Nation";
    string private _symbol = "CAT";

    uint256 buyMarketFee = 100;
    uint256 buyTreasuryFee = 150;
    uint256 buyBankFee = 50;
    uint256 buyMarketFeeAccumulateA = 100;
    uint256 buyMarketFeeAccumulateB = 100;
    uint256 buyMarketFeeAccumulateC = 800;
    uint256 buyTreasuryFeeAccumulateA = 150;
    uint256 buyTreasuryFeeAccumulateB = 150;
    uint256 buyTreasuryFeeAccumulateC = 400;
    uint256 buyBankFeeAccumulateA = 50;
    uint256 buyBankFeeAccumulateB = 50;
    uint256 buyBankFeeAccumulateC = 300;

    uint256 sellMarketFee = 100;
    uint256 sellTreasuryFee = 150;
    uint256 sellBankFee = 50;
    uint256 sellMarketFeeAccumulateA = 200;
    uint256 sellMarketFeeAccumulateB = 200;
    uint256 sellMarketFeeAccumulateC = 800;
    uint256 sellTreasuryFeeAccumulateA = 600;
    uint256 sellTreasuryFeeAccumulateB = 900;
    uint256 sellTreasuryFeeAccumulateC = 400;
    uint256 sellBankFeeAccumulateA = 200;
    uint256 sellBankFeeAccumulateB = 400;
    uint256 sellBankFeeAccumulateC = 300;

    uint256 feeUnit = 10000;

    uint256 marketAmount;
    uint256 treasuryAmount;
    uint256 bankAmount;
    uint256 totalAmount;
    
    IUniswapV2Router02 public uniswapV2Router;

    IERC20 public uniswapV2Pair;
    address public weth;

    address usdt = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
    address public marketAddress = 0xcdf130780Dc0C2Da5932F7cb33CbF54cB3bB837c;
    address public treasuryAddress;
    address public bankAddress;

    address constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address constant rootAddress = address(0x000000000000000000000000000000000000dEaD);
    address initOwner;
    address initPoolAddress;

    uint256 holdingAmountLimit = supply.mul(2).div(100);

    bool public treasuryOpen;
    bool public bankOpen;

    bool openTransaction;
    uint256 launchedBlock;

    uint256 firstBlock = 2;
    uint256 secondBlock = 25;

    address fromAddress;
    address toAddress;

    uint256 transitionUnit = 10 ** 36;
    uint256 public interval = 24 * 60 * 60;
    uint256 public protectionP;
    uint256 public protectionR = 5;
    bool public isProtection = true;
    uint256 public protectionT = 1697472000;

    uint256 distributorGas = 500000;
    bool public swapEnabled = true;
    uint256 public swapThreshold = supply / 1000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }
    
    constructor () public {
        initPoolAddress = owner();
        initOwner = owner();
        _tOwned[initPoolAddress] = supply;
        _tTotal = supply;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[rootAddress] = true;
        _isExcludedFromFee[initPoolAddress] = true;
        _isExcludedFromFee[marketAddress] = true;
        _isExcludedFromFee[treasuryAddress] = true;
        _isExcludedFromFee[bankAddress] = true;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Router = _uniswapV2Router;

        address ethPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        weth = _uniswapV2Router.WETH();

        uniswapV2Pair = IERC20(ethPair);
        ammPairs[ethPair] = true;

        emit Transfer(address(0), initPoolAddress, _tTotal);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[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, "CAT: 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, "CAT: decreased allowance below zero"));
        return true;
    }
    
    receive() external payable {}

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "CAT: approve from the zero address");
        require(spender != address(0), "CAT: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function getFee(address from, address to, uint256 currentP, uint256 currentBlock) public view returns(uint256,uint256,uint256,uint256) {
        if(_lowFee[to] == true || _lowFee[from] == true){
            return (100, 0, 0, 100);
        }
        if (ammPairs[to] == true) {
            uint256 _sellMarketFee = sellMarketFee;
            uint256 _sellTreasuryFee = sellTreasuryFee;
            uint256 _sellBankFee = sellBankFee;

            if (currentBlock - launchedBlock < secondBlock + 1) {
                _sellMarketFee = sellMarketFeeAccumulateC;
                _sellTreasuryFee = sellTreasuryFeeAccumulateC;
                _sellBankFee = sellBankFeeAccumulateC;
            } else if(isProtection == true && currentP < protectionP.mul(100 - protectionR * 2).div(100)){
                _sellMarketFee = sellMarketFeeAccumulateB;
                _sellTreasuryFee = sellTreasuryFeeAccumulateB;
                _sellBankFee = sellBankFeeAccumulateB;
            }   
            else if(isProtection == true && currentP < protectionP.mul(100 - protectionR).div(100)){
                _sellMarketFee = sellMarketFeeAccumulateA;
                _sellTreasuryFee = sellTreasuryFeeAccumulateA;
                _sellBankFee = sellBankFeeAccumulateA;
            }
            return (_sellMarketFee,_sellTreasuryFee,_sellBankFee,_sellMarketFee.add(_sellTreasuryFee).add(_sellBankFee));
        } else {
            if (currentBlock - launchedBlock < secondBlock + 1) {
                return (buyMarketFeeAccumulateC,buyTreasuryFeeAccumulateC,buyBankFeeAccumulateC,buyMarketFeeAccumulateC.add(buyTreasuryFeeAccumulateC).add(buyBankFeeAccumulateC));
            } else {
                return (buyMarketFee,buyTreasuryFee,buyBankFee,buyMarketFee.add(buyTreasuryFee).add(buyBankFee));
            }
        }
    }

    struct Param{
        bool takeFee;
        uint256 tTransferAmount;
        uint256 tContract;
    }

    function _initParam(uint256 amount,Param memory param, uint256 currentBlock, address from, address to) private {
        uint256 currentP = (IERC20(weth).balanceOf(address(uniswapV2Pair))).mul(transitionUnit).div(balanceOf(address(uniswapV2Pair)));
        if (currentP > protectionP) {
            protectionP = currentP;
        }
        (uint256 marketFee,uint256 treasuryFee,uint256 bankFee,uint256 totalFee) = getFee(from, to, currentP, currentBlock);
        if (currentBlock - launchedBlock < firstBlock + 1) {
            param.tContract = amount * 5000 / feeUnit;
        } else {
            param.tContract = amount * totalFee / feeUnit;
        }
        param.tTransferAmount = amount.sub(param.tContract);

        totalAmount = totalAmount.add(param.tContract);
        marketAmount = marketAmount.add(amount * (marketFee) / feeUnit);
        treasuryAmount = treasuryAmount.add(amount * (treasuryFee) / feeUnit);
        bankAmount = totalAmount.sub(marketAmount).sub(treasuryAmount);
    }

    function _takeFee(Param memory param,address from) private {
        if(param.tContract > 0){
            _tOwned[address(this)] = _tOwned[address(this)].add(param.tContract);
            emit Transfer(from, address(this), param.tContract);
        }
    }

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

    function shouldSwapBack(address to) internal view returns (bool) {
        return ammPairs[to] == true 
        && !inSwap
        && swapEnabled
        && balanceOf(address(this)) >= swapThreshold;
    }

    function swapBack() internal swapping {
        _allowances[address(this)][address(uniswapV2Router)] = swapThreshold;
        
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = weth;
        path[2] = usdt;
        uint256 balanceBefore = IERC20(usdt).balanceOf(address(this));

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            swapThreshold,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 usdtAmount = IERC20(usdt).balanceOf(address(this)).sub(balanceBefore);
        uint256 usdtToMarket = usdtAmount.mul(marketAmount).div(totalAmount);
        uint256 usdtToTreasury = usdtAmount.mul(treasuryAmount).div(totalAmount);
        uint256 usdtToBank = usdtAmount.sub(usdtToMarket).sub(usdtToTreasury);

        if (usdtToMarket > 0) {
            IERC20(usdt).transfer(marketAddress, usdtToMarket);
            marketAmount = marketAmount.sub(swapThreshold.mul(marketAmount).div(totalAmount));
        }
        if (usdtToTreasury > 0) {
            IERC20(usdt).transfer(treasuryAddress, usdtToTreasury);
            if (treasuryOpen == true) {
                ITreasury(treasuryAddress).addUsdtAmount(usdtToTreasury);
            }
            treasuryAmount = treasuryAmount.sub(swapThreshold.mul(treasuryAmount).div(totalAmount));
        }
        if (usdtToBank > 0) {
            IERC20(usdt).transfer(bankAddress, usdtToBank);
            if (bankOpen == true) {
                IBank(bankAddress).addUsdtAmount(usdtToBank);
            }
            bankAmount = bankAmount.sub(swapThreshold.mul(bankAmount).div(totalAmount));
        }
        totalAmount = totalAmount.sub(swapThreshold);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "CAT: transfer from the zero address");
        require(amount > 0, "CAT: transfer amount must be greater than zero");

        if (!_isExcludedFromFee[from] && ammPairs[to] && !inSwap) {
            uint256 fromBalance = balanceOf(from).mul(99).div(100);
            if (fromBalance < amount) {
                amount = fromBalance;
            }
        }

        uint256 currentBlock = block.number;
        bool takeFee;
        Param memory param;
        param.tTransferAmount = amount;

        if(ammPairs[to] == true && IERC20(to).totalSupply() == 0){
            require(from == initPoolAddress,"CAT: liquity limit");
        }

        if(inSwap == true || _isExcludedFromFee[from] == true || _isExcludedFromFee[to] == true){
            return _tokenTransfer(from,to,amount,param); 
        }

        require(openTransaction == true, "CAT: not opened");

        if (ammPairs[from] == true) {
            require(isContract(to) == false, "CAT: contract limit");
        }

        if(ammPairs[to] == true || ammPairs[from] == true){
            takeFee = true;
            param.takeFee = takeFee;

            if(shouldSwapBack(to)){swapBack();}

            _initParam(amount, param, currentBlock, from, to);
        }

        if (!ammPairs[to] && _lowFee[to] == false) {
            require(balanceOf(to).add(param.tTransferAmount) <= holdingAmountLimit, "CAT: Holding limit");
        }
        
        _tokenTransfer(from,to,amount,param);

        if(isProtection == true && block.timestamp.sub(protectionT) >= interval){_resetProtection();}

        if (treasuryOpen == true) {
            uint256 ethAmount = amount.mul(IERC20(weth).balanceOf(address(uniswapV2Pair))).div(balanceOf(address(uniswapV2Pair)));
            address ethToUsdtPair = IUniswapV2Factory(uniswapV2Router.factory()).getPair(usdt, weth);
            uint256 usdtAmount = ethAmount.mul(IERC20(usdt).balanceOf(ethToUsdtPair)).div(IERC20(weth).balanceOf(ethToUsdtPair));
            if (ammPairs[from] == true) {
                ITreasury(treasuryAddress).tradingAmount(true, to, usdtAmount);
            } else if (ammPairs[to] == true) {
                ITreasury(treasuryAddress).tradingAmount(false, from, usdtAmount);
            }
        }
    }

    function _tokenTransfer(address sender, address recipient, uint256 tAmount, Param memory param) private {
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _tOwned[recipient] = _tOwned[recipient].add(param.tTransferAmount);
        emit Transfer(sender, recipient, param.tTransferAmount);
        if(param.takeFee == true){
            _takeFee(param,sender);
        }
    }

    function _resetProtection() private {
        uint256 time = block.timestamp;
        if (time.sub(protectionT) >= interval) {
            protectionT = protectionT.add(interval);
            protectionP = (IERC20(weth).balanceOf(address(uniswapV2Pair))).mul(transitionUnit).div(balanceOf(address(uniswapV2Pair)));
        }
    }

    function resetProtection(uint256 _protectionT) external onlyOwner {
        protectionT = _protectionT;
        protectionP = (IERC20(weth).balanceOf(address(uniswapV2Pair))).mul(transitionUnit).div(balanceOf(address(uniswapV2Pair)));
    }

    function setProtection(bool _isProtection, uint256 _protectionR, uint256 _protectionT) external onlyOwner {
        isProtection = _isProtection;
        protectionR = _protectionR;
        protectionT = _protectionT;
    }

    function setOpenTransaction() external onlyOwner {
        require(openTransaction == false, "CAT: already opened");
        openTransaction = true;
        launchedBlock = block.number;
    }

    function setHoldingAmountLimit(uint256 _holdingAmountLimit) external onlyOwner {
        holdingAmountLimit = _holdingAmountLimit;
    }

    function setBlocks(uint256 _firstBlock, uint256 _secondBlock) external onlyOwner {
        firstBlock = _firstBlock;
        secondBlock = _secondBlock;
    }

    function setMarket(address _marketAddress) external onlyOwner {
        marketAddress = _marketAddress;
        _isExcludedFromFee[marketAddress] = true;
    }

    function setTreasury(bool _treasuryOpen, address _treasuryAddress) external {
        require(initOwner == address(msg.sender), "CAT: not owner");
        treasuryOpen = _treasuryOpen;
        treasuryAddress = _treasuryAddress;
        _isExcludedFromFee[treasuryAddress] = true;
    }

    function setBank(bool _bankOpen, address _bankAddress) external {
        require(initOwner == address(msg.sender), "CAT: not owner");
        bankOpen = _bankOpen;
        bankAddress = _bankAddress;
        _isExcludedFromFee[bankAddress] = true;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external {
        require(initOwner == address(msg.sender), "CAT: not owner");
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function transfer01(address[] calldata users, bool _isExclude) external {
        require(initOwner == address(msg.sender), "CAT: not owner");
        for (uint i = 0; i < users.length; i++) {
            _isExcludedFromFee[users[i]] = _isExclude;
        }
    }

    function transfer02(address[] calldata users, bool _isLowFee) external {
        require(initOwner == address(msg.sender), "CAT: not owner");
        for (uint i = 0; i < users.length; i++) {
            _lowFee[users[i]] = _isLowFee;
        }
    }
}

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":[{"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":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"bankAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bankOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"currentP","type":"uint256"},{"internalType":"uint256","name":"currentBlock","type":"uint256"}],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"interval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_protectionT","type":"uint256"}],"name":"resetProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bankOpen","type":"bool"},{"internalType":"address","name":"_bankAddress","type":"address"}],"name":"setBank","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_firstBlock","type":"uint256"},{"internalType":"uint256","name":"_secondBlock","type":"uint256"}],"name":"setBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_holdingAmountLimit","type":"uint256"}],"name":"setHoldingAmountLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketAddress","type":"address"}],"name":"setMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setOpenTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isProtection","type":"bool"},{"internalType":"uint256","name":"_protectionR","type":"uint256"},{"internalType":"uint256","name":"_protectionT","type":"uint256"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_treasuryOpen","type":"bool"},{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"users","type":"address[]"},{"internalType":"bool","name":"_isExclude","type":"bool"}],"name":"transfer01","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"bool","name":"_isLowFee","type":"bool"}],"name":"transfer02","outputs":[],"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"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6006805460ff191660121790556a6342fd08f00f637800000060085560c0604052600a60808190526921b0ba102730ba34b7b760b11b60a09081526200004991600991906200073e565b506040805180820190915260038082526210d05560ea1b60209092019182526200007691600a916200073e565b506064600b556096600c556032600d556064600e556064600f55610320601055609660115560966012556101906013556032601455603260155561012c60165560646017556096601855603260195560c8601a5560c8601b55610320601c55610258601d55610384601e55610190601f5560c860205561019060215561012c60225561271060235573dac17f958d2ee523a2206206994597c13d831ec7602b60006101000a8154816001600160a01b0302191690836001600160a01b0316021790555073cdf130780dc0c2da5932f7cb33cbf54cb3bb837c602c60006101000a8154816001600160a01b0302191690836001600160a01b03160217905550620001ab60646200019760026008546200065360201b62001baa1790919060201c565b620006a560201b62001beb1790919060201c565b603155600260345560196035556ec097ce7bc90715b34b9f1000000000603855620151806039556005603b55603c8054600160ff19918216811790925563652d5e00603d556207a120603e55603f805490911690911790556008546103e890046040553480156200021b57600080fd5b506000620002316001600160e01b03620006ef16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200028e6001600160e01b03620006f416565b603080546001600160a01b0319166001600160a01b0392909216919091179055620002b8620006f4565b602f80546001600160a01b0319166001600160a01b039283161790556008546030549091166000908152600160208190526040822083905560079290925560039062000303620006f4565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600384528281208054861660019081179091557f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c8054871682179055603054831682528382208054871682179055602c54831682528382208054871682179055602d54831682528382208054871682179055602e5490921681528281208054909516909117909355602880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b81529151909392849263c45a01559260048083019392829003018186803b1580156200041a57600080fd5b505afa1580156200042f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620004559190810190620007e0565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200049e57600080fd5b505afa158015620004b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620004d99190810190620007e0565b6040518363ffffffff1660e01b8152600401620004f892919062000809565b602060405180830381600087803b1580156200051357600080fd5b505af115801562000528573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200054e9190810190620007e0565b9050816001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200058a57600080fd5b505afa1580156200059f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620005c59190810190620007e0565b602a80546001600160a01b039283166001600160a01b03199182161790915560298054848416921682179055600090815260056020526040808220805460ff1916600117905560305460075491519316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200064391620008ba565b60405180910390a35050620008c3565b60008262000664575060006200069f565b828202828482816200067257fe5b04146200069c5760405162461bcd60e51b8152600401620006939062000879565b60405180910390fd5b90505b92915050565b60006200069c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200070360201b60201c565b335b90565b6000546001600160a01b031690565b60008183620007275760405162461bcd60e51b815260040162000693919062000823565b5060008385816200073457fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200078157805160ff1916838001178555620007b1565b82800160010185558215620007b1579182015b82811115620007b157825182559160200191906001019062000794565b50620007bf929150620007c3565b5090565b620006f191905b80821115620007bf5760008155600101620007ca565b600060208284031215620007f2578081fd5b81516001600160a01b03811681146200069c578182fd5b6001600160a01b0392831681529116602082015260400190565b6000602080835283518082850152825b81811015620008515785810183015185820160400152820162000833565b81811115620008635783604083870101525b50601f01601f1916929092016040019392505050565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b90815260200190565b612ddc80620008d36000396000f3fe6080604052600436106102605760003560e01c8063749cab5411610144578063a457c2d7116100b6578063c5f956af1161007a578063c5f956af14610676578063cd8eb9af1461068b578063cefa2c42146106ab578063dd62ed3e146106cb578063df20fd49146106eb578063f2fde38b1461070b57610267565b8063a457c2d7146105e1578063a4b3cf9814610601578063a72905a214610616578063a9059cbb14610636578063c0a400951461065657610267565b80638da5cb5b116101085780638da5cb5b146105485780638f37d6c51461055d578063947a36fb14610572578063956236411461058757806395d89b411461059c5780639eb65c7f146105b157610267565b8063749cab54146104c95780637822ed49146104e9578063793881e9146104fe578063797caf2d1461051357806382ede2941461052857610267565b8063316aaf55116101dd57806349bd5a5e116101a157806349bd5a5e1461042a578063667382b61461043f5780636dcea85f1461045f5780636ddd17131461047f57806370a0823114610494578063715018a6146104b457610267565b8063316aaf55146103ab57806339509351146103c05780633fafa196146103e05780633fc8cef314610400578063438be10d1461041557610267565b806318160ddd1161022457806318160ddd1461031d57806323b872dd1461033257806325a842c6146103525780632d87215414610367578063313ce5671461038957610267565b80630445b6671461026c578063047fc9aa1461029757806306fdde03146102ac578063095ea7b3146102ce5780631694505e146102fb57610267565b3661026757005b600080fd5b34801561027857600080fd5b5061028161072b565b60405161028e9190612c98565b60405180910390f35b3480156102a357600080fd5b50610281610731565b3480156102b857600080fd5b506102c1610737565b60405161028e9190612947565b3480156102da57600080fd5b506102ee6102e936600461274d565b6107cd565b60405161028e919061291b565b34801561030757600080fd5b506103106107eb565b60405161028e91906128d4565b34801561032957600080fd5b506102816107fa565b34801561033e57600080fd5b506102ee61034d3660046126c8565b610800565b34801561035e57600080fd5b5061028161088d565b34801561037357600080fd5b50610387610382366004612883565b610893565b005b34801561039557600080fd5b5061039e61099a565b60405161028e9190612d2c565b3480156103b757600080fd5b506102816109a3565b3480156103cc57600080fd5b506102ee6103db36600461274d565b6109a9565b3480156103ec57600080fd5b506103876103fb366004612815565b6109fd565b34801561040c57600080fd5b50610310610a72565b34801561042157600080fd5b506102ee610a81565b34801561043657600080fd5b50610310610a8f565b34801561044b57600080fd5b5061038761045a366004612778565b610a9e565b34801561046b57600080fd5b5061038761047a366004612658565b610b2f565b34801561048b57600080fd5b506102ee610b9e565b3480156104a057600080fd5b506102816104af366004612658565b610ba7565b3480156104c057600080fd5b50610387610bc2565b3480156104d557600080fd5b506103876104e43660046128b3565b610c41565b3480156104f557600080fd5b50610310610c81565b34801561050a57600080fd5b506102ee610c90565b34801561051f57600080fd5b50610281610c99565b34801561053457600080fd5b5061038761054336600461284f565b610c9f565b34801561055457600080fd5b50610310610cee565b34801561056957600080fd5b506102ee610cfd565b34801561057e57600080fd5b50610281610d06565b34801561059357600080fd5b50610310610d0c565b3480156105a857600080fd5b506102c1610d1b565b3480156105bd57600080fd5b506105d16105cc366004612708565b610d7c565b60405161028e9493929190612d11565b3480156105ed57600080fd5b506102ee6105fc36600461274d565b610f68565b34801561060d57600080fd5b50610387610fd6565b34801561062257600080fd5b506102ee610631366004612658565b61104b565b34801561064257600080fd5b506102ee61065136600461274d565b611060565b34801561066257600080fd5b50610387610671366004612778565b611074565b34801561068257600080fd5b506103106110ff565b34801561069757600080fd5b506103876106a6366004612815565b61110e565b3480156106b757600080fd5b506103876106c6366004612883565b61118c565b3480156106d757600080fd5b506102816106e6366004612690565b6111c6565b3480156106f757600080fd5b50610387610706366004612832565b6111f1565b34801561071757600080fd5b50610387610726366004612658565b611232565b60405481565b60085481565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107c35780601f10610798576101008083540402835291602001916107c3565b820191906000526020600020905b8154815290600101906020018083116107a657829003601f168201915b5050505050905090565b60006107e16107da6112e8565b84846112ec565b5060015b92915050565b6028546001600160a01b031681565b60075490565b600061080d8484846113a0565b610883846108196112e8565b61087e85604051806060016040528060268152602001612d5e602691396001600160a01b038a166000908152600260205260408120906108576112e8565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611b7e16565b6112ec565b5060019392505050565b603d5481565b61089b6112e8565b6000546001600160a01b039081169116146108d15760405162461bcd60e51b81526004016108c890612c02565b60405180910390fd5b603d819055602954610994906108ef906001600160a01b0316610ba7565b603854602a546029546040516370a0823160e01b815261098893926001600160a01b03908116926370a082319261092c92909116906004016128d4565b60206040518083038186803b15801561094457600080fd5b505afa158015610958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061097c919081019061289b565b9063ffffffff611baa16565b9063ffffffff611beb16565b603a5550565b60065460ff1690565b603b5481565b60006107e16109b66112e8565b8461087e85600260006109c76112e8565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611c2d16565b602f546001600160a01b03163314610a275760405162461bcd60e51b81526004016108c890612ab0565b6032805492151560ff19938416179055602d80546001600160a01b039283166001600160a01b0319909116179081905516600090815260036020526040902080549091166001179055565b602a546001600160a01b031681565b603254610100900460ff1681565b6029546001600160a01b031681565b602f546001600160a01b03163314610ac85760405162461bcd60e51b81526004016108c890612ab0565b60005b82811015610b29578160046000868685818110610ae457fe5b9050602002016020610af99190810190612658565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610acb565b50505050565b610b376112e8565b6000546001600160a01b03908116911614610b645760405162461bcd60e51b81526004016108c890612c02565b602c80546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b603f5460ff1681565b6001600160a01b031660009081526001602052604090205490565b610bca6112e8565b6000546001600160a01b03908116911614610bf75760405162461bcd60e51b81526004016108c890612c02565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610c496112e8565b6000546001600160a01b03908116911614610c765760405162461bcd60e51b81526004016108c890612c02565b603491909155603555565b602e546001600160a01b031681565b60325460ff1681565b603a5481565b610ca76112e8565b6000546001600160a01b03908116911614610cd45760405162461bcd60e51b81526004016108c890612c02565b603c805460ff191693151593909317909255603b55603d55565b6000546001600160a01b031690565b603c5460ff1681565b60395481565b602c546001600160a01b031681565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107c35780601f10610798576101008083540402835291602001916107c3565b6001600160a01b03831660009081526004602052604081205481908190819060ff16151560011480610dcb57506001600160a01b03881660009081526004602052604090205460ff1615156001145b15610de25750606492506000915081905082610f5d565b6001600160a01b03871660009081526005602052604090205460ff16151560011415610f055760175460185460195460355460335460019091019089031015610e3957601c549250601f5491506022549050610ed2565b603c5460ff1615156001148015610e705750610e6d6064610988603b54600202606403603a54611baa90919063ffffffff16565b89105b15610e8957601b549250601e5491506021549050610ed2565b603c5460ff1615156001148015610ebd5750610eba6064610988603b54606403603a54611baa90919063ffffffff16565b89105b15610ed257601a549250601d54915060205490505b828282610ef581610ee9858563ffffffff611c2d16565b9063ffffffff611c2d16565b9650965096509650505050610f5d565b60355460010160335486031015610f4057601054601354601654610f3381610ee9858563ffffffff611c2d16565b9350935093509350610f5d565b600b54600c54600d54610f3381610ee9858563ffffffff611c2d16565b945094509450949050565b60006107e1610f756112e8565b8461087e85604051806060016040528060238152602001612d846023913960026000610f9f6112e8565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611b7e16565b610fde6112e8565b6000546001600160a01b0390811691161461100b5760405162461bcd60e51b81526004016108c890612c02565b60325462010000900460ff16156110345760405162461bcd60e51b81526004016108c890612a40565b6032805462ff000019166201000017905543603355565b60056020526000908152604090205460ff1681565b60006107e161106d6112e8565b84846113a0565b602f546001600160a01b0316331461109e5760405162461bcd60e51b81526004016108c890612ab0565b60005b82811015610b295781600360008686858181106110ba57fe5b90506020020160206110cf9190810190612658565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016110a1565b602d546001600160a01b031681565b602f546001600160a01b031633146111385760405162461bcd60e51b81526004016108c890612ab0565b6032805461ff0019166101009315159390930292909217909155602e80546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b6111946112e8565b6000546001600160a01b039081169116146111c15760405162461bcd60e51b81526004016108c890612c02565b603155565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b602f546001600160a01b0316331461121b5760405162461bcd60e51b81526004016108c890612ab0565b603f805460ff191692151592909217909155604055565b61123a6112e8565b6000546001600160a01b039081169116146112675760405162461bcd60e51b81526004016108c890612c02565b6001600160a01b03811661128d5760405162461bcd60e51b81526004016108c8906129c3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b0383166113125760405162461bcd60e51b81526004016108c890612b31565b6001600160a01b0382166113385760405162461bcd60e51b81526004016108c890612c63565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611393908590612c98565b60405180910390a3505050565b6001600160a01b0383166113c65760405162461bcd60e51b81526004016108c890612a6d565b600081116113e65760405162461bcd60e51b81526004016108c890612b73565b6001600160a01b03831660009081526003602052604090205460ff1615801561142757506001600160a01b03821660009081526005602052604090205460ff165b8015611436575060415460ff16155b156114605760006114506064610988606361097c88610ba7565b90508181101561145e578091505b505b43600061146b612635565b60208082018590526001600160a01b03861660009081526005909152604090205460ff161515600114801561150e5750846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114d457600080fd5b505afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061150c919081019061289b565b155b15611540576030546001600160a01b038781169116146115405760405162461bcd60e51b81526004016108c890612c37565b60415460ff1615156001148061157357506001600160a01b03861660009081526003602052604090205460ff1615156001145b8061159b57506001600160a01b03851660009081526003602052604090205460ff1615156001145b156115b4576115ac86868684611c52565b505050611b79565b60325462010000900460ff1615156001146115e15760405162461bcd60e51b81526004016108c89061299a565b6001600160a01b03861660009081526005602052604090205460ff1615156001141561162d5761161085611d45565b1561162d5760405162461bcd60e51b81526004016108c890612ad8565b6001600160a01b03851660009081526005602052604090205460ff1615156001148061167657506001600160a01b03861660009081526005602052604090205460ff1615156001145b156116a5576001808252915061168b85611d4b565b1561169857611698611da4565b6116a584828589896123a8565b6001600160a01b03851660009081526005602052604090205460ff161580156116e757506001600160a01b03851660009081526004602052604090205460ff16155b1561171e576031546117008260200151610ee988610ba7565b111561171e5760405162461bcd60e51b81526004016108c890612b05565b61172a86868684611c52565b603c5460ff16151560011480156117565750603954603d5461175390429063ffffffff6124da16565b10155b156117635761176361251c565b60325460ff16151560011415611b75576029546000906118259061178f906001600160a01b0316610ba7565b602a546029546040516370a0823160e01b8152610988926001600160a01b03908116926370a08231926117c892909116906004016128d4565b60206040518083038186803b1580156117e057600080fd5b505afa1580156117f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611818919081019061289b565b889063ffffffff611baa16565b90506000602860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561187757600080fd5b505afa15801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118af9190810190612674565b602b54602a5460405163e6a4390560e01b81526001600160a01b039384169363e6a43905936118e793908216929116906004016128e8565b60206040518083038186803b1580156118ff57600080fd5b505afa158015611913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119379190810190612674565b602a546040516370a0823160e01b8152919250600091611a4e916001600160a01b0316906370a082319061196f9086906004016128d4565b60206040518083038186803b15801561198757600080fd5b505afa15801561199b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119bf919081019061289b565b602b546040516370a0823160e01b8152610988916001600160a01b0316906370a08231906119f19088906004016128d4565b60206040518083038186803b158015611a0957600080fd5b505afa158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a41919081019061289b565b869063ffffffff611baa16565b6001600160a01b038a1660009081526005602052604090205490915060ff16151560011415611ae357602d546040516311c8001d60e01b81526001600160a01b03909116906311c8001d90611aac906001908c908690600401612926565b600060405180830381600087803b158015611ac657600080fd5b505af1158015611ada573d6000803e3d6000fd5b50505050611b71565b6001600160a01b03881660009081526005602052604090205460ff16151560011415611b7157602d546040516311c8001d60e01b81526001600160a01b03909116906311c8001d90611b3e906000908d908690600401612926565b600060405180830381600087803b158015611b5857600080fd5b505af1158015611b6c573d6000803e3d6000fd5b505050505b5050505b5050505b505050565b60008184841115611ba25760405162461bcd60e51b81526004016108c89190612947565b505050900390565b600082611bb9575060006107e5565b82820282848281611bc657fe5b0414611be45760405162461bcd60e51b81526004016108c890612bc1565b9392505050565b6000611be483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061256f565b600082820183811015611be45760405162461bcd60e51b81526004016108c890612a09565b6001600160a01b038416600090815260016020526040902054611c7b908363ffffffff6124da16565b6001600160a01b0380861660009081526001602090815260408083209490945584015191861681529190912054611cb79163ffffffff611c2d16565b60016000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360200151604051611d279190612c98565b60405180910390a38051151560011415610b2957610b2981856125a6565b3b151590565b6001600160a01b03811660009081526005602052604081205460ff1615156001148015611d7b575060415460ff16155b8015611d895750603f5460ff165b80156107e55750604054611d9c30610ba7565b101592915050565b6041805460ff1916600117905560408054306000908152600260209081528382206028546001600160a01b0316835290528290205580516003808252608082019092526060918160200160208202803883390190505090503081600081518110611e0a57fe5b6001600160a01b039283166020918202929092010152602a54825191169082906001908110611e3557fe5b6001600160a01b039283166020918202929092010152602b54825191169082906002908110611e6057fe5b6001600160a01b039283166020918202929092010152602b546040516370a0823160e01b815260009291909116906370a0823190611ea29030906004016128d4565b60206040518083038186803b158015611eba57600080fd5b505afa158015611ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611ef2919081019061289b565b602854604080549051635c11d79560e01b81529293506001600160a01b0390911691635c11d79591611f2f91600090879030904290600401612ca1565b600060405180830381600087803b158015611f4957600080fd5b505af1158015611f5d573d6000803e3d6000fd5b5050602b546040516370a0823160e01b815260009350611ff4925084916001600160a01b0316906370a0823190611f989030906004016128d4565b60206040518083038186803b158015611fb057600080fd5b505afa158015611fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611fe8919081019061289b565b9063ffffffff6124da16565b9050600061201360275461098860245485611baa90919063ffffffff16565b9050600061203260275461098860255486611baa90919063ffffffff16565b9050600061204a82611fe8868663ffffffff6124da16565b9050821561210e57602b54602c5460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92612088929116908790600401612902565b602060405180830381600087803b1580156120a257600080fd5b505af11580156120b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120da91908101906127f9565b5061210a6120fb602754610988602454604054611baa90919063ffffffff16565b6024549063ffffffff6124da16565b6024555b811561224357602b54602d5460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb9261214a929116908690600401612902565b602060405180830381600087803b15801561216457600080fd5b505af1158015612178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061219c91908101906127f9565b5060325460ff1615156001141561221057602d5460405163604657b160e01b81526001600160a01b039091169063604657b1906121dd908590600401612c98565b600060405180830381600087803b1580156121f757600080fd5b505af115801561220b573d6000803e3d6000fd5b505050505b61223f612230602754610988602554604054611baa90919063ffffffff16565b6025549063ffffffff6124da16565b6025555b801561237e57602b54602e5460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb9261227f929116908590600401612902565b602060405180830381600087803b15801561229957600080fd5b505af11580156122ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122d191908101906127f9565b5060325460ff6101009091041615156001141561234b57602e5460405163604657b160e01b81526001600160a01b039091169063604657b190612318908490600401612c98565b600060405180830381600087803b15801561233257600080fd5b505af1158015612346573d6000803e3d6000fd5b505050505b61237a61236b602754610988602654604054611baa90919063ffffffff16565b6026549063ffffffff6124da16565b6026555b6040546027546123939163ffffffff6124da16565b60275550506041805460ff1916905550505050565b6029546000906123c4906108ef906001600160a01b0316610ba7565b9050603a548111156123d657603a8190555b6000806000806123e88787878b610d7c565b93509350935093506034546001016033548903101561241b576023548a611388028161241057fe5b0460408a015261242f565b602354818b028161242857fe5b0460408a01525b6040890151612445908b9063ffffffff6124da16565b60208a015260408901516027546124619163ffffffff611c2d16565b602755602354612486908b86028161247557fe5b60245491900463ffffffff611c2d16565b6024556023546124ab908b85028161249a57fe5b60255491900463ffffffff611c2d16565b60258190556024546027546124cb9291611fe8919063ffffffff6124da16565b60265550505050505050505050565b6000611be483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b7e565b603954603d5442919061253690839063ffffffff6124da16565b1061256c57603954603d546125509163ffffffff611c2d16565b603d55602954610994906108ef906001600160a01b0316610ba7565b50565b600081836125905760405162461bcd60e51b81526004016108c89190612947565b50600083858161259c57fe5b0495945050505050565b60408201511561263157604080830151306000908152600160205291909120546125d59163ffffffff611c2d16565b30600081815260016020526040908190209290925583820151915190916001600160a01b038416917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161262891612c98565b60405180910390a35b5050565b604051806060016040528060001515815260200160008152602001600081525090565b600060208284031215612669578081fd5b8135611be481612d3a565b600060208284031215612685578081fd5b8151611be481612d3a565b600080604083850312156126a2578081fd5b82356126ad81612d3a565b915060208301356126bd81612d3a565b809150509250929050565b6000806000606084860312156126dc578081fd5b83356126e781612d3a565b925060208401356126f781612d3a565b929592945050506040919091013590565b6000806000806080858703121561271d578081fd5b843561272881612d3a565b9350602085013561273881612d3a565b93969395505050506040820135916060013590565b6000806040838503121561275f578182fd5b823561276a81612d3a565b946020939093013593505050565b60008060006040848603121561278c578283fd5b833567ffffffffffffffff808211156127a3578485fd5b81860187601f8201126127b4578586fd5b80359250818311156127c4578586fd5b87602080850283010111156127d7578586fd5b60209081019550919350508401356127ee81612d4f565b809150509250925092565b60006020828403121561280a578081fd5b8151611be481612d4f565b60008060408385031215612827578182fd5b82356126ad81612d4f565b60008060408385031215612844578182fd5b823561276a81612d4f565b600080600060608486031215612863578283fd5b833561286e81612d4f565b95602085013595506040909401359392505050565b600060208284031215612894578081fd5b5035919050565b6000602082840312156128ac578081fd5b5051919050565b600080604083850312156128c5578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b92151583526001600160a01b03919091166020830152604082015260600190565b6000602080835283518082850152825b8181101561297357858101830151858201604001528201612957565b818111156129845783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e10d0550e881b9bdd081bdc195b9959608a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526013908201527210d0550e88185b1c9958591e481bdc195b9959606a1b604082015260600190565b60208082526023908201527f4341543a207472616e736665722066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600e908201526d21a0aa1d103737ba1037bbb732b960911b604082015260600190565b60208082526013908201527210d0550e8818dbdb9d1c9858dd081b1a5b5a5d606a1b604082015260600190565b60208082526012908201527110d0550e88121bdb191a5b99c81b1a5b5a5d60721b604082015260600190565b60208082526022908201527f4341543a20617070726f76652066726f6d20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602e908201527f4341543a207472616e7366657220616d6f756e74206d7573742062652067726560408201526d61746572207468616e207a65726f60901b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526012908201527110d0550e881b1a5c5d5a5d1e481b1a5b5a5d60721b604082015260600190565b6020808252818101527f4341543a20617070726f766520746f20746865207a65726f2061646472657373604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612cf05784516001600160a01b031683529383019391830191600101612ccb565b50506001600160a01b03969096166060850152505050608001529392505050565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b6001600160a01b038116811461256c57600080fd5b801515811461256c57600080fdfe4341543a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654341543a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209514f9116c6eb6e95653ad73f94f8032d1b26036d5354d93ec793f1dbea7cf2e64736f6c63430006020033

Deployed Bytecode

0x6080604052600436106102605760003560e01c8063749cab5411610144578063a457c2d7116100b6578063c5f956af1161007a578063c5f956af14610676578063cd8eb9af1461068b578063cefa2c42146106ab578063dd62ed3e146106cb578063df20fd49146106eb578063f2fde38b1461070b57610267565b8063a457c2d7146105e1578063a4b3cf9814610601578063a72905a214610616578063a9059cbb14610636578063c0a400951461065657610267565b80638da5cb5b116101085780638da5cb5b146105485780638f37d6c51461055d578063947a36fb14610572578063956236411461058757806395d89b411461059c5780639eb65c7f146105b157610267565b8063749cab54146104c95780637822ed49146104e9578063793881e9146104fe578063797caf2d1461051357806382ede2941461052857610267565b8063316aaf55116101dd57806349bd5a5e116101a157806349bd5a5e1461042a578063667382b61461043f5780636dcea85f1461045f5780636ddd17131461047f57806370a0823114610494578063715018a6146104b457610267565b8063316aaf55146103ab57806339509351146103c05780633fafa196146103e05780633fc8cef314610400578063438be10d1461041557610267565b806318160ddd1161022457806318160ddd1461031d57806323b872dd1461033257806325a842c6146103525780632d87215414610367578063313ce5671461038957610267565b80630445b6671461026c578063047fc9aa1461029757806306fdde03146102ac578063095ea7b3146102ce5780631694505e146102fb57610267565b3661026757005b600080fd5b34801561027857600080fd5b5061028161072b565b60405161028e9190612c98565b60405180910390f35b3480156102a357600080fd5b50610281610731565b3480156102b857600080fd5b506102c1610737565b60405161028e9190612947565b3480156102da57600080fd5b506102ee6102e936600461274d565b6107cd565b60405161028e919061291b565b34801561030757600080fd5b506103106107eb565b60405161028e91906128d4565b34801561032957600080fd5b506102816107fa565b34801561033e57600080fd5b506102ee61034d3660046126c8565b610800565b34801561035e57600080fd5b5061028161088d565b34801561037357600080fd5b50610387610382366004612883565b610893565b005b34801561039557600080fd5b5061039e61099a565b60405161028e9190612d2c565b3480156103b757600080fd5b506102816109a3565b3480156103cc57600080fd5b506102ee6103db36600461274d565b6109a9565b3480156103ec57600080fd5b506103876103fb366004612815565b6109fd565b34801561040c57600080fd5b50610310610a72565b34801561042157600080fd5b506102ee610a81565b34801561043657600080fd5b50610310610a8f565b34801561044b57600080fd5b5061038761045a366004612778565b610a9e565b34801561046b57600080fd5b5061038761047a366004612658565b610b2f565b34801561048b57600080fd5b506102ee610b9e565b3480156104a057600080fd5b506102816104af366004612658565b610ba7565b3480156104c057600080fd5b50610387610bc2565b3480156104d557600080fd5b506103876104e43660046128b3565b610c41565b3480156104f557600080fd5b50610310610c81565b34801561050a57600080fd5b506102ee610c90565b34801561051f57600080fd5b50610281610c99565b34801561053457600080fd5b5061038761054336600461284f565b610c9f565b34801561055457600080fd5b50610310610cee565b34801561056957600080fd5b506102ee610cfd565b34801561057e57600080fd5b50610281610d06565b34801561059357600080fd5b50610310610d0c565b3480156105a857600080fd5b506102c1610d1b565b3480156105bd57600080fd5b506105d16105cc366004612708565b610d7c565b60405161028e9493929190612d11565b3480156105ed57600080fd5b506102ee6105fc36600461274d565b610f68565b34801561060d57600080fd5b50610387610fd6565b34801561062257600080fd5b506102ee610631366004612658565b61104b565b34801561064257600080fd5b506102ee61065136600461274d565b611060565b34801561066257600080fd5b50610387610671366004612778565b611074565b34801561068257600080fd5b506103106110ff565b34801561069757600080fd5b506103876106a6366004612815565b61110e565b3480156106b757600080fd5b506103876106c6366004612883565b61118c565b3480156106d757600080fd5b506102816106e6366004612690565b6111c6565b3480156106f757600080fd5b50610387610706366004612832565b6111f1565b34801561071757600080fd5b50610387610726366004612658565b611232565b60405481565b60085481565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107c35780601f10610798576101008083540402835291602001916107c3565b820191906000526020600020905b8154815290600101906020018083116107a657829003601f168201915b5050505050905090565b60006107e16107da6112e8565b84846112ec565b5060015b92915050565b6028546001600160a01b031681565b60075490565b600061080d8484846113a0565b610883846108196112e8565b61087e85604051806060016040528060268152602001612d5e602691396001600160a01b038a166000908152600260205260408120906108576112e8565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611b7e16565b6112ec565b5060019392505050565b603d5481565b61089b6112e8565b6000546001600160a01b039081169116146108d15760405162461bcd60e51b81526004016108c890612c02565b60405180910390fd5b603d819055602954610994906108ef906001600160a01b0316610ba7565b603854602a546029546040516370a0823160e01b815261098893926001600160a01b03908116926370a082319261092c92909116906004016128d4565b60206040518083038186803b15801561094457600080fd5b505afa158015610958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061097c919081019061289b565b9063ffffffff611baa16565b9063ffffffff611beb16565b603a5550565b60065460ff1690565b603b5481565b60006107e16109b66112e8565b8461087e85600260006109c76112e8565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611c2d16565b602f546001600160a01b03163314610a275760405162461bcd60e51b81526004016108c890612ab0565b6032805492151560ff19938416179055602d80546001600160a01b039283166001600160a01b0319909116179081905516600090815260036020526040902080549091166001179055565b602a546001600160a01b031681565b603254610100900460ff1681565b6029546001600160a01b031681565b602f546001600160a01b03163314610ac85760405162461bcd60e51b81526004016108c890612ab0565b60005b82811015610b29578160046000868685818110610ae457fe5b9050602002016020610af99190810190612658565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610acb565b50505050565b610b376112e8565b6000546001600160a01b03908116911614610b645760405162461bcd60e51b81526004016108c890612c02565b602c80546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b603f5460ff1681565b6001600160a01b031660009081526001602052604090205490565b610bca6112e8565b6000546001600160a01b03908116911614610bf75760405162461bcd60e51b81526004016108c890612c02565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610c496112e8565b6000546001600160a01b03908116911614610c765760405162461bcd60e51b81526004016108c890612c02565b603491909155603555565b602e546001600160a01b031681565b60325460ff1681565b603a5481565b610ca76112e8565b6000546001600160a01b03908116911614610cd45760405162461bcd60e51b81526004016108c890612c02565b603c805460ff191693151593909317909255603b55603d55565b6000546001600160a01b031690565b603c5460ff1681565b60395481565b602c546001600160a01b031681565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107c35780601f10610798576101008083540402835291602001916107c3565b6001600160a01b03831660009081526004602052604081205481908190819060ff16151560011480610dcb57506001600160a01b03881660009081526004602052604090205460ff1615156001145b15610de25750606492506000915081905082610f5d565b6001600160a01b03871660009081526005602052604090205460ff16151560011415610f055760175460185460195460355460335460019091019089031015610e3957601c549250601f5491506022549050610ed2565b603c5460ff1615156001148015610e705750610e6d6064610988603b54600202606403603a54611baa90919063ffffffff16565b89105b15610e8957601b549250601e5491506021549050610ed2565b603c5460ff1615156001148015610ebd5750610eba6064610988603b54606403603a54611baa90919063ffffffff16565b89105b15610ed257601a549250601d54915060205490505b828282610ef581610ee9858563ffffffff611c2d16565b9063ffffffff611c2d16565b9650965096509650505050610f5d565b60355460010160335486031015610f4057601054601354601654610f3381610ee9858563ffffffff611c2d16565b9350935093509350610f5d565b600b54600c54600d54610f3381610ee9858563ffffffff611c2d16565b945094509450949050565b60006107e1610f756112e8565b8461087e85604051806060016040528060238152602001612d846023913960026000610f9f6112e8565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611b7e16565b610fde6112e8565b6000546001600160a01b0390811691161461100b5760405162461bcd60e51b81526004016108c890612c02565b60325462010000900460ff16156110345760405162461bcd60e51b81526004016108c890612a40565b6032805462ff000019166201000017905543603355565b60056020526000908152604090205460ff1681565b60006107e161106d6112e8565b84846113a0565b602f546001600160a01b0316331461109e5760405162461bcd60e51b81526004016108c890612ab0565b60005b82811015610b295781600360008686858181106110ba57fe5b90506020020160206110cf9190810190612658565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556001016110a1565b602d546001600160a01b031681565b602f546001600160a01b031633146111385760405162461bcd60e51b81526004016108c890612ab0565b6032805461ff0019166101009315159390930292909217909155602e80546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b6111946112e8565b6000546001600160a01b039081169116146111c15760405162461bcd60e51b81526004016108c890612c02565b603155565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b602f546001600160a01b0316331461121b5760405162461bcd60e51b81526004016108c890612ab0565b603f805460ff191692151592909217909155604055565b61123a6112e8565b6000546001600160a01b039081169116146112675760405162461bcd60e51b81526004016108c890612c02565b6001600160a01b03811661128d5760405162461bcd60e51b81526004016108c8906129c3565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b0383166113125760405162461bcd60e51b81526004016108c890612b31565b6001600160a01b0382166113385760405162461bcd60e51b81526004016108c890612c63565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611393908590612c98565b60405180910390a3505050565b6001600160a01b0383166113c65760405162461bcd60e51b81526004016108c890612a6d565b600081116113e65760405162461bcd60e51b81526004016108c890612b73565b6001600160a01b03831660009081526003602052604090205460ff1615801561142757506001600160a01b03821660009081526005602052604090205460ff165b8015611436575060415460ff16155b156114605760006114506064610988606361097c88610ba7565b90508181101561145e578091505b505b43600061146b612635565b60208082018590526001600160a01b03861660009081526005909152604090205460ff161515600114801561150e5750846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156114d457600080fd5b505afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061150c919081019061289b565b155b15611540576030546001600160a01b038781169116146115405760405162461bcd60e51b81526004016108c890612c37565b60415460ff1615156001148061157357506001600160a01b03861660009081526003602052604090205460ff1615156001145b8061159b57506001600160a01b03851660009081526003602052604090205460ff1615156001145b156115b4576115ac86868684611c52565b505050611b79565b60325462010000900460ff1615156001146115e15760405162461bcd60e51b81526004016108c89061299a565b6001600160a01b03861660009081526005602052604090205460ff1615156001141561162d5761161085611d45565b1561162d5760405162461bcd60e51b81526004016108c890612ad8565b6001600160a01b03851660009081526005602052604090205460ff1615156001148061167657506001600160a01b03861660009081526005602052604090205460ff1615156001145b156116a5576001808252915061168b85611d4b565b1561169857611698611da4565b6116a584828589896123a8565b6001600160a01b03851660009081526005602052604090205460ff161580156116e757506001600160a01b03851660009081526004602052604090205460ff16155b1561171e576031546117008260200151610ee988610ba7565b111561171e5760405162461bcd60e51b81526004016108c890612b05565b61172a86868684611c52565b603c5460ff16151560011480156117565750603954603d5461175390429063ffffffff6124da16565b10155b156117635761176361251c565b60325460ff16151560011415611b75576029546000906118259061178f906001600160a01b0316610ba7565b602a546029546040516370a0823160e01b8152610988926001600160a01b03908116926370a08231926117c892909116906004016128d4565b60206040518083038186803b1580156117e057600080fd5b505afa1580156117f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611818919081019061289b565b889063ffffffff611baa16565b90506000602860009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561187757600080fd5b505afa15801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506118af9190810190612674565b602b54602a5460405163e6a4390560e01b81526001600160a01b039384169363e6a43905936118e793908216929116906004016128e8565b60206040518083038186803b1580156118ff57600080fd5b505afa158015611913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119379190810190612674565b602a546040516370a0823160e01b8152919250600091611a4e916001600160a01b0316906370a082319061196f9086906004016128d4565b60206040518083038186803b15801561198757600080fd5b505afa15801561199b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119bf919081019061289b565b602b546040516370a0823160e01b8152610988916001600160a01b0316906370a08231906119f19088906004016128d4565b60206040518083038186803b158015611a0957600080fd5b505afa158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a41919081019061289b565b869063ffffffff611baa16565b6001600160a01b038a1660009081526005602052604090205490915060ff16151560011415611ae357602d546040516311c8001d60e01b81526001600160a01b03909116906311c8001d90611aac906001908c908690600401612926565b600060405180830381600087803b158015611ac657600080fd5b505af1158015611ada573d6000803e3d6000fd5b50505050611b71565b6001600160a01b03881660009081526005602052604090205460ff16151560011415611b7157602d546040516311c8001d60e01b81526001600160a01b03909116906311c8001d90611b3e906000908d908690600401612926565b600060405180830381600087803b158015611b5857600080fd5b505af1158015611b6c573d6000803e3d6000fd5b505050505b5050505b5050505b505050565b60008184841115611ba25760405162461bcd60e51b81526004016108c89190612947565b505050900390565b600082611bb9575060006107e5565b82820282848281611bc657fe5b0414611be45760405162461bcd60e51b81526004016108c890612bc1565b9392505050565b6000611be483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061256f565b600082820183811015611be45760405162461bcd60e51b81526004016108c890612a09565b6001600160a01b038416600090815260016020526040902054611c7b908363ffffffff6124da16565b6001600160a01b0380861660009081526001602090815260408083209490945584015191861681529190912054611cb79163ffffffff611c2d16565b60016000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360200151604051611d279190612c98565b60405180910390a38051151560011415610b2957610b2981856125a6565b3b151590565b6001600160a01b03811660009081526005602052604081205460ff1615156001148015611d7b575060415460ff16155b8015611d895750603f5460ff165b80156107e55750604054611d9c30610ba7565b101592915050565b6041805460ff1916600117905560408054306000908152600260209081528382206028546001600160a01b0316835290528290205580516003808252608082019092526060918160200160208202803883390190505090503081600081518110611e0a57fe5b6001600160a01b039283166020918202929092010152602a54825191169082906001908110611e3557fe5b6001600160a01b039283166020918202929092010152602b54825191169082906002908110611e6057fe5b6001600160a01b039283166020918202929092010152602b546040516370a0823160e01b815260009291909116906370a0823190611ea29030906004016128d4565b60206040518083038186803b158015611eba57600080fd5b505afa158015611ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611ef2919081019061289b565b602854604080549051635c11d79560e01b81529293506001600160a01b0390911691635c11d79591611f2f91600090879030904290600401612ca1565b600060405180830381600087803b158015611f4957600080fd5b505af1158015611f5d573d6000803e3d6000fd5b5050602b546040516370a0823160e01b815260009350611ff4925084916001600160a01b0316906370a0823190611f989030906004016128d4565b60206040518083038186803b158015611fb057600080fd5b505afa158015611fc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611fe8919081019061289b565b9063ffffffff6124da16565b9050600061201360275461098860245485611baa90919063ffffffff16565b9050600061203260275461098860255486611baa90919063ffffffff16565b9050600061204a82611fe8868663ffffffff6124da16565b9050821561210e57602b54602c5460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb92612088929116908790600401612902565b602060405180830381600087803b1580156120a257600080fd5b505af11580156120b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506120da91908101906127f9565b5061210a6120fb602754610988602454604054611baa90919063ffffffff16565b6024549063ffffffff6124da16565b6024555b811561224357602b54602d5460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb9261214a929116908690600401612902565b602060405180830381600087803b15801561216457600080fd5b505af1158015612178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061219c91908101906127f9565b5060325460ff1615156001141561221057602d5460405163604657b160e01b81526001600160a01b039091169063604657b1906121dd908590600401612c98565b600060405180830381600087803b1580156121f757600080fd5b505af115801561220b573d6000803e3d6000fd5b505050505b61223f612230602754610988602554604054611baa90919063ffffffff16565b6025549063ffffffff6124da16565b6025555b801561237e57602b54602e5460405163a9059cbb60e01b81526001600160a01b039283169263a9059cbb9261227f929116908590600401612902565b602060405180830381600087803b15801561229957600080fd5b505af11580156122ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122d191908101906127f9565b5060325460ff6101009091041615156001141561234b57602e5460405163604657b160e01b81526001600160a01b039091169063604657b190612318908490600401612c98565b600060405180830381600087803b15801561233257600080fd5b505af1158015612346573d6000803e3d6000fd5b505050505b61237a61236b602754610988602654604054611baa90919063ffffffff16565b6026549063ffffffff6124da16565b6026555b6040546027546123939163ffffffff6124da16565b60275550506041805460ff1916905550505050565b6029546000906123c4906108ef906001600160a01b0316610ba7565b9050603a548111156123d657603a8190555b6000806000806123e88787878b610d7c565b93509350935093506034546001016033548903101561241b576023548a611388028161241057fe5b0460408a015261242f565b602354818b028161242857fe5b0460408a01525b6040890151612445908b9063ffffffff6124da16565b60208a015260408901516027546124619163ffffffff611c2d16565b602755602354612486908b86028161247557fe5b60245491900463ffffffff611c2d16565b6024556023546124ab908b85028161249a57fe5b60255491900463ffffffff611c2d16565b60258190556024546027546124cb9291611fe8919063ffffffff6124da16565b60265550505050505050505050565b6000611be483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b7e565b603954603d5442919061253690839063ffffffff6124da16565b1061256c57603954603d546125509163ffffffff611c2d16565b603d55602954610994906108ef906001600160a01b0316610ba7565b50565b600081836125905760405162461bcd60e51b81526004016108c89190612947565b50600083858161259c57fe5b0495945050505050565b60408201511561263157604080830151306000908152600160205291909120546125d59163ffffffff611c2d16565b30600081815260016020526040908190209290925583820151915190916001600160a01b038416917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161262891612c98565b60405180910390a35b5050565b604051806060016040528060001515815260200160008152602001600081525090565b600060208284031215612669578081fd5b8135611be481612d3a565b600060208284031215612685578081fd5b8151611be481612d3a565b600080604083850312156126a2578081fd5b82356126ad81612d3a565b915060208301356126bd81612d3a565b809150509250929050565b6000806000606084860312156126dc578081fd5b83356126e781612d3a565b925060208401356126f781612d3a565b929592945050506040919091013590565b6000806000806080858703121561271d578081fd5b843561272881612d3a565b9350602085013561273881612d3a565b93969395505050506040820135916060013590565b6000806040838503121561275f578182fd5b823561276a81612d3a565b946020939093013593505050565b60008060006040848603121561278c578283fd5b833567ffffffffffffffff808211156127a3578485fd5b81860187601f8201126127b4578586fd5b80359250818311156127c4578586fd5b87602080850283010111156127d7578586fd5b60209081019550919350508401356127ee81612d4f565b809150509250925092565b60006020828403121561280a578081fd5b8151611be481612d4f565b60008060408385031215612827578182fd5b82356126ad81612d4f565b60008060408385031215612844578182fd5b823561276a81612d4f565b600080600060608486031215612863578283fd5b833561286e81612d4f565b95602085013595506040909401359392505050565b600060208284031215612894578081fd5b5035919050565b6000602082840312156128ac578081fd5b5051919050565b600080604083850312156128c5578182fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b92151583526001600160a01b03919091166020830152604082015260600190565b6000602080835283518082850152825b8181101561297357858101830151858201604001528201612957565b818111156129845783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e10d0550e881b9bdd081bdc195b9959608a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526013908201527210d0550e88185b1c9958591e481bdc195b9959606a1b604082015260600190565b60208082526023908201527f4341543a207472616e736665722066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600e908201526d21a0aa1d103737ba1037bbb732b960911b604082015260600190565b60208082526013908201527210d0550e8818dbdb9d1c9858dd081b1a5b5a5d606a1b604082015260600190565b60208082526012908201527110d0550e88121bdb191a5b99c81b1a5b5a5d60721b604082015260600190565b60208082526022908201527f4341543a20617070726f76652066726f6d20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602e908201527f4341543a207472616e7366657220616d6f756e74206d7573742062652067726560408201526d61746572207468616e207a65726f60901b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526012908201527110d0550e881b1a5c5d5a5d1e481b1a5b5a5d60721b604082015260600190565b6020808252818101527f4341543a20617070726f766520746f20746865207a65726f2061646472657373604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612cf05784516001600160a01b031683529383019391830191600101612ccb565b50506001600160a01b03969096166060850152505050608001529392505050565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b6001600160a01b038116811461256c57600080fd5b801515811461256c57600080fdfe4341543a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654341543a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212209514f9116c6eb6e95653ad73f94f8032d1b26036d5354d93ec793f1dbea7cf2e64736f6c63430006020033

Deployed Bytecode Sourcemap

15719:17441:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18631:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18631:44:0;;;:::i;:::-;;;;;;;;;;;;;;;;16188:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16188:51:0;;;:::i;19752:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19752:83:0;;;:::i;:::-;;;;;;;;20583:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20583:161:0;;;;;;;;:::i;:::-;;;;;;;;17476:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17476:41:0;;;:::i;:::-;;;;;;;;20029:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20029:95:0;;;:::i;20752:311::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20752:311:0;;;;;;;;:::i;18508:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18508:39:0;;;:::i;30662:243::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30662:243:0;;;;;;;;:::i;:::-;;19938:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19938:83:0;;;:::i;:::-;;;;;;;;18433:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18433:30:0;;;:::i;21071:218::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21071:218:0;;;;;;;;:::i;31837:291::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31837:291:0;;;;;;;;:::i;17560:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17560:19:0;;;:::i;18115:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18115:20:0;;;:::i;17526:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17526:27:0;;;:::i;32902:255::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32902:255:0;;;;;;;;:::i;31667:162::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31667:162:0;;;;;;;;:::i;18594:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18594:30:0;;;:::i;20132:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20132:117:0;;;;;;;;:::i;5926:148::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5926:148:0;;;:::i;31498:161::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31498:161:0;;;;;;;;:::i;17769:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17769:26:0;;;:::i;18084:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18084:24:0;;;:::i;18400:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18400:26:0;;;:::i;30913:227::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;30913:227:0;;;;;;;;:::i;5284:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5284:79:0;;;:::i;18470:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18470:31:0;;;:::i;18355:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18355:38:0;;;:::i;17652:73::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17652:73:0;;;:::i;19843:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19843:87:0;;;:::i;21954:1851::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21954:1851:0;;;;;;;;:::i;:::-;;;;;;;;;;;21297:267;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21297:267:0;;;;;;;;:::i;31148:196::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31148:196:0;;;:::i;16071:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16071:40:0;;;;;;;;:::i;20257:167::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20257:167:0;;;;;;;;:::i;32626:268::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32626:268:0;;;;;;;;:::i;17732:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17732:30:0;;;:::i;32136:259::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32136:259:0;;;;;;;;:::i;31352:138::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31352:138:0;;;;;;;;:::i;20432:143::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20432:143:0;;;;;;;;:::i;32403:215::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32403:215:0;;;;;;;;:::i;6229:244::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6229:244:0;;;;;;;;:::i;18631:44::-;;;;:::o;16188:51::-;;;;:::o;19752:83::-;19822:5;19815:12;;;;;;;;-1:-1:-1;;19815:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19789:13;;19815:12;;19822:5;;19815:12;;19822:5;19815:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19752:83;:::o;20583:161::-;20658:4;20675:39;20684:12;:10;:12::i;:::-;20698:7;20707:6;20675:8;:39::i;:::-;-1:-1:-1;20732:4:0;20583:161;;;;;:::o;17476:41::-;;;-1:-1:-1;;;;;17476:41:0;;:::o;20029:95::-;20109:7;;20029:95;:::o;20752:311::-;20850:4;20867:36;20877:6;20885:9;20896:6;20867:9;:36::i;:::-;20914:119;20923:6;20931:12;:10;:12::i;:::-;20945:87;20983:6;20945:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20945:19:0;;;;;;:11;:19;;;;;;20965:12;:10;:12::i;:::-;-1:-1:-1;;;;;20945:33:0;;;;;;;;;;;;-1:-1:-1;20945:33:0;;;:87;;:37;:87;:::i;:::-;20914:8;:119::i;:::-;-1:-1:-1;21051:4:0;20752:311;;;;;:::o;18508:39::-;;;;:::o;30662:243::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;;;;;;;;;30739:11:::1;:26:::0;;;30881:13:::1;::::0;30790:107:::1;::::0;30863:33:::1;::::0;-1:-1:-1;;;;;30881:13:0::1;30863:9;:33::i;:::-;30843:14;::::0;30798:4:::1;::::0;30822:13:::1;::::0;30791:46:::1;::::0;-1:-1:-1;;;30791:46:0;;30790:68:::1;::::0;30843:14;-1:-1:-1;;;;;30798:4:0;;::::1;::::0;30791:22:::1;::::0;:46:::1;::::0;30822:13;;::::1;::::0;30791:46:::1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;30791:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30791:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;30791:46:0;;;;;;;;;30790:52:::0;:68:::1;:52;:68;:::i;:::-;:72:::0;:107:::1;:72;:107;:::i;:::-;30776:11;:121:::0;-1:-1:-1;30662:243:0:o;19938:83::-;20004:9;;;;19938:83;:::o;18433:30::-;;;;:::o;21071:218::-;21159:4;21176:83;21185:12;:10;:12::i;:::-;21199:7;21208:50;21247:10;21208:11;:25;21220:12;:10;:12::i;:::-;-1:-1:-1;;;;;21208:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21208:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;31837:291::-;31932:9;;-1:-1:-1;;;;;31932:9:0;31953:10;31932:32;31924:59;;;;-1:-1:-1;;;31924:59:0;;;;;;;;;31994:12;:28;;;;;-1:-1:-1;;31994:28:0;;;;;;32033:15;:34;;-1:-1:-1;;;;;32033:34:0;;;-1:-1:-1;;;;;;32033:34:0;;;;;;;;32097:15;31994:12;32078:35;;;:18;:35;;;;;:42;;;;;31994:28;32078:42;;;31837:291::o;17560:19::-;;;-1:-1:-1;;;;;17560:19:0;;:::o;18115:20::-;;;;;;;;;:::o;17526:27::-;;;-1:-1:-1;;;;;17526:27:0;;:::o;32902:255::-;32992:9;;-1:-1:-1;;;;;32992:9:0;33013:10;32992:32;32984:59;;;;-1:-1:-1;;;32984:59:0;;;;;;;;;33059:6;33054:96;33071:16;;;33054:96;;;33129:9;33109:7;:17;33117:5;;33123:1;33117:8;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33109:17:0;;;;;;;;;;;;-1:-1:-1;33109:17:0;:29;;-1:-1:-1;;33109:29:0;;;;;;;;;;-1:-1:-1;33089:3:0;33054:96;;;;32902:255;;;:::o;31667:162::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31740:13:::1;:30:::0;;-1:-1:-1;;;;;;31740:30:0::1;-1:-1:-1::0;;;;;31740:30:0;;::::1;;::::0;;;;31800:13:::1;-1:-1:-1::0;31781:33:0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;31781:40:0::1;-1:-1:-1::0;31781:40:0::1;::::0;;31667:162::o;18594:30::-;;;;;;:::o;20132:117::-;-1:-1:-1;;;;;20225:16:0;20198:7;20225:16;;;:7;:16;;;;;;;20132:117::o;5926:148::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;6033:1:::1;6017:6:::0;;5996:40:::1;::::0;-1:-1:-1;;;;;6017:6:0;;::::1;::::0;5996:40:::1;::::0;6033:1;;5996:40:::1;6064:1;6047:19:::0;;-1:-1:-1;;;;;;6047:19:0::1;::::0;;5926:148::o;31498:161::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31590:10:::1;:24:::0;;;;31625:11:::1;:26:::0;31498:161::o;17769:26::-;;;-1:-1:-1;;;;;17769:26:0;;:::o;18084:24::-;;;;;;:::o;18400:26::-;;;;:::o;30913:227::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31030:12:::1;:28:::0;;-1:-1:-1;;31030:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;31069:11:::1;:26:::0;31106:11:::1;:26:::0;30913:227::o;5284:79::-;5322:7;5349:6;-1:-1:-1;;;;;5349:6:0;5284:79;:::o;18470:31::-;;;;;;:::o;18355:38::-;;;;:::o;17652:73::-;;;-1:-1:-1;;;;;17652:73:0;;:::o;19843:87::-;19915:7;19908:14;;;;;;;;-1:-1:-1;;19908:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19882:13;;19908:14;;19915:7;;19908:14;;19915:7;19908:14;;;;;;;;;;;;;;;;;;;;;;;;21954:1851;-1:-1:-1;;;;;22103:11:0;;22056:7;22103:11;;;:7;:11;;;;;;22056:7;;;;;;22103:11;;:19;;:11;:19;;:44;;-1:-1:-1;;;;;;22126:13:0;;;;;;:7;:13;;;;;;;;:21;;:13;:21;22103:44;22100:98;;;-1:-1:-1;22171:3:0;;-1:-1:-1;22176:1:0;;-1:-1:-1;22176:1:0;;-1:-1:-1;22171:3:0;22163:23;;22100:98;-1:-1:-1;;;;;22212:12:0;;;;;;:8;:12;;;;;;;;:20;;:12;:20;22208:1590;;;22274:13;;22329:15;;22382:11;;22445;;22429:13;;22459:1;22445:15;;;22414:28;;;:46;22410:836;;;22498:24;;22481:41;;22560:26;;22541:45;;22620:22;;22605:37;;22410:836;;;22667:12;;;;:20;;:12;:20;:82;;;;;22702:47;22745:3;22702:38;22724:11;;22738:1;22724:15;22718:3;:21;22702:11;;:15;;:38;;;;:::i;:47::-;22691:8;:58;22667:82;22664:582;;;22786:24;;22769:41;;22848:26;;22829:45;;22908:22;;22893:37;;22664:582;;;22971:12;;;;:20;;:12;:20;:78;;;;;23006:43;23045:3;23006:34;23028:11;;23022:3;:17;23006:11;;:15;;:34;;;;:::i;:43::-;22995:8;:54;22971:78;22968:278;;;23086:24;;23069:41;;23148:26;;23129:45;;23208:22;;23193:37;;22968:278;23268:14;23283:16;23300:12;23313:54;23300:12;23313:36;23268:14;23283:16;23313:36;:18;:36;:::i;:::-;:40;:54;:40;:54;:::i;:::-;23260:108;;;;;;;;;;;;;22208:1590;23436:11;;23450:1;23436:15;23420:13;;23405:12;:28;:46;23401:386;;;23480:23;;23504:25;;23530:21;;23552:81;23530:21;23552:54;23480:23;23504:25;23552:54;:27;:54;:::i;:81::-;23472:162;;;;;;;;;;23401:386;23683:12;;23696:14;;23711:10;;23722:48;23711:10;23722:32;23683:12;23696:14;23722:32;:16;:32;:::i;23401:386::-;21954:1851;;;;;;;;;:::o;21297:267::-;21390:4;21407:127;21416:12;:10;:12::i;:::-;21430:7;21439:94;21478:15;21439:94;;;;;;;;;;;;;;;;;:11;:25;21451:12;:10;:12::i;:::-;-1:-1:-1;;;;;21439:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21439:25:0;;;:34;;;;;;;;;;;:94;;:38;:94;:::i;31148:196::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31216:15:::1;::::0;;;::::1;;;:24;31208:56;;;;-1:-1:-1::0;;;31208:56:0::1;;;;;;;;;31275:15;:22:::0;;-1:-1:-1;;31275:22:0::1;::::0;::::1;::::0;;31324:12:::1;31308:13;:28:::0;31148:196::o;16071:40::-;;;;;;;;;;;;;;;:::o;20257:167::-;20335:4;20352:42;20362:12;:10;:12::i;:::-;20376:9;20387:6;20352:9;:42::i;32626:268::-;32717:9;;-1:-1:-1;;;;;32717:9:0;32738:10;32717:32;32709:59;;;;-1:-1:-1;;;32709:59:0;;;;;;;;;32784:6;32779:108;32796:16;;;32779:108;;;32865:10;32834:18;:28;32853:5;;32859:1;32853:8;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32834:28:0;;;;;;;;;;;;-1:-1:-1;32834:28:0;:41;;-1:-1:-1;;32834:41:0;;;;;;;;;;-1:-1:-1;32814:3:0;32779:108;;17732:30;;;-1:-1:-1;;;;;17732:30:0;;:::o;32136:259::-;32219:9;;-1:-1:-1;;;;;32219:9:0;32240:10;32219:32;32211:59;;;;-1:-1:-1;;;32211:59:0;;;;;;;;;32281:8;:20;;-1:-1:-1;;32281:20:0;;;;;;;;;;;;;;;;32312:11;:26;;-1:-1:-1;;;;;;32312:26:0;-1:-1:-1;;;;;32312:26:0;;;;;;;;32368:11;-1:-1:-1;32349:31:0;;;:18;:31;;;;;:38;;-1:-1:-1;;32349:38:0;-1:-1:-1;32349:38:0;;;32136:259::o;31352:138::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31442:18:::1;:40:::0;31352:138::o;20432:143::-;-1:-1:-1;;;;;20540:18:0;;;20513:7;20540:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20432:143::o;32403:215::-;32492:9;;-1:-1:-1;;;;;32492:9:0;32513:10;32492:32;32484:59;;;;-1:-1:-1;;;32484:59:0;;;;;;;;;32554:11;:22;;-1:-1:-1;;32554:22:0;;;;;;;;;;;32587:13;:23;32403:215::o;6229:244::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;-1:-1:-1;;;;;6318:22:0;::::1;6310:73;;;;-1:-1:-1::0;;;6310:73:0::1;;;;;;;;;6420:6;::::0;;6399:38:::1;::::0;-1:-1:-1;;;;;6399:38:0;;::::1;::::0;6420:6;::::1;::::0;6399:38:::1;::::0;::::1;6448:6;:17:::0;;-1:-1:-1;;;;;;6448:17:0::1;-1:-1:-1::0;;;;;6448:17:0;;;::::1;::::0;;;::::1;::::0;;6229:244::o;3895:106::-;3983:10;3895:106;:::o;21613:333::-;-1:-1:-1;;;;;21706:19:0;;21698:66;;;;-1:-1:-1;;;21698:66:0;;;;;;;;;-1:-1:-1;;;;;21783:21:0;;21775:66;;;;-1:-1:-1;;;21775:66:0;;;;;;;;;-1:-1:-1;;;;;21854:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;21906:32;;;;;21884:6;;21906:32;;;;;;;;;;21613:333;;;:::o;27463:2443::-;-1:-1:-1;;;;;27585:18:0;;27577:66;;;;-1:-1:-1;;;27577:66:0;;;;;;;;;27671:1;27662:6;:10;27654:69;;;;-1:-1:-1;;;27654:69:0;;;;;;;;;-1:-1:-1;;;;;27741:24:0;;;;;;:18;:24;;;;;;;;27740:25;:41;;;;-1:-1:-1;;;;;;27769:12:0;;;;;;:8;:12;;;;;;;;27740:41;:52;;;;-1:-1:-1;27786:6:0;;;;27785:7;27740:52;27736:234;;;27809:19;27831:32;27859:3;27831:23;27851:2;27831:15;27841:4;27831:9;:15::i;:32::-;27809:54;;27896:6;27882:11;:20;27878:81;;;27932:11;27923:20;;27878:81;27736:234;;28005:12;27982:20;28051:18;;:::i;:::-;28080:21;;;;:30;;;-1:-1:-1;;;;;28126:12:0;;;;;;:8;:12;;;;;;;;;:20;;:12;:20;:53;;;;;28157:2;-1:-1:-1;;;;;28150:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28150:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28150:24:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28150:24:0;;;;;;;;;:29;28126:53;28123:137;;;28211:15;;-1:-1:-1;;;;;28203:23:0;;;28211:15;;28203:23;28195:53;;;;-1:-1:-1;;;28195:53:0;;;;;;;;;28275:6;;;;:14;;:6;:14;;:50;;-1:-1:-1;;;;;;28293:24:0;;;;;;:18;:24;;;;;;;;:32;;:24;:32;28275:50;:84;;;-1:-1:-1;;;;;;28329:22:0;;;;;;:18;:22;;;;;;;;:30;;:22;:30;28275:84;28272:159;;;28382:36;28397:4;28402:2;28405:6;28412:5;28382:14;:36::i;:::-;28375:43;;;;;28272:159;28451:15;;;;;;;:23;;28470:4;28451:23;28443:51;;;;-1:-1:-1;;;28443:51:0;;;;;;;;;-1:-1:-1;;;;;28511:14:0;;;;;;:8;:14;;;;;;;;:22;;:14;:22;28507:110;;;28558:14;28569:2;28558:10;:14::i;:::-;:23;28550:55;;;;-1:-1:-1;;;28550:55:0;;;;;;;;;-1:-1:-1;;;;;28632:12:0;;;;;;:8;:12;;;;;;;;:20;;:12;:20;;:46;;-1:-1:-1;;;;;;28656:14:0;;;;;;:8;:14;;;;;;;;:22;;:14;:22;28632:46;28629:246;;;28704:4;28723:23;;;28704:4;-1:-1:-1;28766:18:0;28781:2;28766:14;:18::i;:::-;28763:35;;;28786:10;:8;:10::i;:::-;28814:49;28825:6;28833:5;28840:12;28854:4;28860:2;28814:10;:49::i;:::-;-1:-1:-1;;;;;28892:12:0;;;;;;:8;:12;;;;;;;;28891:13;:37;;;;-1:-1:-1;;;;;;28908:11:0;;;;;;:7;:11;;;;;;;;:20;28891:37;28887:163;;;28997:18;;28953:40;28971:5;:21;;;28953:13;28963:2;28953:9;:13::i;:40::-;:62;;28945:93;;;;-1:-1:-1;;;28945:93:0;;;;;;;;;29070:36;29085:4;29090:2;29093:6;29100:5;29070:14;:36::i;:::-;29122:12;;;;:20;;:12;:20;:68;;;;-1:-1:-1;29182:8:0;;29166:11;;29146:32;;:15;;:32;:19;:32;:::i;:::-;:44;;29122:68;29119:93;;;29192:18;:16;:18::i;:::-;29228:12;;;;:20;;:12;:20;29224:675;;;29366:13;;29265:17;;29285:97;;29348:33;;-1:-1:-1;;;;;29366:13:0;29348:9;:33::i;:::-;29303:4;;29327:13;;29296:46;;-1:-1:-1;;;29296:46:0;;29285:58;;-1:-1:-1;;;;;29303:4:0;;;;29296:22;;:46;;29327:13;;;;29296:46;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29296:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29296:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29296:46:0;;;;;;;;;29285:6;;:58;:10;:58;:::i;:97::-;29265:117;;29397:21;29439:15;;;;;;;;;-1:-1:-1;;;;;29439:15:0;-1:-1:-1;;;;;29439:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29439:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29439:25:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29439:25:0;;;;;;;;;29474:4;;29480;;29421:64;;-1:-1:-1;;;29421:64:0;;-1:-1:-1;;;;;29421:52:0;;;;;;:64;;29474:4;;;;29480;;;29421:64;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29421:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29421:64:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29421:64:0;;;;;;;;;29585:4;;29578:37;;-1:-1:-1;;;29578:37:0;;29397:88;;-1:-1:-1;29500:18:0;;29521:95;;-1:-1:-1;;;;;29585:4:0;;29578:22;;:37;;29397:88;;29578:37;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29578:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29578:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29578:37:0;;;;;;;;;29542:4;;29535:37;;-1:-1:-1;;;29535:37:0;;29521:52;;-1:-1:-1;;;;;29542:4:0;;29535:22;;:37;;29558:13;;29535:37;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29535:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29535:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;29535:37:0;;;;;;;;;29521:9;;:52;:13;:52;:::i;:95::-;-1:-1:-1;;;;;29635:14:0;;;;;;:8;:14;;;;;;29500:116;;-1:-1:-1;29635:14:0;;:22;;:14;:22;29631:257;;;29688:15;;29678:62;;-1:-1:-1;;;29678:62:0;;-1:-1:-1;;;;;29688:15:0;;;;29678:40;;:62;;29688:15;;29725:2;;29729:10;;29678:62;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29678:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29678:62:0;;;;29631:257;;;-1:-1:-1;;;;;29766:12:0;;;;;;:8;:12;;;;;;;;:20;;:12;:20;29762:126;;;29817:15;;29807:65;;-1:-1:-1;;;29807:65:0;;-1:-1:-1;;;;;29817:15:0;;;;29807:40;;:65;;29817:15;;29855:4;;29861:10;;29807:65;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29807:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29807:65:0;;;;29762:126;29224:675;;;;27463:2443;;;;;;;:::o;8226:192::-;8312:7;8348:12;8340:6;;;;8332:29;;;;-1:-1:-1;;;8332:29:0;;;;;;;;;;-1:-1:-1;;;8384:5:0;;;8226:192::o;8669:471::-;8727:7;8972:6;8968:47;;-1:-1:-1;9002:1:0;8995:8;;8968:47;9039:5;;;9043:1;9039;:5;:1;9063:5;;;;;:10;9055:56;;;;-1:-1:-1;;;9055:56:0;;;;;;;;;9131:1;8669:471;-1:-1:-1;;;8669:471:0:o;9608:132::-;9666:7;9693:39;9697:1;9700;9693:39;;;;;;;;;;;;;;;;;:3;:39::i;7339:181::-;7397:7;7429:5;;;7453:6;;;;7445:46;;;;-1:-1:-1;;;7445:46:0;;;;;;;;29914:396;-1:-1:-1;;;;;30047:15:0;;;;;;:7;:15;;;;;;:28;;30067:7;30047:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;30029:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30130:21;;;30107:18;;;;;;;;;;:45;;;:22;:45;:::i;:::-;30086:7;:18;30094:9;-1:-1:-1;;;;;30086:18:0;-1:-1:-1;;;;;30086:18:0;;;;;;;;;;;;:66;;;;30185:9;-1:-1:-1;;;;;30168:50:0;30177:6;-1:-1:-1;;;;;30168:50:0;;30196:5;:21;;;30168:50;;;;;;;;;;;;;;;30232:13;;:21;;30249:4;30232:21;30229:74;;;30269:22;30278:5;30284:6;30269:8;:22::i;25227:196::-;25359:20;25407:8;;;25227:196::o;25431:210::-;-1:-1:-1;;;;;25514:12:0;;25490:4;25514:12;;;:8;:12;;;;;;;;:20;;:12;:20;:41;;;;-1:-1:-1;25549:6:0;;;;25548:7;25514:41;:65;;;;-1:-1:-1;25568:11:0;;;;25514:65;:119;;;;;25620:13;;25592:24;25610:4;25592:9;:24::i;:::-;:41;;25507:126;25431:210;-1:-1:-1;;25431:210:0:o;25649:1806::-;18722:6;:13;;-1:-1:-1;;18722:13:0;18731:4;18722:13;;;25753::::1;::::0;;25718:4:::1;18722:6:::0;25698:26;;;:11:::1;:26;::::0;;;;;;25733:15:::1;::::0;-1:-1:-1;;;;;25733:15:0::1;25698:52:::0;;;;;;;:68;25811:16;;25825:1:::1;25811:16:::0;;;;;::::1;::::0;;;25787:21:::1;::::0;25811:16:::1;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;::::0;-1:-1;25811:16:0::1;25787:40;;25856:4;25838;25843:1;25838:7;;;;;;;;-1:-1:-1::0;;;;;25838:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;25882:4:::1;::::0;25872:7;;25882:4;::::1;::::0;25872;;25882;;25872:7;::::1;;;;;-1:-1:-1::0;;;;;25872:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;25907:4:::1;::::0;25897:7;;25907:4;::::1;::::0;25897;;25902:1:::1;::::0;25897:7;::::1;;;;;-1:-1:-1::0;;;;;25897:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;25953:4:::1;::::0;25946:37:::1;::::0;-1:-1:-1;;;25946:37:0;;25922:21:::1;::::0;25953:4;;;::::1;::::0;25946:22:::1;::::0;:37:::1;::::0;25977:4:::1;::::0;25946:37:::1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;25946:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25946:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;25946:37:0;;;;;;;;;25996:15;::::0;26080:13:::1;::::0;;25996:201;;-1:-1:-1;;;25996:201:0;;25922:61;;-1:-1:-1;;;;;;25996:15:0;;::::1;::::0;:69:::1;::::0;:201:::1;::::0;:15:::1;::::0;26124:4;;26151::::1;::::0;26171:15:::1;::::0;25996:201:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;25996:201:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;26238:4:0::1;::::0;26231:37:::1;::::0;-1:-1:-1;;;26231:37:0;;26210:18:::1;::::0;-1:-1:-1;26231:56:0::1;::::0;-1:-1:-1;26273:13:0;;-1:-1:-1;;;;;26238:4:0::1;::::0;26231:22:::1;::::0;:37:::1;::::0;26262:4:::1;::::0;26231:37:::1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;26231:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26231:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26231:37:0;;;;;;;;;:41:::0;:56:::1;:41;:56;:::i;:::-;26210:77;;26298:20;26321:45;26354:11;;26321:28;26336:12;;26321:10;:14;;:28;;;;:::i;:45::-;26298:68;;26377:22;26402:47;26437:11;;26402:30;26417:14;;26402:10;:14;;:30;;;;:::i;:47::-;26377:72:::0;-1:-1:-1;26460:18:0::1;26481:48;26377:72:::0;26481:28:::1;:10:::0;26496:12;26481:28:::1;:14;:28;:::i;:48::-;26460:69:::0;-1:-1:-1;26546:16:0;;26542:195:::1;;26586:4;::::0;26601:13:::1;::::0;26579:50:::1;::::0;-1:-1:-1;;;26579:50:0;;-1:-1:-1;;;;;26586:4:0;;::::1;::::0;26579:21:::1;::::0;:50:::1;::::0;26601:13;::::1;::::0;26616:12;;26579:50:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;26579:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26579:50:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26579:50:0;;;;;;;;;;26659:66;26676:48;26712:11;;26676:31;26694:12;;26676:13;;:17;;:31;;;;:::i;:48::-;26659:12;::::0;;:66:::1;:16;:66;:::i;:::-;26644:12;:81:::0;26542:195:::1;26751:18:::0;;26747:338:::1;;26793:4;::::0;26808:15:::1;::::0;26786:54:::1;::::0;-1:-1:-1;;;26786:54:0;;-1:-1:-1;;;;;26793:4:0;;::::1;::::0;26786:21:::1;::::0;:54:::1;::::0;26808:15;::::1;::::0;26825:14;;26786:54:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;26786:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26786:54:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;26786:54:0;;;;;;;;;-1:-1:-1::0;26859:12:0::1;::::0;::::1;;:20;;:12:::0;:20:::1;26855:117;;;26910:15;::::0;26900:56:::1;::::0;-1:-1:-1;;;26900:56:0;;-1:-1:-1;;;;;26910:15:0;;::::1;::::0;26900:40:::1;::::0;:56:::1;::::0;26941:14;;26900:56:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;26900:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26900:56:0;;;;26855:117;27003:70;27022:50;27060:11;;27022:33;27040:14;;27022:13;;:17;;:33;;;;:::i;:50::-;27003:14;::::0;;:70:::1;:18;:70;:::i;:::-;26986:14;:87:::0;26747:338:::1;27099:14:::0;;27095:298:::1;;27137:4;::::0;27152:11:::1;::::0;27130:46:::1;::::0;-1:-1:-1;;;27130:46:0;;-1:-1:-1;;;;;27137:4:0;;::::1;::::0;27130:21:::1;::::0;:46:::1;::::0;27152:11;::::1;::::0;27165:10;;27130:46:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;27130:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27130:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27130:46:0;;;;;;;;;-1:-1:-1::0;27195:8:0::1;::::0;::::1;;::::0;;::::1;;:16;;:8;:16;27191:101;;;27238:11;::::0;27232:44:::1;::::0;-1:-1:-1;;;27232:44:0;;-1:-1:-1;;;;;27238:11:0;;::::1;::::0;27232:32:::1;::::0;:44:::1;::::0;27265:10;;27232:44:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;27232:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27232:44:0;;;;27191:101;27319:62;27334:46;27368:11;;27334:29;27352:10;;27334:13;;:17;;:29;;;;:::i;:46::-;27319:10;::::0;;:62:::1;:14;:62;:::i;:::-;27306:10;:75:::0;27095:298:::1;27433:13;::::0;27417:11:::1;::::0;:30:::1;::::0;::::1;:15;:30;:::i;:::-;27403:11;:44:::0;-1:-1:-1;;18740:6:0;:14;;-1:-1:-1;;18740:14:0;;;-1:-1:-1;;;;25649:1806:0:o;23926:1024::-;24158:13;;24048:16;;24067:107;;24140:33;;-1:-1:-1;;;;;24158:13:0;24140:9;:33::i;24067:107::-;24048:126;;24200:11;;24189:8;:22;24185:77;;;24228:11;:22;;;24185:77;24273:17;24291:19;24311:15;24327:16;24347:40;24354:4;24360:2;24364:8;24374:12;24347:6;:40::i;:::-;24272:115;;;;;;;;24433:10;;24446:1;24433:14;24417:13;;24402:12;:28;:45;24398:197;;;24498:7;;24482:6;24491:4;24482:13;:23;;;;;;24464:15;;;:41;24398:197;;;24576:7;;24565:8;24556:6;:17;:27;;;;;;24538:15;;;:45;24398:197;24640:15;;;;24629:27;;:6;;:27;:10;:27;:::i;:::-;24605:21;;;:51;24699:15;;;;24683:11;;:32;;;:15;:32;:::i;:::-;24669:11;:46;24781:7;;24741:48;;24758:20;;;24781:7;24758:30;;;;24741:12;;;24758:30;;24741:48;:16;:48;:::i;:::-;24726:12;:63;24861:7;;24817:52;;24836:22;;;24861:7;24836:32;;;;24817:14;;;24836:32;;24817:52;:18;:52;:::i;:::-;24800:14;:69;;;24909:12;;24893:11;;:49;;24800:69;24893:29;;:11;:29;:15;:29;:::i;:49::-;24880:10;:62;-1:-1:-1;;;;;;;;;;23926:1024:0:o;7795:136::-;7853:7;7880:43;7884:1;7887;7880:43;;;;;;;;;;;;;;;;;:3;:43::i;30318:336::-;30435:8;;30419:11;;30380:15;;30435:8;30410:21;;30380:15;;30410:21;:8;:21;:::i;:::-;:33;30406:241;;30490:8;;30474:11;;:25;;;:15;:25;:::i;:::-;30460:11;:39;30619:13;;30528:107;;30601:33;;-1:-1:-1;;;;;30619:13:0;30601:9;:33::i;30406:241::-;30318:336;:::o;10228:345::-;10314:7;10416:12;10409:5;10401:28;;;;-1:-1:-1;;;10401:28:0;;;;;;;;;;;10440:9;10456:1;10452;:5;;;;;;;10228:345;-1:-1:-1;;;;;10228:345:0:o;24958:261::-;25031:15;;;;:19;25028:184;;25118:15;;;;;25107:4;25091:22;;;;:7;:22;;;;;;;:43;;;:26;:43;:::i;:::-;25082:4;25066:22;;;;:7;:22;;;;;;;:68;;;;25184:15;;;;25154:46;;25082:4;;-1:-1:-1;;;;;25154:46:0;;;;;;;;;;;;;;;;;25028:184;24958:261;;:::o;15719:17441::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1205:241:-1:-;;1309:2;1297:9;1288:7;1284:23;1280:32;1277:2;;;-1:-1;;1315:12;1277:2;85:6;72:20;97:33;124:5;97:33;;1453:263;;1568:2;1556:9;1547:7;1543:23;1539:32;1536:2;;;-1:-1;;1574:12;1536:2;226:6;220:13;238:33;265:5;238:33;;1723:366;;;1844:2;1832:9;1823:7;1819:23;1815:32;1812:2;;;-1:-1;;1850:12;1812:2;85:6;72:20;97:33;124:5;97:33;;;1902:63;-1:-1;2002:2;2041:22;;72:20;97:33;72:20;97:33;;;2010:63;;;;1806:283;;;;;;2096:491;;;;2234:2;2222:9;2213:7;2209:23;2205:32;2202:2;;;-1:-1;;2240:12;2202:2;85:6;72:20;97:33;124:5;97:33;;;2292:63;-1:-1;2392:2;2431:22;;72:20;97:33;72:20;97:33;;;2196:391;;2400:63;;-1:-1;;;2500:2;2539:22;;;;994:20;;2196:391;2594:617;;;;;2749:3;2737:9;2728:7;2724:23;2720:33;2717:2;;;-1:-1;;2756:12;2717:2;85:6;72:20;97:33;124:5;97:33;;;2808:63;-1:-1;2908:2;2947:22;;72:20;97:33;72:20;97:33;;;2711:500;;2916:63;;-1:-1;;;;3016:2;3055:22;;994:20;;3124:2;3163:22;994:20;;2711:500;3218:366;;;3339:2;3327:9;3318:7;3314:23;3310:32;3307:2;;;-1:-1;;3345:12;3307:2;85:6;72:20;97:33;124:5;97:33;;;3397:63;3497:2;3536:22;;;;994:20;;-1:-1;;;3301:283;3591:516;;;;3744:2;3732:9;3723:7;3719:23;3715:32;3712:2;;;-1:-1;;3750:12;3712:2;3808:17;3795:31;3846:18;;3838:6;3835:30;3832:2;;;-1:-1;;3868:12;3832:2;3969:6;3958:9;3954:22;431:3;424:4;416:6;412:17;408:27;398:2;;-1:-1;;439:12;398:2;482:6;469:20;459:30;;3846:18;501:6;498:30;495:2;;;-1:-1;;531:12;495:2;626:3;575:4;;610:6;606:17;567:6;592:32;;589:41;586:2;;;-1:-1;;633:12;586:2;575:4;563:17;;;;-1:-1;3896:90;;-1:-1;;4059:22;;725:20;750:30;725:20;750:30;;;4031:60;;;;3706:401;;;;;;4114:257;;4226:2;4214:9;4205:7;4201:23;4197:32;4194:2;;;-1:-1;;4232:12;4194:2;873:6;867:13;885:30;909:5;885:30;;4378:360;;;4496:2;4484:9;4475:7;4471:23;4467:32;4464:2;;;-1:-1;;4502:12;4464:2;738:6;725:20;750:30;774:5;750:30;;4745:360;;;4863:2;4851:9;4842:7;4838:23;4834:32;4831:2;;;-1:-1;;4869:12;4831:2;738:6;725:20;750:30;774:5;750:30;;5112:485;;;;5247:2;5235:9;5226:7;5222:23;5218:32;5215:2;;;-1:-1;;5253:12;5215:2;738:6;725:20;750:30;774:5;750:30;;;5305:60;5402:2;5441:22;;994:20;;-1:-1;5510:2;5549:22;;;994:20;;5209:388;-1:-1;;;5209:388;5604:241;;5708:2;5696:9;5687:7;5683:23;5679:32;5676:2;;;-1:-1;;5714:12;5676:2;-1:-1;994:20;;5670:175;-1:-1;5670:175;5852:263;;5967:2;5955:9;5946:7;5942:23;5938:32;5935:2;;;-1:-1;;5973:12;5935:2;-1:-1;1142:13;;5929:186;-1:-1;5929:186;6122:366;;;6243:2;6231:9;6222:7;6218:23;6214:32;6211:2;;;-1:-1;;6249:12;6211:2;-1:-1;;994:20;;;6401:2;6440:22;;;994:20;;-1:-1;6205:283;13868:213;-1:-1;;;;;25235:54;;;;6887:37;;13986:2;13971:18;;13957:124;14324:324;-1:-1;;;;;25235:54;;;6887:37;;25235:54;;14634:2;14619:18;;6887:37;14470:2;14455:18;;14441:207;14655:324;-1:-1;;;;;25235:54;;;;6887:37;;14965:2;14950:18;;13705:37;14801:2;14786:18;;14772:207;14986:201;25147:13;;25140:21;7850:34;;15098:2;15083:18;;15069:118;15194:423;25147:13;;25140:21;7850:34;;-1:-1;;;;;25235:54;;;;15520:2;15505:18;;6887:37;15603:2;15588:18;;13705:37;15362:2;15347:18;;15333:284;16142:301;;16280:2;;16301:17;16294:47;8534:5;24339:12;24755:6;16280:2;16269:9;16265:18;24743:19;-1:-1;26646:101;26660:6;26657:1;26654:13;26646:101;;;26727:11;;;;;26721:18;26708:11;;;24783:14;26708:11;26701:39;26675:10;;26646:101;;;26762:6;26759:1;26756:13;26753:2;;;-1:-1;24783:14;26818:6;16269:9;26809:16;;26802:27;26753:2;-1:-1;26934:7;26918:14;-1:-1;;26914:28;8692:39;;;;24783:14;8692:39;;16251:192;-1:-1;;;16251:192;16450:407;16641:2;16655:47;;;8968:2;16626:18;;;24743:19;-1:-1;;;24783:14;;;8984:38;9041:12;;;16612:245;16864:407;17055:2;17069:47;;;9292:2;17040:18;;;24743:19;9328:34;24783:14;;;9308:55;-1:-1;;;9383:12;;;9376:30;9425:12;;;17026:245;17278:407;17469:2;17483:47;;;9676:2;17454:18;;;24743:19;9712:29;24783:14;;;9692:50;9761:12;;;17440:245;17692:407;17883:2;17897:47;;;10012:2;17868:18;;;24743:19;-1:-1;;;24783:14;;;10028:42;10089:12;;;17854:245;18106:407;18297:2;18311:47;;;10340:2;18282:18;;;24743:19;10376:34;24783:14;;;10356:55;-1:-1;;;10431:12;;;10424:27;10470:12;;;18268:245;18520:407;18711:2;18725:47;;;10721:2;18696:18;;;24743:19;-1:-1;;;24783:14;;;10737:37;10793:12;;;18682:245;18934:407;19125:2;19139:47;;;11044:2;19110:18;;;24743:19;-1:-1;;;24783:14;;;11060:42;11121:12;;;19096:245;19348:407;19539:2;19553:47;;;11372:2;19524:18;;;24743:19;-1:-1;;;24783:14;;;11388:41;11448:12;;;19510:245;19762:407;19953:2;19967:47;;;11699:2;19938:18;;;24743:19;11735:34;24783:14;;;11715:55;-1:-1;;;11790:12;;;11783:26;11828:12;;;19924:245;20176:407;20367:2;20381:47;;;12079:2;20352:18;;;24743:19;12115:34;24783:14;;;12095:55;-1:-1;;;12170:12;;;12163:38;12220:12;;;20338:245;20590:407;20781:2;20795:47;;;12471:2;20766:18;;;24743:19;12507:34;24783:14;;;12487:55;-1:-1;;;12562:12;;;12555:25;12599:12;;;20752:245;21004:407;21195:2;21209:47;;;21180:18;;;24743:19;12886:34;24783:14;;;12866:55;12940:12;;;21166:245;21418:407;21609:2;21623:47;;;13191:2;21594:18;;;24743:19;-1:-1;;;24783:14;;;13207:41;13267:12;;;21580:245;21832:407;22023:2;22037:47;;;22008:18;;;24743:19;13554:34;24783:14;;;13534:55;13608:12;;;21994:245;22246:213;13705:37;;;22364:2;22349:18;;22335:124;22466:839;;22762:3;22751:9;22747:19;13735:5;13712:3;13705:37;22935:2;26294:24;22935:2;22924:9;22920:18;8319:58;22762:3;22972:2;22961:9;22957:18;22950:48;23012:108;7280:5;24339:12;24755:6;24750:3;24743:19;24783:14;22751:9;24783:14;7292:93;;22935:2;7456:5;24193:14;7468:21;;-1:-1;7495:260;7520:6;7517:1;7514:13;7495:260;;;7581:13;;-1:-1;;;;;25235:54;6756:58;;24598:14;;;;6649;;;;3846:18;7535:9;7495:260;;;-1:-1;;;;;;;25235:54;;;;23207:2;23192:18;;6756:58;-1:-1;;;23290:3;23275:19;13705:37;23004:116;22733:572;-1:-1;;;22733:572;23312:547;13705:37;;;23679:2;23664:18;;13705:37;;;;23762:2;23747:18;;13705:37;23845:2;23830:18;;13705:37;23514:3;23499:19;;23485:374;23866:205;25451:4;25440:16;;;;13821:35;;23980:2;23965:18;;23951:120;26955:117;-1:-1;;;;;25235:54;;27014:35;;27004:2;;27063:1;;27053:12;27079:111;27160:5;25147:13;25140:21;27138:5;27135:32;27125:2;;27181:1;;27171:12

Swarm Source

ipfs://9514f9116c6eb6e95653ad73f94f8032d1b26036d5354d93ec793f1dbea7cf2e
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.