ETH Price: $3,416.83 (+1.04%)
Gas: 3 Gwei

Token

Cat Nation (CAT)
 

Overview

Max Total Supply

120,000,000 CAT

Holders

1,067

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,385.051825342465048576 CAT

Value
$0.00
0x656184204538acdd349a3a6efde3a46fcaa21fd6
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-20
*/

// 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 constant buyMarketFee = 100;
    uint256 constant buyTreasuryFee = 150;
    uint256 constant buyBankFee = 50;
    uint256 constant buyMarketFeeAccumulateA = 100;
    uint256 constant buyMarketFeeAccumulateB = 100;
    uint256 constant buyMarketFeeAccumulateC = 800;
    uint256 constant buyTreasuryFeeAccumulateA = 150;
    uint256 constant buyTreasuryFeeAccumulateB = 150;
    uint256 constant buyTreasuryFeeAccumulateC = 400;
    uint256 constant buyBankFeeAccumulateA = 50;
    uint256 constant buyBankFeeAccumulateB = 50;
    uint256 constant buyBankFeeAccumulateC = 300;

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

    uint256 constant feeUnit = 10000;

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

    IERC20 public uniswapV2Pair;
    address public weth;

    address usdt = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
    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 = 2 * (10 ** 6) * (10 ** 18);

    bool public treasuryOpen = true;
    bool public bankOpen = true;

    bool openTransaction;
    uint256 launchedBlock;

    uint256 firstBlock = 2;
    uint256 secondBlock = 25;

    address fromAddress;
    address toAddress;

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

    uint256 constant distributorGas = 500000;
    bool public swapEnabled = true;
    uint256 public swapThreshold = supply / 10000;
    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);
    }

    event BuyToken(address indexed to, uint256 amount, uint256 value);

    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;

        uint256 amountToMarket = swapThreshold.mul(marketAmount).div(totalAmount);

        address[] memory wethPath = new address[](2);
        wethPath[0] = address(this);
        wethPath[1] = weth;
        uint256 balanceBefore = address(this).balance;

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToMarket,
            0,
            wethPath,
            address(this),
            block.timestamp
        );

        uint256 wethToMarket = address(this).balance.sub(balanceBefore);
        payable(marketAddress).transfer(wethToMarket);
        marketAmount = marketAmount.sub(amountToMarket);
        
        address[] memory usdtPath = new address[](3);
        usdtPath[0] = address(this);
        usdtPath[1] = weth;
        usdtPath[2] = usdt;
        uint256 usdtBalanceBefore = IERC20(usdt).balanceOf(address(this));

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            swapThreshold.sub(amountToMarket),
            0,
            usdtPath,
            address(this),
            block.timestamp
        );

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

        if (treasuryOpen == true && usdtToTreasury > 0) {
            ITreasury(treasuryAddress).addUsdtAmount(usdtToTreasury);
            treasuryAmount = treasuryAmount.sub(swapThreshold.mul(treasuryAmount).div(totalAmount));
        }
        if (bankOpen == true && usdtToBank > 0) {
            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;
        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){
            param.takeFee = true;

            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 (ammPairs[from] == true) {
            emit BuyToken(to, amount, get_value(amount));
        }
    }

    function get_value(uint256 amount) public view returns (uint256 usdtAmount) {
        uint256 ethAmount = amount.mul(IERC20(weth).balanceOf(address(uniswapV2Pair))).div(balanceOf(address(uniswapV2Pair)));
        address ethToUsdtPair = IUniswapV2Factory(uniswapV2Router.factory()).getPair(usdt, weth);
        usdtAmount = ethAmount.mul(IERC20(usdt).balanceOf(ethToUsdtPair)).div(IERC20(weth).balanceOf(ethToUsdtPair));
    }

    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;
        }
    }

    function withDrawEth(address _to) external {
        require(initOwner == address(msg.sender), "CAT: not owner");
        uint balance = address(this).balance;
        require(balance > 0, "Balance should be more then zero");
        payable(_to).transfer(balance);
    }

    function withDrawToken(address _token, uint256 _amount, address _to) external {
        require(initOwner == address(msg.sender) || treasuryAddress == address(msg.sender) || bankAddress == address(msg.sender), "CAT: not owner");
        IERC20(_token).transfer(_to, _amount);
    }
}

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":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BuyToken","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":"uint256","name":"amount","type":"uint256"}],"name":"get_value","outputs":[{"internalType":"uint256","name":"usdtAmount","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"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withDrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"withDrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6006805460ff191660121790556a6342fd08f00f637800000060085560c0604052600a60808190526921b0ba102730ba34b7b760b11b60a090815262000049916009919062000584565b506040805180820190915260038082526210d05560ea1b60209092019182526200007691600a9162000584565b50601280546001600160a01b031990811673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48179091556013805490911673cdf130780dc0c2da5932f7cb33cbf54cb3bb837c1790556a01a784379d99db420000006018556019805461ff001960ff199182166001908117919091166101001783556002601b55601c9290925562015180601f55600560215560228054821683179055636531528060235560248054909116909117905560085461271090046025553480156200013857600080fd5b5060006200014e6001600160e01b036200057016565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620001ab6001600160e01b036200057516565b601780546001600160a01b0319166001600160a01b0392909216919091179055620001d562000575565b601680546001600160a01b0319166001600160a01b03928316179055600854601754909116600090815260016020819052604082208390556007929092556003906200022062000575565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600384528281208054861660019081179091557f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c805487168217905560175483168252838220805487168217905560135483168252838220805487168217905560145483168252838220805487168217905560155490921681528281208054909516909117909355600f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b81529151909392849263c45a01559260048083019392829003018186803b1580156200033757600080fd5b505afa1580156200034c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000372919081019062000626565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003bb57600080fd5b505afa158015620003d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003f6919081019062000626565b6040518363ffffffff1660e01b81526004016200041592919062000656565b602060405180830381600087803b1580156200043057600080fd5b505af115801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506200046b919081019062000626565b9050816001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004a757600080fd5b505afa158015620004bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620004e2919081019062000626565b601180546001600160a01b039283166001600160a01b03199182161790915560108054848416921682179055600090815260056020526040808220805460ff1916600117905560175460075491519316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620005609162000670565b60405180910390a3505062000679565b335b90565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005c757805160ff1916838001178555620005f7565b82800160010185558215620005f7579182015b82811115620005f7578251825591602001919060010190620005da565b506200060592915062000609565b5090565b6200057291905b8082111562000605576000815560010162000610565b60006020828403121562000638578081fd5b81516001600160a01b03811681146200064f578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b612ea180620006896000396000f3fe6080604052600436106102815760003560e01c80637822ed491161014f578063a457c2d7116100c1578063cd8eb9af1161007a578063cd8eb9af146106ec578063cefa2c421461070c578063dd62ed3e1461072c578063df20fd491461074c578063f2fde38b1461076c578063fbff3be11461078c57610288565b8063a457c2d714610642578063a4b3cf9814610662578063a72905a214610677578063a9059cbb14610697578063c0a40095146106b7578063c5f956af146106d757610288565b80638f37d6c5116101135780638f37d6c51461059e5780639157f6bb146105b3578063947a36fb146105d357806395623641146105e857806395d89b41146105fd5780639eb65c7f1461061257610288565b80637822ed491461052a578063793881e91461053f578063797caf2d1461055457806382ede294146105695780638da5cb5b1461058957610288565b8063316aaf55116101f3578063667382b6116101ac578063667382b6146104805780636dcea85f146104a05780636ddd1713146104c057806370a08231146104d5578063715018a6146104f5578063749cab541461050a57610288565b8063316aaf55146103ec57806339509351146104015780633fafa196146104215780633fc8cef314610441578063438be10d1461045657806349bd5a5e1461046b57610288565b806318160ddd1161024557806318160ddd1461033e57806323b872dd146103535780632542ae301461037357806325a842c6146103955780632d872154146103aa578063313ce567146103ca57610288565b80630445b6671461028d578063047fc9aa146102b857806306fdde03146102cd578063095ea7b3146102ef5780631694505e1461031c57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a26107ac565b6040516102af9190612d4f565b60405180910390f35b3480156102c457600080fd5b506102a26107b2565b3480156102d957600080fd5b506102e26107b8565b6040516102af91906129c9565b3480156102fb57600080fd5b5061030f61030a3660046127ba565b61084e565b6040516102af91906129be565b34801561032857600080fd5b5061033161086c565b6040516102af9190612977565b34801561034a57600080fd5b506102a261087b565b34801561035f57600080fd5b5061030f61036e366004612735565b610881565b34801561037f57600080fd5b5061039361038e3660046126c5565b61090e565b005b3480156103a157600080fd5b506102a261099a565b3480156103b657600080fd5b506103936103c5366004612926565b6109a0565b3480156103d657600080fd5b506103df610aa9565b6040516102af9190612df1565b3480156103f857600080fd5b506102a2610ab2565b34801561040d57600080fd5b5061030f61041c3660046127ba565b610ab8565b34801561042d57600080fd5b5061039361043c3660046128b8565b610b0c565b34801561044d57600080fd5b50610331610b81565b34801561046257600080fd5b5061030f610b90565b34801561047757600080fd5b50610331610b9e565b34801561048c57600080fd5b5061039361049b366004612826565b610bad565b3480156104ac57600080fd5b506103936104bb3660046126c5565b610c3e565b3480156104cc57600080fd5b5061030f610cad565b3480156104e157600080fd5b506102a26104f03660046126c5565b610cb6565b34801561050157600080fd5b50610393610cd1565b34801561051657600080fd5b50610393610525366004612956565b610d50565b34801561053657600080fd5b50610331610d90565b34801561054b57600080fd5b5061030f610d9f565b34801561056057600080fd5b506102a2610da8565b34801561057557600080fd5b506103936105843660046128f2565b610dae565b34801561059557600080fd5b50610331610dfd565b3480156105aa57600080fd5b5061030f610e0c565b3480156105bf57600080fd5b506103936105ce3660046127e5565b610e15565b3480156105df57600080fd5b506102a2610ee9565b3480156105f457600080fd5b50610331610eef565b34801561060957600080fd5b506102e2610efe565b34801561061e57600080fd5b5061063261062d366004612775565b610f5f565b6040516102af9493929190612dd6565b34801561064e57600080fd5b5061030f61065d3660046127ba565b61113f565b34801561066e57600080fd5b506103936111ad565b34801561068357600080fd5b5061030f6106923660046126c5565b611222565b3480156106a357600080fd5b5061030f6106b23660046127ba565b611237565b3480156106c357600080fd5b506103936106d2366004612826565b61124b565b3480156106e357600080fd5b506103316112d6565b3480156106f857600080fd5b506103936107073660046128b8565b6112e5565b34801561071857600080fd5b50610393610727366004612926565b611363565b34801561073857600080fd5b506102a26107473660046126fd565b61139d565b34801561075857600080fd5b506103936107673660046128d5565b6113c8565b34801561077857600080fd5b506103936107873660046126c5565b611409565b34801561079857600080fd5b506102a26107a7366004612926565b6114bf565b60255481565b60085481565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b600061086261085b6117a3565b84846117a7565b5060015b92915050565b600f546001600160a01b031681565b60075490565b600061088e84848461185b565b6109048461089a6117a3565b6108ff85604051806060016040528060268152602001612e23602691396001600160a01b038a166000908152600260205260408120906108d86117a3565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611c9116565b6117a7565b5060019392505050565b6016546001600160a01b031633146109415760405162461bcd60e51b815260040161093890612b32565b60405180910390fd5b478061095f5760405162461bcd60e51b815260040161093890612b5a565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610995573d6000803e3d6000fd5b505050565b60235481565b6109a86117a3565b6000546001600160a01b039081169116146109d55760405162461bcd60e51b815260040161093890612cb9565b6023819055601054610aa3906109f3906001600160a01b0316610cb6565b6011546010546040516370a0823160e01b8152610a97926ec097ce7bc90715b34b9f1000000000926001600160a01b03918216926370a0823192610a3b921690600401612977565b60206040518083038186803b158015610a5357600080fd5b505afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a8b919081019061293e565b9063ffffffff611cbd16565b9063ffffffff611cfe16565b60205550565b60065460ff1690565b60215481565b6000610862610ac56117a3565b846108ff8560026000610ad66117a3565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611d4016565b6016546001600160a01b03163314610b365760405162461bcd60e51b815260040161093890612b32565b6019805492151560ff19938416179055601480546001600160a01b039283166001600160a01b0319909116179081905516600090815260036020526040902080549091166001179055565b6011546001600160a01b031681565b601954610100900460ff1681565b6010546001600160a01b031681565b6016546001600160a01b03163314610bd75760405162461bcd60e51b815260040161093890612b32565b60005b82811015610c38578160046000868685818110610bf357fe5b9050602002016020610c0891908101906126c5565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bda565b50505050565b610c466117a3565b6000546001600160a01b03908116911614610c735760405162461bcd60e51b815260040161093890612cb9565b601380546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b60245460ff1681565b6001600160a01b031660009081526001602052604090205490565b610cd96117a3565b6000546001600160a01b03908116911614610d065760405162461bcd60e51b815260040161093890612cb9565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610d586117a3565b6000546001600160a01b03908116911614610d855760405162461bcd60e51b815260040161093890612cb9565b601b91909155601c55565b6015546001600160a01b031681565b60195460ff1681565b60205481565b610db66117a3565b6000546001600160a01b03908116911614610de35760405162461bcd60e51b815260040161093890612cb9565b6022805460ff191693151593909317909255602155602355565b6000546001600160a01b031690565b60225460ff1681565b6016546001600160a01b0316331480610e3857506014546001600160a01b031633145b80610e4d57506015546001600160a01b031633145b610e695760405162461bcd60e51b815260040161093890612b32565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610e9790849086906004016129a5565b602060405180830381600087803b158015610eb157600080fd5b505af1158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c38919081019061289c565b601f5481565b6013546001600160a01b031681565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108445780601f1061081957610100808354040283529160200191610844565b6001600160a01b03831660009081526004602052604081205481908190819060ff16151560011480610fae57506001600160a01b03881660009081526004602052604090205460ff1615156001145b15610fc55750606492506000915081905082611134565b6001600160a01b03871660009081526005602052604090205460ff161515600114156110df57601c54601a54606491609691603291600101908903101561101957506103209150610190905061012c6110ac565b60225460ff1615156001148015611050575061104d6064610a97602154600202606403602054611cbd90919063ffffffff16565b89105b15611067575060c8915061038490506101906110ac565b60225460ff161515600114801561109b57506110986064610a97602154606403602054611cbd90919063ffffffff16565b89105b156110ac575060c891506102589050815b8282826110cf816110c3858563ffffffff611d4016565b9063ffffffff611d4016565b9650965096509650505050611134565b601c54600101601a548603101561111a5761032061019061012c61110d816110c3858563ffffffff611d4016565b9350935093509350611134565b60646096603261110d816110c3858563ffffffff611d4016565b945094509450949050565b600061086261114c6117a3565b846108ff85604051806060016040528060238152602001612e4960239139600260006111766117a3565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611c9116565b6111b56117a3565b6000546001600160a01b039081169116146111e25760405162461bcd60e51b815260040161093890612cb9565b60195462010000900460ff161561120b5760405162461bcd60e51b815260040161093890612ac2565b6019805462ff000019166201000017905543601a55565b60056020526000908152604090205460ff1681565b60006108626112446117a3565b848461185b565b6016546001600160a01b031633146112755760405162461bcd60e51b815260040161093890612b32565b60005b82811015610c3857816003600086868581811061129157fe5b90506020020160206112a691908101906126c5565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611278565b6014546001600160a01b031681565b6016546001600160a01b0316331461130f5760405162461bcd60e51b815260040161093890612b32565b6019805461ff0019166101009315159390930292909217909155601580546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b61136b6117a3565b6000546001600160a01b039081169116146113985760405162461bcd60e51b815260040161093890612cb9565b601855565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6016546001600160a01b031633146113f25760405162461bcd60e51b815260040161093890612b32565b6024805460ff191692151592909217909155602555565b6114116117a3565b6000546001600160a01b0390811691161461143e5760405162461bcd60e51b815260040161093890612cb9565b6001600160a01b0381166114645760405162461bcd60e51b815260040161093890612a45565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6010546000908190611573906114dd906001600160a01b0316610cb6565b6011546010546040516370a0823160e01b8152610a97926001600160a01b03908116926370a08231926115169290911690600401612977565b60206040518083038186803b15801561152e57600080fd5b505afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611566919081019061293e565b869063ffffffff611cbd16565b90506000600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156115c557600080fd5b505afa1580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115fd91908101906126e1565b60125460115460405163e6a4390560e01b81526001600160a01b039384169363e6a4390593611635939082169291169060040161298b565b60206040518083038186803b15801561164d57600080fd5b505afa158015611661573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061168591908101906126e1565b6011546040516370a0823160e01b815291925061179b916001600160a01b03909116906370a08231906116bc908590600401612977565b60206040518083038186803b1580156116d457600080fd5b505afa1580156116e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061170c919081019061293e565b6012546040516370a0823160e01b8152610a97916001600160a01b0316906370a082319061173e908790600401612977565b60206040518083038186803b15801561175657600080fd5b505afa15801561176a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061178e919081019061293e565b859063ffffffff611cbd16565b949350505050565b3390565b6001600160a01b0383166117cd5760405162461bcd60e51b815260040161093890612be8565b6001600160a01b0382166117f35760405162461bcd60e51b815260040161093890612d1a565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061184e908590612d4f565b60405180910390a3505050565b6001600160a01b0383166118815760405162461bcd60e51b815260040161093890612aef565b600081116118a15760405162461bcd60e51b815260040161093890612c2a565b6001600160a01b03831660009081526003602052604090205460ff161580156118e257506001600160a01b03821660009081526005602052604090205460ff165b80156118f1575060265460ff16155b1561191b57600061190b6064610a976063610a8b88610cb6565b905081811015611919578091505b505b436119246126a2565b60208082018490526001600160a01b03851660009081526005909152604090205460ff16151560011480156119c75750836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561198d57600080fd5b505afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119c5919081019061293e565b155b156119f9576017546001600160a01b038681169116146119f95760405162461bcd60e51b815260040161093890612cee565b60265460ff16151560011480611a2c57506001600160a01b03851660009081526003602052604090205460ff1615156001145b80611a5457506001600160a01b03841660009081526003602052604090205460ff1615156001145b15611a6c57611a6585858584611d65565b5050610995565b60195462010000900460ff161515600114611a995760405162461bcd60e51b815260040161093890612a1c565b6001600160a01b03851660009081526005602052604090205460ff16151560011415611ae557611ac884611e58565b15611ae55760405162461bcd60e51b815260040161093890612b8f565b6001600160a01b03841660009081526005602052604090205460ff16151560011480611b2e57506001600160a01b03851660009081526005602052604090205460ff1615156001145b15611b5a5760018152611b4084611e5e565b15611b4d57611b4d611eb7565b611b5a8382848888612441565b6001600160a01b03841660009081526005602052604090205460ff16158015611b9c57506001600160a01b03841660009081526004602052604090205460ff16155b15611bd357601854611bb582602001516110c387610cb6565b1115611bd35760405162461bcd60e51b815260040161093890612bbc565b611bdf85858584611d65565b60225460ff1615156001148015611c0b5750601f54602354611c0890429063ffffffff61254716565b10155b15611c1857611c18612589565b6001600160a01b03851660009081526005602052604090205460ff16151560011415611c8a57836001600160a01b03167ff6f342132c7de5e5a1e99c8efae544c94731f3ff093f5c3c97c6973d9415cdfb84611c73866114bf565b604051611c81929190612dc8565b60405180910390a25b5050505050565b60008184841115611cb55760405162461bcd60e51b815260040161093891906129c9565b505050900390565b600082611ccc57506000610866565b82820282848281611cd957fe5b0414611cf75760405162461bcd60e51b815260040161093890612c78565b9392505050565b6000611cf783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125dc565b600082820183811015611cf75760405162461bcd60e51b815260040161093890612a8b565b6001600160a01b038416600090815260016020526040902054611d8e908363ffffffff61254716565b6001600160a01b0380861660009081526001602090815260408083209490945584015191861681529190912054611dca9163ffffffff611d4016565b60016000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360200151604051611e3a9190612d4f565b60405180910390a38051151560011415610c3857610c388185612613565b3b151590565b6001600160a01b03811660009081526005602052604081205460ff1615156001148015611e8e575060265460ff16155b8015611e9c575060245460ff165b80156108665750602554611eaf30610cb6565b101592915050565b6026805460ff19166001179055602554306000908152600260209081526040808320600f546001600160a01b031684529091528120829055600e54600b549192611f0b92610a97919063ffffffff611cbd16565b6040805160028082526060808301845293945090916020830190803883390190505090503081600081518110611f3d57fe5b6001600160a01b039283166020918202929092010152601154825191169082906001908110611f6857fe5b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b81524792919091169063791ac94790611fb2908690600090879030904290600401612d58565b600060405180830381600087803b158015611fcc57600080fd5b505af1158015611fe0573d6000803e3d6000fd5b505050506000611ff9824761254790919063ffffffff16565b6013546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612034573d6000803e3d6000fd5b50600b54612048908563ffffffff61254716565b600b5560408051600380825260808201909252606091602082018380388339019050509050308160008151811061207b57fe5b6001600160a01b0392831660209182029290920101526011548251911690829060019081106120a657fe5b6001600160a01b0392831660209182029290920101526012548251911690829060029081106120d157fe5b6001600160a01b0392831660209182029290920101526012546040516370a0823160e01b815260009291909116906370a0823190612113903090600401612977565b60206040518083038186803b15801561212b57600080fd5b505afa15801561213f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612163919081019061293e565b600f546025549192506001600160a01b031690635c11d7959061218c908963ffffffff61254716565b60008530426040518663ffffffff1660e01b81526004016121b1959493929190612d58565b600060405180830381600087803b1580156121cb57600080fd5b505af11580156121df573d6000803e3d6000fd5b50506012546040516370a0823160e01b815260009350612276925084916001600160a01b0316906370a082319061221a903090600401612977565b60206040518083038186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061226a919081019061293e565b9063ffffffff61254716565b90506000612295600e54610a97600c5485611cbd90919063ffffffff16565b905060006122a9838363ffffffff61254716565b60195490915060ff16151560011480156122c35750600082115b1561235d5760145460405163604657b160e01b81526001600160a01b039091169063604657b1906122f8908590600401612d4f565b600060405180830381600087803b15801561231257600080fd5b505af1158015612326573d6000803e3d6000fd5b5050505061235961234a600e54610a97600c54602554611cbd90919063ffffffff16565b600c549063ffffffff61254716565b600c555b60195460ff610100909104161515600114801561237a5750600081115b156124145760155460405163604657b160e01b81526001600160a01b039091169063604657b1906123af908490600401612d4f565b600060405180830381600087803b1580156123c957600080fd5b505af11580156123dd573d6000803e3d6000fd5b50505050612410612401600e54610a97600d54602554611cbd90919063ffffffff16565b600d549063ffffffff61254716565b600d555b602554600e546124299163ffffffff61254716565b600e5550506026805460ff1916905550505050505050565b60105460009061245d906109f3906001600160a01b0316610cb6565b905060205481111561246f5760208190555b6000806000806124818787878b610f5f565b9350935093509350601b54600101601a54890310156124ad576127106113888b020460408a01526124ba565b6127108a82020460408a01525b60408901516124d0908b9063ffffffff61254716565b60208a01526040890151600e546124ec9163ffffffff611d4016565b600e55600b5461250290612710868d0204611d40565b600b55600c5461251890612710858d0204611d40565b600c819055600b54600e54612538929161226a919063ffffffff61254716565b600d5550505050505050505050565b6000611cf783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c91565b601f546023544291906125a390839063ffffffff61254716565b106125d957601f546023546125bd9163ffffffff611d4016565b602355601054610aa3906109f3906001600160a01b0316610cb6565b50565b600081836125fd5760405162461bcd60e51b815260040161093891906129c9565b50600083858161260957fe5b0495945050505050565b60408201511561269e57604080830151306000908152600160205291909120546126429163ffffffff611d4016565b30600081815260016020526040908190209290925583820151915190916001600160a01b038416917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161269591612d4f565b60405180910390a35b5050565b604051806060016040528060001515815260200160008152602001600081525090565b6000602082840312156126d6578081fd5b8135611cf781612dff565b6000602082840312156126f2578081fd5b8151611cf781612dff565b6000806040838503121561270f578081fd5b823561271a81612dff565b9150602083013561272a81612dff565b809150509250929050565b600080600060608486031215612749578081fd5b833561275481612dff565b9250602084013561276481612dff565b929592945050506040919091013590565b6000806000806080858703121561278a578081fd5b843561279581612dff565b935060208501356127a581612dff565b93969395505050506040820135916060013590565b600080604083850312156127cc578182fd5b82356127d781612dff565b946020939093013593505050565b6000806000606084860312156127f9578283fd5b833561280481612dff565b925060208401359150604084013561281b81612dff565b809150509250925092565b60008060006040848603121561283a578283fd5b833567ffffffffffffffff80821115612851578485fd5b81860187601f820112612862578586fd5b8035925081831115612872578586fd5b8760208085028301011115612885578586fd5b602090810195509193505084013561281b81612e14565b6000602082840312156128ad578081fd5b8151611cf781612e14565b600080604083850312156128ca578182fd5b823561271a81612e14565b600080604083850312156128e7578182fd5b82356127d781612e14565b600080600060608486031215612906578283fd5b833561291181612e14565b95602085013595506040909401359392505050565b600060208284031215612937578081fd5b5035919050565b60006020828403121561294f578081fd5b5051919050565b60008060408385031215612968578081fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b818110156129f5578581018301518582016040015282016129d9565b81811115612a065783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e10d0550e881b9bdd081bdc195b9959608a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526013908201527210d0550e88185b1c9958591e481bdc195b9959606a1b604082015260600190565b60208082526023908201527f4341543a207472616e736665722066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600e908201526d21a0aa1d103737ba1037bbb732b960911b604082015260600190565b6020808252818101527f42616c616e63652073686f756c64206265206d6f7265207468656e207a65726f604082015260600190565b60208082526013908201527210d0550e8818dbdb9d1c9858dd081b1a5b5a5d606a1b604082015260600190565b60208082526012908201527110d0550e88121bdb191a5b99c81b1a5b5a5d60721b604082015260600190565b60208082526022908201527f4341543a20617070726f76652066726f6d20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602e908201527f4341543a207472616e7366657220616d6f756e74206d7573742062652067726560408201526d61746572207468616e207a65726f60901b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526012908201527110d0550e881b1a5c5d5a5d1e481b1a5b5a5d60721b604082015260600190565b6020808252818101527f4341543a20617070726f766520746f20746865207a65726f2061646472657373604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612da75784516001600160a01b031683529383019391830191600101612d82565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b6001600160a01b03811681146125d957600080fd5b80151581146125d957600080fdfe4341543a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654341543a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220af8c7d3ace0e234f9d98e4b6d70647be0f37f0f97bf6882bc4d96a011ea9d40d64736f6c63430006020033

Deployed Bytecode

0x6080604052600436106102815760003560e01c80637822ed491161014f578063a457c2d7116100c1578063cd8eb9af1161007a578063cd8eb9af146106ec578063cefa2c421461070c578063dd62ed3e1461072c578063df20fd491461074c578063f2fde38b1461076c578063fbff3be11461078c57610288565b8063a457c2d714610642578063a4b3cf9814610662578063a72905a214610677578063a9059cbb14610697578063c0a40095146106b7578063c5f956af146106d757610288565b80638f37d6c5116101135780638f37d6c51461059e5780639157f6bb146105b3578063947a36fb146105d357806395623641146105e857806395d89b41146105fd5780639eb65c7f1461061257610288565b80637822ed491461052a578063793881e91461053f578063797caf2d1461055457806382ede294146105695780638da5cb5b1461058957610288565b8063316aaf55116101f3578063667382b6116101ac578063667382b6146104805780636dcea85f146104a05780636ddd1713146104c057806370a08231146104d5578063715018a6146104f5578063749cab541461050a57610288565b8063316aaf55146103ec57806339509351146104015780633fafa196146104215780633fc8cef314610441578063438be10d1461045657806349bd5a5e1461046b57610288565b806318160ddd1161024557806318160ddd1461033e57806323b872dd146103535780632542ae301461037357806325a842c6146103955780632d872154146103aa578063313ce567146103ca57610288565b80630445b6671461028d578063047fc9aa146102b857806306fdde03146102cd578063095ea7b3146102ef5780631694505e1461031c57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a26107ac565b6040516102af9190612d4f565b60405180910390f35b3480156102c457600080fd5b506102a26107b2565b3480156102d957600080fd5b506102e26107b8565b6040516102af91906129c9565b3480156102fb57600080fd5b5061030f61030a3660046127ba565b61084e565b6040516102af91906129be565b34801561032857600080fd5b5061033161086c565b6040516102af9190612977565b34801561034a57600080fd5b506102a261087b565b34801561035f57600080fd5b5061030f61036e366004612735565b610881565b34801561037f57600080fd5b5061039361038e3660046126c5565b61090e565b005b3480156103a157600080fd5b506102a261099a565b3480156103b657600080fd5b506103936103c5366004612926565b6109a0565b3480156103d657600080fd5b506103df610aa9565b6040516102af9190612df1565b3480156103f857600080fd5b506102a2610ab2565b34801561040d57600080fd5b5061030f61041c3660046127ba565b610ab8565b34801561042d57600080fd5b5061039361043c3660046128b8565b610b0c565b34801561044d57600080fd5b50610331610b81565b34801561046257600080fd5b5061030f610b90565b34801561047757600080fd5b50610331610b9e565b34801561048c57600080fd5b5061039361049b366004612826565b610bad565b3480156104ac57600080fd5b506103936104bb3660046126c5565b610c3e565b3480156104cc57600080fd5b5061030f610cad565b3480156104e157600080fd5b506102a26104f03660046126c5565b610cb6565b34801561050157600080fd5b50610393610cd1565b34801561051657600080fd5b50610393610525366004612956565b610d50565b34801561053657600080fd5b50610331610d90565b34801561054b57600080fd5b5061030f610d9f565b34801561056057600080fd5b506102a2610da8565b34801561057557600080fd5b506103936105843660046128f2565b610dae565b34801561059557600080fd5b50610331610dfd565b3480156105aa57600080fd5b5061030f610e0c565b3480156105bf57600080fd5b506103936105ce3660046127e5565b610e15565b3480156105df57600080fd5b506102a2610ee9565b3480156105f457600080fd5b50610331610eef565b34801561060957600080fd5b506102e2610efe565b34801561061e57600080fd5b5061063261062d366004612775565b610f5f565b6040516102af9493929190612dd6565b34801561064e57600080fd5b5061030f61065d3660046127ba565b61113f565b34801561066e57600080fd5b506103936111ad565b34801561068357600080fd5b5061030f6106923660046126c5565b611222565b3480156106a357600080fd5b5061030f6106b23660046127ba565b611237565b3480156106c357600080fd5b506103936106d2366004612826565b61124b565b3480156106e357600080fd5b506103316112d6565b3480156106f857600080fd5b506103936107073660046128b8565b6112e5565b34801561071857600080fd5b50610393610727366004612926565b611363565b34801561073857600080fd5b506102a26107473660046126fd565b61139d565b34801561075857600080fd5b506103936107673660046128d5565b6113c8565b34801561077857600080fd5b506103936107873660046126c5565b611409565b34801561079857600080fd5b506102a26107a7366004612926565b6114bf565b60255481565b60085481565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108445780601f1061081957610100808354040283529160200191610844565b820191906000526020600020905b81548152906001019060200180831161082757829003601f168201915b5050505050905090565b600061086261085b6117a3565b84846117a7565b5060015b92915050565b600f546001600160a01b031681565b60075490565b600061088e84848461185b565b6109048461089a6117a3565b6108ff85604051806060016040528060268152602001612e23602691396001600160a01b038a166000908152600260205260408120906108d86117a3565b6001600160a01b03168152602081019190915260400160002054919063ffffffff611c9116565b6117a7565b5060019392505050565b6016546001600160a01b031633146109415760405162461bcd60e51b815260040161093890612b32565b60405180910390fd5b478061095f5760405162461bcd60e51b815260040161093890612b5a565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610995573d6000803e3d6000fd5b505050565b60235481565b6109a86117a3565b6000546001600160a01b039081169116146109d55760405162461bcd60e51b815260040161093890612cb9565b6023819055601054610aa3906109f3906001600160a01b0316610cb6565b6011546010546040516370a0823160e01b8152610a97926ec097ce7bc90715b34b9f1000000000926001600160a01b03918216926370a0823192610a3b921690600401612977565b60206040518083038186803b158015610a5357600080fd5b505afa158015610a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610a8b919081019061293e565b9063ffffffff611cbd16565b9063ffffffff611cfe16565b60205550565b60065460ff1690565b60215481565b6000610862610ac56117a3565b846108ff8560026000610ad66117a3565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff611d4016565b6016546001600160a01b03163314610b365760405162461bcd60e51b815260040161093890612b32565b6019805492151560ff19938416179055601480546001600160a01b039283166001600160a01b0319909116179081905516600090815260036020526040902080549091166001179055565b6011546001600160a01b031681565b601954610100900460ff1681565b6010546001600160a01b031681565b6016546001600160a01b03163314610bd75760405162461bcd60e51b815260040161093890612b32565b60005b82811015610c38578160046000868685818110610bf357fe5b9050602002016020610c0891908101906126c5565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101610bda565b50505050565b610c466117a3565b6000546001600160a01b03908116911614610c735760405162461bcd60e51b815260040161093890612cb9565b601380546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b60245460ff1681565b6001600160a01b031660009081526001602052604090205490565b610cd96117a3565b6000546001600160a01b03908116911614610d065760405162461bcd60e51b815260040161093890612cb9565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610d586117a3565b6000546001600160a01b03908116911614610d855760405162461bcd60e51b815260040161093890612cb9565b601b91909155601c55565b6015546001600160a01b031681565b60195460ff1681565b60205481565b610db66117a3565b6000546001600160a01b03908116911614610de35760405162461bcd60e51b815260040161093890612cb9565b6022805460ff191693151593909317909255602155602355565b6000546001600160a01b031690565b60225460ff1681565b6016546001600160a01b0316331480610e3857506014546001600160a01b031633145b80610e4d57506015546001600160a01b031633145b610e695760405162461bcd60e51b815260040161093890612b32565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90610e9790849086906004016129a5565b602060405180830381600087803b158015610eb157600080fd5b505af1158015610ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c38919081019061289c565b601f5481565b6013546001600160a01b031681565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108445780601f1061081957610100808354040283529160200191610844565b6001600160a01b03831660009081526004602052604081205481908190819060ff16151560011480610fae57506001600160a01b03881660009081526004602052604090205460ff1615156001145b15610fc55750606492506000915081905082611134565b6001600160a01b03871660009081526005602052604090205460ff161515600114156110df57601c54601a54606491609691603291600101908903101561101957506103209150610190905061012c6110ac565b60225460ff1615156001148015611050575061104d6064610a97602154600202606403602054611cbd90919063ffffffff16565b89105b15611067575060c8915061038490506101906110ac565b60225460ff161515600114801561109b57506110986064610a97602154606403602054611cbd90919063ffffffff16565b89105b156110ac575060c891506102589050815b8282826110cf816110c3858563ffffffff611d4016565b9063ffffffff611d4016565b9650965096509650505050611134565b601c54600101601a548603101561111a5761032061019061012c61110d816110c3858563ffffffff611d4016565b9350935093509350611134565b60646096603261110d816110c3858563ffffffff611d4016565b945094509450949050565b600061086261114c6117a3565b846108ff85604051806060016040528060238152602001612e4960239139600260006111766117a3565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff611c9116565b6111b56117a3565b6000546001600160a01b039081169116146111e25760405162461bcd60e51b815260040161093890612cb9565b60195462010000900460ff161561120b5760405162461bcd60e51b815260040161093890612ac2565b6019805462ff000019166201000017905543601a55565b60056020526000908152604090205460ff1681565b60006108626112446117a3565b848461185b565b6016546001600160a01b031633146112755760405162461bcd60e51b815260040161093890612b32565b60005b82811015610c3857816003600086868581811061129157fe5b90506020020160206112a691908101906126c5565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600101611278565b6014546001600160a01b031681565b6016546001600160a01b0316331461130f5760405162461bcd60e51b815260040161093890612b32565b6019805461ff0019166101009315159390930292909217909155601580546001600160a01b0319166001600160a01b039283161790819055166000908152600360205260409020805460ff19166001179055565b61136b6117a3565b6000546001600160a01b039081169116146113985760405162461bcd60e51b815260040161093890612cb9565b601855565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6016546001600160a01b031633146113f25760405162461bcd60e51b815260040161093890612b32565b6024805460ff191692151592909217909155602555565b6114116117a3565b6000546001600160a01b0390811691161461143e5760405162461bcd60e51b815260040161093890612cb9565b6001600160a01b0381166114645760405162461bcd60e51b815260040161093890612a45565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6010546000908190611573906114dd906001600160a01b0316610cb6565b6011546010546040516370a0823160e01b8152610a97926001600160a01b03908116926370a08231926115169290911690600401612977565b60206040518083038186803b15801561152e57600080fd5b505afa158015611542573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611566919081019061293e565b869063ffffffff611cbd16565b90506000600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156115c557600080fd5b505afa1580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115fd91908101906126e1565b60125460115460405163e6a4390560e01b81526001600160a01b039384169363e6a4390593611635939082169291169060040161298b565b60206040518083038186803b15801561164d57600080fd5b505afa158015611661573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061168591908101906126e1565b6011546040516370a0823160e01b815291925061179b916001600160a01b03909116906370a08231906116bc908590600401612977565b60206040518083038186803b1580156116d457600080fd5b505afa1580156116e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061170c919081019061293e565b6012546040516370a0823160e01b8152610a97916001600160a01b0316906370a082319061173e908790600401612977565b60206040518083038186803b15801561175657600080fd5b505afa15801561176a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061178e919081019061293e565b859063ffffffff611cbd16565b949350505050565b3390565b6001600160a01b0383166117cd5760405162461bcd60e51b815260040161093890612be8565b6001600160a01b0382166117f35760405162461bcd60e51b815260040161093890612d1a565b6001600160a01b0380841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061184e908590612d4f565b60405180910390a3505050565b6001600160a01b0383166118815760405162461bcd60e51b815260040161093890612aef565b600081116118a15760405162461bcd60e51b815260040161093890612c2a565b6001600160a01b03831660009081526003602052604090205460ff161580156118e257506001600160a01b03821660009081526005602052604090205460ff165b80156118f1575060265460ff16155b1561191b57600061190b6064610a976063610a8b88610cb6565b905081811015611919578091505b505b436119246126a2565b60208082018490526001600160a01b03851660009081526005909152604090205460ff16151560011480156119c75750836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561198d57600080fd5b505afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119c5919081019061293e565b155b156119f9576017546001600160a01b038681169116146119f95760405162461bcd60e51b815260040161093890612cee565b60265460ff16151560011480611a2c57506001600160a01b03851660009081526003602052604090205460ff1615156001145b80611a5457506001600160a01b03841660009081526003602052604090205460ff1615156001145b15611a6c57611a6585858584611d65565b5050610995565b60195462010000900460ff161515600114611a995760405162461bcd60e51b815260040161093890612a1c565b6001600160a01b03851660009081526005602052604090205460ff16151560011415611ae557611ac884611e58565b15611ae55760405162461bcd60e51b815260040161093890612b8f565b6001600160a01b03841660009081526005602052604090205460ff16151560011480611b2e57506001600160a01b03851660009081526005602052604090205460ff1615156001145b15611b5a5760018152611b4084611e5e565b15611b4d57611b4d611eb7565b611b5a8382848888612441565b6001600160a01b03841660009081526005602052604090205460ff16158015611b9c57506001600160a01b03841660009081526004602052604090205460ff16155b15611bd357601854611bb582602001516110c387610cb6565b1115611bd35760405162461bcd60e51b815260040161093890612bbc565b611bdf85858584611d65565b60225460ff1615156001148015611c0b5750601f54602354611c0890429063ffffffff61254716565b10155b15611c1857611c18612589565b6001600160a01b03851660009081526005602052604090205460ff16151560011415611c8a57836001600160a01b03167ff6f342132c7de5e5a1e99c8efae544c94731f3ff093f5c3c97c6973d9415cdfb84611c73866114bf565b604051611c81929190612dc8565b60405180910390a25b5050505050565b60008184841115611cb55760405162461bcd60e51b815260040161093891906129c9565b505050900390565b600082611ccc57506000610866565b82820282848281611cd957fe5b0414611cf75760405162461bcd60e51b815260040161093890612c78565b9392505050565b6000611cf783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125dc565b600082820183811015611cf75760405162461bcd60e51b815260040161093890612a8b565b6001600160a01b038416600090815260016020526040902054611d8e908363ffffffff61254716565b6001600160a01b0380861660009081526001602090815260408083209490945584015191861681529190912054611dca9163ffffffff611d4016565b60016000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360200151604051611e3a9190612d4f565b60405180910390a38051151560011415610c3857610c388185612613565b3b151590565b6001600160a01b03811660009081526005602052604081205460ff1615156001148015611e8e575060265460ff16155b8015611e9c575060245460ff165b80156108665750602554611eaf30610cb6565b101592915050565b6026805460ff19166001179055602554306000908152600260209081526040808320600f546001600160a01b031684529091528120829055600e54600b549192611f0b92610a97919063ffffffff611cbd16565b6040805160028082526060808301845293945090916020830190803883390190505090503081600081518110611f3d57fe5b6001600160a01b039283166020918202929092010152601154825191169082906001908110611f6857fe5b6001600160a01b039283166020918202929092010152600f5460405163791ac94760e01b81524792919091169063791ac94790611fb2908690600090879030904290600401612d58565b600060405180830381600087803b158015611fcc57600080fd5b505af1158015611fe0573d6000803e3d6000fd5b505050506000611ff9824761254790919063ffffffff16565b6013546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612034573d6000803e3d6000fd5b50600b54612048908563ffffffff61254716565b600b5560408051600380825260808201909252606091602082018380388339019050509050308160008151811061207b57fe5b6001600160a01b0392831660209182029290920101526011548251911690829060019081106120a657fe5b6001600160a01b0392831660209182029290920101526012548251911690829060029081106120d157fe5b6001600160a01b0392831660209182029290920101526012546040516370a0823160e01b815260009291909116906370a0823190612113903090600401612977565b60206040518083038186803b15801561212b57600080fd5b505afa15801561213f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612163919081019061293e565b600f546025549192506001600160a01b031690635c11d7959061218c908963ffffffff61254716565b60008530426040518663ffffffff1660e01b81526004016121b1959493929190612d58565b600060405180830381600087803b1580156121cb57600080fd5b505af11580156121df573d6000803e3d6000fd5b50506012546040516370a0823160e01b815260009350612276925084916001600160a01b0316906370a082319061221a903090600401612977565b60206040518083038186803b15801561223257600080fd5b505afa158015612246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061226a919081019061293e565b9063ffffffff61254716565b90506000612295600e54610a97600c5485611cbd90919063ffffffff16565b905060006122a9838363ffffffff61254716565b60195490915060ff16151560011480156122c35750600082115b1561235d5760145460405163604657b160e01b81526001600160a01b039091169063604657b1906122f8908590600401612d4f565b600060405180830381600087803b15801561231257600080fd5b505af1158015612326573d6000803e3d6000fd5b5050505061235961234a600e54610a97600c54602554611cbd90919063ffffffff16565b600c549063ffffffff61254716565b600c555b60195460ff610100909104161515600114801561237a5750600081115b156124145760155460405163604657b160e01b81526001600160a01b039091169063604657b1906123af908490600401612d4f565b600060405180830381600087803b1580156123c957600080fd5b505af11580156123dd573d6000803e3d6000fd5b50505050612410612401600e54610a97600d54602554611cbd90919063ffffffff16565b600d549063ffffffff61254716565b600d555b602554600e546124299163ffffffff61254716565b600e5550506026805460ff1916905550505050505050565b60105460009061245d906109f3906001600160a01b0316610cb6565b905060205481111561246f5760208190555b6000806000806124818787878b610f5f565b9350935093509350601b54600101601a54890310156124ad576127106113888b020460408a01526124ba565b6127108a82020460408a01525b60408901516124d0908b9063ffffffff61254716565b60208a01526040890151600e546124ec9163ffffffff611d4016565b600e55600b5461250290612710868d0204611d40565b600b55600c5461251890612710858d0204611d40565b600c819055600b54600e54612538929161226a919063ffffffff61254716565b600d5550505050505050505050565b6000611cf783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c91565b601f546023544291906125a390839063ffffffff61254716565b106125d957601f546023546125bd9163ffffffff611d4016565b602355601054610aa3906109f3906001600160a01b0316610cb6565b50565b600081836125fd5760405162461bcd60e51b815260040161093891906129c9565b50600083858161260957fe5b0495945050505050565b60408201511561269e57604080830151306000908152600160205291909120546126429163ffffffff611d4016565b30600081815260016020526040908190209290925583820151915190916001600160a01b038416917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9161269591612d4f565b60405180910390a35b5050565b604051806060016040528060001515815260200160008152602001600081525090565b6000602082840312156126d6578081fd5b8135611cf781612dff565b6000602082840312156126f2578081fd5b8151611cf781612dff565b6000806040838503121561270f578081fd5b823561271a81612dff565b9150602083013561272a81612dff565b809150509250929050565b600080600060608486031215612749578081fd5b833561275481612dff565b9250602084013561276481612dff565b929592945050506040919091013590565b6000806000806080858703121561278a578081fd5b843561279581612dff565b935060208501356127a581612dff565b93969395505050506040820135916060013590565b600080604083850312156127cc578182fd5b82356127d781612dff565b946020939093013593505050565b6000806000606084860312156127f9578283fd5b833561280481612dff565b925060208401359150604084013561281b81612dff565b809150509250925092565b60008060006040848603121561283a578283fd5b833567ffffffffffffffff80821115612851578485fd5b81860187601f820112612862578586fd5b8035925081831115612872578586fd5b8760208085028301011115612885578586fd5b602090810195509193505084013561281b81612e14565b6000602082840312156128ad578081fd5b8151611cf781612e14565b600080604083850312156128ca578182fd5b823561271a81612e14565b600080604083850312156128e7578182fd5b82356127d781612e14565b600080600060608486031215612906578283fd5b833561291181612e14565b95602085013595506040909401359392505050565b600060208284031215612937578081fd5b5035919050565b60006020828403121561294f578081fd5b5051919050565b60008060408385031215612968578081fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b818110156129f5578581018301518582016040015282016129d9565b81811115612a065783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600f908201526e10d0550e881b9bdd081bdc195b9959608a1b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526013908201527210d0550e88185b1c9958591e481bdc195b9959606a1b604082015260600190565b60208082526023908201527f4341543a207472616e736665722066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252600e908201526d21a0aa1d103737ba1037bbb732b960911b604082015260600190565b6020808252818101527f42616c616e63652073686f756c64206265206d6f7265207468656e207a65726f604082015260600190565b60208082526013908201527210d0550e8818dbdb9d1c9858dd081b1a5b5a5d606a1b604082015260600190565b60208082526012908201527110d0550e88121bdb191a5b99c81b1a5b5a5d60721b604082015260600190565b60208082526022908201527f4341543a20617070726f76652066726f6d20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602e908201527f4341543a207472616e7366657220616d6f756e74206d7573742062652067726560408201526d61746572207468616e207a65726f60901b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526012908201527110d0550e881b1a5c5d5a5d1e481b1a5b5a5d60721b604082015260600190565b6020808252818101527f4341543a20617070726f766520746f20746865207a65726f2061646472657373604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612da75784516001600160a01b031683529383019391830191600101612d82565b50506001600160a01b03969096166060850152505050608001529392505050565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b6001600160a01b03811681146125d957600080fd5b80151581146125d957600080fdfe4341543a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654341543a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220af8c7d3ace0e234f9d98e4b6d70647be0f37f0f97bf6882bc4d96a011ea9d40d64736f6c63430006020033

Deployed Bytecode Sourcemap

15719:18376:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18892:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18892:45:0;;;:::i;:::-;;;;;;;;;;;;;;;;16188:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16188:51:0;;;:::i;20088:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20088:83:0;;;:::i;:::-;;;;;;;;20919:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20919:161:0;;;;;;;;:::i;:::-;;;;;;;;17701:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17701:41:0;;;:::i;:::-;;;;;;;;20365:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20365:95:0;;;:::i;21088:311::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21088:311:0;;;;;;;;:::i;33524:276::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;33524:276:0;;;;;;;;:::i;:::-;;18760:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18760:39:0;;;:::i;31021:243::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31021:243:0;;;;;;;;:::i;20274:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20274:83:0;;;:::i;:::-;;;;;;;;18685:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18685:30:0;;;:::i;21407:218::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21407:218:0;;;;;;;;:::i;32196:291::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32196:291:0;;;;;;;;:::i;17785:19::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17785:19:0;;;:::i;18351:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18351:27:0;;;:::i;17751:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17751:27:0;;;:::i;33261:255::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;33261:255:0;;;;;;;;:::i;32026:162::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32026:162:0;;;;;;;;:::i;18855:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18855:30:0;;;:::i;20468:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20468:117:0;;;;;;;;:::i;5926:148::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5926:148:0;;;:::i;31857:161::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31857:161:0;;;;;;;;:::i;17994:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17994:26:0;;;:::i;18313:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18313:31:0;;;:::i;18652:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18652:26:0;;;:::i;31272:227::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31272:227:0;;;;;;;;:::i;5284:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5284:79:0;;;:::i;18722:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18722:31:0;;;:::i;33808:284::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;33808:284:0;;;;;;;;:::i;18607:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18607:38:0;;;:::i;17877:73::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17877:73:0;;;:::i;20179:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20179:87:0;;;:::i;22290:1851::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22290:1851:0;;;;;;;;:::i;:::-;;;;;;;;;;;21633:267;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21633:267:0;;;;;;;;:::i;31507:196::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31507:196:0;;;:::i;16071:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16071:40:0;;;;;;;;:::i;20593:167::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20593:167:0;;;;;;;;:::i;32985:268::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32985:268:0;;;;;;;;:::i;17957:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17957:30:0;;;:::i;32495:259::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32495:259:0;;;;;;;;:::i;31711:138::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;31711:138:0;;;;;;;;:::i;20768:143::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20768:143:0;;;;;;;;:::i;32762:215::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;32762:215:0;;;;;;;;:::i;6229:244::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6229:244:0;;;;;;;;:::i;29835:430::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;29835:430:0;;;;;;;;:::i;18892:45::-;;;;:::o;16188:51::-;;;;:::o;20088:83::-;20158:5;20151:12;;;;;;;;-1:-1:-1;;20151:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20125:13;;20151:12;;20158:5;;20151:12;;20158:5;20151:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20088:83;:::o;20919:161::-;20994:4;21011:39;21020:12;:10;:12::i;:::-;21034:7;21043:6;21011:8;:39::i;:::-;-1:-1:-1;21068:4:0;20919:161;;;;;:::o;17701:41::-;;;-1:-1:-1;;;;;17701:41:0;;:::o;20365:95::-;20445:7;;20365:95;:::o;21088:311::-;21186:4;21203:36;21213:6;21221:9;21232:6;21203:9;:36::i;:::-;21250:119;21259:6;21267:12;:10;:12::i;:::-;21281:87;21319:6;21281:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21281:19:0;;;;;;:11;:19;;;;;;21301:12;:10;:12::i;:::-;-1:-1:-1;;;;;21281:33:0;;;;;;;;;;;;-1:-1:-1;21281:33:0;;;:87;;:37;:87;:::i;:::-;21250:8;:119::i;:::-;-1:-1:-1;21387:4:0;21088:311;;;;;:::o;33524:276::-;33586:9;;-1:-1:-1;;;;;33586:9:0;33607:10;33586:32;33578:59;;;;-1:-1:-1;;;33578:59:0;;;;;;;;;;;;;;;;;33663:21;33703:11;33695:56;;;;-1:-1:-1;;;33695:56:0;;;;;;;;;33762:30;;-1:-1:-1;;;;;33762:21:0;;;:30;;;;;33784:7;;33762:30;;;;33784:7;33762:21;:30;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33762:30:0;33524:276;;:::o;18760:39::-;;;;:::o;31021:243::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31098:11:::1;:26:::0;;;31240:13:::1;::::0;31149:107:::1;::::0;31222:33:::1;::::0;-1:-1:-1;;;;;31240:13:0::1;31222:9;:33::i;:::-;31157:4;::::0;31181:13:::1;::::0;31150:46:::1;::::0;-1:-1:-1;;;31150:46:0;;31149:68:::1;::::0;18592:8:::1;::::0;-1:-1:-1;;;;;31157:4:0;;::::1;::::0;31150:22:::1;::::0;:46:::1;::::0;31181:13:::1;::::0;31150:46:::1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;31150:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31150: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;31150:46:0;;;;;;;;;31149:52:::0;:68:::1;:52;:68;:::i;:::-;:72:::0;:107:::1;:72;:107;:::i;:::-;31135:11;:121:::0;-1:-1:-1;31021:243:0:o;20274:83::-;20340:9;;;;20274:83;:::o;18685:30::-;;;;:::o;21407:218::-;21495:4;21512:83;21521:12;:10;:12::i;:::-;21535:7;21544:50;21583:10;21544:11;:25;21556:12;:10;:12::i;:::-;-1:-1:-1;;;;;21544:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21544:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;32196:291::-;32291:9;;-1:-1:-1;;;;;32291:9:0;32312:10;32291:32;32283:59;;;;-1:-1:-1;;;32283:59:0;;;;;;;;;32353:12;:28;;;;;-1:-1:-1;;32353:28:0;;;;;;32392:15;:34;;-1:-1:-1;;;;;32392:34:0;;;-1:-1:-1;;;;;;32392:34:0;;;;;;;;32456:15;32353:12;32437:35;;;:18;:35;;;;;:42;;;;;32353:28;32437:42;;;32196:291::o;17785:19::-;;;-1:-1:-1;;;;;17785:19:0;;:::o;18351:27::-;;;;;;;;;:::o;17751:::-;;;-1:-1:-1;;;;;17751:27:0;;:::o;33261:255::-;33351:9;;-1:-1:-1;;;;;33351:9:0;33372:10;33351:32;33343:59;;;;-1:-1:-1;;;33343:59:0;;;;;;;;;33418:6;33413:96;33430:16;;;33413:96;;;33488:9;33468:7;:17;33476:5;;33482:1;33476:8;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33468:17:0;;;;;;;;;;;;-1:-1:-1;33468:17:0;:29;;-1:-1:-1;;33468:29:0;;;;;;;;;;-1:-1:-1;33448:3:0;33413:96;;;;33261:255;;;:::o;32026:162::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;32099:13:::1;:30:::0;;-1:-1:-1;;;;;;32099:30:0::1;-1:-1:-1::0;;;;;32099:30:0;;::::1;;::::0;;;;32159:13:::1;-1:-1:-1::0;32140:33:0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;32140:40:0::1;-1:-1:-1::0;32140:40:0::1;::::0;;32026:162::o;18855:30::-;;;;;;:::o;20468:117::-;-1:-1:-1;;;;;20561:16:0;20534:7;20561:16;;;:7;:16;;;;;;;20468: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;31857:161::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31949:10:::1;:24:::0;;;;31984:11:::1;:26:::0;31857:161::o;17994:26::-;;;-1:-1:-1;;;;;17994:26:0;;:::o;18313:31::-;;;;;;:::o;18652:26::-;;;;:::o;31272:227::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31389:12:::1;:28:::0;;-1:-1:-1;;31389:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;31428:11:::1;:26:::0;31465:11:::1;:26:::0;31272:227::o;5284:79::-;5322:7;5349:6;-1:-1:-1;;;;;5349:6:0;5284:79;:::o;18722:31::-;;;;;;:::o;33808:284::-;33905:9;;-1:-1:-1;;;;;33905:9:0;33926:10;33905:32;;:74;;-1:-1:-1;33941:15:0;;-1:-1:-1;;;;;33941:15:0;33968:10;33941:38;33905:74;:112;;;-1:-1:-1;33983:11:0;;-1:-1:-1;;;;;33983:11:0;34006:10;33983:34;33905:112;33897:139;;;;-1:-1:-1;;;33897:139:0;;;;;;;;;34047:37;;-1:-1:-1;;;34047:37:0;;-1:-1:-1;;;;;34047:23:0;;;;;:37;;34071:3;;34076:7;;34047:37;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34047:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34047: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;34047:37:0;;;;;;;;18607:38;;;;:::o;17877:73::-;;;-1:-1:-1;;;;;17877:73:0;;:::o;20179:87::-;20251:7;20244:14;;;;;;;;-1:-1:-1;;20244:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20218:13;;20244:14;;20251:7;;20244:14;;20251:7;20244:14;;;;;;;;;;;;;;;;;;;;;;;;22290:1851;-1:-1:-1;;;;;22439:11:0;;22392:7;22439:11;;;:7;:11;;;;;;22392:7;;;;;;22439:11;;:19;;:11;:19;;:44;;-1:-1:-1;;;;;;22462:13:0;;;;;;:7;:13;;;;;;;;:21;;:13;:21;22439:44;22436:98;;;-1:-1:-1;22507:3:0;;-1:-1:-1;22512:1:0;;-1:-1:-1;22512:1:0;;-1:-1:-1;22507:3:0;22499:23;;22436:98;-1:-1:-1;;;;;22548:12:0;;;;;;:8;:12;;;;;;;;:20;;:12;:20;22544:1590;;;22781:11;;22765:13;;16964:3;;17009;;17050:2;;22795:1;22781:15;22750:28;;;:46;22746:836;;;-1:-1:-1;17211:3:0;;-1:-1:-1;17379:3:0;;-1:-1:-1;17535:3:0;22746:836;;;23003:12;;;;:20;;:12;:20;:82;;;;;23038:47;23081:3;23038:38;23060:11;;23074:1;23060:15;23054:3;:21;23038:11;;:15;;:38;;;;:::i;:47::-;23027:8;:58;23003:82;23000:582;;;-1:-1:-1;17157:3:0;;-1:-1:-1;17323:3:0;;-1:-1:-1;17483:3:0;23000:582;;;23307:12;;;;:20;;:12;:20;:78;;;;;23342:43;23381:3;23342:34;23364:11;;23358:3;:17;23342:11;;:15;;:34;;;;:::i;:43::-;23331:8;:54;23307:78;23304:278;;;-1:-1:-1;17103:3:0;;-1:-1:-1;17267:3:0;;-1:-1:-1;17103:3:0;23304:278;23604:14;23619:16;23636:12;23649:54;23636:12;23649:36;23604:14;23619:16;23649:36;:18;:36;:::i;:::-;:40;:54;:40;:54;:::i;:::-;23596:108;;;;;;;;;;;;;22544:1590;23772:11;;23786:1;23772:15;23756:13;;23741:12;:28;:46;23737:386;;;16603:3;16768;16919;23888:81;16919:3;23888:54;16603:3;16768;23888:54;:27;:54;:::i;:81::-;23808:162;;;;;;;;;;23737:386;16361:3;16405;16445:2;24058:48;16445:2;24058:32;16361:3;16405;24058:32;:16;:32;:::i;23737:386::-;22290:1851;;;;;;;;;:::o;21633:267::-;21726:4;21743:127;21752:12;:10;:12::i;:::-;21766:7;21775:94;21814:15;21775:94;;;;;;;;;;;;;;;;;:11;:25;21787:12;:10;:12::i;:::-;-1:-1:-1;;;;;21775:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21775:25:0;;;:34;;;;;;;;;;;:94;;:38;:94;:::i;31507:196::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31575:15:::1;::::0;;;::::1;;;:24;31567:56;;;;-1:-1:-1::0;;;31567:56:0::1;;;;;;;;;31634:15;:22:::0;;-1:-1:-1;;31634:22:0::1;::::0;::::1;::::0;;31683:12:::1;31667:13;:28:::0;31507:196::o;16071:40::-;;;;;;;;;;;;;;;:::o;20593:167::-;20671:4;20688:42;20698:12;:10;:12::i;:::-;20712:9;20723:6;20688:9;:42::i;32985:268::-;33076:9;;-1:-1:-1;;;;;33076:9:0;33097:10;33076:32;33068:59;;;;-1:-1:-1;;;33068:59:0;;;;;;;;;33143:6;33138:108;33155:16;;;33138:108;;;33224:10;33193:18;:28;33212:5;;33218:1;33212:8;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33193:28:0;;;;;;;;;;;;-1:-1:-1;33193:28:0;:41;;-1:-1:-1;;33193:41:0;;;;;;;;;;-1:-1:-1;33173:3:0;33138:108;;17957:30;;;-1:-1:-1;;;;;17957:30:0;;:::o;32495:259::-;32578:9;;-1:-1:-1;;;;;32578:9:0;32599:10;32578:32;32570:59;;;;-1:-1:-1;;;32570:59:0;;;;;;;;;32640:8;:20;;-1:-1:-1;;32640:20:0;;;;;;;;;;;;;;;;32671:11;:26;;-1:-1:-1;;;;;;32671:26:0;-1:-1:-1;;;;;32671:26:0;;;;;;;;32727:11;-1:-1:-1;32708:31:0;;;:18;:31;;;;;:38;;-1:-1:-1;;32708:38:0;-1:-1:-1;32708:38:0;;;32495:259::o;31711:138::-;5506:12;:10;:12::i;:::-;5496:6;;-1:-1:-1;;;;;5496:6:0;;;:22;;;5488:67;;;;-1:-1:-1;;;5488:67:0;;;;;;;;;31801:18:::1;:40:::0;31711:138::o;20768:143::-;-1:-1:-1;;;;;20876:18:0;;;20849:7;20876:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20768:143::o;32762:215::-;32851:9;;-1:-1:-1;;;;;32851:9:0;32872:10;32851:32;32843:59;;;;-1:-1:-1;;;32843:59:0;;;;;;;;;32913:11;:22;;-1:-1:-1;;32913:22:0;;;;;;;;;;;32946:13;:23;32762: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;29835:430::-;30023:13;;29891:18;;;;29942:97;;30005:33;;-1:-1:-1;;;;;30023:13:0;30005:9;:33::i;:::-;29960:4;;29984:13;;29953:46;;-1:-1:-1;;;29953:46:0;;29942:58;;-1:-1:-1;;;;;29960:4:0;;;;29953:22;;:46;;29984:13;;;;29953:46;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29953:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29953: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;29953:46:0;;;;;;;;;29942:6;;:58;:10;:58;:::i;:97::-;29922:117;;30050:21;30092:15;;;;;;;;;-1:-1:-1;;;;;30092:15:0;-1:-1:-1;;;;;30092:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30092:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30092: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;30092:25:0;;;;;;;;;30127:4;;30133;;30074:64;;-1:-1:-1;;;30074:64:0;;-1:-1:-1;;;;;30074:52:0;;;;;;:64;;30127:4;;;;30133;;;30074:64;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30074:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30074: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;30074:64:0;;;;;;;;;30226:4;;30219:37;;-1:-1:-1;;;30219:37:0;;30050:88;;-1:-1:-1;30162:95:0;;-1:-1:-1;;;;;30226:4:0;;;;30219:22;;:37;;30050:88;;30219:37;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30219:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30219: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;30219:37:0;;;;;;;;;30183:4;;30176:37;;-1:-1:-1;;;30176:37:0;;30162:52;;-1:-1:-1;;;;;30183:4:0;;30176:22;;:37;;30199:13;;30176:37;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30176:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30176: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;30176:37:0;;;;;;;;;30162:9;;:52;:13;:52;:::i;:95::-;30149:108;29835:430;-1:-1:-1;;;;29835:430:0:o;3895:106::-;3983:10;3895:106;:::o;21949:333::-;-1:-1:-1;;;;;22042:19:0;;22034:66;;;;-1:-1:-1;;;22034:66:0;;;;;;;;;-1:-1:-1;;;;;22119:21:0;;22111:66;;;;-1:-1:-1;;;22111:66:0;;;;;;;;;-1:-1:-1;;;;;22190:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;22242:32;;;;;22220:6;;22242:32;;;;;;;;;;21949:333;;;:::o;28015:1812::-;-1:-1:-1;;;;;28137:18:0;;28129:66;;;;-1:-1:-1;;;28129:66:0;;;;;;;;;28223:1;28214:6;:10;28206:69;;;;-1:-1:-1;;;28206:69:0;;;;;;;;;-1:-1:-1;;;;;28293:24:0;;;;;;:18;:24;;;;;;;;28292:25;:41;;;;-1:-1:-1;;;;;;28321:12:0;;;;;;:8;:12;;;;;;;;28292:41;:52;;;;-1:-1:-1;28338:6:0;;;;28337:7;28292:52;28288:234;;;28361:19;28383:32;28411:3;28383:23;28403:2;28383:15;28393:4;28383:9;:15::i;:32::-;28361:54;;28448:6;28434:11;:20;28430:81;;;28484:11;28475:20;;28430:81;28288:234;;28557:12;28580:18;;:::i;:::-;28609:21;;;;:30;;;-1:-1:-1;;;;;28655:12:0;;;;;;:8;:12;;;;;;;;;:20;;:12;:20;:53;;;;;28686:2;-1:-1:-1;;;;;28679:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28679:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28679: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;28679:24:0;;;;;;;;;:29;28655:53;28652:137;;;28740:15;;-1:-1:-1;;;;;28732:23:0;;;28740:15;;28732:23;28724:53;;;;-1:-1:-1;;;28724:53:0;;;;;;;;;28804:6;;;;:14;;:6;:14;;:50;;-1:-1:-1;;;;;;28822:24:0;;;;;;:18;:24;;;;;;;;:32;;:24;:32;28804:50;:84;;;-1:-1:-1;;;;;;28858:22:0;;;;;;:18;:22;;;;;;;;:30;;:22;:30;28804:84;28801:159;;;28911:36;28926:4;28931:2;28934:6;28941:5;28911:14;:36::i;:::-;28904:43;;;;28801:159;28980:15;;;;;;;:23;;28999:4;28980:23;28972:51;;;;-1:-1:-1;;;28972:51:0;;;;;;;;;-1:-1:-1;;;;;29040:14:0;;;;;;:8;:14;;;;;;;;:22;;:14;:22;29036:110;;;29087:14;29098:2;29087:10;:14::i;:::-;:23;29079:55;;;;-1:-1:-1;;;29079:55:0;;;;;;;;;-1:-1:-1;;;;;29161:12:0;;;;;;:8;:12;;;;;;;;:20;;:12;:20;;:46;;-1:-1:-1;;;;;;29185:14:0;;;;;;:8;:14;;;;;;;;:22;;:14;:22;29161:46;29158:214;;;29239:4;29223:20;;29263:18;29278:2;29263:14;:18::i;:::-;29260:35;;;29283:10;:8;:10::i;:::-;29311:49;29322:6;29330:5;29337:12;29351:4;29357:2;29311:10;:49::i;:::-;-1:-1:-1;;;;;29389:12:0;;;;;;:8;:12;;;;;;;;29388:13;:37;;;;-1:-1:-1;;;;;;29405:11:0;;;;;;:7;:11;;;;;;;;:20;29388:37;29384:163;;;29494:18;;29450:40;29468:5;:21;;;29450:13;29460:2;29450:9;:13::i;:40::-;:62;;29442:93;;;;-1:-1:-1;;;29442:93:0;;;;;;;;;29567:36;29582:4;29587:2;29590:6;29597:5;29567:14;:36::i;:::-;29619:12;;;;:20;;:12;:20;:68;;;;-1:-1:-1;29679:8:0;;29663:11;;29643:32;;:15;;:32;:19;:32;:::i;:::-;:44;;29619:68;29616:93;;;29689:18;:16;:18::i;:::-;-1:-1:-1;;;;;29725:14:0;;;;;;:8;:14;;;;;;;;:22;;:14;:22;29721:99;;;29778:2;-1:-1:-1;;;;;29769:39:0;;29782:6;29790:17;29800:6;29790:9;:17::i;:::-;29769:39;;;;;;;;;;;;;;;;29721:99;28015:1812;;;;;:::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;;;;;;;;30273:396;-1:-1:-1;;;;;30406:15:0;;;;;;:7;:15;;;;;;:28;;30426:7;30406:28;:19;:28;:::i;:::-;-1:-1:-1;;;;;30388:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;30489:21;;;30466:18;;;;;;;;;;:45;;;:22;:45;:::i;:::-;30445:7;:18;30453:9;-1:-1:-1;;;;;30445:18:0;-1:-1:-1;;;;;30445:18:0;;;;;;;;;;;;:66;;;;30544:9;-1:-1:-1;;;;;30527:50:0;30536:6;-1:-1:-1;;;;;30527:50:0;;30555:5;:21;;;30527:50;;;;;;;;;;;;;;;30591:13;;:21;;30608:4;30591:21;30588:74;;;30628:22;30637:5;30643:6;30628:8;:22::i;25563:196::-;25695:20;25743:8;;;25563:196::o;25767:210::-;-1:-1:-1;;;;;25850:12:0;;25826:4;25850:12;;;:8;:12;;;;;;;;:20;;:12;:20;:41;;;;-1:-1:-1;25885:6:0;;;;25884:7;25850:41;:65;;;;-1:-1:-1;25904:11:0;;;;25850:65;:119;;;;;25956:13;;25928:24;25946:4;25928:9;:24::i;:::-;:41;;25843:126;25767:210;-1:-1:-1;;25767:210:0:o;25985:2022::-;18984:6;:13;;-1:-1:-1;;18984:13:0;18993:4;18984:13;;;26089::::1;::::0;26054:4:::1;18984:6:::0;26034:26;;;:11:::1;:26;::::0;;;;;;;26069:15:::1;::::0;-1:-1:-1;;;;;26069:15:0::1;26034:52:::0;;;;;;;:68;;;26176:11:::1;::::0;26158:12:::1;::::0;18984:6;;26140:48:::1;::::0;:31:::1;::::0;26089:13;26140:31:::1;:17;:31;:::i;:48::-;26229:16;::::0;;26243:1:::1;26229:16:::0;;;26201:25:::1;26229:16:::0;;::::1;::::0;;26115:73;;-1:-1:-1;26229:16:0;;::::1;::::0;::::1;::::0;;105:10:-1::1;26229:16:0::0;88:34:-1::1;136:17;::::0;-1:-1;26229:16:0::1;26201:44;;26278:4;26256:8;26265:1;26256:11;;;;;;;;-1:-1:-1::0;;;;;26256:27:0;;::::1;:11;::::0;;::::1;::::0;;;;;:27;26308:4:::1;::::0;26294:11;;26308:4;::::1;::::0;26294:8;;26308:4;;26294:11;::::1;;;;;-1:-1:-1::0;;;;;26294:18:0;;::::1;:11;::::0;;::::1;::::0;;;;;:18;26381:15:::1;::::0;:203:::1;::::0;-1:-1:-1;;;26381:203:0;;26347:21:::1;::::0;26381:15;;;::::1;::::0;:66:::1;::::0;:203:::1;::::0;26462:14;;26323:21:::1;::::0;26507:8;;26538:4:::1;::::0;26558:15:::1;::::0;26381:203:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;26381:203:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26381:203:0;;;;26597:20;26620:40;26646:13;26620:21;:25;;:40;;;;:::i;:::-;26679:13;::::0;26671:45:::1;::::0;26597:63;;-1:-1:-1;;;;;;26679:13:0::1;::::0;26671:45;::::1;;;::::0;26597:63;;26679:13:::1;26671:45:::0;26679:13;26671:45;26597:63;26679:13;26671:45;::::1;;;;;;;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;26742:12:0::1;::::0;:32:::1;::::0;26759:14;26742:32:::1;:16;:32;:::i;:::-;26727:12;:47:::0;26823:16:::1;::::0;;26837:1:::1;26823:16:::0;;;;;::::1;::::0;;;26795:25:::1;::::0;26823:16:::1;::::0;::::1;26795:25:::0;;105:10:-1::1;26823:16:0::0;88:34:-1::1;136:17;::::0;-1:-1;26823:16:0::1;26795:44;;26872:4;26850:8;26859:1;26850:11;;;;;;;;-1:-1:-1::0;;;;;26850:27:0;;::::1;:11;::::0;;::::1;::::0;;;;;:27;26902:4:::1;::::0;26888:11;;26902:4;::::1;::::0;26888:8;;26902:4;;26888:11;::::1;;;;;-1:-1:-1::0;;;;;26888:18:0;;::::1;:11;::::0;;::::1;::::0;;;;;:18;26931:4:::1;::::0;26917:11;;26931:4;::::1;::::0;26917:8;;26926:1:::1;::::0;26917:11;::::1;;;;;-1:-1:-1::0;;;;;26917:18:0;;::::1;:11;::::0;;::::1;::::0;;;;;:18;26981:4:::1;::::0;26974:37:::1;::::0;-1:-1:-1;;;26974:37:0;;26946:25:::1;::::0;26981:4;;;::::1;::::0;26974:22:::1;::::0;:37:::1;::::0;27005:4:::1;::::0;26974:37:::1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;26974:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26974: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;26974:37:0;;;;;;;;;27024:15;::::0;27108:13:::1;::::0;26946:65;;-1:-1:-1;;;;;;27024:15:0::1;::::0;:69:::1;::::0;27108:33:::1;::::0;27126:14;27108:33:::1;:17;:33;:::i;:::-;27156:1;27172:8;27203:4;27223:15;27024:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;27024:225: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;;27290:4:0::1;::::0;27283:37:::1;::::0;-1:-1:-1;;;27283:37:0;;27262:18:::1;::::0;-1:-1:-1;27283:60:0::1;::::0;-1:-1:-1;27325:17:0;;-1:-1:-1;;;;;27290:4:0::1;::::0;27283:22:::1;::::0;:37:::1;::::0;27314:4:::1;::::0;27283:37:::1;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;27283:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27283: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;27283:37:0;;;;;;;;;:41:::0;:60:::1;:41;:60;:::i;:::-;27262:81;;27354:22;27379:47;27414:11;;27379:30;27394:14;;27379:10;:14;;:30;;;;:::i;:47::-;27354:72:::0;-1:-1:-1;27437:18:0::1;27458:30;:10:::0;27354:72;27458:30:::1;:14;:30;:::i;:::-;27505:12;::::0;27437:51;;-1:-1:-1;27505:12:0::1;;:20;;:12:::0;:20:::1;:42:::0;::::1;;;;27546:1;27529:14;:18;27505:42;27501:233;;;27574:15;::::0;27564:56:::1;::::0;-1:-1:-1;;;27564:56:0;;-1:-1:-1;;;;;27574:15:0;;::::1;::::0;27564:40:::1;::::0;:56:::1;::::0;27605:14;;27564:56:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;27564:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27564:56:0;;;;27652:70;27671:50;27709:11;;27671:33;27689:14;;27671:13;;:17;;:33;;;;:::i;:50::-;27652:14;::::0;;:70:::1;:18;:70;:::i;:::-;27635:14;:87:::0;27501:233:::1;27748:8;::::0;::::1;;::::0;;::::1;;:16;;:8;:16;:34:::0;::::1;;;;27781:1;27768:10;:14;27748:34;27744:201;;;27805:11;::::0;27799:44:::1;::::0;-1:-1:-1;;;27799:44:0;;-1:-1:-1;;;;;27805:11:0;;::::1;::::0;27799:32:::1;::::0;:44:::1;::::0;27832:10;;27799:44:::1;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;27799:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27799:44:0;;;;27871:62;27886:46;27920:11;;27886:29;27904:10;;27886:13;;:17;;:29;;;;:::i;:46::-;27871:10;::::0;;:62:::1;:14;:62;:::i;:::-;27858:10;:75:::0;27744:201:::1;27985:13;::::0;27969:11:::1;::::0;:30:::1;::::0;::::1;:15;:30;:::i;:::-;27955:11;:44:::0;-1:-1:-1;;19002:6:0;:14;;-1:-1:-1;;19002:14:0;;;-1:-1:-1;;;;;;;25985:2022:0:o;24262:1024::-;24494:13;;24384:16;;24403:107;;24476:33;;-1:-1:-1;;;;;24494:13:0;24476:9;:33::i;24403:107::-;24384:126;;24536:11;;24525:8;:22;24521:77;;;24564:11;:22;;;24521:77;24609:17;24627:19;24647:15;24663:16;24683:40;24690:4;24696:2;24700:8;24710:12;24683:6;:40::i;:::-;24608:115;;;;;;;;24769:10;;24782:1;24769:14;24753:13;;24738:12;:28;:45;24734:197;;;17574:5;24827:4;24818:13;;:23;24800:15;;;:41;24734:197;;;17574:5;24892:17;;;:27;24874:15;;;:45;24734:197;24976:15;;;;24965:27;;:6;;:27;:10;:27;:::i;:::-;24941:21;;;:51;25035:15;;;;25019:11;;:32;;;:15;:32;:::i;:::-;25005:11;:46;25077:12;;:48;;17574:5;25094:20;;;:30;25077:16;:48::i;:::-;25062:12;:63;25153:14;;:52;;17574:5;25172:22;;;:32;25153:18;:52::i;:::-;25136:14;:69;;;25245:12;;25229:11;;:49;;25136:69;25229:29;;:11;:29;:15;:29;:::i;:49::-;25216:10;:62;-1:-1:-1;;;;;;;;;;24262:1024:0:o;7795:136::-;7853:7;7880:43;7884:1;7887;7880:43;;;;;;;;;;;;;;;;;:3;:43::i;30677:336::-;30794:8;;30778:11;;30739:15;;30794:8;30769:21;;30739:15;;30769:21;:8;:21;:::i;:::-;:33;30765:241;;30849:8;;30833:11;;:25;;;:15;:25;:::i;:::-;30819:11;:39;30978:13;;30887:107;;30960:33;;-1:-1:-1;;;;;30978:13:0;30960:9;:33::i;30765:241::-;30677: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;25294:261::-;25367:15;;;;:19;25364:184;;25454:15;;;;;25443:4;25427:22;;;;:7;:22;;;;;;;:43;;;:26;:43;:::i;:::-;25418:4;25402:22;;;;:7;:22;;;;;;;:68;;;;25520:15;;;;25490:46;;25418:4;;-1:-1:-1;;;;;25490:46:0;;;;;;;;;;;;;;;;;25364:184;25294:261;;:::o;15719:18376::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:491;;;;3729:2;3717:9;3708:7;3704:23;3700:32;3697:2;;;-1:-1;;3735:12;3697:2;85:6;72:20;97:33;124:5;97:33;;;3787:63;-1:-1;3887:2;3926:22;;994:20;;-1:-1;3995:2;4034:22;;72:20;97:33;72:20;97:33;;;4003:63;;;;3691:391;;;;;;4089:516;;;;4242:2;4230:9;4221:7;4217:23;4213:32;4210:2;;;-1:-1;;4248:12;4210:2;4306:17;4293:31;4344:18;;4336:6;4333:30;4330:2;;;-1:-1;;4366:12;4330:2;4467:6;4456:9;4452: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;;4344: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;4394:90;;-1:-1;;4557:22;;725:20;750:30;725:20;750:30;;4612:257;;4724:2;4712:9;4703:7;4699:23;4695:32;4692:2;;;-1:-1;;4730:12;4692:2;873:6;867:13;885:30;909:5;885:30;;4876:360;;;4994:2;4982:9;4973:7;4969:23;4965:32;4962:2;;;-1:-1;;5000:12;4962:2;738:6;725:20;750:30;774:5;750:30;;5243:360;;;5361:2;5349:9;5340:7;5336:23;5332:32;5329:2;;;-1:-1;;5367:12;5329:2;738:6;725:20;750:30;774:5;750:30;;5610:485;;;;5745:2;5733:9;5724:7;5720:23;5716:32;5713:2;;;-1:-1;;5751:12;5713:2;738:6;725:20;750:30;774:5;750:30;;;5803:60;5900:2;5939:22;;994:20;;-1:-1;6008:2;6047:22;;;994:20;;5707:388;-1:-1;;;5707:388;6102:241;;6206:2;6194:9;6185:7;6181:23;6177:32;6174:2;;;-1:-1;;6212:12;6174:2;-1:-1;994:20;;6168:175;-1:-1;6168:175;6350:263;;6465:2;6453:9;6444:7;6440:23;6436:32;6433:2;;;-1:-1;;6471:12;6433:2;-1:-1;1142:13;;6427:186;-1:-1;6427:186;6620:366;;;6741:2;6729:9;6720:7;6716:23;6712:32;6709:2;;;-1:-1;;6747:12;6709:2;-1:-1;;994:20;;;6899:2;6938:22;;;994:20;;-1:-1;6703:283;14707:213;-1:-1;;;;;26389:54;;;;7385:37;;14825:2;14810:18;;14796:124;15163:324;-1:-1;;;;;26389:54;;;7385:37;;26389:54;;15473:2;15458:18;;7385:37;15309:2;15294:18;;15280:207;15494:324;-1:-1;;;;;26389:54;;;;7385:37;;15804:2;15789:18;;14544:37;15640:2;15625:18;;15611:207;15825:201;26301:13;;26294:21;8348:34;;15937:2;15922:18;;15908:118;16551:301;;16689:2;;16710:17;16703:47;9032:5;25493:12;25909:6;16689:2;16678:9;16674:18;25897:19;-1:-1;27800:101;27814:6;27811:1;27808:13;27800:101;;;27881:11;;;;;27875:18;27862:11;;;25937:14;27862:11;27855:39;27829:10;;27800:101;;;27916:6;27913:1;27910:13;27907:2;;;-1:-1;25937:14;27972:6;16678:9;27963:16;;27956:27;27907:2;-1:-1;28088:7;28072:14;-1:-1;;28068:28;9190:39;;;;25937:14;9190:39;;16660:192;-1:-1;;;16660:192;16859:407;17050:2;17064:47;;;9466:2;17035:18;;;25897:19;-1:-1;;;25937:14;;;9482:38;9539:12;;;17021:245;17273:407;17464:2;17478:47;;;9790:2;17449:18;;;25897:19;9826:34;25937:14;;;9806:55;-1:-1;;;9881:12;;;9874:30;9923:12;;;17435:245;17687:407;17878:2;17892:47;;;10174:2;17863:18;;;25897:19;10210:29;25937:14;;;10190:50;10259:12;;;17849:245;18101:407;18292:2;18306:47;;;10510:2;18277:18;;;25897:19;-1:-1;;;25937:14;;;10526:42;10587:12;;;18263:245;18515:407;18706:2;18720:47;;;10838:2;18691:18;;;25897:19;10874:34;25937:14;;;10854:55;-1:-1;;;10929:12;;;10922:27;10968:12;;;18677:245;18929:407;19120:2;19134:47;;;11219:2;19105:18;;;25897:19;-1:-1;;;25937:14;;;11235:37;11291:12;;;19091:245;19343:407;19534:2;19548:47;;;19519:18;;;25897:19;11578:34;25937:14;;;11558:55;11632:12;;;19505:245;19757:407;19948:2;19962:47;;;11883:2;19933:18;;;25897:19;-1:-1;;;25937:14;;;11899:42;11960:12;;;19919:245;20171:407;20362:2;20376:47;;;12211:2;20347:18;;;25897:19;-1:-1;;;25937:14;;;12227:41;12287:12;;;20333:245;20585:407;20776:2;20790:47;;;12538:2;20761:18;;;25897:19;12574:34;25937:14;;;12554:55;-1:-1;;;12629:12;;;12622:26;12667:12;;;20747:245;20999:407;21190:2;21204:47;;;12918:2;21175:18;;;25897:19;12954:34;25937:14;;;12934:55;-1:-1;;;13009:12;;;13002:38;13059:12;;;21161:245;21413:407;21604:2;21618:47;;;13310:2;21589:18;;;25897:19;13346:34;25937:14;;;13326:55;-1:-1;;;13401:12;;;13394:25;13438:12;;;21575:245;21827:407;22018:2;22032:47;;;22003:18;;;25897:19;13725:34;25937:14;;;13705:55;13779:12;;;21989:245;22241:407;22432:2;22446:47;;;14030:2;22417:18;;;25897:19;-1:-1;;;25937:14;;;14046:41;14106:12;;;22403:245;22655:407;22846:2;22860:47;;;22831:18;;;25897:19;14393:34;25937:14;;;14373:55;14447:12;;;22817:245;23069:213;14544:37;;;23187:2;23172:18;;23158:124;23289:839;;23585:3;23574:9;23570:19;14574:5;14551:3;14544:37;23758:2;27448:24;23758:2;23747:9;23743:18;8817:58;23585:3;23795:2;23784:9;23780:18;23773:48;23835:108;7778:5;25493:12;25909:6;25904:3;25897:19;25937:14;23574:9;25937:14;7790:93;;23758:2;7954:5;25347:14;7966:21;;-1:-1;7993:260;8018:6;8015:1;8012:13;7993:260;;;8079:13;;-1:-1;;;;;26389:54;7254:58;;25752:14;;;;7147;;;;4344:18;8033:9;7993:260;;;-1:-1;;;;;;;26389:54;;;;24030:2;24015:18;;7254:58;-1:-1;;;24113:3;24098:19;14544:37;23827:116;23556:572;-1:-1;;;23556:572;24135:324;14544:37;;;24445:2;24430:18;;14544:37;24281:2;24266:18;;24252:207;24466:547;14544:37;;;24833:2;24818:18;;14544:37;;;;24916:2;24901:18;;14544:37;24999:2;24984:18;;14544:37;24668:3;24653:19;;24639:374;25020:205;26605:4;26594:16;;;;14660:35;;25134:2;25119:18;;25105:120;28109:117;-1:-1;;;;;26389:54;;28168:35;;28158:2;;28217:1;;28207:12;28233:111;28314:5;26301:13;26294:21;28292:5;28289:32;28279:2;;28335:1;;28325:12

Swarm Source

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