ETH Price: $2,354.31 (+0.60%)

Token

Wojak (WOJAK)
 

Overview

Max Total Supply

1,000,000,000,000 WOJAK

Holders

77

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000018772 WOJAK

Value
$0.00
0x46b91c49eb90edd77378e12dd0de50e3c1facad2
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:
WOJAK

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-31
*/

/**
 * SPDX-License-Identifier: UNLICENSED 
 *
 * Token: WOJAK
 * Web: https://www.wojakcommunity.com/
 * TG: t.me/wojaktokenportal
 * X: https://twitter.com/wojaktoken_erc
 *
 *                                        .:^~~~~~~~~~~~~~~:..                                        
 *                                    :!???7!!!!!!!~~~~~~!!7????7!^:                                  
 *                               .^~?J?!:                      .:~7?J7~.                              
 *                           ^!7J?7~^.                               ^7J?^                            
 *                         .5?~^.                                       ^?J?^                         
 *                        ~P7                                              ~JJ7.                      
 *                      ^5?:                                                 .!J?^                    
 *                      P7                                                      ^YJ.                  
 *                     ^G:                                                        7P:                 
 *                    !P^                                                          !G:                
 *                   .B^                      .^^^~~~~~~~~~~~~!~^^:..:..:::::.      7G                
 *                   !P                        :::..     ..... .:^^^^^^^^^^^^~!^     P?               
 *                   P7                          ..:^~~!~~~^~~~~~::..::...... .:.    ^G               
 *                  J5                    ^~~~~~~~~^:..        .:^^^^^^^~~~~~~       :B^              
 *                  P?                    .....     .:::::::.              .....      ~P!             
 *                  P7                        :^~~!~~^^^^^^~:            ~!~~~~~!~.    ^B:            
 *                 :G.                        ^^.           .~.          .       :~~    JJ            
 *                 :G                                        ~?.         !~             75            
 *                 ^B.                           :^^^^^:      .          !^             .G:           
 *                  P!                          ?Y~~P@@&GY!:                ^^~!??!.    !P            
 *                  J5                          JY~.B@@@@@JP!             :P?~?@@@@P    Y7            
 *                   YY                          :??J5YJYJ??:             ^P7!J#@&#P    5?            
 *                   .G!                                                    ....^!!^    .5J           
 *                    ~B.                                              .P.               .B^          
 *                     ?P.          Y!                                  G7                P7          
 *                      !P~        :#:                                  :5J:              P7          
 *                       :P?       :#.                                    ~Y?:            G!          
 *                        .P7       5J                     .77?!            Y5           YY           
 *                         ^B:       57                    ^#~.    ..      7P:          ?P            
 *                          #~       7P                     !Y7!. ~J7.  ~!?B.          YY             
 *                          B~        !P~                     ::        :~7:         .5J              
 *                          B~        ~^57.                                         .P?               
 *                          B~        ?^ ~J?:             ^~~:.                    !P~                
 *                          #^        7~   ~J?:          .7!!7???7777777??JY^     .B^                 
 *                        7P         ?~     ^JY!:              .......... ^:     !P                  
 *                        ~G:        :?.       .~JJ~                             !5!                  
 *                        YJ         .            :7Y7.                        7Y7.                   
 *                       ^G^                        .7Y7:                   .^5J                      
 *                      !B~          ::               .~?J?!^:.         .^!JJ?~                       
 *                     7G:        ^JJ?!                   :~!??77777YJ77?7~.                          
 *                   ^YY:        ?P^                       :!       JY                                
 *              .::JPY^       .^YY.                         7!^     .YJ!!~^^^^^^^^^:::                
 *         :~7???77?7~       .!7^                            .:       ::^~!!!!!!!!!7??J?77~~          
 *   ^7!!7?J!^:.                               ..                                      .:^~!.         
 *   :^^^^.                                   ^~~!~^    :!~~~                                         
 *                                                .!7^^~?:..                                          
 *                                                  ...:                                              
 *
*/

pragma solidity ^0.8.20;

interface IERC20 {

    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 SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract WOJAK is Context, IERC20, Ownable {
    using SafeMath for uint256;

    string private constant _name = "Wojak";
    string private constant _symbol = "WOJAK";
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1e12 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private minContractTokensToSwap = 1e9 * 10**9;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromMaxWallet;
    mapping (address => bool) private _bots;
    uint256 private _taxFee = 0;
    uint256 private _teamFee = 0;
    uint256 private _maxWalletSize = 1e10 * 10**9;
    uint256 private _buyFee = 12;
    uint256 private _sellFee = 12;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousteamFee = _teamFee;
    address payable private _developmentWallet;
    address payable private _marketingWallet;
    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen = false;
    bool private _swapAll = true;
    bool private inSwap = false;
    mapping(address => bool) private automatedMarketMakerPairs;

    event Response(bool dev, bool marketing);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
        constructor () {

        _developmentWallet = payable(0x6d1A94e077BDaC9e3519F611849352DB8f10d61e);
        _marketingWallet = payable(0xA85eEfB09e5Baf10667099CC94B80964D70c65c6);
        
        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_developmentWallet] = true;
        _isExcludedFromFee[_marketingWallet] = true;
        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[address(this)] = true;
        _isExcludedFromMaxWallet[_developmentWallet] = true;
        _isExcludedFromMaxWallet[_marketingWallet] = true;

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

    function name() public pure returns (string memory) {
        return _name;
    }
    
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(from != owner() && to != owner()) {
            
            require(!_bots[from] && !_bots[to]);

            if(to != uniswapV2Pair && !_isExcludedFromMaxWallet[to] && _maxWalletSize != 0) {
                require(balanceOf(address(to)) + amount <= _maxWalletSize, "TOKEN: Balance exceeds wallet size!");
            }
            
            if(from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
                require(tradingOpen, "Trading not yet enabled.");
                _teamFee = _buyFee;
            }
            uint256 contractTokenBalance = balanceOf(address(this));

            if(!inSwap && from != uniswapV2Pair && tradingOpen) {

                _teamFee = _sellFee;

                if (automatedMarketMakerPairs[to]) {
                    if(contractTokenBalance > minContractTokensToSwap) {
                        if(!_swapAll) {
                            contractTokenBalance = minContractTokensToSwap;
                        }
                        swapBack(contractTokenBalance);
                    }
                }

            }
        }
        bool takeFee = true;

        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

        if(!automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) {
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function swapBack(uint256 contractTokenBalance) private {
        
        swapTokensForEth(contractTokenBalance);

        uint256 contractETHBalance = address(this).balance;
        if(contractETHBalance > 0) {
            sendETHToFee(address(this).balance);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
        
    function sendETHToFee(uint256 amount) private {
        (bool development, ) = _developmentWallet.call{value: amount.div(2)}("");
        (bool marketing, ) = _marketingWallet.call{value: amount.div(2)}("");

        emit Response(development, marketing);
    }
    
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        _transferStandard(sender, recipient, amount);
        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); 

        _takeTeam(tTeam);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(tAmount, _taxFee, _teamFee);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tTeam, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 TeamFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tTeam = tAmount.mul(TeamFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
        return (tTransferAmount, tFee, tTeam);
    }

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if(rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tTeam, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        return (rAmount, rTransferAmount, rFee);
    }

    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate =  _getRate();
        uint256 rTeam = tTeam.mul(currentRate);

        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}
    
    function openTrading() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        tradingOpen = true;
        automatedMarketMakerPairs[uniswapV2Pair] = true;
    }

    function setDevelopmentWallet (address payable development) external onlyOwner() {
        _isExcludedFromFee[_developmentWallet] = false;
        _developmentWallet = development;
        _isExcludedFromFee[development] = true;
    }
    
    function setMarketingWallet (address payable marketing) external onlyOwner {
        _isExcludedFromFee[_marketingWallet] = false;
        _marketingWallet = marketing;
        _isExcludedFromFee[marketing] = true;
    }

    function excludeFromFee(address[] calldata ads, bool onoff) public onlyOwner {
        for (uint i = 0; i < ads.length; i++) {
            _isExcludedFromFee[ads[i]] = onoff;
        }
    }

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

    function excludeFromMaxWallet(address[] calldata ads, bool onoff) public onlyOwner {
        for (uint i = 0; i < ads.length; i++) {
            _isExcludedFromMaxWallet[ads[i]] = onoff;
        }
    }
    
    function isExcludedMaxWallet(address ad) public view returns (bool) {
        return _isExcludedFromMaxWallet[ad];
    }

    function setFee(uint256 buy, uint256 sell) external onlyOwner {
        _buyFee = buy;
        _sellFee = sell;
    }

    function setTaxFee(uint256 tax) external onlyOwner {
        _taxFee = tax;
    }
    
    function setMinContractTokensToSwap(uint256 numToken) external onlyOwner {
        minContractTokensToSwap = numToken * 10**9;
    }

    function setMaxWallet(uint256 amt) external onlyOwner {
        _maxWalletSize = amt * 10**9;
    }

    function setSwapAll(bool onoff) external onlyOwner {
        _swapAll = onoff;
    }

    function manualswap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }
    
    function manualsend() external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function thisBalance() public view returns (uint) {
        return balanceOf(address(this));
    }

    function amountInPool() public view returns (uint) {
        return balanceOf(uniswapV2Pair);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
    }

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

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

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

    function removeAllFee() private {
        if(_taxFee == 0 && _teamFee == 0) return;
        _previousTaxFee = _taxFee;
        _previousteamFee = _teamFee;
        _taxFee = 0;
        _teamFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _teamFee = _previousteamFee;
    }

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

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

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

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

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

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

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

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":false,"internalType":"bool","name":"dev","type":"bool"},{"indexed":false,"internalType":"bool","name":"marketing","type":"bool"}],"name":"Response","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountInPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"ads","type":"address[]"},{"internalType":"bool","name":"onoff","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"ads","type":"address[]"},{"internalType":"bool","name":"onoff","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ad","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ad","type":"address"}],"name":"isExcludedMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"development","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numToken","type":"uint256"}],"name":"setMinContractTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"thisBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052683635c9adc5dea000005f196200001c919062000699565b5f196200002a9190620006fd565b600255670de0b6b3a76400006004555f600b555f600c55678ac7230489e80000600d55600c600e55600c600f55600b54601055600c546011555f601560146101000a81548160ff02191690831515021790555060016015806101000a81548160ff0219169083151502179055505f601560166101000a81548160ff021916908315150217905550348015620000bd575f80fd5b505f620000cf6200063560201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350736d1a94e077bdac9e3519f611849352db8f10d61e60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a85eefb09e5baf10667099cc94b80964d70c65c660135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025460055f620002296200063560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160085f6200027b6200063c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f620004206200063c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620005c06200063560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef683635c9adc5dea0000060405162000627919062000748565b60405180910390a362000763565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620006a58262000663565b9150620006b28362000663565b925082620006c557620006c46200066c565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620007098262000663565b9150620007168362000663565b9250828203905081811115620007315762000730620006d0565b5b92915050565b620007428162000663565b82525050565b5f6020820190506200075d5f83018462000737565b92915050565b61421480620007715f395ff3fe6080604052600436106101ba575f3560e01c8063715018a6116100eb578063c4081a4c11610089578063db92dbb611610063578063db92dbb6146105ad578063dd62ed3e146105d7578063de30aad114610613578063e1ab04c91461063b576101c1565b8063c4081a4c14610547578063c9567bf91461056f578063db8aeab114610585576101c1565b806395d89b41116100c557806395d89b41146104a35780639a7a23d6146104cd578063a9059cbb146104f5578063c3c8cd8014610531576101c1565b8063715018a61461043b57806372ac2486146104515780638da5cb5b14610479576101c1565b8063313ce567116101585780635d0044ca116101325780635d0044ca146103995780635d098b38146103c15780636fc3eaec146103e957806370a08231146103ff576101c1565b8063313ce5671461030b57806352f7c988146103355780635342acb41461035d576101c1565b806318160ddd1161019457806318160ddd1461025357806323b872dd1461027d57806327f3a72a146102b957806328875c16146102e3576101c1565b806306fdde03146101c5578063095ea7b3146101ef57806312dfbd331461022b576101c1565b366101c157005b5f80fd5b3480156101d0575f80fd5b506101d9610677565b6040516101e6919061317b565b60405180910390f35b3480156101fa575f80fd5b5061021560048036038101906102109190613230565b6106b4565b6040516102229190613288565b60405180910390f35b348015610236575f80fd5b50610251600480360381019061024c91906132a1565b6106d1565b005b34801561025e575f80fd5b5061026761077e565b60405161027491906132db565b60405180910390f35b348015610288575f80fd5b506102a3600480360381019061029e91906132f4565b61078e565b6040516102b09190613288565b60405180910390f35b3480156102c4575f80fd5b506102cd610862565b6040516102da91906132db565b60405180910390f35b3480156102ee575f80fd5b50610309600480360381019061030491906133cf565b610871565b005b348015610316575f80fd5b5061031f6109a6565b60405161032c9190613447565b60405180910390f35b348015610340575f80fd5b5061035b60048036038101906103569190613460565b6109ae565b005b348015610368575f80fd5b50610383600480360381019061037e919061349e565b610a54565b6040516103909190613288565b60405180910390f35b3480156103a4575f80fd5b506103bf60048036038101906103ba91906132a1565b610aa6565b005b3480156103cc575f80fd5b506103e760048036038101906103e29190613504565b610b53565b005b3480156103f4575f80fd5b506103fd610cf4565b005b34801561040a575f80fd5b506104256004803603810190610420919061349e565b610d98565b60405161043291906132db565b60405180910390f35b348015610446575f80fd5b5061044f610de6565b005b34801561045c575f80fd5b5061047760048036038101906104729190613504565b610f34565b005b348015610484575f80fd5b5061048d6110d5565b60405161049a919061353e565b60405180910390f35b3480156104ae575f80fd5b506104b76110fc565b6040516104c4919061317b565b60405180910390f35b3480156104d8575f80fd5b506104f360048036038101906104ee9190613557565b611139565b005b348015610500575f80fd5b5061051b60048036038101906105169190613230565b61126a565b6040516105289190613288565b60405180910390f35b34801561053c575f80fd5b50610545611287565b005b348015610552575f80fd5b5061056d600480360381019061056891906132a1565b611333565b005b34801561057a575f80fd5b506105836113d1565b005b348015610590575f80fd5b506105ab60048036038101906105a691906133cf565b6118fe565b005b3480156105b8575f80fd5b506105c1611a33565b6040516105ce91906132db565b60405180910390f35b3480156105e2575f80fd5b506105fd60048036038101906105f89190613595565b611a63565b60405161060a91906132db565b60405180910390f35b34801561061e575f80fd5b50610639600480360381019061063491906135d3565b611ae5565b005b348015610646575f80fd5b50610661600480360381019061065c919061349e565b611b95565b60405161066e9190613288565b60405180910390f35b60606040518060400160405280600581526020017f576f6a616b000000000000000000000000000000000000000000000000000000815250905090565b5f6106c76106c0611be7565b8484611bee565b6001905092915050565b6106d9611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075c90613648565b60405180910390fd5b633b9aca00816107759190613693565b60048190555050565b5f683635c9adc5dea00000905090565b5f61079a848484611db1565b610857846107a6611be7565b610852856040518060600160405280602881526020016141b76028913960075f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610809611be7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546124d79092919063ffffffff16565b611bee565b600190509392505050565b5f61086c30610d98565b905090565b610879611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fc90613648565b60405180910390fd5b5f5b838390508110156109a0578160085f868685818110610929576109286136d4565b5b905060200201602081019061093e919061349e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808061099890613701565b915050610907565b50505050565b5f6009905090565b6109b6611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3990613648565b60405180910390fd5b81600e8190555080600f819055505050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610aae611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3190613648565b60405180910390fd5b633b9aca0081610b4a9190613693565b600d8190555050565b610b5b611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde90613648565b60405180910390fd5b5f60085f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b610cfc611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90613648565b60405180910390fd5b5f479050610d9581612539565b50565b5f610ddf60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126af565b9050919050565b610dee611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7190613648565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f3c611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90613648565b60405180910390fd5b5f60085f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f574f4a414b000000000000000000000000000000000000000000000000000000815250905090565b611141611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490613648565b60405180910390fd5b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361125c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611253906137b8565b60405180910390fd5b611266828261271b565b5050565b5f61127d611276611be7565b8484611db1565b6001905092915050565b61128f611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290613648565b60405180910390fd5b5f61132530610d98565b905061133081612773565b50565b61133b611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be90613648565b60405180910390fd5b80600b8190555050565b6113d9611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90613648565b60405180910390fd5b601560149054906101000a900460ff16156114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90613820565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508060145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506115423060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16683635c9adc5dea00000611bee565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115af9190613852565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611614573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116389190613852565b6040518363ffffffff1660e01b815260040161165592919061387d565b6020604051808303815f875af1158015611671573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116959190613852565b60155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061171c30610d98565b5f806117266110d5565b426040518863ffffffff1660e01b8152600401611748969594939291906138e6565b60606040518083038185885af1158015611764573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906117899190613959565b50505060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016118299291906139a9565b6020604051808303815f875af1158015611845573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061186991906139e4565b506001601560146101000a81548160ff021916908315150217905550600160165f60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611906611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990613648565b60405180910390fd5b5f5b83839050811015611a2d578160095f8686858181106119b6576119b56136d4565b5b90506020020160208101906119cb919061349e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080611a2590613701565b915050611994565b50505050565b5f611a5e60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d98565b905090565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611aed611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090613648565b60405180910390fd5b806015806101000a81548160ff02191690831515021790555050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5390613a7f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc190613b0d565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611da491906132db565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690613b9b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8490613c29565b60405180910390fd5b5f8111611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690613cb7565b60405180910390fd5b611ed76110d5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f455750611f156110d5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561237557600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611fe85750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b611ff0575f80fd5b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612094575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156120a257505f600d5414155b1561210057600d54816120b484610d98565b6120be9190613cd5565b11156120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f690613d78565b60405180910390fd5b5b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156121a9575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121fc575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561225a57601560149054906101000a900460ff16612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224790613de0565b60405180910390fd5b600e54600c819055505b5f61226430610d98565b9050601560169054906101000a900460ff161580156122d0575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156122e85750601560149054906101000a900460ff165b1561237357600f54600c8190555060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612372576004548111156123715760158054906101000a900460ff166123675760045490505b612370816129de565b5b5b5b505b5f6001905060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612415575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561241e575f90505b60165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156124bc575060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124c5575f90505b6124d184848484612a01565b50505050565b5f83831115829061251e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612515919061317b565b60405180910390fd5b505f838561252c9190613dfe565b9050809150509392505050565b5f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612586600284612a2e90919063ffffffff16565b60405161259290613e5e565b5f6040518083038185875af1925050503d805f81146125cc576040519150601f19603f3d011682016040523d82523d5f602084013e6125d1565b606091505b505090505f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612622600285612a2e90919063ffffffff16565b60405161262e90613e5e565b5f6040518083038185875af1925050503d805f8114612668576040519150601f19603f3d011682016040523d82523d5f602084013e61266d565b606091505b505090507fc45e9b3ac19bf635feaed560109cb8931031fbbc86809d50d65d41a2cf2fe8b982826040516126a2929190613e72565b60405180910390a1505050565b5f6002548211156126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec90613f09565b60405180910390fd5b5f6126fe612a77565b90506127138184612a2e90919063ffffffff16565b915050919050565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6001601560166101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156127aa576127a9613f27565b5b6040519080825280602002602001820160405280156127d85781602001602082028036833780820191505090505b50905030815f815181106127ef576127ee6136d4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612893573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b79190613852565b816001815181106128cb576128ca6136d4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129313060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bee565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161299395949392919061400b565b5f604051808303815f87803b1580156129aa575f80fd5b505af11580156129bc573d5f803e3d5ffd5b50505050505f601560166101000a81548160ff02191690831515021790555050565b6129e781612773565b5f4790505f8111156129fd576129fc47612539565b5b5050565b80612a0f57612a0e612aa0565b5b612a1a848484612ad9565b80612a2857612a27612c99565b5b50505050565b5f612a6f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612cad565b905092915050565b5f805f612a82612d0e565b91509150612a998183612a2e90919063ffffffff16565b9250505090565b5f600b54148015612ab257505f600c54145b612ad757600b54601081905550600c546011819055505f600b819055505f600c819055505b565b5f805f805f80612ae887612d6d565b955095509550955095509550612b448660055f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612dcd90919063ffffffff16565b60055f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612bd58560055f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e1690919063ffffffff16565b60055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612c1f81612e73565b612c298483612f2a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612c8691906132db565b60405180910390a3505050505050505050565b601054600b81905550601154600c81905550565b5f8083118290612cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cea919061317b565b60405180910390fd5b505f8385612d019190614090565b9050809150509392505050565b5f805f60025490505f683635c9adc5dea000009050612d41683635c9adc5dea00000600254612a2e90919063ffffffff16565b821015612d6057600254683635c9adc5dea00000935093505050612d69565b81819350935050505b9091565b5f805f805f805f805f612d858a600b54600c54612f64565b9250925092505f612d94612a77565b90505f805f612da58e878787612ff6565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b5f612e0e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124d7565b905092915050565b5f808284612e249190613cd5565b905083811015612e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e609061410a565b60405180910390fd5b8091505092915050565b5f612e7c612a77565b90505f612e92828461307a90919063ffffffff16565b9050612ee48160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e1690919063ffffffff16565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b612f3f82600254612dcd90919063ffffffff16565b600281905550612f5a81600354612e1690919063ffffffff16565b6003819055505050565b5f805f80612f8e6064612f80888a61307a90919063ffffffff16565b612a2e90919063ffffffff16565b90505f612fb76064612fa9888b61307a90919063ffffffff16565b612a2e90919063ffffffff16565b90505f612fdf82612fd1858c612dcd90919063ffffffff16565b612dcd90919063ffffffff16565b905080838395509550955050505093509350939050565b5f805f8061300d858961307a90919063ffffffff16565b90505f613023868961307a90919063ffffffff16565b90505f613039878961307a90919063ffffffff16565b90505f613061826130538587612dcd90919063ffffffff16565b612dcd90919063ffffffff16565b9050838184965096509650505050509450945094915050565b5f80830361308a575f90506130eb565b5f82846130979190613693565b90508284826130a69190614090565b146130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd90614198565b60405180910390fd5b809150505b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561312857808201518184015260208101905061310d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61314d826130f1565b61315781856130fb565b935061316781856020860161310b565b61317081613133565b840191505092915050565b5f6020820190508181035f8301526131938184613143565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6131cc826131a3565b9050919050565b6131dc816131c2565b81146131e6575f80fd5b50565b5f813590506131f7816131d3565b92915050565b5f819050919050565b61320f816131fd565b8114613219575f80fd5b50565b5f8135905061322a81613206565b92915050565b5f80604083850312156132465761324561319b565b5b5f613253858286016131e9565b92505060206132648582860161321c565b9150509250929050565b5f8115159050919050565b6132828161326e565b82525050565b5f60208201905061329b5f830184613279565b92915050565b5f602082840312156132b6576132b561319b565b5b5f6132c38482850161321c565b91505092915050565b6132d5816131fd565b82525050565b5f6020820190506132ee5f8301846132cc565b92915050565b5f805f6060848603121561330b5761330a61319b565b5b5f613318868287016131e9565b9350506020613329868287016131e9565b925050604061333a8682870161321c565b9150509250925092565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261336557613364613344565b5b8235905067ffffffffffffffff81111561338257613381613348565b5b60208301915083602082028301111561339e5761339d61334c565b5b9250929050565b6133ae8161326e565b81146133b8575f80fd5b50565b5f813590506133c9816133a5565b92915050565b5f805f604084860312156133e6576133e561319b565b5b5f84013567ffffffffffffffff8111156134035761340261319f565b5b61340f86828701613350565b93509350506020613422868287016133bb565b9150509250925092565b5f60ff82169050919050565b6134418161342c565b82525050565b5f60208201905061345a5f830184613438565b92915050565b5f80604083850312156134765761347561319b565b5b5f6134838582860161321c565b92505060206134948582860161321c565b9150509250929050565b5f602082840312156134b3576134b261319b565b5b5f6134c0848285016131e9565b91505092915050565b5f6134d3826131a3565b9050919050565b6134e3816134c9565b81146134ed575f80fd5b50565b5f813590506134fe816134da565b92915050565b5f602082840312156135195761351861319b565b5b5f613526848285016134f0565b91505092915050565b613538816131c2565b82525050565b5f6020820190506135515f83018461352f565b92915050565b5f806040838503121561356d5761356c61319b565b5b5f61357a858286016131e9565b925050602061358b858286016133bb565b9150509250929050565b5f80604083850312156135ab576135aa61319b565b5b5f6135b8858286016131e9565b92505060206135c9858286016131e9565b9150509250929050565b5f602082840312156135e8576135e761319b565b5b5f6135f5848285016133bb565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136326020836130fb565b915061363d826135fe565b602082019050919050565b5f6020820190508181035f83015261365f81613626565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61369d826131fd565b91506136a8836131fd565b92508282026136b6816131fd565b915082820484148315176136cd576136cc613666565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61370b826131fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361373d5761373c613666565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6137a26039836130fb565b91506137ad82613748565b604082019050919050565b5f6020820190508181035f8301526137cf81613796565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f61380a6017836130fb565b9150613815826137d6565b602082019050919050565b5f6020820190508181035f830152613837816137fe565b9050919050565b5f8151905061384c816131d3565b92915050565b5f602082840312156138675761386661319b565b5b5f6138748482850161383e565b91505092915050565b5f6040820190506138905f83018561352f565b61389d602083018461352f565b9392505050565b5f819050919050565b5f819050919050565b5f6138d06138cb6138c6846138a4565b6138ad565b6131fd565b9050919050565b6138e0816138b6565b82525050565b5f60c0820190506138f95f83018961352f565b61390660208301886132cc565b61391360408301876138d7565b61392060608301866138d7565b61392d608083018561352f565b61393a60a08301846132cc565b979650505050505050565b5f8151905061395381613206565b92915050565b5f805f606084860312156139705761396f61319b565b5b5f61397d86828701613945565b935050602061398e86828701613945565b925050604061399f86828701613945565b9150509250925092565b5f6040820190506139bc5f83018561352f565b6139c960208301846132cc565b9392505050565b5f815190506139de816133a5565b92915050565b5f602082840312156139f9576139f861319b565b5b5f613a06848285016139d0565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613a696024836130fb565b9150613a7482613a0f565b604082019050919050565b5f6020820190508181035f830152613a9681613a5d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613af76022836130fb565b9150613b0282613a9d565b604082019050919050565b5f6020820190508181035f830152613b2481613aeb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613b856025836130fb565b9150613b9082613b2b565b604082019050919050565b5f6020820190508181035f830152613bb281613b79565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613c136023836130fb565b9150613c1e82613bb9565b604082019050919050565b5f6020820190508181035f830152613c4081613c07565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613ca16029836130fb565b9150613cac82613c47565b604082019050919050565b5f6020820190508181035f830152613cce81613c95565b9050919050565b5f613cdf826131fd565b9150613cea836131fd565b9250828201905080821115613d0257613d01613666565b5b92915050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073695f8201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b5f613d626023836130fb565b9150613d6d82613d08565b604082019050919050565b5f6020820190508181035f830152613d8f81613d56565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642e00000000000000005f82015250565b5f613dca6018836130fb565b9150613dd582613d96565b602082019050919050565b5f6020820190508181035f830152613df781613dbe565b9050919050565b5f613e08826131fd565b9150613e13836131fd565b9250828203905081811115613e2b57613e2a613666565b5b92915050565b5f81905092915050565b50565b5f613e495f83613e31565b9150613e5482613e3b565b5f82019050919050565b5f613e6882613e3e565b9150819050919050565b5f604082019050613e855f830185613279565b613e926020830184613279565b9392505050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f613ef3602a836130fb565b9150613efe82613e99565b604082019050919050565b5f6020820190508181035f830152613f2081613ee7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613f86816131c2565b82525050565b5f613f978383613f7d565b60208301905092915050565b5f602082019050919050565b5f613fb982613f54565b613fc38185613f5e565b9350613fce83613f6e565b805f5b83811015613ffe578151613fe58882613f8c565b9750613ff083613fa3565b925050600181019050613fd1565b5085935050505092915050565b5f60a08201905061401e5f8301886132cc565b61402b60208301876138d7565b818103604083015261403d8186613faf565b905061404c606083018561352f565b61405960808301846132cc565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61409a826131fd565b91506140a5836131fd565b9250826140b5576140b4614063565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6140f4601b836130fb565b91506140ff826140c0565b602082019050919050565b5f6020820190508181035f830152614121816140e8565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141826021836130fb565b915061418d82614128565b604082019050919050565b5f6020820190508181035f8301526141af81614176565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203aebe44261c064e3b596fe0c9950d2fb9a1e3f92f8fb533171d05acab73158e164736f6c63430008140033

Deployed Bytecode

0x6080604052600436106101ba575f3560e01c8063715018a6116100eb578063c4081a4c11610089578063db92dbb611610063578063db92dbb6146105ad578063dd62ed3e146105d7578063de30aad114610613578063e1ab04c91461063b576101c1565b8063c4081a4c14610547578063c9567bf91461056f578063db8aeab114610585576101c1565b806395d89b41116100c557806395d89b41146104a35780639a7a23d6146104cd578063a9059cbb146104f5578063c3c8cd8014610531576101c1565b8063715018a61461043b57806372ac2486146104515780638da5cb5b14610479576101c1565b8063313ce567116101585780635d0044ca116101325780635d0044ca146103995780635d098b38146103c15780636fc3eaec146103e957806370a08231146103ff576101c1565b8063313ce5671461030b57806352f7c988146103355780635342acb41461035d576101c1565b806318160ddd1161019457806318160ddd1461025357806323b872dd1461027d57806327f3a72a146102b957806328875c16146102e3576101c1565b806306fdde03146101c5578063095ea7b3146101ef57806312dfbd331461022b576101c1565b366101c157005b5f80fd5b3480156101d0575f80fd5b506101d9610677565b6040516101e6919061317b565b60405180910390f35b3480156101fa575f80fd5b5061021560048036038101906102109190613230565b6106b4565b6040516102229190613288565b60405180910390f35b348015610236575f80fd5b50610251600480360381019061024c91906132a1565b6106d1565b005b34801561025e575f80fd5b5061026761077e565b60405161027491906132db565b60405180910390f35b348015610288575f80fd5b506102a3600480360381019061029e91906132f4565b61078e565b6040516102b09190613288565b60405180910390f35b3480156102c4575f80fd5b506102cd610862565b6040516102da91906132db565b60405180910390f35b3480156102ee575f80fd5b50610309600480360381019061030491906133cf565b610871565b005b348015610316575f80fd5b5061031f6109a6565b60405161032c9190613447565b60405180910390f35b348015610340575f80fd5b5061035b60048036038101906103569190613460565b6109ae565b005b348015610368575f80fd5b50610383600480360381019061037e919061349e565b610a54565b6040516103909190613288565b60405180910390f35b3480156103a4575f80fd5b506103bf60048036038101906103ba91906132a1565b610aa6565b005b3480156103cc575f80fd5b506103e760048036038101906103e29190613504565b610b53565b005b3480156103f4575f80fd5b506103fd610cf4565b005b34801561040a575f80fd5b506104256004803603810190610420919061349e565b610d98565b60405161043291906132db565b60405180910390f35b348015610446575f80fd5b5061044f610de6565b005b34801561045c575f80fd5b5061047760048036038101906104729190613504565b610f34565b005b348015610484575f80fd5b5061048d6110d5565b60405161049a919061353e565b60405180910390f35b3480156104ae575f80fd5b506104b76110fc565b6040516104c4919061317b565b60405180910390f35b3480156104d8575f80fd5b506104f360048036038101906104ee9190613557565b611139565b005b348015610500575f80fd5b5061051b60048036038101906105169190613230565b61126a565b6040516105289190613288565b60405180910390f35b34801561053c575f80fd5b50610545611287565b005b348015610552575f80fd5b5061056d600480360381019061056891906132a1565b611333565b005b34801561057a575f80fd5b506105836113d1565b005b348015610590575f80fd5b506105ab60048036038101906105a691906133cf565b6118fe565b005b3480156105b8575f80fd5b506105c1611a33565b6040516105ce91906132db565b60405180910390f35b3480156105e2575f80fd5b506105fd60048036038101906105f89190613595565b611a63565b60405161060a91906132db565b60405180910390f35b34801561061e575f80fd5b50610639600480360381019061063491906135d3565b611ae5565b005b348015610646575f80fd5b50610661600480360381019061065c919061349e565b611b95565b60405161066e9190613288565b60405180910390f35b60606040518060400160405280600581526020017f576f6a616b000000000000000000000000000000000000000000000000000000815250905090565b5f6106c76106c0611be7565b8484611bee565b6001905092915050565b6106d9611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075c90613648565b60405180910390fd5b633b9aca00816107759190613693565b60048190555050565b5f683635c9adc5dea00000905090565b5f61079a848484611db1565b610857846107a6611be7565b610852856040518060600160405280602881526020016141b76028913960075f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610809611be7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546124d79092919063ffffffff16565b611bee565b600190509392505050565b5f61086c30610d98565b905090565b610879611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fc90613648565b60405180910390fd5b5f5b838390508110156109a0578160085f868685818110610929576109286136d4565b5b905060200201602081019061093e919061349e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808061099890613701565b915050610907565b50505050565b5f6009905090565b6109b6611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3990613648565b60405180910390fd5b81600e8190555080600f819055505050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610aae611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3190613648565b60405180910390fd5b633b9aca0081610b4a9190613693565b600d8190555050565b610b5b611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bde90613648565b60405180910390fd5b5f60085f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b610cfc611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90613648565b60405180910390fd5b5f479050610d9581612539565b50565b5f610ddf60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126af565b9050919050565b610dee611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7190613648565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610f3c611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90613648565b60405180910390fd5b5f60085f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f574f4a414b000000000000000000000000000000000000000000000000000000815250905090565b611141611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490613648565b60405180910390fd5b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361125c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611253906137b8565b60405180910390fd5b611266828261271b565b5050565b5f61127d611276611be7565b8484611db1565b6001905092915050565b61128f611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290613648565b60405180910390fd5b5f61132530610d98565b905061133081612773565b50565b61133b611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be90613648565b60405180910390fd5b80600b8190555050565b6113d9611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c90613648565b60405180910390fd5b601560149054906101000a900460ff16156114b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ac90613820565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508060145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506115423060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16683635c9adc5dea00000611bee565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115af9190613852565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611614573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116389190613852565b6040518363ffffffff1660e01b815260040161165592919061387d565b6020604051808303815f875af1158015611671573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116959190613852565b60155f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061171c30610d98565b5f806117266110d5565b426040518863ffffffff1660e01b8152600401611748969594939291906138e6565b60606040518083038185885af1158015611764573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906117899190613959565b50505060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016118299291906139a9565b6020604051808303815f875af1158015611845573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061186991906139e4565b506001601560146101000a81548160ff021916908315150217905550600160165f60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b611906611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611992576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198990613648565b60405180910390fd5b5f5b83839050811015611a2d578160095f8686858181106119b6576119b56136d4565b5b90506020020160208101906119cb919061349e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080611a2590613701565b915050611994565b50505050565b5f611a5e60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d98565b905090565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611aed611be7565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090613648565b60405180910390fd5b806015806101000a81548160ff02191690831515021790555050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5390613a7f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc190613b0d565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611da491906132db565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690613b9b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8490613c29565b60405180910390fd5b5f8111611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690613cb7565b60405180910390fd5b611ed76110d5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f455750611f156110d5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561237557600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611fe85750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b611ff0575f80fd5b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612094575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156120a257505f600d5414155b1561210057600d54816120b484610d98565b6120be9190613cd5565b11156120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f690613d78565b60405180910390fd5b5b60155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156121a9575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121fc575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561225a57601560149054906101000a900460ff16612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224790613de0565b60405180910390fd5b600e54600c819055505b5f61226430610d98565b9050601560169054906101000a900460ff161580156122d0575060155f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156122e85750601560149054906101000a900460ff165b1561237357600f54600c8190555060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612372576004548111156123715760158054906101000a900460ff166123675760045490505b612370816129de565b5b5b5b505b5f6001905060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612415575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561241e575f90505b60165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156124bc575060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124c5575f90505b6124d184848484612a01565b50505050565b5f83831115829061251e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612515919061317b565b60405180910390fd5b505f838561252c9190613dfe565b9050809150509392505050565b5f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612586600284612a2e90919063ffffffff16565b60405161259290613e5e565b5f6040518083038185875af1925050503d805f81146125cc576040519150601f19603f3d011682016040523d82523d5f602084013e6125d1565b606091505b505090505f60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612622600285612a2e90919063ffffffff16565b60405161262e90613e5e565b5f6040518083038185875af1925050503d805f8114612668576040519150601f19603f3d011682016040523d82523d5f602084013e61266d565b606091505b505090507fc45e9b3ac19bf635feaed560109cb8931031fbbc86809d50d65d41a2cf2fe8b982826040516126a2929190613e72565b60405180910390a1505050565b5f6002548211156126f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ec90613f09565b60405180910390fd5b5f6126fe612a77565b90506127138184612a2e90919063ffffffff16565b915050919050565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6001601560166101000a81548160ff0219169083151502179055505f600267ffffffffffffffff8111156127aa576127a9613f27565b5b6040519080825280602002602001820160405280156127d85781602001602082028036833780820191505090505b50905030815f815181106127ef576127ee6136d4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612893573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b79190613852565b816001815181106128cb576128ca6136d4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129313060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bee565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161299395949392919061400b565b5f604051808303815f87803b1580156129aa575f80fd5b505af11580156129bc573d5f803e3d5ffd5b50505050505f601560166101000a81548160ff02191690831515021790555050565b6129e781612773565b5f4790505f8111156129fd576129fc47612539565b5b5050565b80612a0f57612a0e612aa0565b5b612a1a848484612ad9565b80612a2857612a27612c99565b5b50505050565b5f612a6f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612cad565b905092915050565b5f805f612a82612d0e565b91509150612a998183612a2e90919063ffffffff16565b9250505090565b5f600b54148015612ab257505f600c54145b612ad757600b54601081905550600c546011819055505f600b819055505f600c819055505b565b5f805f805f80612ae887612d6d565b955095509550955095509550612b448660055f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612dcd90919063ffffffff16565b60055f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612bd58560055f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e1690919063ffffffff16565b60055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612c1f81612e73565b612c298483612f2a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612c8691906132db565b60405180910390a3505050505050505050565b601054600b81905550601154600c81905550565b5f8083118290612cf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cea919061317b565b60405180910390fd5b505f8385612d019190614090565b9050809150509392505050565b5f805f60025490505f683635c9adc5dea000009050612d41683635c9adc5dea00000600254612a2e90919063ffffffff16565b821015612d6057600254683635c9adc5dea00000935093505050612d69565b81819350935050505b9091565b5f805f805f805f805f612d858a600b54600c54612f64565b9250925092505f612d94612a77565b90505f805f612da58e878787612ff6565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b5f612e0e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124d7565b905092915050565b5f808284612e249190613cd5565b905083811015612e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e609061410a565b60405180910390fd5b8091505092915050565b5f612e7c612a77565b90505f612e92828461307a90919063ffffffff16565b9050612ee48160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612e1690919063ffffffff16565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505050565b612f3f82600254612dcd90919063ffffffff16565b600281905550612f5a81600354612e1690919063ffffffff16565b6003819055505050565b5f805f80612f8e6064612f80888a61307a90919063ffffffff16565b612a2e90919063ffffffff16565b90505f612fb76064612fa9888b61307a90919063ffffffff16565b612a2e90919063ffffffff16565b90505f612fdf82612fd1858c612dcd90919063ffffffff16565b612dcd90919063ffffffff16565b905080838395509550955050505093509350939050565b5f805f8061300d858961307a90919063ffffffff16565b90505f613023868961307a90919063ffffffff16565b90505f613039878961307a90919063ffffffff16565b90505f613061826130538587612dcd90919063ffffffff16565b612dcd90919063ffffffff16565b9050838184965096509650505050509450945094915050565b5f80830361308a575f90506130eb565b5f82846130979190613693565b90508284826130a69190614090565b146130e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130dd90614198565b60405180910390fd5b809150505b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561312857808201518184015260208101905061310d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61314d826130f1565b61315781856130fb565b935061316781856020860161310b565b61317081613133565b840191505092915050565b5f6020820190508181035f8301526131938184613143565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6131cc826131a3565b9050919050565b6131dc816131c2565b81146131e6575f80fd5b50565b5f813590506131f7816131d3565b92915050565b5f819050919050565b61320f816131fd565b8114613219575f80fd5b50565b5f8135905061322a81613206565b92915050565b5f80604083850312156132465761324561319b565b5b5f613253858286016131e9565b92505060206132648582860161321c565b9150509250929050565b5f8115159050919050565b6132828161326e565b82525050565b5f60208201905061329b5f830184613279565b92915050565b5f602082840312156132b6576132b561319b565b5b5f6132c38482850161321c565b91505092915050565b6132d5816131fd565b82525050565b5f6020820190506132ee5f8301846132cc565b92915050565b5f805f6060848603121561330b5761330a61319b565b5b5f613318868287016131e9565b9350506020613329868287016131e9565b925050604061333a8682870161321c565b9150509250925092565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261336557613364613344565b5b8235905067ffffffffffffffff81111561338257613381613348565b5b60208301915083602082028301111561339e5761339d61334c565b5b9250929050565b6133ae8161326e565b81146133b8575f80fd5b50565b5f813590506133c9816133a5565b92915050565b5f805f604084860312156133e6576133e561319b565b5b5f84013567ffffffffffffffff8111156134035761340261319f565b5b61340f86828701613350565b93509350506020613422868287016133bb565b9150509250925092565b5f60ff82169050919050565b6134418161342c565b82525050565b5f60208201905061345a5f830184613438565b92915050565b5f80604083850312156134765761347561319b565b5b5f6134838582860161321c565b92505060206134948582860161321c565b9150509250929050565b5f602082840312156134b3576134b261319b565b5b5f6134c0848285016131e9565b91505092915050565b5f6134d3826131a3565b9050919050565b6134e3816134c9565b81146134ed575f80fd5b50565b5f813590506134fe816134da565b92915050565b5f602082840312156135195761351861319b565b5b5f613526848285016134f0565b91505092915050565b613538816131c2565b82525050565b5f6020820190506135515f83018461352f565b92915050565b5f806040838503121561356d5761356c61319b565b5b5f61357a858286016131e9565b925050602061358b858286016133bb565b9150509250929050565b5f80604083850312156135ab576135aa61319b565b5b5f6135b8858286016131e9565b92505060206135c9858286016131e9565b9150509250929050565b5f602082840312156135e8576135e761319b565b5b5f6135f5848285016133bb565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136326020836130fb565b915061363d826135fe565b602082019050919050565b5f6020820190508181035f83015261365f81613626565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61369d826131fd565b91506136a8836131fd565b92508282026136b6816131fd565b915082820484148315176136cd576136cc613666565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61370b826131fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361373d5761373c613666565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6137a26039836130fb565b91506137ad82613748565b604082019050919050565b5f6020820190508181035f8301526137cf81613796565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f61380a6017836130fb565b9150613815826137d6565b602082019050919050565b5f6020820190508181035f830152613837816137fe565b9050919050565b5f8151905061384c816131d3565b92915050565b5f602082840312156138675761386661319b565b5b5f6138748482850161383e565b91505092915050565b5f6040820190506138905f83018561352f565b61389d602083018461352f565b9392505050565b5f819050919050565b5f819050919050565b5f6138d06138cb6138c6846138a4565b6138ad565b6131fd565b9050919050565b6138e0816138b6565b82525050565b5f60c0820190506138f95f83018961352f565b61390660208301886132cc565b61391360408301876138d7565b61392060608301866138d7565b61392d608083018561352f565b61393a60a08301846132cc565b979650505050505050565b5f8151905061395381613206565b92915050565b5f805f606084860312156139705761396f61319b565b5b5f61397d86828701613945565b935050602061398e86828701613945565b925050604061399f86828701613945565b9150509250925092565b5f6040820190506139bc5f83018561352f565b6139c960208301846132cc565b9392505050565b5f815190506139de816133a5565b92915050565b5f602082840312156139f9576139f861319b565b5b5f613a06848285016139d0565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613a696024836130fb565b9150613a7482613a0f565b604082019050919050565b5f6020820190508181035f830152613a9681613a5d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613af76022836130fb565b9150613b0282613a9d565b604082019050919050565b5f6020820190508181035f830152613b2481613aeb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613b856025836130fb565b9150613b9082613b2b565b604082019050919050565b5f6020820190508181035f830152613bb281613b79565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613c136023836130fb565b9150613c1e82613bb9565b604082019050919050565b5f6020820190508181035f830152613c4081613c07565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613ca16029836130fb565b9150613cac82613c47565b604082019050919050565b5f6020820190508181035f830152613cce81613c95565b9050919050565b5f613cdf826131fd565b9150613cea836131fd565b9250828201905080821115613d0257613d01613666565b5b92915050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c65742073695f8201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b5f613d626023836130fb565b9150613d6d82613d08565b604082019050919050565b5f6020820190508181035f830152613d8f81613d56565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642e00000000000000005f82015250565b5f613dca6018836130fb565b9150613dd582613d96565b602082019050919050565b5f6020820190508181035f830152613df781613dbe565b9050919050565b5f613e08826131fd565b9150613e13836131fd565b9250828203905081811115613e2b57613e2a613666565b5b92915050565b5f81905092915050565b50565b5f613e495f83613e31565b9150613e5482613e3b565b5f82019050919050565b5f613e6882613e3e565b9150819050919050565b5f604082019050613e855f830185613279565b613e926020830184613279565b9392505050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f613ef3602a836130fb565b9150613efe82613e99565b604082019050919050565b5f6020820190508181035f830152613f2081613ee7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613f86816131c2565b82525050565b5f613f978383613f7d565b60208301905092915050565b5f602082019050919050565b5f613fb982613f54565b613fc38185613f5e565b9350613fce83613f6e565b805f5b83811015613ffe578151613fe58882613f8c565b9750613ff083613fa3565b925050600181019050613fd1565b5085935050505092915050565b5f60a08201905061401e5f8301886132cc565b61402b60208301876138d7565b818103604083015261403d8186613faf565b905061404c606083018561352f565b61405960808301846132cc565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61409a826131fd565b91506140a5836131fd565b9250826140b5576140b4614063565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6140f4601b836130fb565b91506140ff826140c0565b602082019050919050565b5f6020820190508181035f830152614121816140e8565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6141826021836130fb565b915061418d82614128565b604082019050919050565b5f6020820190508181035f8301526141af81614176565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212203aebe44261c064e3b596fe0c9950d2fb9a1e3f92f8fb533171d05acab73158e164736f6c63430008140033

Deployed Bytecode Sourcemap

14026:14277:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16389:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26404:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24828:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27862:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27093:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25500:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23933:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27771:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24605:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24135:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24970:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23701:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25339:153;;;;;;;;;;;;;:::i;:::-;;26107:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13107:148;;;;;;;;;;;;;:::i;:::-;;23451:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12893:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27676:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25717:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26918:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25173:154;;;;;;;;;;;;;:::i;:::-;;24733:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22676:767;;;;;;;;;;;;;:::i;:::-;;24257:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25608:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26253:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25079:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24475:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16389:83;16426:13;16459:5;;;;;;;;;;;;;;;;;16452:12;;16389:83;:::o;26404:161::-;26479:4;26496:39;26505:12;:10;:12::i;:::-;26519:7;26528:6;26496:8;:39::i;:::-;26553:4;26546:11;;26404:161;;;;:::o;24828:134::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24949:5:::1;24938:8;:16;;;;:::i;:::-;24912:23;:42;;;;24828:134:::0;:::o;27862:95::-;27915:7;14332:12;27935:14;;27862:95;:::o;27093:313::-;27191:4;27208:36;27218:6;27226:9;27237:6;27208:9;:36::i;:::-;27255:121;27264:6;27272:12;:10;:12::i;:::-;27286:89;27324:6;27286:89;;;;;;;;;;;;;;;;;:11;:19;27298:6;27286:19;;;;;;;;;;;;;;;:33;27306:12;:10;:12::i;:::-;27286:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;27255:8;:121::i;:::-;27394:4;27387:11;;27093:313;;;;;:::o;25500:100::-;25544:4;25568:24;25586:4;25568:9;:24::i;:::-;25561:31;;25500:100;:::o;23933:194::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24026:6:::1;24021:99;24042:3;;:10;;24038:1;:14;24021:99;;;24103:5;24074:18;:26;24093:3;;24097:1;24093:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24074:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;24054:3;;;;;:::i;:::-;;;;24021:99;;;;23933:194:::0;;;:::o;27771:83::-;27812:5;14240:1;27830:16;;27771:83;:::o;24605:120::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24688:3:::1;24678:7;:13;;;;24713:4;24702:8;:15;;;;24605:120:::0;;:::o;24135:114::-;24195:4;24219:18;:22;24238:2;24219:22;;;;;;;;;;;;;;;;;;;;;;;;;24212:29;;24135:114;;;:::o;24970:101::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25058:5:::1;25052:3;:11;;;;:::i;:::-;25035:14;:28;;;;24970:101:::0;:::o;23701:224::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23826:5:::1;23787:18;:36;23806:16;;;;;;;;;;;23787:36;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;23861:9;23842:16;;:28;;;;;;;;;;;;;;;;;;23913:4;23881:18;:29;23900:9;23881:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;23701:224:::0;:::o;25339:153::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25391:26:::1;25420:21;25391:50;;25452:32;25465:18;25452:12;:32::i;:::-;25380:112;25339:153::o:0;26107:138::-;26173:7;26200:37;26220:7;:16;26228:7;26220:16;;;;;;;;;;;;;;;;26200:19;:37::i;:::-;26193:44;;26107:138;;;:::o;13107:148::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13214:1:::1;13177:40;;13198:6;::::0;::::1;;;;;;;;13177:40;;;;;;;;;;;;13245:1;13228:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;13107:148::o:0;23451:238::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23584:5:::1;23543:18;:38;23562:18;;;;;;;;;;;23543:38;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;23621:11;23600:18;;:32;;;;;;;;;;;;;;;;;;23677:4;23643:18;:31;23662:11;23643:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;23451:238:::0;:::o;12893:79::-;12931:7;12958:6;;;;;;;;;;;12951:13;;12893:79;:::o;27676:87::-;27715:13;27748:7;;;;;;;;;;;;;;;;;27741:14;;27676:87;:::o;25717:244::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25826:13:::1;;;;;;;;;;;25818:21;;:4;:21;;::::0;25810:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25912:41;25941:4;25947:5;25912:28;:41::i;:::-;25717:244:::0;;:::o;26918:167::-;26996:4;27013:42;27023:12;:10;:12::i;:::-;27037:9;27048:6;27013:9;:42::i;:::-;27073:4;27066:11;;26918:167;;;;:::o;25173:154::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25225:23:::1;25251:24;25269:4;25251:9;:24::i;:::-;25225:50;;25286:33;25303:15;25286:16;:33::i;:::-;25214:113;25173:154::o:0;24733:83::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24805:3:::1;24795:7;:13;;;;24733:83:::0;:::o;22676:767::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22740:11:::1;;;;;;;;;;;22739:12;22731:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;22789:35;22846:42;22789:100;;22918:16;22900:15;;:34;;;;;;;;;;;;;;;;;;22945:58;22962:4;22977:15;;;;;;;;;;;14332:12;22945:8;:58::i;:::-;23048:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23030:56;;;23095:4;23102:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23030:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23014:13;;:112;;;;;;;;;;;;;;;;;;23137:15;;;;;;;;;;;:31;;;23176:21;23207:4;23213:24;23231:4;23213:9;:24::i;:::-;23238:1;23240::::0;23242:7:::1;:5;:7::i;:::-;23250:15;23137:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;23284:13;;;;;;;;;;;23277:29;;;23315:15;;;;;;;;;;;23333:14;23277:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23373:4;23359:11;;:18;;;;;;;;;;;;;;;;;;23431:4;23388:25;:40;23414:13;;;;;;;;;;;23388:40;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;22720:723;22676:767::o:0;24257:206::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24356:6:::1;24351:105;24372:3;;:10;;24368:1;:14;24351:105;;;24439:5;24404:24;:32;24429:3;;24433:1;24429:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24404:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;24384:3;;;;;:::i;:::-;;;;24351:105;;;;24257:206:::0;;;:::o;25608:101::-;25653:4;25677:24;25687:13;;;;;;;;;;;25677:9;:24::i;:::-;25670:31;;25608:101;:::o;26253:143::-;26334:7;26361:11;:18;26373:5;26361:18;;;;;;;;;;;;;;;:27;26380:7;26361:27;;;;;;;;;;;;;;;;26354:34;;26253:143;;;;:::o;25079:86::-;13030:12;:10;:12::i;:::-;13020:22;;:6;;;;;;;;;;:22;;;13012:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25152:5:::1;25141:8;::::0;:16:::1;;;;;;;;;;;;;;;;;;25079:86:::0;:::o;24475:122::-;24537:4;24561:24;:28;24586:2;24561:28;;;;;;;;;;;;;;;;;;;;;;;;;24554:35;;24475:122;;;:::o;12433:98::-;12486:7;12513:10;12506:17;;12433:98;:::o;27965:335::-;28075:1;28058:19;;:5;:19;;;28050:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28156:1;28137:21;;:7;:21;;;28129:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28238:6;28208:11;:18;28220:5;28208:18;;;;;;;;;;;;;;;:27;28227:7;28208:27;;;;;;;;;;;;;;;:36;;;;28276:7;28260:32;;28269:5;28260:32;;;28285:6;28260:32;;;;;;:::i;:::-;;;;;;;;27965:335;;;:::o;16484:1787::-;16588:1;16572:18;;:4;:18;;;16564:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16665:1;16651:16;;:2;:16;;;16643:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16735:1;16726:6;:10;16718:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16806:7;:5;:7::i;:::-;16798:15;;:4;:15;;;;:32;;;;;16823:7;:5;:7::i;:::-;16817:13;;:2;:13;;;;16798:32;16795:1146;;;16870:5;:11;16876:4;16870:11;;;;;;;;;;;;;;;;;;;;;;;;;16869:12;:26;;;;;16886:5;:9;16892:2;16886:9;;;;;;;;;;;;;;;;;;;;;;;;;16885:10;16869:26;16861:35;;;;;;16922:13;;;;;;;;;;;16916:19;;:2;:19;;;;:52;;;;;16940:24;:28;16965:2;16940:28;;;;;;;;;;;;;;;;;;;;;;;;;16939:29;16916:52;:75;;;;;16990:1;16972:14;;:19;;16916:75;16913:212;;;17055:14;;17045:6;17020:22;17038:2;17020:9;:22::i;:::-;:31;;;;:::i;:::-;:49;;17012:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;16913:212;17164:13;;;;;;;;;;;17156:21;;:4;:21;;;:55;;;;;17195:15;;;;;;;;;;;17181:30;;:2;:30;;;;17156:55;:82;;;;;17216:18;:22;17235:2;17216:22;;;;;;;;;;;;;;;;;;;;;;;;;17215:23;17156:82;17153:207;;;17267:11;;;;;;;;;;;17259:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;17337:7;;17326:8;:18;;;;17153:207;17374:28;17405:24;17423:4;17405:9;:24::i;:::-;17374:55;;17450:6;;;;;;;;;;;17449:7;:32;;;;;17468:13;;;;;;;;;;;17460:21;;:4;:21;;;;17449:32;:47;;;;;17485:11;;;;;;;;;;;17449:47;17446:484;;;17530:8;;17519;:19;;;;17563:25;:29;17589:2;17563:29;;;;;;;;;;;;;;;;;;;;;;;;;17559:354;;;17643:23;;17620:20;:46;17617:277;;;17699:8;;;;;;;;;;17695:119;;17763:23;;17740:46;;17695:119;17840:30;17849:20;17840:8;:30::i;:::-;17617:277;17559:354;17446:484;16832:1109;16795:1146;17951:12;17966:4;17951:19;;17986:18;:24;18005:4;17986:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;18014:18;:22;18033:2;18014:22;;;;;;;;;;;;;;;;;;;;;;;;;17986:50;17983:97;;;18063:5;18053:15;;17983:97;18096:25;:31;18122:4;18096:31;;;;;;;;;;;;;;;;;;;;;;;;;18095:32;:66;;;;;18132:25;:29;18158:2;18132:29;;;;;;;;;;;;;;;;;;;;;;;;;18131:30;18095:66;18092:113;;;18188:5;18178:15;;18092:113;18225:38;18240:4;18245:2;18248:6;18255:7;18225:14;:38::i;:::-;16553:1718;16484:1787;;;:::o;8843:192::-;8929:7;8962:1;8957;:6;;8965:12;8949:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8989:9;9005:1;9001;:5;;;;:::i;:::-;8989:17;;9026:1;9019:8;;;8843:192;;;;;:::o;19525:266::-;19583:16;19605:18;;;;;;;;;;;:23;;19636:13;19647:1;19636:6;:10;;:13;;;;:::i;:::-;19605:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19582:72;;;19666:14;19686:16;;;;;;;;;;;:21;;19715:13;19726:1;19715:6;:10;;:13;;;;:::i;:::-;19686:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19665:68;;;19751:32;19760:11;19773:9;19751:32;;;;;;;:::i;:::-;;;;;;;;19571:220;;19525:266;:::o;27414:254::-;27481:7;27520;;27509;:18;;27501:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27585:19;27608:10;:8;:10::i;:::-;27585:33;;27636:24;27648:11;27636:7;:11;;:24;;;;:::i;:::-;27629:31;;;27414:254;;;:::o;25969:130::-;26086:5;26052:25;:31;26078:4;26052:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25969:130;;:::o;19026:483::-;15584:4;15575:6;;:13;;;;;;;;;;;;;;;;;;19104:21:::1;19142:1;19128:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19104:40;;19173:4;19155;19160:1;19155:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;19199:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19189:4;19194:1;19189:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;19232:62;19249:4;19264:15;;;;;;;;;;;19282:11;19232:8;:62::i;:::-;19305:15;;;;;;;;;;;:66;;;19386:11;19412:1;19428:4;19455;19475:15;19305:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19093:416;15620:5:::0;15611:6;;:14;;;;;;;;;;;;;;;;;;19026:483;:::o;18733:285::-;18810:38;18827:20;18810:16;:38::i;:::-;18861:26;18890:21;18861:50;;18946:1;18925:18;:22;18922:89;;;18964:35;18977:21;18964:12;:35::i;:::-;18922:89;18789:229;18733:285;:::o;19803:263::-;19915:7;19911:40;;19937:14;:12;:14::i;:::-;19911:40;19962:44;19980:6;19988:9;19999:6;19962:17;:44::i;:::-;20021:7;20017:41;;20043:15;:13;:15::i;:::-;20017:41;19803:263;;;;:::o;10241:132::-;10299:7;10326:39;10330:1;10333;10326:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10319:46;;10241:132;;;;:::o;21407:163::-;21448:7;21469:15;21486;21505:19;:17;:19::i;:::-;21468:56;;;;21542:20;21554:7;21542;:11;;:20;;;;:::i;:::-;21535:27;;;;21407:163;:::o;26573:210::-;26630:1;26619:7;;:12;:29;;;;;26647:1;26635:8;;:13;26619:29;26650:7;26616:41;26685:7;;26667:15;:25;;;;26722:8;;26703:16;:27;;;;26751:1;26741:7;:11;;;;26774:1;26763:8;:12;;;;26573:210;:::o;20074:490::-;20173:15;20190:23;20215:12;20229:23;20254:12;20268:13;20285:19;20296:7;20285:10;:19::i;:::-;20172:132;;;;;;;;;;;;20333:28;20353:7;20333;:15;20341:6;20333:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20315:7;:15;20323:6;20315:15;;;;;;;;;;;;;;;:46;;;;20393:39;20416:15;20393:7;:18;20401:9;20393:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;20372:7;:18;20380:9;20372:18;;;;;;;;;;;;;;;:60;;;;20446:16;20456:5;20446:9;:16::i;:::-;20473:23;20485:4;20491;20473:11;:23::i;:::-;20529:9;20512:44;;20521:6;20512:44;;;20540:15;20512:44;;;;;;:::i;:::-;;;;;;;;20161:403;;;;;;20074:490;;;:::o;26795:115::-;26849:15;;26839:7;:25;;;;26886:16;;26875:8;:27;;;;26795:115::o;10869:278::-;10955:7;10987:1;10983;:5;10990:12;10975:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11014:9;11030:1;11026;:5;;;;:::i;:::-;11014:17;;11138:1;11131:8;;;10869:278;;;;;:::o;21578:255::-;21628:7;21637;21657:15;21675:7;;21657:25;;21693:15;14332:12;21693:25;;21742:20;14332:12;21742:7;;:11;;:20;;;;:::i;:::-;21732:7;:30;21729:60;;;21772:7;;14332:12;21764:25;;;;;;;;21729:60;21808:7;21817;21800:25;;;;;;21578:255;;;:::o;20572:468::-;20631:7;20640;20649;20658;20667;20676;20697:23;20722:12;20736:13;20753:39;20765:7;20774;;20783:8;;20753:11;:39::i;:::-;20696:96;;;;;;20803:19;20826:10;:8;:10::i;:::-;20803:33;;20848:15;20865:23;20890:12;20906:46;20918:7;20927:4;20933:5;20940:11;20906;:46::i;:::-;20847:105;;;;;;20971:7;20980:15;20997:4;21003:15;21020:4;21026:5;20963:69;;;;;;;;;;;;;;;;;;;20572:468;;;;;;;:::o;8404:136::-;8462:7;8489:43;8493:1;8496;8489:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8482:50;;8404:136;;;;:::o;7940:181::-;7998:7;8018:9;8034:1;8030;:5;;;;:::i;:::-;8018:17;;8059:1;8054;:6;;8046:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8112:1;8105:8;;;7940:181;;;;:::o;22258:214::-;22311:19;22334:10;:8;:10::i;:::-;22311:33;;22355:13;22371:22;22381:11;22371:5;:9;;:22;;;;:::i;:::-;22355:38;;22431:33;22458:5;22431:7;:22;22447:4;22431:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;22406:7;:22;22422:4;22406:22;;;;;;;;;;;;;;;:58;;;;22300:172;;22258:214;:::o;22480:147::-;22558:17;22570:4;22558:7;;:11;;:17;;;;:::i;:::-;22548:7;:27;;;;22599:20;22614:4;22599:10;;:14;;:20;;;;:::i;:::-;22586:10;:33;;;;22480:147;;:::o;21048:351::-;21141:7;21150;21159;21179:12;21194:28;21218:3;21194:19;21206:6;21194:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;21179:43;;21233:13;21249:29;21274:3;21249:20;21261:7;21249;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;21233:45;;21289:23;21315:28;21337:5;21315:17;21327:4;21315:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;21289:54;;21362:15;21379:4;21385:5;21354:37;;;;;;;;;21048:351;;;;;;;:::o;21841:409::-;21951:7;21960;21969;21989:15;22007:24;22019:11;22007:7;:11;;:24;;;;:::i;:::-;21989:42;;22042:12;22057:21;22066:11;22057:4;:8;;:21;;;;:::i;:::-;22042:36;;22089:13;22105:22;22115:11;22105:5;:9;;:22;;;;:::i;:::-;22089:38;;22138:23;22164:28;22186:5;22164:17;22176:4;22164:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;22138:54;;22211:7;22220:15;22237:4;22203:39;;;;;;;;;;21841:409;;;;;;;;:::o;9294:471::-;9352:7;9602:1;9597;:6;9593:47;;9627:1;9620:8;;;;9593:47;9652:9;9668:1;9664;:5;;;;:::i;:::-;9652:17;;9697:1;9692;9688;:5;;;;:::i;:::-;:10;9680:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9756:1;9749:8;;;9294:471;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:117::-;4867:1;4864;4857:12;4881:117;4990:1;4987;4980:12;5004:117;5113:1;5110;5103:12;5144:568;5217:8;5227:6;5277:3;5270:4;5262:6;5258:17;5254:27;5244:122;;5285:79;;:::i;:::-;5244:122;5398:6;5385:20;5375:30;;5428:18;5420:6;5417:30;5414:117;;;5450:79;;:::i;:::-;5414:117;5564:4;5556:6;5552:17;5540:29;;5618:3;5610:4;5602:6;5598:17;5588:8;5584:32;5581:41;5578:128;;;5625:79;;:::i;:::-;5578:128;5144:568;;;;;:::o;5718:116::-;5788:21;5803:5;5788:21;:::i;:::-;5781:5;5778:32;5768:60;;5824:1;5821;5814:12;5768:60;5718:116;:::o;5840:133::-;5883:5;5921:6;5908:20;5899:29;;5937:30;5961:5;5937:30;:::i;:::-;5840:133;;;;:::o;5979:698::-;6071:6;6079;6087;6136:2;6124:9;6115:7;6111:23;6107:32;6104:119;;;6142:79;;:::i;:::-;6104:119;6290:1;6279:9;6275:17;6262:31;6320:18;6312:6;6309:30;6306:117;;;6342:79;;:::i;:::-;6306:117;6455:80;6527:7;6518:6;6507:9;6503:22;6455:80;:::i;:::-;6437:98;;;;6233:312;6584:2;6610:50;6652:7;6643:6;6632:9;6628:22;6610:50;:::i;:::-;6600:60;;6555:115;5979:698;;;;;:::o;6683:86::-;6718:7;6758:4;6751:5;6747:16;6736:27;;6683:86;;;:::o;6775:112::-;6858:22;6874:5;6858:22;:::i;:::-;6853:3;6846:35;6775:112;;:::o;6893:214::-;6982:4;7020:2;7009:9;7005:18;6997:26;;7033:67;7097:1;7086:9;7082:17;7073:6;7033:67;:::i;:::-;6893:214;;;;:::o;7113:474::-;7181:6;7189;7238:2;7226:9;7217:7;7213:23;7209:32;7206:119;;;7244:79;;:::i;:::-;7206:119;7364:1;7389:53;7434:7;7425:6;7414:9;7410:22;7389:53;:::i;:::-;7379:63;;7335:117;7491:2;7517:53;7562:7;7553:6;7542:9;7538:22;7517:53;:::i;:::-;7507:63;;7462:118;7113:474;;;;;:::o;7593:329::-;7652:6;7701:2;7689:9;7680:7;7676:23;7672:32;7669:119;;;7707:79;;:::i;:::-;7669:119;7827:1;7852:53;7897:7;7888:6;7877:9;7873:22;7852:53;:::i;:::-;7842:63;;7798:117;7593:329;;;;:::o;7928:104::-;7973:7;8002:24;8020:5;8002:24;:::i;:::-;7991:35;;7928:104;;;:::o;8038:138::-;8119:32;8145:5;8119:32;:::i;:::-;8112:5;8109:43;8099:71;;8166:1;8163;8156:12;8099:71;8038:138;:::o;8182:155::-;8236:5;8274:6;8261:20;8252:29;;8290:41;8325:5;8290:41;:::i;:::-;8182:155;;;;:::o;8343:345::-;8410:6;8459:2;8447:9;8438:7;8434:23;8430:32;8427:119;;;8465:79;;:::i;:::-;8427:119;8585:1;8610:61;8663:7;8654:6;8643:9;8639:22;8610:61;:::i;:::-;8600:71;;8556:125;8343:345;;;;:::o;8694:118::-;8781:24;8799:5;8781:24;:::i;:::-;8776:3;8769:37;8694:118;;:::o;8818:222::-;8911:4;8949:2;8938:9;8934:18;8926:26;;8962:71;9030:1;9019:9;9015:17;9006:6;8962:71;:::i;:::-;8818:222;;;;:::o;9046:468::-;9111:6;9119;9168:2;9156:9;9147:7;9143:23;9139:32;9136:119;;;9174:79;;:::i;:::-;9136:119;9294:1;9319:53;9364:7;9355:6;9344:9;9340:22;9319:53;:::i;:::-;9309:63;;9265:117;9421:2;9447:50;9489:7;9480:6;9469:9;9465:22;9447:50;:::i;:::-;9437:60;;9392:115;9046:468;;;;;:::o;9520:474::-;9588:6;9596;9645:2;9633:9;9624:7;9620:23;9616:32;9613:119;;;9651:79;;:::i;:::-;9613:119;9771:1;9796:53;9841:7;9832:6;9821:9;9817:22;9796:53;:::i;:::-;9786:63;;9742:117;9898:2;9924:53;9969:7;9960:6;9949:9;9945:22;9924:53;:::i;:::-;9914:63;;9869:118;9520:474;;;;;:::o;10000:323::-;10056:6;10105:2;10093:9;10084:7;10080:23;10076:32;10073:119;;;10111:79;;:::i;:::-;10073:119;10231:1;10256:50;10298:7;10289:6;10278:9;10274:22;10256:50;:::i;:::-;10246:60;;10202:114;10000:323;;;;:::o;10329:182::-;10469:34;10465:1;10457:6;10453:14;10446:58;10329:182;:::o;10517:366::-;10659:3;10680:67;10744:2;10739:3;10680:67;:::i;:::-;10673:74;;10756:93;10845:3;10756:93;:::i;:::-;10874:2;10869:3;10865:12;10858:19;;10517:366;;;:::o;10889:419::-;11055:4;11093:2;11082:9;11078:18;11070:26;;11142:9;11136:4;11132:20;11128:1;11117:9;11113:17;11106:47;11170:131;11296:4;11170:131;:::i;:::-;11162:139;;10889:419;;;:::o;11314:180::-;11362:77;11359:1;11352:88;11459:4;11456:1;11449:15;11483:4;11480:1;11473:15;11500:410;11540:7;11563:20;11581:1;11563:20;:::i;:::-;11558:25;;11597:20;11615:1;11597:20;:::i;:::-;11592:25;;11652:1;11649;11645:9;11674:30;11692:11;11674:30;:::i;:::-;11663:41;;11853:1;11844:7;11840:15;11837:1;11834:22;11814:1;11807:9;11787:83;11764:139;;11883:18;;:::i;:::-;11764:139;11548:362;11500:410;;;;:::o;11916:180::-;11964:77;11961:1;11954:88;12061:4;12058:1;12051:15;12085:4;12082:1;12075:15;12102:233;12141:3;12164:24;12182:5;12164:24;:::i;:::-;12155:33;;12210:66;12203:5;12200:77;12197:103;;12280:18;;:::i;:::-;12197:103;12327:1;12320:5;12316:13;12309:20;;12102:233;;;:::o;12341:244::-;12481:34;12477:1;12469:6;12465:14;12458:58;12550:27;12545:2;12537:6;12533:15;12526:52;12341:244;:::o;12591:366::-;12733:3;12754:67;12818:2;12813:3;12754:67;:::i;:::-;12747:74;;12830:93;12919:3;12830:93;:::i;:::-;12948:2;12943:3;12939:12;12932:19;;12591:366;;;:::o;12963:419::-;13129:4;13167:2;13156:9;13152:18;13144:26;;13216:9;13210:4;13206:20;13202:1;13191:9;13187:17;13180:47;13244:131;13370:4;13244:131;:::i;:::-;13236:139;;12963:419;;;:::o;13388:173::-;13528:25;13524:1;13516:6;13512:14;13505:49;13388:173;:::o;13567:366::-;13709:3;13730:67;13794:2;13789:3;13730:67;:::i;:::-;13723:74;;13806:93;13895:3;13806:93;:::i;:::-;13924:2;13919:3;13915:12;13908:19;;13567:366;;;:::o;13939:419::-;14105:4;14143:2;14132:9;14128:18;14120:26;;14192:9;14186:4;14182:20;14178:1;14167:9;14163:17;14156:47;14220:131;14346:4;14220:131;:::i;:::-;14212:139;;13939:419;;;:::o;14364:143::-;14421:5;14452:6;14446:13;14437:22;;14468:33;14495:5;14468:33;:::i;:::-;14364:143;;;;:::o;14513:351::-;14583:6;14632:2;14620:9;14611:7;14607:23;14603:32;14600:119;;;14638:79;;:::i;:::-;14600:119;14758:1;14783:64;14839:7;14830:6;14819:9;14815:22;14783:64;:::i;:::-;14773:74;;14729:128;14513:351;;;;:::o;14870:332::-;14991:4;15029:2;15018:9;15014:18;15006:26;;15042:71;15110:1;15099:9;15095:17;15086:6;15042:71;:::i;:::-;15123:72;15191:2;15180:9;15176:18;15167:6;15123:72;:::i;:::-;14870:332;;;;;:::o;15208:85::-;15253:7;15282:5;15271:16;;15208:85;;;:::o;15299:60::-;15327:3;15348:5;15341:12;;15299:60;;;:::o;15365:158::-;15423:9;15456:61;15474:42;15483:32;15509:5;15483:32;:::i;:::-;15474:42;:::i;:::-;15456:61;:::i;:::-;15443:74;;15365:158;;;:::o;15529:147::-;15624:45;15663:5;15624:45;:::i;:::-;15619:3;15612:58;15529:147;;:::o;15682:807::-;15931:4;15969:3;15958:9;15954:19;15946:27;;15983:71;16051:1;16040:9;16036:17;16027:6;15983:71;:::i;:::-;16064:72;16132:2;16121:9;16117:18;16108:6;16064:72;:::i;:::-;16146:80;16222:2;16211:9;16207:18;16198:6;16146:80;:::i;:::-;16236;16312:2;16301:9;16297:18;16288:6;16236:80;:::i;:::-;16326:73;16394:3;16383:9;16379:19;16370:6;16326:73;:::i;:::-;16409;16477:3;16466:9;16462:19;16453:6;16409:73;:::i;:::-;15682:807;;;;;;;;;:::o;16495:143::-;16552:5;16583:6;16577:13;16568:22;;16599:33;16626:5;16599:33;:::i;:::-;16495:143;;;;:::o;16644:663::-;16732:6;16740;16748;16797:2;16785:9;16776:7;16772:23;16768:32;16765:119;;;16803:79;;:::i;:::-;16765:119;16923:1;16948:64;17004:7;16995:6;16984:9;16980:22;16948:64;:::i;:::-;16938:74;;16894:128;17061:2;17087:64;17143:7;17134:6;17123:9;17119:22;17087:64;:::i;:::-;17077:74;;17032:129;17200:2;17226:64;17282:7;17273:6;17262:9;17258:22;17226:64;:::i;:::-;17216:74;;17171:129;16644:663;;;;;:::o;17313:332::-;17434:4;17472:2;17461:9;17457:18;17449:26;;17485:71;17553:1;17542:9;17538:17;17529:6;17485:71;:::i;:::-;17566:72;17634:2;17623:9;17619:18;17610:6;17566:72;:::i;:::-;17313:332;;;;;:::o;17651:137::-;17705:5;17736:6;17730:13;17721:22;;17752:30;17776:5;17752:30;:::i;:::-;17651:137;;;;:::o;17794:345::-;17861:6;17910:2;17898:9;17889:7;17885:23;17881:32;17878:119;;;17916:79;;:::i;:::-;17878:119;18036:1;18061:61;18114:7;18105:6;18094:9;18090:22;18061:61;:::i;:::-;18051:71;;18007:125;17794:345;;;;:::o;18145:223::-;18285:34;18281:1;18273:6;18269:14;18262:58;18354:6;18349:2;18341:6;18337:15;18330:31;18145:223;:::o;18374:366::-;18516:3;18537:67;18601:2;18596:3;18537:67;:::i;:::-;18530:74;;18613:93;18702:3;18613:93;:::i;:::-;18731:2;18726:3;18722:12;18715:19;;18374:366;;;:::o;18746:419::-;18912:4;18950:2;18939:9;18935:18;18927:26;;18999:9;18993:4;18989:20;18985:1;18974:9;18970:17;18963:47;19027:131;19153:4;19027:131;:::i;:::-;19019:139;;18746:419;;;:::o;19171:221::-;19311:34;19307:1;19299:6;19295:14;19288:58;19380:4;19375:2;19367:6;19363:15;19356:29;19171:221;:::o;19398:366::-;19540:3;19561:67;19625:2;19620:3;19561:67;:::i;:::-;19554:74;;19637:93;19726:3;19637:93;:::i;:::-;19755:2;19750:3;19746:12;19739:19;;19398:366;;;:::o;19770:419::-;19936:4;19974:2;19963:9;19959:18;19951:26;;20023:9;20017:4;20013:20;20009:1;19998:9;19994:17;19987:47;20051:131;20177:4;20051:131;:::i;:::-;20043:139;;19770:419;;;:::o;20195:224::-;20335:34;20331:1;20323:6;20319:14;20312:58;20404:7;20399:2;20391:6;20387:15;20380:32;20195:224;:::o;20425:366::-;20567:3;20588:67;20652:2;20647:3;20588:67;:::i;:::-;20581:74;;20664:93;20753:3;20664:93;:::i;:::-;20782:2;20777:3;20773:12;20766:19;;20425:366;;;:::o;20797:419::-;20963:4;21001:2;20990:9;20986:18;20978:26;;21050:9;21044:4;21040:20;21036:1;21025:9;21021:17;21014:47;21078:131;21204:4;21078:131;:::i;:::-;21070:139;;20797:419;;;:::o;21222:222::-;21362:34;21358:1;21350:6;21346:14;21339:58;21431:5;21426:2;21418:6;21414:15;21407:30;21222:222;:::o;21450:366::-;21592:3;21613:67;21677:2;21672:3;21613:67;:::i;:::-;21606:74;;21689:93;21778:3;21689:93;:::i;:::-;21807:2;21802:3;21798:12;21791:19;;21450:366;;;:::o;21822:419::-;21988:4;22026:2;22015:9;22011:18;22003:26;;22075:9;22069:4;22065:20;22061:1;22050:9;22046:17;22039:47;22103:131;22229:4;22103:131;:::i;:::-;22095:139;;21822:419;;;:::o;22247:228::-;22387:34;22383:1;22375:6;22371:14;22364:58;22456:11;22451:2;22443:6;22439:15;22432:36;22247:228;:::o;22481:366::-;22623:3;22644:67;22708:2;22703:3;22644:67;:::i;:::-;22637:74;;22720:93;22809:3;22720:93;:::i;:::-;22838:2;22833:3;22829:12;22822:19;;22481:366;;;:::o;22853:419::-;23019:4;23057:2;23046:9;23042:18;23034:26;;23106:9;23100:4;23096:20;23092:1;23081:9;23077:17;23070:47;23134:131;23260:4;23134:131;:::i;:::-;23126:139;;22853:419;;;:::o;23278:191::-;23318:3;23337:20;23355:1;23337:20;:::i;:::-;23332:25;;23371:20;23389:1;23371:20;:::i;:::-;23366:25;;23414:1;23411;23407:9;23400:16;;23435:3;23432:1;23429:10;23426:36;;;23442:18;;:::i;:::-;23426:36;23278:191;;;;:::o;23475:222::-;23615:34;23611:1;23603:6;23599:14;23592:58;23684:5;23679:2;23671:6;23667:15;23660:30;23475:222;:::o;23703:366::-;23845:3;23866:67;23930:2;23925:3;23866:67;:::i;:::-;23859:74;;23942:93;24031:3;23942:93;:::i;:::-;24060:2;24055:3;24051:12;24044:19;;23703:366;;;:::o;24075:419::-;24241:4;24279:2;24268:9;24264:18;24256:26;;24328:9;24322:4;24318:20;24314:1;24303:9;24299:17;24292:47;24356:131;24482:4;24356:131;:::i;:::-;24348:139;;24075:419;;;:::o;24500:174::-;24640:26;24636:1;24628:6;24624:14;24617:50;24500:174;:::o;24680:366::-;24822:3;24843:67;24907:2;24902:3;24843:67;:::i;:::-;24836:74;;24919:93;25008:3;24919:93;:::i;:::-;25037:2;25032:3;25028:12;25021:19;;24680:366;;;:::o;25052:419::-;25218:4;25256:2;25245:9;25241:18;25233:26;;25305:9;25299:4;25295:20;25291:1;25280:9;25276:17;25269:47;25333:131;25459:4;25333:131;:::i;:::-;25325:139;;25052:419;;;:::o;25477:194::-;25517:4;25537:20;25555:1;25537:20;:::i;:::-;25532:25;;25571:20;25589:1;25571:20;:::i;:::-;25566:25;;25615:1;25612;25608:9;25600:17;;25639:1;25633:4;25630:11;25627:37;;;25644:18;;:::i;:::-;25627:37;25477:194;;;;:::o;25677:147::-;25778:11;25815:3;25800:18;;25677:147;;;;:::o;25830:114::-;;:::o;25950:398::-;26109:3;26130:83;26211:1;26206:3;26130:83;:::i;:::-;26123:90;;26222:93;26311:3;26222:93;:::i;:::-;26340:1;26335:3;26331:11;26324:18;;25950:398;;;:::o;26354:379::-;26538:3;26560:147;26703:3;26560:147;:::i;:::-;26553:154;;26724:3;26717:10;;26354:379;;;:::o;26739:308::-;26848:4;26886:2;26875:9;26871:18;26863:26;;26899:65;26961:1;26950:9;26946:17;26937:6;26899:65;:::i;:::-;26974:66;27036:2;27025:9;27021:18;27012:6;26974:66;:::i;:::-;26739:308;;;;;:::o;27053:229::-;27193:34;27189:1;27181:6;27177:14;27170:58;27262:12;27257:2;27249:6;27245:15;27238:37;27053:229;:::o;27288:366::-;27430:3;27451:67;27515:2;27510:3;27451:67;:::i;:::-;27444:74;;27527:93;27616:3;27527:93;:::i;:::-;27645:2;27640:3;27636:12;27629:19;;27288:366;;;:::o;27660:419::-;27826:4;27864:2;27853:9;27849:18;27841:26;;27913:9;27907:4;27903:20;27899:1;27888:9;27884:17;27877:47;27941:131;28067:4;27941:131;:::i;:::-;27933:139;;27660:419;;;:::o;28085:180::-;28133:77;28130:1;28123:88;28230:4;28227:1;28220:15;28254:4;28251:1;28244:15;28271:114;28338:6;28372:5;28366:12;28356:22;;28271:114;;;:::o;28391:184::-;28490:11;28524:6;28519:3;28512:19;28564:4;28559:3;28555:14;28540:29;;28391:184;;;;:::o;28581:132::-;28648:4;28671:3;28663:11;;28701:4;28696:3;28692:14;28684:22;;28581:132;;;:::o;28719:108::-;28796:24;28814:5;28796:24;:::i;:::-;28791:3;28784:37;28719:108;;:::o;28833:179::-;28902:10;28923:46;28965:3;28957:6;28923:46;:::i;:::-;29001:4;28996:3;28992:14;28978:28;;28833:179;;;;:::o;29018:113::-;29088:4;29120;29115:3;29111:14;29103:22;;29018:113;;;:::o;29167:732::-;29286:3;29315:54;29363:5;29315:54;:::i;:::-;29385:86;29464:6;29459:3;29385:86;:::i;:::-;29378:93;;29495:56;29545:5;29495:56;:::i;:::-;29574:7;29605:1;29590:284;29615:6;29612:1;29609:13;29590:284;;;29691:6;29685:13;29718:63;29777:3;29762:13;29718:63;:::i;:::-;29711:70;;29804:60;29857:6;29804:60;:::i;:::-;29794:70;;29650:224;29637:1;29634;29630:9;29625:14;;29590:284;;;29594:14;29890:3;29883:10;;29291:608;;;29167:732;;;;:::o;29905:831::-;30168:4;30206:3;30195:9;30191:19;30183:27;;30220:71;30288:1;30277:9;30273:17;30264:6;30220:71;:::i;:::-;30301:80;30377:2;30366:9;30362:18;30353:6;30301:80;:::i;:::-;30428:9;30422:4;30418:20;30413:2;30402:9;30398:18;30391:48;30456:108;30559:4;30550:6;30456:108;:::i;:::-;30448:116;;30574:72;30642:2;30631:9;30627:18;30618:6;30574:72;:::i;:::-;30656:73;30724:3;30713:9;30709:19;30700:6;30656:73;:::i;:::-;29905:831;;;;;;;;:::o;30742:180::-;30790:77;30787:1;30780:88;30887:4;30884:1;30877:15;30911:4;30908:1;30901:15;30928:185;30968:1;30985:20;31003:1;30985:20;:::i;:::-;30980:25;;31019:20;31037:1;31019:20;:::i;:::-;31014:25;;31058:1;31048:35;;31063:18;;:::i;:::-;31048:35;31105:1;31102;31098:9;31093:14;;30928:185;;;;:::o;31119:177::-;31259:29;31255:1;31247:6;31243:14;31236:53;31119:177;:::o;31302:366::-;31444:3;31465:67;31529:2;31524:3;31465:67;:::i;:::-;31458:74;;31541:93;31630:3;31541:93;:::i;:::-;31659:2;31654:3;31650:12;31643:19;;31302:366;;;:::o;31674:419::-;31840:4;31878:2;31867:9;31863:18;31855:26;;31927:9;31921:4;31917:20;31913:1;31902:9;31898:17;31891:47;31955:131;32081:4;31955:131;:::i;:::-;31947:139;;31674:419;;;:::o;32099:220::-;32239:34;32235:1;32227:6;32223:14;32216:58;32308:3;32303:2;32295:6;32291:15;32284:28;32099:220;:::o;32325:366::-;32467:3;32488:67;32552:2;32547:3;32488:67;:::i;:::-;32481:74;;32564:93;32653:3;32564:93;:::i;:::-;32682:2;32677:3;32673:12;32666:19;;32325:366;;;:::o;32697:419::-;32863:4;32901:2;32890:9;32886:18;32878:26;;32950:9;32944:4;32940:20;32936:1;32925:9;32921:17;32914:47;32978:131;33104:4;32978:131;:::i;:::-;32970:139;;32697:419;;;:::o

Swarm Source

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