ETH Price: $2,504.92 (+1.26%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer198216672024-05-08 0:08:47173 days ago1715126927IN
0xbaa46a61...053489fb8
0 ETH0.000374925.50816394
Approve181384632023-09-15 1:48:47408 days ago1694742527IN
0xbaa46a61...053489fb8
0 ETH0.0010428722.11787161
Approve181380542023-09-15 0:25:35408 days ago1694737535IN
0xbaa46a61...053489fb8
0 ETH0.0006227513.19081238
Approve181380472023-09-15 0:24:11408 days ago1694737451IN
0xbaa46a61...053489fb8
0 ETH0.0006149613.02588452
Renounce Ownersh...181380292023-09-15 0:20:23408 days ago1694737223IN
0xbaa46a61...053489fb8
0 ETH0.0002392310.21407614
Set Enable Max T...181380282023-09-15 0:20:11408 days ago1694737211IN
0xbaa46a61...053489fb8
0 ETH0.0002620510.18788368
Set Enable Max W...181380262023-09-15 0:19:47408 days ago1694737187IN
0xbaa46a61...053489fb8
0 ETH0.000249189.72061845
Approve181380072023-09-15 0:15:59408 days ago1694736959IN
0xbaa46a61...053489fb8
0 ETH0.0005693212.07456029
Approve181380042023-09-15 0:15:23408 days ago1694736923IN
0xbaa46a61...053489fb8
0 ETH0.0008530218.07287897
Approve181380042023-09-15 0:15:23408 days ago1694736923IN
0xbaa46a61...053489fb8
0 ETH0.0008530218.07287897
Enable Trading181380032023-09-15 0:15:11408 days ago1694736911IN
0xbaa46a61...053489fb8
0 ETH0.0006859213.46065958
Approve181379232023-09-14 23:58:59409 days ago1694735939IN
0xbaa46a61...053489fb8
0 ETH0.0006930714.76677753
Approve181376352023-09-14 23:01:11409 days ago1694732471IN
0xbaa46a61...053489fb8
0 ETH0.000627613.37188472
Set Max Wallet A...181376032023-09-14 22:54:47409 days ago1694732087IN
0xbaa46a61...053489fb8
0 ETH0.0004924214.46771344
Set Max Transact...181375992023-09-14 22:53:59409 days ago1694732039IN
0xbaa46a61...053489fb8
0 ETH0.0004711813.87076055
0x60806040181375552023-09-14 22:45:11409 days ago1694731511IN
 Create: GIANTDONG
0 ETH0.1129875315.30983098

Latest 10 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
181380742023-09-15 0:29:35408 days ago1694737775
0xbaa46a61...053489fb8
0.00044867 ETH
181380742023-09-15 0:29:35408 days ago1694737775
0xbaa46a61...053489fb8
0.00044867 ETH
181380702023-09-15 0:28:47408 days ago1694737727
0xbaa46a61...053489fb8
0.00197293 ETH
181380702023-09-15 0:28:47408 days ago1694737727
0xbaa46a61...053489fb8
0.00197293 ETH
181380552023-09-15 0:25:47408 days ago1694737547
0xbaa46a61...053489fb8
0.00886869 ETH
181380552023-09-15 0:25:47408 days ago1694737547
0xbaa46a61...053489fb8
0.00886869 ETH
181380102023-09-15 0:16:35408 days ago1694736995
0xbaa46a61...053489fb8
0.00863366 ETH
181380102023-09-15 0:16:35408 days ago1694736995
0xbaa46a61...053489fb8
0.00863366 ETH
181380102023-09-15 0:16:35408 days ago1694736995
0xbaa46a61...053489fb8
0.00998518 ETH
181380102023-09-15 0:16:35408 days ago1694736995
0xbaa46a61...053489fb8
0.00998518 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GIANTDONG

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-14
*/

/**

TELEGRAM: https://t.me/giantdongz
WEBSITE: https://www.giantdong.io/
TWITTER: https://twitter.com/giantdong_erc

                                                                                          
                                                                                          
                             .----:.                                                      
                            ++=---::-:                                                    
                           *+++=----:-:                                                   
                          .*++**==-====-.                                                 
                          .*##****++***=:                                                 
                           *##*++=+**+**                                                  
                           +#*-*##+:+***=                                                 
                           *#*++-+#-=***#-                                                
                           -##+=-=-=++****:                                               
                            ###*+*+++++****:                                              
                            -%##***+++*+*+**:                                             
                             #%#****+++++++**=-::..                                       
                             :%##*+***=+++++**#####+:                                     
                              *%##*+****+++++***#####+:                                   
                               #%##*+*****++****#######*:                                 
                               .%%##*****+********#######+:                               
                               =%%%##*****++#******#%######+                              
                              .*##%%###****++#****##########*:                            
                               +*##%%%###****+****##* .:-=++*#=                           
                               .**##%%%#####**+*###@%:        .                           
                                :**##%%%%#####*++###+:...                                 
                                 :**##%%=-+#%#=+++*===-::...                              
                                  -**##%.  .==+===-=.-=--:..                              
                                   -**##    .:--+=: . :---:.                              
                                    :**+     .:-===-.  ::--:.                             
                                     .+-      .:--==-:  .:==-:.                           
                                               .::-==-:...:==-:.                          
                                                  .-===-. .-==:.                          
                                                   .:-===-..===:.                         
                                                    .:--==+=-==-:                         
                                                      ..::-=====-.                        
                                                          .:---=-:.                       
                                                              ..:::.                      
                                                                  ....                    


*/


// SPDX-License-Identifier: MIT

pragma solidity 0.8.20;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
   
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _init(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract GIANTDONG is ERC20, Ownable {
    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    mapping (address => bool) private _isExcludedFromFees;

    uint256 public tradingActiveTime;

    uint256 private buyFee;
    uint256 private sellFee;
    
    address public marketingWallet;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;

    bool    public tradingEnabled;

    uint256 public swapTokensAtAmount;
    bool    public swapWithLimit;
    bool    private swapping;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludedFromMaxTransactionLimit(address indexed account, bool isExcluded);
    event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded);
    event MaxWalletLimitAmountChanged(uint256 maxWalletLimitRate);
    event MaxWalletLimitStateChanged(bool maxWalletLimit);
    event MaxTransactionLimitAmountChanged(uint256 maxTransferRate);
    event MaxTransactionLimitStateChanged(bool maxTransactionLimit);
    event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount);
    event SwapAndSend(uint256 tokensSwapped, uint256 valueReceived);
    event SwapWithLimitUpdated(bool swapWithLimit);

    constructor () ERC20("GIANT DONG", "DONG") 
    {   
        address newOwner = 0x197c84e2731A99543B38d71C388d0133bF90De1C;
        transferOwnership(newOwner);
        
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH UniswapV2 Router
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair   = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);
              
        marketingWallet = 0x975f48584245A515257f142f2741FD020dBd8131;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(0xdead)] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcludedFromMaxTxLimit[owner()] = true;
        _isExcludedFromMaxTxLimit[address(0)] = true;
        _isExcludedFromMaxTxLimit[address(this)] = true;
        _isExcludedFromMaxTxLimit[DEAD] = true;
        
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[address(0)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[DEAD] = true;

        _init(owner(), 1e9 ether);
        swapTokensAtAmount = totalSupply() / 5000;

        maxTransactionAmount  = totalSupply() / 100;        
        maxWalletAmount       = totalSupply() / 100;

    }

    receive() external payable {

  	}

    function enableTrading() public onlyOwner{
        require(!tradingEnabled, "Trading is already enabled");
        tradingEnabled = true;
        tradingActiveTime = block.timestamp;
    }  

    function claimStuckTokens(address token) external onlyOwner {
        if (token == address(0x0)) {
            (bool success,) = msg.sender.call{value: address(this).balance}("");
            require(success, "Claim failed");
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function getBuyFee() public view returns (uint256) {
        
        uint256 _buyFee;

        if (block.timestamp - tradingActiveTime < 15 minutes) {
            _buyFee =  5;

        }else if (block.timestamp - tradingActiveTime >= 15 minutes && block.timestamp - tradingActiveTime < 25 minutes) {
            _buyFee =  1;

        }else if (block.timestamp - tradingActiveTime >= 25 minutes) {
            _buyFee =  0;
        }
        
        return _buyFee;
    }

    function getSellFee() public view returns (uint256) {

        uint256 _sellFee;

        if (block.timestamp - tradingActiveTime < 5 minutes) {
            _sellFee =  20;

        }else if (block.timestamp - tradingActiveTime >= 5 minutes && block.timestamp - tradingActiveTime < 10 minutes) {
            _sellFee =  10;

        }else if (block.timestamp - tradingActiveTime >= 10 minutes && block.timestamp - tradingActiveTime < 15 minutes) {
            _sellFee =  5;

        }else if (block.timestamp - tradingActiveTime >= 15 minutes && block.timestamp - tradingActiveTime < 25 minutes) {
            _sellFee =  1;

        }else if (block.timestamp - tradingActiveTime >= 25 minutes) {
            _sellFee =  0;
        }

        return _sellFee;
    }       

    function excludeFromFees(address account, bool excluded) external onlyOwner{
        require(_isExcludedFromFees[account] != excluded,"Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function changeMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != address(0), "Marketing wallet cannot be the zero address");
        marketingWallet = _marketingWallet;
    }
    
    function _transfer(address from,address to,uint256 amount) internal  override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not enabled yet");
            
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (maxTransactionLimitEnabled) 
        {
            if ((from == uniswapV2Pair || to == uniswapV2Pair) &&
                _isExcludedFromMaxTxLimit[from] == false && 
                _isExcludedFromMaxTxLimit[to]   == false) 
            {
                require(amount <= maxTransactionAmount, "AntiWhale: Transfer amount exceeds the maxTransactionAmount");                
            }
        }
    
		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            !swapping &&
            to == uniswapV2Pair
        ) {
            swapping = true;

            if (swapWithLimit) {
                contractTokenBalance = swapTokensAtAmount;
            }

            swap(contractTokenBalance);        

            swapping = false;
        }

        uint256 _totalFees;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) {
            _totalFees = 0;

        }else if (from == uniswapV2Pair) {
            _totalFees =  getBuyFee();

        }else if (to == uniswapV2Pair) {             
            _totalFees = getSellFee();
        
        }else {
            _totalFees = 0;
        }

        if (_totalFees > 0) {
            uint256 fees = (amount * _totalFees) / 100;
            amount = amount - fees;
            super._transfer(from, address(this), fees);
        }

        if (maxWalletLimitEnabled) {
            if (_isExcludedFromMaxWalletLimit[from]  == false && 
                _isExcludedFromMaxWalletLimit[to]    == false &&
                to != uniswapV2Pair
            ) {
                uint balance  = balanceOf(to);
                require(
                    balance + amount <= maxWalletAmount, 
                    "MaxWallet: Recipient exceeds the maxWalletAmount"
                );
            }
        }

        super._transfer(from, to, amount);
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner{
        require(newAmount > totalSupply() / 1000000, "SwapTokensAtAmount must be greater than 0.0001% of total supply");
        swapTokensAtAmount = newAmount;
        emit SwapTokensAtAmountUpdated(swapTokensAtAmount);
    }

    function setSwapWithLimit(bool _swapWithLimit) external onlyOwner{
        swapWithLimit = _swapWithLimit;
        emit SwapWithLimitUpdated(swapWithLimit);
    }

    function swap(uint256 tokenAmount) private {
        uint256 initialBalance = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);

        uint256 newBalance = address(this).balance - initialBalance;

        bool success = payable(marketingWallet).send(newBalance);
        if (success) {
            emit SwapAndSend(tokenAmount, newBalance);
        }
    }

    //=======MaxWallet=======//
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    bool    public maxWalletLimitEnabled = true;
    uint256 public maxWalletAmount;

    function setEnableMaxWalletLimit(bool enable) external onlyOwner {
        require(
            enable != maxWalletLimitEnabled, 
            "Max wallet limit is already set to that state"
        );
        maxWalletLimitEnabled = enable;
        emit MaxWalletLimitStateChanged(maxWalletLimitEnabled);
    }

    function setMaxWalletAmount(uint256 _maxWalletAmount) external onlyOwner {
        require(
            _maxWalletAmount >= (totalSupply() / (10 ** decimals())) / 100, 
            "Max wallet percentage cannot be lower than 1%"
        );
        maxWalletAmount = _maxWalletAmount * (10 ** decimals());
        emit MaxWalletLimitAmountChanged(maxWalletAmount);
    }

    function setExcludeFromMaxWallet(address account, bool exclude) external onlyOwner {
        require(
            _isExcludedFromMaxWalletLimit[account] != exclude, 
            "Account is already set to that state"
        );
        _isExcludedFromMaxWalletLimit[account] = exclude;
        emit ExcludedFromMaxWalletLimit(account, exclude);
    }

    function isExcludedFromMaxWalletLimit(address account) public view returns(bool) {
        return _isExcludedFromMaxWalletLimit[account];
    }

//=======MaxTransaction=======//
    mapping(address => bool) private _isExcludedFromMaxTxLimit;
    bool    public  maxTransactionLimitEnabled = true;
    uint256 public  maxTransactionAmount;

    function setEnableMaxTransactionLimit(bool enable) external onlyOwner  {
        require(
            enable != maxTransactionLimitEnabled, 
            "Max transaction limit is already set to that state"
        );
        maxTransactionLimitEnabled = enable;
        emit MaxTransactionLimitStateChanged(maxTransactionLimitEnabled);
    }

    function setMaxTransactionAmount(uint256 _maxTransactionAmount) external onlyOwner {
        require(
            _maxTransactionAmount  >= (totalSupply() / (10 ** decimals())) / 1000, 
            "Max Transaction limis cannot be lower than 0.1% of total supply"
        ); 
        maxTransactionAmount  = _maxTransactionAmount  * (10 ** decimals());
        emit MaxTransactionLimitAmountChanged(maxTransactionAmount);
    }

    function setExcludeFromMaxTransactionLimit(address account, bool exclude) external onlyOwner {
        require(
            _isExcludedFromMaxTxLimit[account] != exclude, 
            "Account is already set to that state"
        );
        _isExcludedFromMaxTxLimit[account] = exclude;
        emit ExcludedFromMaxTransactionLimit(account, exclude);
    }

    function isExcludedFromMaxTransaction(address account) public view returns(bool) {
        return _isExcludedFromMaxTxLimit[account];
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransferRate","type":"uint256"}],"name":"MaxTransactionLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxTransactionLimit","type":"bool"}],"name":"MaxTransactionLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletLimitRate","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"valueReceived","type":"uint256"}],"name":"SwapAndSend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"swapWithLimit","type":"bool"}],"name":"SwapWithLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"setExcludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapWithLimit","type":"bool"}],"name":"setSwapWithLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapWithLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160115f6101000a81548160ff021916908315150217905550600160145f6101000a81548160ff02191690831515021790555034801562000086575f80fd5b506040518060400160405280600a81526020017f4749414e5420444f4e47000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f444f4e4700000000000000000000000000000000000000000000000000000000815250816003908162000104919062001102565b50806004908162000116919062001102565b5050505f6200012a6200095160201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f73197c84e2731a99543b38d71c388d0133bf90de1c9050620001f0816200095860201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f8190505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000257573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200027d91906200124b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200030991906200124b565b6040518363ffffffff1660e01b8152600401620003289291906200128c565b6020604051808303815f875af115801562000345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200036b91906200124b565b90508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004413060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000b2860201b60201c565b73975f48584245a515257f142f2741fd020dbd8131600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f620004aa62000cf360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f620005ba62000cf360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f6200073e62000cf360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620008da620008c162000cf360201b60201c565b6b033b2e3c9fd0803ce800000062000d1b60201b60201c565b611388620008ed62000e8b60201b60201c565b620008f9919062001311565b600e8190555060646200091162000e8b60201b60201c565b6200091d919062001311565b60158190555060646200093562000e8b60201b60201c565b62000941919062001311565b6012819055505050505062001656565b5f33905090565b620009686200095160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f090620013a6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a6a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a61906200143a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b9090620014ce565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c019062001562565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000ce6919062001593565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000d8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d8390620015fc565b60405180910390fd5b62000d9f5f838362000e9460201b60201c565b8060025f82825462000db291906200161c565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000e0691906200161c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000e6c919062001593565b60405180910390a362000e875f838362000e9960201b60201c565b5050565b5f600254905090565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000f1a57607f821691505b60208210810362000f305762000f2f62000ed5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000f947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f57565b62000fa0868362000f57565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000fea62000fe462000fde8462000fb8565b62000fc1565b62000fb8565b9050919050565b5f819050919050565b620010058362000fca565b6200101d620010148262000ff1565b84845462000f63565b825550505050565b5f90565b6200103362001025565b6200104081848462000ffa565b505050565b5b8181101562001067576200105b5f8262001029565b60018101905062001046565b5050565b601f821115620010b657620010808162000f36565b6200108b8462000f48565b810160208510156200109b578190505b620010b3620010aa8562000f48565b83018262001045565b50505b505050565b5f82821c905092915050565b5f620010d85f1984600802620010bb565b1980831691505092915050565b5f620010f28383620010c7565b9150826002028217905092915050565b6200110d8262000e9e565b67ffffffffffffffff81111562001129576200112862000ea8565b5b62001135825462000f02565b620011428282856200106b565b5f60209050601f83116001811462001178575f841562001163578287015190505b6200116f8582620010e5565b865550620011de565b601f198416620011888662000f36565b5f5b82811015620011b1578489015182556001820191506020850194506020810190506200118a565b86831015620011d15784890151620011cd601f891682620010c7565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200121582620011ea565b9050919050565b620012278162001209565b811462001232575f80fd5b50565b5f8151905062001245816200121c565b92915050565b5f60208284031215620012635762001262620011e6565b5b5f620012728482850162001235565b91505092915050565b620012868162001209565b82525050565b5f604082019050620012a15f8301856200127b565b620012b060208301846200127b565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200131d8262000fb8565b91506200132a8362000fb8565b9250826200133d576200133c620012b7565b5b828204905092915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200138e60208362001348565b91506200139b8262001358565b602082019050919050565b5f6020820190508181035f830152620013bf8162001380565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6200142260268362001348565b91506200142f82620013c6565b604082019050919050565b5f6020820190508181035f830152620014538162001414565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f620014b660248362001348565b9150620014c3826200145a565b604082019050919050565b5f6020820190508181035f830152620014e781620014a8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200154a60228362001348565b91506200155782620014ee565b604082019050919050565b5f6020820190508181035f8301526200157b816200153c565b9050919050565b6200158d8162000fb8565b82525050565b5f602082019050620015a85f83018462001582565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620015e4601f8362001348565b9150620015f182620015ae565b602082019050919050565b5f6020820190508181035f8301526200161581620015d6565b9050919050565b5f620016288262000fb8565b9150620016358362000fb8565b925082820190508082111562001650576200164f620012e4565b5b92915050565b614b8380620016645f395ff3fe608060405260043610610254575f3560e01c806370a0823111610138578063a8a69b9d116100b5578063c024666811610079578063c0246668146108af578063c8c8ebe4146108d7578063dd62ed3e14610901578063e2f456051461093d578063f2fde38b14610967578063f9d0831a1461098f5761025b565b8063a8a69b9d146107bd578063a9059cbb146107f9578063aa4bde2814610835578063afa4f3b21461085f578063bb85c6d1146108875761025b565b80638f818b90116100fc5780638f818b90146106dd578063929f13601461070757806395d89b411461072f578063988be11814610759578063a457c2d7146107815761025b565b806370a0823114610621578063715018a61461065d57806375f0a874146106735780638a8c523c1461069d5780638da5cb5b146106b35761025b565b8063289af0d8116101d1578063488eb37f11610195578063488eb37f1461051557806349bd5a5e1461053f5780634ada218b146105695780634fbee193146105935780635031595f146105cf57806356a6cabf146105f95761025b565b8063289af0d8146104335780632a6c7dba1461045d5780632ba86bf214610485578063313ce567146104af57806339509351146104d95761025b565b806318d9ceae1161021857806318d9ceae146103415780631e293c101461037d57806321a9d82a146103a557806323b872dd146103cf57806327a14fc21461040b5761025b565b806306fdde031461025f578063095ea7b314610289578063150c880c146102c55780631694505e146102ed57806318160ddd146103175761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b506102736109b7565b604051610280919061362b565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa91906136dc565b610a47565b6040516102bc9190613734565b60405180910390f35b3480156102d0575f80fd5b506102eb60048036038101906102e69190613777565b610a64565b005b3480156102f8575f80fd5b50610301610c2f565b60405161030e9190613810565b60405180910390f35b348015610322575f80fd5b5061032b610c54565b6040516103389190613838565b60405180910390f35b34801561034c575f80fd5b5061036760048036038101906103629190613851565b610c5d565b6040516103749190613734565b60405180910390f35b348015610388575f80fd5b506103a3600480360381019061039e919061387c565b610caf565b005b3480156103b0575f80fd5b506103b9610e1b565b6040516103c69190613734565b60405180910390f35b3480156103da575f80fd5b506103f560048036038101906103f091906138a7565b610e2d565b6040516104029190613734565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c919061387c565b610f47565b005b34801561043e575f80fd5b506104476110b2565b6040516104549190613838565b60405180910390f35b348015610468575f80fd5b50610483600480360381019061047e91906138f7565b6111aa565b005b348015610490575f80fd5b506104996112f5565b6040516104a69190613734565b60405180910390f35b3480156104ba575f80fd5b506104c3611307565b6040516104d0919061393d565b60405180910390f35b3480156104e4575f80fd5b506104ff60048036038101906104fa91906136dc565b61130f565b60405161050c9190613734565b60405180910390f35b348015610520575f80fd5b506105296113b6565b6040516105369190613734565b60405180910390f35b34801561054a575f80fd5b506105536113c8565b6040516105609190613965565b60405180910390f35b348015610574575f80fd5b5061057d6113ed565b60405161058a9190613734565b60405180910390f35b34801561059e575f80fd5b506105b960048036038101906105b49190613851565b611400565b6040516105c69190613734565b60405180910390f35b3480156105da575f80fd5b506105e3611452565b6040516105f09190613838565b60405180910390f35b348015610604575f80fd5b5061061f600480360381019061061a91906138f7565b611458565b005b34801561062c575f80fd5b5061064760048036038101906106429190613851565b6115a3565b6040516106549190613838565b60405180910390f35b348015610668575f80fd5b506106716115e8565b005b34801561067e575f80fd5b5061068761173b565b6040516106949190613965565b60405180910390f35b3480156106a8575f80fd5b506106b1611760565b005b3480156106be575f80fd5b506106c761186a565b6040516106d49190613965565b60405180910390f35b3480156106e8575f80fd5b506106f1611892565b6040516106fe9190613838565b60405180910390f35b348015610712575f80fd5b5061072d60048036038101906107289190613777565b611912565b005b34801561073a575f80fd5b50610743611add565b604051610750919061362b565b60405180910390f35b348015610764575f80fd5b5061077f600480360381019061077a91906138f7565b611b6d565b005b34801561078c575f80fd5b506107a760048036038101906107a291906136dc565b611c64565b6040516107b49190613734565b60405180910390f35b3480156107c8575f80fd5b506107e360048036038101906107de9190613851565b611d4a565b6040516107f09190613734565b60405180910390f35b348015610804575f80fd5b5061081f600480360381019061081a91906136dc565b611d9c565b60405161082c9190613734565b60405180910390f35b348015610840575f80fd5b50610849611db9565b6040516108569190613838565b60405180910390f35b34801561086a575f80fd5b506108856004803603810190610880919061387c565b611dbf565b005b348015610892575f80fd5b506108ad60048036038101906108a89190613851565b611eef565b005b3480156108ba575f80fd5b506108d560048036038101906108d09190613777565b612036565b005b3480156108e2575f80fd5b506108eb612201565b6040516108f89190613838565b60405180910390f35b34801561090c575f80fd5b506109276004803603810190610922919061397e565b612207565b6040516109349190613838565b60405180910390f35b348015610948575f80fd5b50610951612289565b60405161095e9190613838565b60405180910390f35b348015610972575f80fd5b5061098d60048036038101906109889190613851565b61228f565b005b34801561099a575f80fd5b506109b560048036038101906109b09190613851565b612451565b005b6060600380546109c6906139e9565b80601f01602080910402602001604051908101604052809291908181526020018280546109f2906139e9565b8015610a3d5780601f10610a1457610100808354040283529160200191610a3d565b820191905f5260205f20905b815481529060010190602001808311610a2057829003601f168201915b5050505050905090565b5f610a5a610a536126c9565b84846126d0565b6001905092915050565b610a6c6126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190613a63565b60405180910390fd5b80151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613af1565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1082604051610c239190613734565b60405180910390a25050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610cb76126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c90613a63565b60405180910390fd5b6103e8610d50611307565b600a610d5c9190613c6b565b610d64610c54565b610d6e9190613ce2565b610d789190613ce2565b811015610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613d82565b60405180910390fd5b610dc2611307565b600a610dce9190613c6b565b81610dd99190613da0565b6015819055507f82752703028499b617ec0b1cf458c9689993344fd9c6ed80eeb873658cf5ad7f601554604051610e109190613838565b60405180910390a150565b60115f9054906101000a900460ff1681565b5f8060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e756126c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f305782811015610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1290613e51565b60405180910390fd5b610f2f85610f276126c9565b8584036126d0565b5b610f3b858585612893565b60019150509392505050565b610f4f6126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490613a63565b60405180910390fd5b6064610fe7611307565b600a610ff39190613c6b565b610ffb610c54565b6110059190613ce2565b61100f9190613ce2565b811015611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890613edf565b60405180910390fd5b611059611307565b600a6110659190613c6b565b816110709190613da0565b6012819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb59426012546040516110a79190613838565b60405180910390a150565b5f8061012c600954426110c59190613efd565b10156110d457601490506111a3565b61012c600954426110e59190613efd565b101580156111015750610258600954426110ff9190613efd565b105b1561110f57600a90506111a2565b610258600954426111209190613efd565b1015801561113c57506103846009544261113a9190613efd565b105b1561114a57600590506111a1565b6103846009544261115b9190613efd565b1015801561117757506105dc600954426111759190613efd565b105b1561118557600190506111a0565b6105dc600954426111969190613efd565b1061119f575f90505b5b5b5b5b8091505090565b6111b26126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790613a63565b60405180910390fd5b60115f9054906101000a900460ff16151581151503611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90613fa0565b60405180910390fd5b8060115f6101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f160115f9054906101000a900460ff166040516112ea9190613734565b60405180910390a150565b60145f9054906101000a900460ff1681565b5f6012905090565b5f6113ac61131b6126c9565b848460015f6113286126c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546113a79190613fbe565b6126d0565b6001905092915050565b600f5f9054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60149054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60095481565b6114606126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590613a63565b60405180910390fd5b60145f9054906101000a900460ff16151581151503611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990614061565b60405180910390fd5b8060145f6101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf60145f9054906101000a900460ff166040516115989190613734565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6115f06126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167590613a63565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117686126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed90613a63565b60405180910390fd5b600d60149054906101000a900460ff1615611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d906140c9565b60405180910390fd5b6001600d60146101000a81548160ff02191690831515021790555042600981905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80610384600954426118a59190613efd565b10156118b4576005905061190b565b610384600954426118c59190613efd565b101580156118e157506105dc600954426118df9190613efd565b105b156118ef576001905061190a565b6105dc600954426119009190613efd565b10611909575f90505b5b5b8091505090565b61191a6126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f90613a63565b60405180910390fd5b80151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90613af1565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c82604051611ad19190613734565b60405180910390a25050565b606060048054611aec906139e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611b18906139e9565b8015611b635780601f10611b3a57610100808354040283529160200191611b63565b820191905f5260205f20905b815481529060010190602001808311611b4657829003601f168201915b5050505050905090565b611b756126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfa90613a63565b60405180910390fd5b80600f5f6101000a81548160ff0219169083151502179055507f94da5f18dc9529c37f2af4ffa1921f49d8bb14b6e5fe22b0d6ddc94f102f9232600f5f9054906101000a900460ff16604051611c599190613734565b60405180910390a150565b5f8060015f611c716126c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2290614157565b60405180910390fd5b611d3f611d366126c9565b858584036126d0565b600191505092915050565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f611daf611da86126c9565b8484612893565b6001905092915050565b60125481565b611dc76126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4c90613a63565b60405180910390fd5b620f4240611e61610c54565b611e6b9190613ce2565b8111611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea3906141e5565b60405180910390fd5b80600e819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600e54604051611ee49190613838565b60405180910390a150565b611ef76126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c90613a63565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea90614273565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61203e6126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390613a63565b60405180910390fd5b80151560085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290614301565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121f59190613734565b60405180910390a25050565b60155481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600e5481565b6122976126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90613a63565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a9061438f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124596126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124de90613a63565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125c8575f3373ffffffffffffffffffffffffffffffffffffffff164760405161253f906143da565b5f6040518083038185875af1925050503d805f8114612579576040519150601f19603f3d011682016040523d82523d5f602084013e61257e565b606091505b50509050806125c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b990614438565b60405180910390fd5b506126c6565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126069190613965565b602060405180830381865afa158015612621573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612645919061446a565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612682929190614495565b6020604051808303815f875af115801561269e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c291906144d0565b5050505b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361273e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127359061456b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a3906145f9565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128869190613838565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f890614687565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361296f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296690614715565b60405180910390fd5b600d60149054906101000a900460ff16806129d0575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612a21575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a579061477d565b60405180910390fd5b5f8103612a7757612a7283835f61306a565b613065565b60145f9054906101000a900460ff1615612c2e5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b32575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612b8a57505f151560135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b8015612be257505f151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b15612c2d57601554811115612c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c239061480b565b60405180910390fd5b5b5b5f612c38306115a3565b90505f600e548210159050808015612c5d5750600f60019054906101000a900460ff16155b8015612cb5575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15612d13576001600f60016101000a81548160ff021916908315150217905550600f5f9054906101000a900460ff1615612cef57600e5491505b612cf8826132df565b5f600f60016101000a81548160ff0219169083151502179055505b5f60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612daf575060085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612dc65750600f60019054906101000a900460ff165b15612dd3575f9050612e9f565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612e3657612e2f611892565b9050612e9e565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612e9957612e926110b2565b9050612e9d565b5f90505b5b5b5f811115612edd575f60648286612eb69190613da0565b612ec09190613ce2565b90508085612ece9190613efd565b9450612edb87308361306a565b505b60115f9054906101000a900460ff1615613056575f151560105f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515148015612f9957505f151560105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b8015612ff2575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613055575f613001866115a3565b905060125485826130129190613fbe565b1115613053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304a90614899565b60405180910390fd5b505b5b61306186868661306a565b5050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cf90614687565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313d90614715565b60405180910390fd5b613151838383613597565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cb90614927565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132629190613fbe565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132c69190613838565b60405180910390a36132d984848461359c565b50505050565b5f4790505f600267ffffffffffffffff8111156132ff576132fe614945565b5b60405190808252806020026020018201604052801561332d5781602001602082028036833780820191505090505b50905030815f8151811061334457613343614972565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061340c91906149b3565b816001815181106134205761341f614972565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b81526004016134bc959493929190614ace565b5f604051808303815f87803b1580156134d3575f80fd5b505af11580156134e5573d5f803e3d5ffd5b505050505f82476134f69190613efd565b90505f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505090508015613590577f1309193d68e1a43bd32da5f04e07935cc194c20b2bd1813be5c6898b99dac4be8583604051613587929190614b26565b60405180910390a15b5050505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156135d85780820151818401526020810190506135bd565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135fd826135a1565b61360781856135ab565b93506136178185602086016135bb565b613620816135e3565b840191505092915050565b5f6020820190508181035f83015261364381846135f3565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136788261364f565b9050919050565b6136888161366e565b8114613692575f80fd5b50565b5f813590506136a38161367f565b92915050565b5f819050919050565b6136bb816136a9565b81146136c5575f80fd5b50565b5f813590506136d6816136b2565b92915050565b5f80604083850312156136f2576136f161364b565b5b5f6136ff85828601613695565b9250506020613710858286016136c8565b9150509250929050565b5f8115159050919050565b61372e8161371a565b82525050565b5f6020820190506137475f830184613725565b92915050565b6137568161371a565b8114613760575f80fd5b50565b5f813590506137718161374d565b92915050565b5f806040838503121561378d5761378c61364b565b5b5f61379a85828601613695565b92505060206137ab85828601613763565b9150509250929050565b5f819050919050565b5f6137d86137d36137ce8461364f565b6137b5565b61364f565b9050919050565b5f6137e9826137be565b9050919050565b5f6137fa826137df565b9050919050565b61380a816137f0565b82525050565b5f6020820190506138235f830184613801565b92915050565b613832816136a9565b82525050565b5f60208201905061384b5f830184613829565b92915050565b5f602082840312156138665761386561364b565b5b5f61387384828501613695565b91505092915050565b5f602082840312156138915761389061364b565b5b5f61389e848285016136c8565b91505092915050565b5f805f606084860312156138be576138bd61364b565b5b5f6138cb86828701613695565b93505060206138dc86828701613695565b92505060406138ed868287016136c8565b9150509250925092565b5f6020828403121561390c5761390b61364b565b5b5f61391984828501613763565b91505092915050565b5f60ff82169050919050565b61393781613922565b82525050565b5f6020820190506139505f83018461392e565b92915050565b61395f8161366e565b82525050565b5f6020820190506139785f830184613956565b92915050565b5f80604083850312156139945761399361364b565b5b5f6139a185828601613695565b92505060206139b285828601613695565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a0057607f821691505b602082108103613a1357613a126139bc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a4d6020836135ab565b9150613a5882613a19565b602082019050919050565b5f6020820190508181035f830152613a7a81613a41565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f207468617420735f8201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b5f613adb6024836135ab565b9150613ae682613a81565b604082019050919050565b5f6020820190508181035f830152613b0881613acf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115613b9157808604811115613b6d57613b6c613b0f565b5b6001851615613b7c5780820291505b8081029050613b8a85613b3c565b9450613b51565b94509492505050565b5f82613ba95760019050613c64565b81613bb6575f9050613c64565b8160018114613bcc5760028114613bd657613c05565b6001915050613c64565b60ff841115613be857613be7613b0f565b5b8360020a915084821115613bff57613bfe613b0f565b5b50613c64565b5060208310610133831016604e8410600b8410161715613c3a5782820a905083811115613c3557613c34613b0f565b5b613c64565b613c478484846001613b48565b92509050818404811115613c5e57613c5d613b0f565b5b81810290505b9392505050565b5f613c75826136a9565b9150613c8083613922565b9250613cad7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b9a565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cec826136a9565b9150613cf7836136a9565b925082613d0757613d06613cb5565b5b828204905092915050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f74206265205f8201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b5f613d6c603f836135ab565b9150613d7782613d12565b604082019050919050565b5f6020820190508181035f830152613d9981613d60565b9050919050565b5f613daa826136a9565b9150613db5836136a9565b9250828202613dc3816136a9565b91508282048414831517613dda57613dd9613b0f565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613e3b6028836135ab565b9150613e4682613de1565b604082019050919050565b5f6020820190508181035f830152613e6881613e2f565b9050919050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f74206265205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f613ec9602d836135ab565b9150613ed482613e6f565b604082019050919050565b5f6020820190508181035f830152613ef681613ebd565b9050919050565b5f613f07826136a9565b9150613f12836136a9565b9250828203905081811115613f2a57613f29613b0f565b5b92915050565b7f4d61782077616c6c6574206c696d697420697320616c726561647920736574205f8201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b5f613f8a602d836135ab565b9150613f9582613f30565b604082019050919050565b5f6020820190508181035f830152613fb781613f7e565b9050919050565b5f613fc8826136a9565b9150613fd3836136a9565b9250828201905080821115613feb57613fea613b0f565b5b92915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c72656164795f8201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b5f61404b6032836135ab565b915061405682613ff1565b604082019050919050565b5f6020820190508181035f8301526140788161403f565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c65640000000000005f82015250565b5f6140b3601a836135ab565b91506140be8261407f565b602082019050919050565b5f6020820190508181035f8301526140e0816140a7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6141416025836135ab565b915061414c826140e7565b604082019050919050565b5f6020820190508181035f83015261416e81614135565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d7573742062652067726561745f8201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b5f6141cf603f836135ab565b91506141da82614175565b604082019050919050565b5f6020820190508181035f8301526141fc816141c3565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f61425d602b836135ab565b915061426882614203565b604082019050919050565b5f6020820190508181035f83015261428a81614251565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f6142eb602a836135ab565b91506142f682614291565b604082019050919050565b5f6020820190508181035f830152614318816142df565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6143796026836135ab565b91506143848261431f565b604082019050919050565b5f6020820190508181035f8301526143a68161436d565b9050919050565b5f81905092915050565b50565b5f6143c55f836143ad565b91506143d0826143b7565b5f82019050919050565b5f6143e4826143ba565b9150819050919050565b7f436c61696d206661696c656400000000000000000000000000000000000000005f82015250565b5f614422600c836135ab565b915061442d826143ee565b602082019050919050565b5f6020820190508181035f83015261444f81614416565b9050919050565b5f81519050614464816136b2565b92915050565b5f6020828403121561447f5761447e61364b565b5b5f61448c84828501614456565b91505092915050565b5f6040820190506144a85f830185613956565b6144b56020830184613829565b9392505050565b5f815190506144ca8161374d565b92915050565b5f602082840312156144e5576144e461364b565b5b5f6144f2848285016144bc565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6145556024836135ab565b9150614560826144fb565b604082019050919050565b5f6020820190508181035f83015261458281614549565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145e36022836135ab565b91506145ee82614589565b604082019050919050565b5f6020820190508181035f830152614610816145d7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6146716025836135ab565b915061467c82614617565b604082019050919050565b5f6020820190508181035f83015261469e81614665565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6146ff6023836135ab565b915061470a826146a5565b604082019050919050565b5f6020820190508181035f83015261472c816146f3565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965740000000000005f82015250565b5f614767601a836135ab565b915061477282614733565b602082019050919050565b5f6020820190508181035f8301526147948161475b565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b5f6147f5603b836135ab565b91506148008261479b565b604082019050919050565b5f6020820190508181035f830152614822816147e9565b9050919050565b7f4d617857616c6c65743a20526563697069656e742065786365656473207468655f8201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b5f6148836030836135ab565b915061488e82614829565b604082019050919050565b5f6020820190508181035f8301526148b081614877565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149116026836135ab565b915061491c826148b7565b604082019050919050565b5f6020820190508181035f83015261493e81614905565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506149ad8161367f565b92915050565b5f602082840312156149c8576149c761364b565b5b5f6149d58482850161499f565b91505092915050565b5f819050919050565b5f614a016149fc6149f7846149de565b6137b5565b6136a9565b9050919050565b614a11816149e7565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614a498161366e565b82525050565b5f614a5a8383614a40565b60208301905092915050565b5f602082019050919050565b5f614a7c82614a17565b614a868185614a21565b9350614a9183614a31565b805f5b83811015614ac1578151614aa88882614a4f565b9750614ab383614a66565b925050600181019050614a94565b5085935050505092915050565b5f60a082019050614ae15f830188613829565b614aee6020830187614a08565b8181036040830152614b008186614a72565b9050614b0f6060830185613956565b614b1c6080830184613829565b9695505050505050565b5f604082019050614b395f830185613829565b614b466020830184613829565b939250505056fea2646970667358221220a14e2b1b0210317e3c9c2aa7e65a623f525b632c34494168b583632cdbd5d0e164736f6c63430008140033

Deployed Bytecode

0x608060405260043610610254575f3560e01c806370a0823111610138578063a8a69b9d116100b5578063c024666811610079578063c0246668146108af578063c8c8ebe4146108d7578063dd62ed3e14610901578063e2f456051461093d578063f2fde38b14610967578063f9d0831a1461098f5761025b565b8063a8a69b9d146107bd578063a9059cbb146107f9578063aa4bde2814610835578063afa4f3b21461085f578063bb85c6d1146108875761025b565b80638f818b90116100fc5780638f818b90146106dd578063929f13601461070757806395d89b411461072f578063988be11814610759578063a457c2d7146107815761025b565b806370a0823114610621578063715018a61461065d57806375f0a874146106735780638a8c523c1461069d5780638da5cb5b146106b35761025b565b8063289af0d8116101d1578063488eb37f11610195578063488eb37f1461051557806349bd5a5e1461053f5780634ada218b146105695780634fbee193146105935780635031595f146105cf57806356a6cabf146105f95761025b565b8063289af0d8146104335780632a6c7dba1461045d5780632ba86bf214610485578063313ce567146104af57806339509351146104d95761025b565b806318d9ceae1161021857806318d9ceae146103415780631e293c101461037d57806321a9d82a146103a557806323b872dd146103cf57806327a14fc21461040b5761025b565b806306fdde031461025f578063095ea7b314610289578063150c880c146102c55780631694505e146102ed57806318160ddd146103175761025b565b3661025b57005b5f80fd5b34801561026a575f80fd5b506102736109b7565b604051610280919061362b565b60405180910390f35b348015610294575f80fd5b506102af60048036038101906102aa91906136dc565b610a47565b6040516102bc9190613734565b60405180910390f35b3480156102d0575f80fd5b506102eb60048036038101906102e69190613777565b610a64565b005b3480156102f8575f80fd5b50610301610c2f565b60405161030e9190613810565b60405180910390f35b348015610322575f80fd5b5061032b610c54565b6040516103389190613838565b60405180910390f35b34801561034c575f80fd5b5061036760048036038101906103629190613851565b610c5d565b6040516103749190613734565b60405180910390f35b348015610388575f80fd5b506103a3600480360381019061039e919061387c565b610caf565b005b3480156103b0575f80fd5b506103b9610e1b565b6040516103c69190613734565b60405180910390f35b3480156103da575f80fd5b506103f560048036038101906103f091906138a7565b610e2d565b6040516104029190613734565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c919061387c565b610f47565b005b34801561043e575f80fd5b506104476110b2565b6040516104549190613838565b60405180910390f35b348015610468575f80fd5b50610483600480360381019061047e91906138f7565b6111aa565b005b348015610490575f80fd5b506104996112f5565b6040516104a69190613734565b60405180910390f35b3480156104ba575f80fd5b506104c3611307565b6040516104d0919061393d565b60405180910390f35b3480156104e4575f80fd5b506104ff60048036038101906104fa91906136dc565b61130f565b60405161050c9190613734565b60405180910390f35b348015610520575f80fd5b506105296113b6565b6040516105369190613734565b60405180910390f35b34801561054a575f80fd5b506105536113c8565b6040516105609190613965565b60405180910390f35b348015610574575f80fd5b5061057d6113ed565b60405161058a9190613734565b60405180910390f35b34801561059e575f80fd5b506105b960048036038101906105b49190613851565b611400565b6040516105c69190613734565b60405180910390f35b3480156105da575f80fd5b506105e3611452565b6040516105f09190613838565b60405180910390f35b348015610604575f80fd5b5061061f600480360381019061061a91906138f7565b611458565b005b34801561062c575f80fd5b5061064760048036038101906106429190613851565b6115a3565b6040516106549190613838565b60405180910390f35b348015610668575f80fd5b506106716115e8565b005b34801561067e575f80fd5b5061068761173b565b6040516106949190613965565b60405180910390f35b3480156106a8575f80fd5b506106b1611760565b005b3480156106be575f80fd5b506106c761186a565b6040516106d49190613965565b60405180910390f35b3480156106e8575f80fd5b506106f1611892565b6040516106fe9190613838565b60405180910390f35b348015610712575f80fd5b5061072d60048036038101906107289190613777565b611912565b005b34801561073a575f80fd5b50610743611add565b604051610750919061362b565b60405180910390f35b348015610764575f80fd5b5061077f600480360381019061077a91906138f7565b611b6d565b005b34801561078c575f80fd5b506107a760048036038101906107a291906136dc565b611c64565b6040516107b49190613734565b60405180910390f35b3480156107c8575f80fd5b506107e360048036038101906107de9190613851565b611d4a565b6040516107f09190613734565b60405180910390f35b348015610804575f80fd5b5061081f600480360381019061081a91906136dc565b611d9c565b60405161082c9190613734565b60405180910390f35b348015610840575f80fd5b50610849611db9565b6040516108569190613838565b60405180910390f35b34801561086a575f80fd5b506108856004803603810190610880919061387c565b611dbf565b005b348015610892575f80fd5b506108ad60048036038101906108a89190613851565b611eef565b005b3480156108ba575f80fd5b506108d560048036038101906108d09190613777565b612036565b005b3480156108e2575f80fd5b506108eb612201565b6040516108f89190613838565b60405180910390f35b34801561090c575f80fd5b506109276004803603810190610922919061397e565b612207565b6040516109349190613838565b60405180910390f35b348015610948575f80fd5b50610951612289565b60405161095e9190613838565b60405180910390f35b348015610972575f80fd5b5061098d60048036038101906109889190613851565b61228f565b005b34801561099a575f80fd5b506109b560048036038101906109b09190613851565b612451565b005b6060600380546109c6906139e9565b80601f01602080910402602001604051908101604052809291908181526020018280546109f2906139e9565b8015610a3d5780601f10610a1457610100808354040283529160200191610a3d565b820191905f5260205f20905b815481529060010190602001808311610a2057829003601f168201915b5050505050905090565b5f610a5a610a536126c9565b84846126d0565b6001905092915050565b610a6c6126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190613a63565b60405180910390fd5b80151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613af1565b60405180910390fd5b8060135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f8727c4afe988887760e8db0bbad9f9fcceee6428545956832f67c8fdbd589c1082604051610c239190613734565b60405180910390a25050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b610cb76126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3c90613a63565b60405180910390fd5b6103e8610d50611307565b600a610d5c9190613c6b565b610d64610c54565b610d6e9190613ce2565b610d789190613ce2565b811015610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190613d82565b60405180910390fd5b610dc2611307565b600a610dce9190613c6b565b81610dd99190613da0565b6015819055507f82752703028499b617ec0b1cf458c9689993344fd9c6ed80eeb873658cf5ad7f601554604051610e109190613838565b60405180910390a150565b60115f9054906101000a900460ff1681565b5f8060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610e756126c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f305782811015610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1290613e51565b60405180910390fd5b610f2f85610f276126c9565b8584036126d0565b5b610f3b858585612893565b60019150509392505050565b610f4f6126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490613a63565b60405180910390fd5b6064610fe7611307565b600a610ff39190613c6b565b610ffb610c54565b6110059190613ce2565b61100f9190613ce2565b811015611051576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104890613edf565b60405180910390fd5b611059611307565b600a6110659190613c6b565b816110709190613da0565b6012819055507f21bc0ea3406acb92d4449ab33befb4ae82f873a22f3b6cf0e466b2710beb59426012546040516110a79190613838565b60405180910390a150565b5f8061012c600954426110c59190613efd565b10156110d457601490506111a3565b61012c600954426110e59190613efd565b101580156111015750610258600954426110ff9190613efd565b105b1561110f57600a90506111a2565b610258600954426111209190613efd565b1015801561113c57506103846009544261113a9190613efd565b105b1561114a57600590506111a1565b6103846009544261115b9190613efd565b1015801561117757506105dc600954426111759190613efd565b105b1561118557600190506111a0565b6105dc600954426111969190613efd565b1061119f575f90505b5b5b5b5b8091505090565b6111b26126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790613a63565b60405180910390fd5b60115f9054906101000a900460ff16151581151503611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90613fa0565b60405180910390fd5b8060115f6101000a81548160ff0219169083151502179055507f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f160115f9054906101000a900460ff166040516112ea9190613734565b60405180910390a150565b60145f9054906101000a900460ff1681565b5f6012905090565b5f6113ac61131b6126c9565b848460015f6113286126c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546113a79190613fbe565b6126d0565b6001905092915050565b600f5f9054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60149054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60095481565b6114606126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590613a63565b60405180910390fd5b60145f9054906101000a900460ff16151581151503611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990614061565b60405180910390fd5b8060145f6101000a81548160ff0219169083151502179055507fe81be35e61864c26afd7a4655e99f321378d0aaae1e5af8ee67b658a7460f3cf60145f9054906101000a900460ff166040516115989190613734565b60405180910390a150565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6115f06126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461167e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167590613a63565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117686126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ed90613a63565b60405180910390fd5b600d60149054906101000a900460ff1615611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d906140c9565b60405180910390fd5b6001600d60146101000a81548160ff02191690831515021790555042600981905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80610384600954426118a59190613efd565b10156118b4576005905061190b565b610384600954426118c59190613efd565b101580156118e157506105dc600954426118df9190613efd565b105b156118ef576001905061190a565b6105dc600954426119009190613efd565b10611909575f90505b5b5b8091505090565b61191a6126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f90613a63565b60405180910390fd5b80151560105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90613af1565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c82604051611ad19190613734565b60405180910390a25050565b606060048054611aec906139e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611b18906139e9565b8015611b635780601f10611b3a57610100808354040283529160200191611b63565b820191905f5260205f20905b815481529060010190602001808311611b4657829003601f168201915b5050505050905090565b611b756126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfa90613a63565b60405180910390fd5b80600f5f6101000a81548160ff0219169083151502179055507f94da5f18dc9529c37f2af4ffa1921f49d8bb14b6e5fe22b0d6ddc94f102f9232600f5f9054906101000a900460ff16604051611c599190613734565b60405180910390a150565b5f8060015f611c716126c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2290614157565b60405180910390fd5b611d3f611d366126c9565b858584036126d0565b600191505092915050565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f611daf611da86126c9565b8484612893565b6001905092915050565b60125481565b611dc76126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4c90613a63565b60405180910390fd5b620f4240611e61610c54565b611e6b9190613ce2565b8111611eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea3906141e5565b60405180910390fd5b80600e819055507f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b145600e54604051611ee49190613838565b60405180910390a150565b611ef76126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c90613a63565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fea90614273565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61203e6126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c390613a63565b60405180910390fd5b80151560085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361215b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215290614301565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121f59190613734565b60405180910390a25050565b60155481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600e5481565b6122976126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231c90613a63565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a9061438f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6124596126c9565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124de90613a63565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125c8575f3373ffffffffffffffffffffffffffffffffffffffff164760405161253f906143da565b5f6040518083038185875af1925050503d805f8114612579576040519150601f19603f3d011682016040523d82523d5f602084013e61257e565b606091505b50509050806125c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b990614438565b60405180910390fd5b506126c6565b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126069190613965565b602060405180830381865afa158015612621573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612645919061446a565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401612682929190614495565b6020604051808303815f875af115801561269e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c291906144d0565b5050505b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361273e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127359061456b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a3906145f9565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128869190613838565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f890614687565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361296f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296690614715565b60405180910390fd5b600d60149054906101000a900460ff16806129d0575060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612a21575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a579061477d565b60405180910390fd5b5f8103612a7757612a7283835f61306a565b613065565b60145f9054906101000a900460ff1615612c2e5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b32575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8015612b8a57505f151560135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b8015612be257505f151560135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b15612c2d57601554811115612c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c239061480b565b60405180910390fd5b5b5b5f612c38306115a3565b90505f600e548210159050808015612c5d5750600f60019054906101000a900460ff16155b8015612cb5575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b15612d13576001600f60016101000a81548160ff021916908315150217905550600f5f9054906101000a900460ff1615612cef57600e5491505b612cf8826132df565b5f600f60016101000a81548160ff0219169083151502179055505b5f60085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612daf575060085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80612dc65750600f60019054906101000a900460ff165b15612dd3575f9050612e9f565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612e3657612e2f611892565b9050612e9e565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612e9957612e926110b2565b9050612e9d565b5f90505b5b5b5f811115612edd575f60648286612eb69190613da0565b612ec09190613ce2565b90508085612ece9190613efd565b9450612edb87308361306a565b505b60115f9054906101000a900460ff1615613056575f151560105f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515148015612f9957505f151560105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b8015612ff2575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15613055575f613001866115a3565b905060125485826130129190613fbe565b1115613053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304a90614899565b60405180910390fd5b505b5b61306186868661306a565b5050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cf90614687565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313d90614715565b60405180910390fd5b613151838383613597565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156131d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131cb90614927565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132629190613fbe565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132c69190613838565b60405180910390a36132d984848461359c565b50505050565b5f4790505f600267ffffffffffffffff8111156132ff576132fe614945565b5b60405190808252806020026020018201604052801561332d5781602001602082028036833780820191505090505b50905030815f8151811061334457613343614972565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061340c91906149b3565b816001815181106134205761341f614972565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b81526004016134bc959493929190614ace565b5f604051808303815f87803b1580156134d3575f80fd5b505af11580156134e5573d5f803e3d5ffd5b505050505f82476134f69190613efd565b90505f600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f1935050505090508015613590577f1309193d68e1a43bd32da5f04e07935cc194c20b2bd1813be5c6898b99dac4be8583604051613587929190614b26565b60405180910390a15b5050505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156135d85780820151818401526020810190506135bd565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6135fd826135a1565b61360781856135ab565b93506136178185602086016135bb565b613620816135e3565b840191505092915050565b5f6020820190508181035f83015261364381846135f3565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136788261364f565b9050919050565b6136888161366e565b8114613692575f80fd5b50565b5f813590506136a38161367f565b92915050565b5f819050919050565b6136bb816136a9565b81146136c5575f80fd5b50565b5f813590506136d6816136b2565b92915050565b5f80604083850312156136f2576136f161364b565b5b5f6136ff85828601613695565b9250506020613710858286016136c8565b9150509250929050565b5f8115159050919050565b61372e8161371a565b82525050565b5f6020820190506137475f830184613725565b92915050565b6137568161371a565b8114613760575f80fd5b50565b5f813590506137718161374d565b92915050565b5f806040838503121561378d5761378c61364b565b5b5f61379a85828601613695565b92505060206137ab85828601613763565b9150509250929050565b5f819050919050565b5f6137d86137d36137ce8461364f565b6137b5565b61364f565b9050919050565b5f6137e9826137be565b9050919050565b5f6137fa826137df565b9050919050565b61380a816137f0565b82525050565b5f6020820190506138235f830184613801565b92915050565b613832816136a9565b82525050565b5f60208201905061384b5f830184613829565b92915050565b5f602082840312156138665761386561364b565b5b5f61387384828501613695565b91505092915050565b5f602082840312156138915761389061364b565b5b5f61389e848285016136c8565b91505092915050565b5f805f606084860312156138be576138bd61364b565b5b5f6138cb86828701613695565b93505060206138dc86828701613695565b92505060406138ed868287016136c8565b9150509250925092565b5f6020828403121561390c5761390b61364b565b5b5f61391984828501613763565b91505092915050565b5f60ff82169050919050565b61393781613922565b82525050565b5f6020820190506139505f83018461392e565b92915050565b61395f8161366e565b82525050565b5f6020820190506139785f830184613956565b92915050565b5f80604083850312156139945761399361364b565b5b5f6139a185828601613695565b92505060206139b285828601613695565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a0057607f821691505b602082108103613a1357613a126139bc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a4d6020836135ab565b9150613a5882613a19565b602082019050919050565b5f6020820190508181035f830152613a7a81613a41565b9050919050565b7f4163636f756e7420697320616c72656164792073657420746f207468617420735f8201527f7461746500000000000000000000000000000000000000000000000000000000602082015250565b5f613adb6024836135ab565b9150613ae682613a81565b604082019050919050565b5f6020820190508181035f830152613b0881613acf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115613b9157808604811115613b6d57613b6c613b0f565b5b6001851615613b7c5780820291505b8081029050613b8a85613b3c565b9450613b51565b94509492505050565b5f82613ba95760019050613c64565b81613bb6575f9050613c64565b8160018114613bcc5760028114613bd657613c05565b6001915050613c64565b60ff841115613be857613be7613b0f565b5b8360020a915084821115613bff57613bfe613b0f565b5b50613c64565b5060208310610133831016604e8410600b8410161715613c3a5782820a905083811115613c3557613c34613b0f565b5b613c64565b613c478484846001613b48565b92509050818404811115613c5e57613c5d613b0f565b5b81810290505b9392505050565b5f613c75826136a9565b9150613c8083613922565b9250613cad7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b9a565b905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cec826136a9565b9150613cf7836136a9565b925082613d0757613d06613cb5565b5b828204905092915050565b7f4d6178205472616e73616374696f6e206c696d69732063616e6e6f74206265205f8201527f6c6f776572207468616e20302e3125206f6620746f74616c20737570706c7900602082015250565b5f613d6c603f836135ab565b9150613d7782613d12565b604082019050919050565b5f6020820190508181035f830152613d9981613d60565b9050919050565b5f613daa826136a9565b9150613db5836136a9565b9250828202613dc3816136a9565b91508282048414831517613dda57613dd9613b0f565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613e3b6028836135ab565b9150613e4682613de1565b604082019050919050565b5f6020820190508181035f830152613e6881613e2f565b9050919050565b7f4d61782077616c6c65742070657263656e746167652063616e6e6f74206265205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f613ec9602d836135ab565b9150613ed482613e6f565b604082019050919050565b5f6020820190508181035f830152613ef681613ebd565b9050919050565b5f613f07826136a9565b9150613f12836136a9565b9250828203905081811115613f2a57613f29613b0f565b5b92915050565b7f4d61782077616c6c6574206c696d697420697320616c726561647920736574205f8201527f746f207468617420737461746500000000000000000000000000000000000000602082015250565b5f613f8a602d836135ab565b9150613f9582613f30565b604082019050919050565b5f6020820190508181035f830152613fb781613f7e565b9050919050565b5f613fc8826136a9565b9150613fd3836136a9565b9250828201905080821115613feb57613fea613b0f565b5b92915050565b7f4d6178207472616e73616374696f6e206c696d697420697320616c72656164795f8201527f2073657420746f20746861742073746174650000000000000000000000000000602082015250565b5f61404b6032836135ab565b915061405682613ff1565b604082019050919050565b5f6020820190508181035f8301526140788161403f565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c65640000000000005f82015250565b5f6140b3601a836135ab565b91506140be8261407f565b602082019050919050565b5f6020820190508181035f8301526140e0816140a7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6141416025836135ab565b915061414c826140e7565b604082019050919050565b5f6020820190508181035f83015261416e81614135565b9050919050565b7f53776170546f6b656e734174416d6f756e74206d7573742062652067726561745f8201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c7900602082015250565b5f6141cf603f836135ab565b91506141da82614175565b604082019050919050565b5f6020820190508181035f8301526141fc816141c3565b9050919050565b7f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a5f8201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b5f61425d602b836135ab565b915061426882614203565b604082019050919050565b5f6020820190508181035f83015261428a81614251565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f6142eb602a836135ab565b91506142f682614291565b604082019050919050565b5f6020820190508181035f830152614318816142df565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6143796026836135ab565b91506143848261431f565b604082019050919050565b5f6020820190508181035f8301526143a68161436d565b9050919050565b5f81905092915050565b50565b5f6143c55f836143ad565b91506143d0826143b7565b5f82019050919050565b5f6143e4826143ba565b9150819050919050565b7f436c61696d206661696c656400000000000000000000000000000000000000005f82015250565b5f614422600c836135ab565b915061442d826143ee565b602082019050919050565b5f6020820190508181035f83015261444f81614416565b9050919050565b5f81519050614464816136b2565b92915050565b5f6020828403121561447f5761447e61364b565b5b5f61448c84828501614456565b91505092915050565b5f6040820190506144a85f830185613956565b6144b56020830184613829565b9392505050565b5f815190506144ca8161374d565b92915050565b5f602082840312156144e5576144e461364b565b5b5f6144f2848285016144bc565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6145556024836135ab565b9150614560826144fb565b604082019050919050565b5f6020820190508181035f83015261458281614549565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6145e36022836135ab565b91506145ee82614589565b604082019050919050565b5f6020820190508181035f830152614610816145d7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6146716025836135ab565b915061467c82614617565b604082019050919050565b5f6020820190508181035f83015261469e81614665565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6146ff6023836135ab565b915061470a826146a5565b604082019050919050565b5f6020820190508181035f83015261472c816146f3565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965740000000000005f82015250565b5f614767601a836135ab565b915061477282614733565b602082019050919050565b5f6020820190508181035f8301526147948161475b565b9050919050565b7f416e74695768616c653a205472616e7366657220616d6f756e742065786365655f8201527f647320746865206d61785472616e73616374696f6e416d6f756e740000000000602082015250565b5f6147f5603b836135ab565b91506148008261479b565b604082019050919050565b5f6020820190508181035f830152614822816147e9565b9050919050565b7f4d617857616c6c65743a20526563697069656e742065786365656473207468655f8201527f206d617857616c6c6574416d6f756e7400000000000000000000000000000000602082015250565b5f6148836030836135ab565b915061488e82614829565b604082019050919050565b5f6020820190508181035f8301526148b081614877565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149116026836135ab565b915061491c826148b7565b604082019050919050565b5f6020820190508181035f83015261493e81614905565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506149ad8161367f565b92915050565b5f602082840312156149c8576149c761364b565b5b5f6149d58482850161499f565b91505092915050565b5f819050919050565b5f614a016149fc6149f7846149de565b6137b5565b6136a9565b9050919050565b614a11816149e7565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614a498161366e565b82525050565b5f614a5a8383614a40565b60208301905092915050565b5f602082019050919050565b5f614a7c82614a17565b614a868185614a21565b9350614a9183614a31565b805f5b83811015614ac1578151614aa88882614a4f565b9750614ab383614a66565b925050600181019050614a94565b5085935050505092915050565b5f60a082019050614ae15f830188613829565b614aee6020830187614a08565b8181036040830152614b008186614a72565b9050614b0f6060830185613956565b614b1c6080830184613829565b9695505050505050565b5f604082019050614b395f830185613829565b614b466020830184613829565b939250505056fea2646970667358221220a14e2b1b0210317e3c9c2aa7e65a623f525b632c34494168b583632cdbd5d0e164736f6c63430008140033

Deployed Bytecode Sourcemap

16406:12058:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11691:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12605:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27948:364;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16450:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12012:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28320:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27506:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25634:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12782:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26048:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20415:787;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25723:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27049:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11911:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13363:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16893:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16498:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16815;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21515:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16598:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27150:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12128:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10878:148;;;;;;;;;;;;;:::i;:::-;;16704:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19282:192;;;;;;;;;;;;;:::i;:::-;;10664:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19918:489;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26432:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11799:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24682:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13586:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26797:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12263:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25684:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24374:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21649:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21217:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27105:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12446:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16853:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11034:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19484:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11691:100;11745:13;11778:5;11771:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11691:100;:::o;12605:169::-;12688:4;12705:39;12714:12;:10;:12::i;:::-;12728:7;12737:6;12705:8;:39::i;:::-;12762:4;12755:11;;12605:169;;;;:::o;27948:364::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28112:7:::1;28074:45;;:25;:34;28100:7;28074:34;;;;;;;;;;;;;;;;;;;;;;;;;:45;;::::0;28052:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28232:7;28195:25;:34;28221:7;28195:34;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;28287:7;28255:49;;;28296:7;28255:49;;;;;;:::i;:::-;;;;;;;;27948:364:::0;;:::o;16450:41::-;;;;;;;;;;;;;:::o;12012:108::-;12073:7;12100:12;;12093:19;;12012:108;:::o;28320:141::-;28395:4;28419:25;:34;28445:7;28419:34;;;;;;;;;;;;;;;;;;;;;;;;;28412:41;;28320:141;;;:::o;27506:434::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27687:4:::1;27672:10;:8;:10::i;:::-;27666:2;:16;;;;:::i;:::-;27649:13;:11;:13::i;:::-;:34;;;;:::i;:::-;27648:43;;;;:::i;:::-;27622:21;:69;;27600:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;27851:10;:8;:10::i;:::-;27845:2;:16;;;;:::i;:::-;27819:21;:43;;;;:::i;:::-;27795:20;:67;;;;27878:54;27911:20;;27878:54;;;;;;:::i;:::-;;;;;;;;27506:434:::0;:::o;25634:43::-;;;;;;;;;;;;;:::o;12782:573::-;12922:4;12939:24;12966:11;:19;12978:6;12966:19;;;;;;;;;;;;;;;:33;12986:12;:10;:12::i;:::-;12966:33;;;;;;;;;;;;;;;;12939:60;;13034:17;13014:16;:37;13010:265;;13096:6;13076:16;:26;;13068:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;13191:57;13200:6;13208:12;:10;:12::i;:::-;13241:6;13222:16;:25;13191:8;:57::i;:::-;13010:265;13287:36;13297:6;13305:9;13316:6;13287:9;:36::i;:::-;13343:4;13336:11;;;12782:573;;;;;:::o;26048:376::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26213:3:::1;26198:10;:8;:10::i;:::-;26192:2;:16;;;;:::i;:::-;26175:13;:11;:13::i;:::-;:34;;;;:::i;:::-;26174:42;;;;:::i;:::-;26154:16;:62;;26132:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;26345:10;:8;:10::i;:::-;26339:2;:16;;;;:::i;:::-;26319;:37;;;;:::i;:::-;26301:15;:55;;;;26372:44;26400:15;;26372:44;;;;;;:::i;:::-;;;;;;;;26048:376:::0;:::o;20415:787::-;20458:7;20480:16;20551:9;20531:17;;20513:15;:35;;;;:::i;:::-;:47;20509:658;;;20589:2;20577:14;;20509:658;;;20653:9;20632:17;;20614:15;:35;;;;:::i;:::-;:48;;:100;;;;;20704:10;20684:17;;20666:15;:35;;;;:::i;:::-;:48;20614:100;20610:557;;;20743:2;20731:14;;20610:557;;;20807:10;20786:17;;20768:15;:35;;;;:::i;:::-;:49;;:101;;;;;20859:10;20839:17;;20821:15;:35;;;;:::i;:::-;:48;20768:101;20764:403;;;20898:1;20886:13;;20764:403;;;20961:10;20940:17;;20922:15;:35;;;;:::i;:::-;:49;;:101;;;;;21013:10;20993:17;;20975:15;:35;;;;:::i;:::-;:48;20922:101;20918:249;;;21052:1;21040:13;;20918:249;;;21115:10;21094:17;;21076:15;:35;;;;:::i;:::-;:49;21072:95;;21154:1;21142:13;;21072:95;20918:249;20764:403;20610:557;20509:658;21186:8;21179:15;;;20415:787;:::o;25723:317::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25831:21:::1;;;;;;;;;;;25821:31;;:6;:31;;::::0;25799:127:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25961:6;25937:21;;:30;;;;;;;;;;;;;;;;;;25983:49;26010:21;;;;;;;;;;;25983:49;;;;;;:::i;:::-;;;;;;;;25723:317:::0;:::o;27049:49::-;;;;;;;;;;;;;:::o;11911:93::-;11969:5;11994:2;11987:9;;11911:93;:::o;13363:215::-;13451:4;13468:80;13477:12;:10;:12::i;:::-;13491:7;13537:10;13500:11;:25;13512:12;:10;:12::i;:::-;13500:25;;;;;;;;;;;;;;;:34;13526:7;13500:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13468:8;:80::i;:::-;13566:4;13559:11;;13363:215;;;;:::o;16893:28::-;;;;;;;;;;;;;:::o;16498:29::-;;;;;;;;;;;;;:::o;16815:::-;;;;;;;;;;;;;:::o;21515:125::-;21580:4;21604:19;:28;21624:7;21604:28;;;;;;;;;;;;;;;;;;;;;;;;;21597:35;;21515:125;;;:::o;16598:32::-;;;;:::o;27150:348::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27264:26:::1;;;;;;;;;;;27254:36;;:6;:36;;::::0;27232:137:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27409:6;27380:26;;:35;;;;;;;;;;;;;;;;;;27431:59;27463:26;;;;;;;;;;;27431:59;;;;;;:::i;:::-;;;;;;;;27150:348:::0;:::o;12128:127::-;12202:7;12229:9;:18;12239:7;12229:18;;;;;;;;;;;;;;;;12222:25;;12128:127;;;:::o;10878:148::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10985:1:::1;10948:40;;10969:6;;;;;;;;;;;10948:40;;;;;;;;;;;;11016:1;10999:6;;:19;;;;;;;;;;;;;;;;;;10878:148::o:0;16704:30::-;;;;;;;;;;;;;:::o;19282:192::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19343:14:::1;;;;;;;;;;;19342:15;19334:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;19416:4;19399:14;;:21;;;;;;;;;;;;;;;;;;19451:15;19431:17;:35;;;;19282:192::o:0;10664:79::-;10702:7;10729:6;;;;;;;;;;;10722:13;;10664:79;:::o;19918:489::-;19960:7;19990:15;20060:10;20040:17;;20022:15;:35;;;;:::i;:::-;:48;20018:347;;;20098:1;20087:12;;20018:347;;;20161:10;20140:17;;20122:15;:35;;;;:::i;:::-;:49;;:101;;;;;20213:10;20193:17;;20175:15;:35;;;;:::i;:::-;:48;20122:101;20118:247;;;20251:1;20240:12;;20118:247;;;20314:10;20293:17;;20275:15;:35;;;;:::i;:::-;:49;20271:94;;20352:1;20341:12;;20271:94;20118:247;20018:347;20392:7;20385:14;;;19918:489;:::o;26432:357::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26590:7:::1;26548:49;;:29;:38;26578:7;26548:38;;;;;;;;;;;;;;;;;;;;;;;;;:49;;::::0;26526:136:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26714:7;26673:29;:38;26703:7;26673:38;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;26764:7;26737:44;;;26773:7;26737:44;;;;;;:::i;:::-;;;;;;;;26432:357:::0;;:::o;11799:104::-;11855:13;11888:7;11881:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11799:104;:::o;24682:165::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24774:14:::1;24758:13;;:30;;;;;;;;;;;;;;;;;;24804:35;24825:13;;;;;;;;;;;24804:35;;;;;;:::i;:::-;;;;;;;;24682:165:::0;:::o;13586:413::-;13679:4;13696:24;13723:11;:25;13735:12;:10;:12::i;:::-;13723:25;;;;;;;;;;;;;;;:34;13749:7;13723:34;;;;;;;;;;;;;;;;13696:61;;13796:15;13776:16;:35;;13768:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13889:67;13898:12;:10;:12::i;:::-;13912:7;13940:15;13921:16;:34;13889:8;:67::i;:::-;13987:4;13980:11;;;13586:413;;;;:::o;26797:145::-;26872:4;26896:29;:38;26926:7;26896:38;;;;;;;;;;;;;;;;;;;;;;;;;26889:45;;26797:145;;;:::o;12263:175::-;12349:4;12366:42;12376:12;:10;:12::i;:::-;12390:9;12401:6;12366:9;:42::i;:::-;12426:4;12419:11;;12263:175;;;;:::o;25684:30::-;;;;:::o;24374:300::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24489:7:::1;24473:13;:11;:13::i;:::-;:23;;;;:::i;:::-;24461:9;:35;24453:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24596:9;24575:18;:30;;;;24621:45;24647:18;;24621:45;;;;;;:::i;:::-;;;;;;;;24374:300:::0;:::o;21649:226::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21772:1:::1;21744:30;;:16;:30;;::::0;21736:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21851:16;21833:15;;:34;;;;;;;;;;;;;;;;;;21649:226:::0;:::o;21217:290::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21343:8:::1;21311:40;;:19;:28;21331:7;21311:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;21303:94:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21439:8;21408:19;:28;21428:7;21408:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21481:7;21465:34;;;21490:8;21465:34;;;;;;:::i;:::-;;;;;;;;21217:290:::0;;:::o;27105:36::-;;;;:::o;12446:151::-;12535:7;12562:11;:18;12574:5;12562:18;;;;;;;;;;;;;;;:27;12581:7;12562:27;;;;;;;;;;;;;;;;12555:34;;12446:151;;;;:::o;16853:33::-;;;;:::o;11034:244::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11143:1:::1;11123:22;;:8;:22;;::::0;11115:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11233:8;11204:38;;11225:6;;;;;;;;;;;11204:38;;;;;;;;;;;;11262:8;11253:6;;:17;;;;;;;;;;;;;;;;;;11034:244:::0;:::o;19484:426::-;10801:12;:10;:12::i;:::-;10791:22;;:6;;;;;;;;;;;:22;;;10783:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19576:3:::1;19559:21;;:5;:21;;::::0;19555:189:::1;;19598:12;19615:10;:15;;19638:21;19615:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19597:67;;;19687:7;19679:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;19726:7;;;19555:189;19754:17;19781:5;19754:33;;19798:15;19816:10;:20;;;19845:4;19816:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19798:53;;19862:10;:19;;;19882:10;19894:7;19862:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19544:366;;10861:1;19484:426:::0;:::o;9987:98::-;10040:7;10067:10;10060:17;;9987:98;:::o;15754:380::-;15907:1;15890:19;;:5;:19;;;15882:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15988:1;15969:21;;:7;:21;;;15961:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16072:6;16042:11;:18;16054:5;16042:18;;;;;;;;;;;;;;;:27;16061:7;16042:27;;;;;;;;;;;;;;;:36;;;;16110:7;16094:32;;16103:5;16094:32;;;16119:6;16094:32;;;;;;:::i;:::-;;;;;;;;15754:380;;;:::o;21887:2479::-;22000:1;21984:18;;:4;:18;;;21976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22077:1;22063:16;;:2;:16;;;22055:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22138:14;;;;;;;;;;;:43;;;;22156:19;:25;22176:4;22156:25;;;;;;;;;;;;;;;;;;;;;;;;;22138:43;:70;;;;22185:19;:23;22205:2;22185:23;;;;;;;;;;;;;;;;;;;;;;;;;22138:70;22130:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;22278:1;22268:6;:11;22264:93;;22296:28;22312:4;22318:2;22322:1;22296:15;:28::i;:::-;22339:7;;22264:93;22373:26;;;;;;;;;;;22369:410;;;22439:13;;;;;;;;;;;22431:21;;:4;:21;;;:44;;;;22462:13;;;;;;;;;;;22456:19;;:2;:19;;;22431:44;22430:107;;;;;22532:5;22497:40;;:25;:31;22523:4;22497:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;22430:107;:169;;;;;22594:5;22559:40;;:25;:29;22585:2;22559:29;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;22430:169;22426:342;;;22652:20;;22642:6;:30;;22634:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22426:342;22369:410;22789:28;22820:24;22838:4;22820:9;:24::i;:::-;22789:55;;22857:12;22896:18;;22872:20;:42;;22857:57;;22931:7;:33;;;;;22956:8;;;;;;;;;;;22955:9;22931:33;:69;;;;;22987:13;;;;;;;;;;;22981:19;;:2;:19;;;22931:69;22927:322;;;23038:4;23027:8;;:15;;;;;;;;;;;;;;;;;;23063:13;;;;;;;;;;;23059:95;;;23120:18;;23097:41;;23059:95;23170:26;23175:20;23170:4;:26::i;:::-;23232:5;23221:8;;:16;;;;;;;;;;;;;;;;;;22927:322;23261:18;23294:19;:25;23314:4;23294:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23323:19;:23;23343:2;23323:23;;;;;;;;;;;;;;;;;;;;;;;;;23294:52;:64;;;;23350:8;;;;;;;;;;;23294:64;23290:350;;;23388:1;23375:14;;23290:350;;;23420:13;;;;;;;;;;;23412:21;;:4;:21;;;23408:232;;23464:11;:9;:11::i;:::-;23450:25;;23408:232;;;23504:13;;;;;;;;;;;23498:19;;:2;:19;;;23494:146;;23560:12;:10;:12::i;:::-;23547:25;;23494:146;;;23627:1;23614:14;;23494:146;23408:232;23290:350;23669:1;23656:10;:14;23652:183;;;23687:12;23726:3;23712:10;23703:6;:19;;;;:::i;:::-;23702:27;;;;:::i;:::-;23687:42;;23762:4;23753:6;:13;;;;:::i;:::-;23744:22;;23781:42;23797:4;23811;23818;23781:15;:42::i;:::-;23672:163;23652:183;23851:21;;;;;;;;;;;23847:466;;;23933:5;23893:45;;:29;:35;23923:4;23893:35;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;:112;;;;;24000:5;23960:45;;:29;:33;23990:2;23960:33;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;23893:112;:152;;;;;24032:13;;;;;;;;;;;24026:19;;:2;:19;;;;23893:152;23889:413;;;24080:12;24096:13;24106:2;24096:9;:13::i;:::-;24080:29;;24178:15;;24168:6;24158:7;:16;;;;:::i;:::-;:35;;24128:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;24061:241;23889:413;23847:466;24325:33;24341:4;24347:2;24351:6;24325:15;:33::i;:::-;21965:2401;;;21887:2479;;;;:::o;14007:733::-;14165:1;14147:20;;:6;:20;;;14139:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14249:1;14228:23;;:9;:23;;;14220:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14304:47;14325:6;14333:9;14344:6;14304:20;:47::i;:::-;14364:21;14388:9;:17;14398:6;14388:17;;;;;;;;;;;;;;;;14364:41;;14441:6;14424:13;:23;;14416:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14562:6;14546:13;:22;14526:9;:17;14536:6;14526:17;;;;;;;;;;;;;;;:42;;;;14614:6;14590:9;:20;14600:9;14590:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14655:9;14638:35;;14647:6;14638:35;;;14666:6;14638:35;;;;;;:::i;:::-;;;;;;;;14686:46;14706:6;14714:9;14725:6;14686:19;:46::i;:::-;14128:612;14007:733;;;:::o;24855:669::-;24909:22;24934:21;24909:46;;24968:21;25006:1;24992:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24968:40;;25037:4;25019;25024:1;25019:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25063:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25053:4;25058:1;25053:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25098:15;;;;;;;;;;;:66;;;25179:11;25205:1;25221:4;25248;25268:15;25098:186;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25297:18;25342:14;25318:21;:38;;;;:::i;:::-;25297:59;;25369:12;25392:15;;;;;;;;;;;25384:29;;:41;25414:10;25384:41;;;;;;;;;;;;;;;;;;;;;;;25369:56;;25440:7;25436:81;;;25469:36;25481:11;25494:10;25469:36;;;;;;;:::i;:::-;;;;;;;;25436:81;24898:626;;;;24855:669;:::o;16142:125::-;;;;:::o;16275:124::-;;;;:::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;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:116::-;3516:21;3531:5;3516:21;:::i;:::-;3509:5;3506:32;3496:60;;3552:1;3549;3542:12;3496:60;3446:116;:::o;3568:133::-;3611:5;3649:6;3636:20;3627:29;;3665:30;3689:5;3665:30;:::i;:::-;3568:133;;;;:::o;3707:468::-;3772:6;3780;3829:2;3817:9;3808:7;3804:23;3800:32;3797:119;;;3835:79;;:::i;:::-;3797:119;3955:1;3980:53;4025:7;4016:6;4005:9;4001:22;3980:53;:::i;:::-;3970:63;;3926:117;4082:2;4108:50;4150:7;4141:6;4130:9;4126:22;4108:50;:::i;:::-;4098:60;;4053:115;3707:468;;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:152::-;4603:9;4636:37;4667:5;4636:37;:::i;:::-;4623:50;;4527:152;;;:::o;4685:183::-;4798:63;4855:5;4798:63;:::i;:::-;4793:3;4786:76;4685:183;;:::o;4874:274::-;4993:4;5031:2;5020:9;5016:18;5008:26;;5044:97;5138:1;5127:9;5123:17;5114:6;5044:97;:::i;:::-;4874:274;;;;:::o;5154:118::-;5241:24;5259:5;5241:24;:::i;:::-;5236:3;5229:37;5154:118;;:::o;5278:222::-;5371:4;5409:2;5398:9;5394:18;5386:26;;5422:71;5490:1;5479:9;5475:17;5466:6;5422:71;:::i;:::-;5278:222;;;;:::o;5506:329::-;5565:6;5614:2;5602:9;5593:7;5589:23;5585:32;5582:119;;;5620:79;;:::i;:::-;5582:119;5740:1;5765:53;5810:7;5801:6;5790:9;5786:22;5765:53;:::i;:::-;5755:63;;5711:117;5506:329;;;;:::o;5841:::-;5900:6;5949:2;5937:9;5928:7;5924:23;5920:32;5917:119;;;5955:79;;:::i;:::-;5917:119;6075:1;6100:53;6145:7;6136:6;6125:9;6121:22;6100:53;:::i;:::-;6090:63;;6046:117;5841:329;;;;:::o;6176:619::-;6253:6;6261;6269;6318:2;6306:9;6297:7;6293:23;6289:32;6286:119;;;6324:79;;:::i;:::-;6286:119;6444:1;6469:53;6514:7;6505:6;6494:9;6490:22;6469:53;:::i;:::-;6459:63;;6415:117;6571:2;6597:53;6642:7;6633:6;6622:9;6618:22;6597:53;:::i;:::-;6587:63;;6542:118;6699:2;6725:53;6770:7;6761:6;6750:9;6746:22;6725:53;:::i;:::-;6715:63;;6670:118;6176:619;;;;;:::o;6801:323::-;6857:6;6906:2;6894:9;6885:7;6881:23;6877:32;6874:119;;;6912:79;;:::i;:::-;6874:119;7032:1;7057:50;7099:7;7090:6;7079:9;7075:22;7057:50;:::i;:::-;7047:60;;7003:114;6801:323;;;;:::o;7130:86::-;7165:7;7205:4;7198:5;7194:16;7183:27;;7130:86;;;:::o;7222:112::-;7305:22;7321:5;7305:22;:::i;:::-;7300:3;7293:35;7222:112;;:::o;7340:214::-;7429:4;7467:2;7456:9;7452:18;7444:26;;7480:67;7544:1;7533:9;7529:17;7520:6;7480:67;:::i;:::-;7340:214;;;;:::o;7560:118::-;7647:24;7665:5;7647:24;:::i;:::-;7642:3;7635:37;7560:118;;:::o;7684:222::-;7777:4;7815:2;7804:9;7800:18;7792:26;;7828:71;7896:1;7885:9;7881:17;7872:6;7828:71;:::i;:::-;7684:222;;;;:::o;7912:474::-;7980:6;7988;8037:2;8025:9;8016:7;8012:23;8008:32;8005:119;;;8043:79;;:::i;:::-;8005:119;8163:1;8188:53;8233:7;8224:6;8213:9;8209:22;8188:53;:::i;:::-;8178:63;;8134:117;8290:2;8316:53;8361:7;8352:6;8341:9;8337:22;8316:53;:::i;:::-;8306:63;;8261:118;7912:474;;;;;:::o;8392:180::-;8440:77;8437:1;8430:88;8537:4;8534:1;8527:15;8561:4;8558:1;8551:15;8578:320;8622:6;8659:1;8653:4;8649:12;8639:22;;8706:1;8700:4;8696:12;8727:18;8717:81;;8783:4;8775:6;8771:17;8761:27;;8717:81;8845:2;8837:6;8834:14;8814:18;8811:38;8808:84;;8864:18;;:::i;:::-;8808:84;8629:269;8578:320;;;:::o;8904:182::-;9044:34;9040:1;9032:6;9028:14;9021:58;8904:182;:::o;9092:366::-;9234:3;9255:67;9319:2;9314:3;9255:67;:::i;:::-;9248:74;;9331:93;9420:3;9331:93;:::i;:::-;9449:2;9444:3;9440:12;9433:19;;9092:366;;;:::o;9464:419::-;9630:4;9668:2;9657:9;9653:18;9645:26;;9717:9;9711:4;9707:20;9703:1;9692:9;9688:17;9681:47;9745:131;9871:4;9745:131;:::i;:::-;9737:139;;9464:419;;;:::o;9889:223::-;10029:34;10025:1;10017:6;10013:14;10006:58;10098:6;10093:2;10085:6;10081:15;10074:31;9889:223;:::o;10118:366::-;10260:3;10281:67;10345:2;10340:3;10281:67;:::i;:::-;10274:74;;10357:93;10446:3;10357:93;:::i;:::-;10475:2;10470:3;10466:12;10459:19;;10118:366;;;:::o;10490:419::-;10656:4;10694:2;10683:9;10679:18;10671:26;;10743:9;10737:4;10733:20;10729:1;10718:9;10714:17;10707:47;10771:131;10897:4;10771:131;:::i;:::-;10763:139;;10490:419;;;:::o;10915:180::-;10963:77;10960:1;10953:88;11060:4;11057:1;11050:15;11084:4;11081:1;11074:15;11101:102;11143:8;11190:5;11187:1;11183:13;11162:34;;11101:102;;;:::o;11209:848::-;11270:5;11277:4;11301:6;11292:15;;11325:5;11316:14;;11339:712;11360:1;11350:8;11347:15;11339:712;;;11455:4;11450:3;11446:14;11440:4;11437:24;11434:50;;;11464:18;;:::i;:::-;11434:50;11514:1;11504:8;11500:16;11497:451;;;11929:4;11922:5;11918:16;11909:25;;11497:451;11979:4;11973;11969:15;11961:23;;12009:32;12032:8;12009:32;:::i;:::-;11997:44;;11339:712;;;11209:848;;;;;;;:::o;12063:1073::-;12117:5;12308:8;12298:40;;12329:1;12320:10;;12331:5;;12298:40;12357:4;12347:36;;12374:1;12365:10;;12376:5;;12347:36;12443:4;12491:1;12486:27;;;;12527:1;12522:191;;;;12436:277;;12486:27;12504:1;12495:10;;12506:5;;;12522:191;12567:3;12557:8;12554:17;12551:43;;;12574:18;;:::i;:::-;12551:43;12623:8;12620:1;12616:16;12607:25;;12658:3;12651:5;12648:14;12645:40;;;12665:18;;:::i;:::-;12645:40;12698:5;;;12436:277;;12822:2;12812:8;12809:16;12803:3;12797:4;12794:13;12790:36;12772:2;12762:8;12759:16;12754:2;12748:4;12745:12;12741:35;12725:111;12722:246;;;12878:8;12872:4;12868:19;12859:28;;12913:3;12906:5;12903:14;12900:40;;;12920:18;;:::i;:::-;12900:40;12953:5;;12722:246;12993:42;13031:3;13021:8;13015:4;13012:1;12993:42;:::i;:::-;12978:57;;;;13067:4;13062:3;13058:14;13051:5;13048:25;13045:51;;;13076:18;;:::i;:::-;13045:51;13125:4;13118:5;13114:16;13105:25;;12063:1073;;;;;;:::o;13142:281::-;13200:5;13224:23;13242:4;13224:23;:::i;:::-;13216:31;;13268:25;13284:8;13268:25;:::i;:::-;13256:37;;13312:104;13349:66;13339:8;13333:4;13312:104;:::i;:::-;13303:113;;13142:281;;;;:::o;13429:180::-;13477:77;13474:1;13467:88;13574:4;13571:1;13564:15;13598:4;13595:1;13588:15;13615:185;13655:1;13672:20;13690:1;13672:20;:::i;:::-;13667:25;;13706:20;13724:1;13706:20;:::i;:::-;13701:25;;13745:1;13735:35;;13750:18;;:::i;:::-;13735:35;13792:1;13789;13785:9;13780:14;;13615:185;;;;:::o;13806:250::-;13946:34;13942:1;13934:6;13930:14;13923:58;14015:33;14010:2;14002:6;13998:15;13991:58;13806:250;:::o;14062:366::-;14204:3;14225:67;14289:2;14284:3;14225:67;:::i;:::-;14218:74;;14301:93;14390:3;14301:93;:::i;:::-;14419:2;14414:3;14410:12;14403:19;;14062:366;;;:::o;14434:419::-;14600:4;14638:2;14627:9;14623:18;14615:26;;14687:9;14681:4;14677:20;14673:1;14662:9;14658:17;14651:47;14715:131;14841:4;14715:131;:::i;:::-;14707:139;;14434:419;;;:::o;14859:410::-;14899:7;14922:20;14940:1;14922:20;:::i;:::-;14917:25;;14956:20;14974:1;14956:20;:::i;:::-;14951:25;;15011:1;15008;15004:9;15033:30;15051:11;15033:30;:::i;:::-;15022:41;;15212:1;15203:7;15199:15;15196:1;15193:22;15173:1;15166:9;15146:83;15123:139;;15242:18;;:::i;:::-;15123:139;14907:362;14859:410;;;;:::o;15275:227::-;15415:34;15411:1;15403:6;15399:14;15392:58;15484:10;15479:2;15471:6;15467:15;15460:35;15275:227;:::o;15508:366::-;15650:3;15671:67;15735:2;15730:3;15671:67;:::i;:::-;15664:74;;15747:93;15836:3;15747:93;:::i;:::-;15865:2;15860:3;15856:12;15849:19;;15508:366;;;:::o;15880:419::-;16046:4;16084:2;16073:9;16069:18;16061:26;;16133:9;16127:4;16123:20;16119:1;16108:9;16104:17;16097:47;16161:131;16287:4;16161:131;:::i;:::-;16153:139;;15880:419;;;:::o;16305:232::-;16445:34;16441:1;16433:6;16429:14;16422:58;16514:15;16509:2;16501:6;16497:15;16490:40;16305:232;:::o;16543:366::-;16685:3;16706:67;16770:2;16765:3;16706:67;:::i;:::-;16699:74;;16782:93;16871:3;16782:93;:::i;:::-;16900:2;16895:3;16891:12;16884:19;;16543:366;;;:::o;16915:419::-;17081:4;17119:2;17108:9;17104:18;17096:26;;17168:9;17162:4;17158:20;17154:1;17143:9;17139:17;17132:47;17196:131;17322:4;17196:131;:::i;:::-;17188:139;;16915:419;;;:::o;17340:194::-;17380:4;17400:20;17418:1;17400:20;:::i;:::-;17395:25;;17434:20;17452:1;17434:20;:::i;:::-;17429:25;;17478:1;17475;17471:9;17463:17;;17502:1;17496:4;17493:11;17490:37;;;17507:18;;:::i;:::-;17490:37;17340:194;;;;:::o;17540:232::-;17680:34;17676:1;17668:6;17664:14;17657:58;17749:15;17744:2;17736:6;17732:15;17725:40;17540:232;:::o;17778:366::-;17920:3;17941:67;18005:2;18000:3;17941:67;:::i;:::-;17934:74;;18017:93;18106:3;18017:93;:::i;:::-;18135:2;18130:3;18126:12;18119:19;;17778:366;;;:::o;18150:419::-;18316:4;18354:2;18343:9;18339:18;18331:26;;18403:9;18397:4;18393:20;18389:1;18378:9;18374:17;18367:47;18431:131;18557:4;18431:131;:::i;:::-;18423:139;;18150:419;;;:::o;18575:191::-;18615:3;18634:20;18652:1;18634:20;:::i;:::-;18629:25;;18668:20;18686:1;18668:20;:::i;:::-;18663:25;;18711:1;18708;18704:9;18697:16;;18732:3;18729:1;18726:10;18723:36;;;18739:18;;:::i;:::-;18723:36;18575:191;;;;:::o;18772:237::-;18912:34;18908:1;18900:6;18896:14;18889:58;18981:20;18976:2;18968:6;18964:15;18957:45;18772:237;:::o;19015:366::-;19157:3;19178:67;19242:2;19237:3;19178:67;:::i;:::-;19171:74;;19254:93;19343:3;19254:93;:::i;:::-;19372:2;19367:3;19363:12;19356:19;;19015:366;;;:::o;19387:419::-;19553:4;19591:2;19580:9;19576:18;19568:26;;19640:9;19634:4;19630:20;19626:1;19615:9;19611:17;19604:47;19668:131;19794:4;19668:131;:::i;:::-;19660:139;;19387:419;;;:::o;19812:176::-;19952:28;19948:1;19940:6;19936:14;19929:52;19812:176;:::o;19994:366::-;20136:3;20157:67;20221:2;20216:3;20157:67;:::i;:::-;20150:74;;20233:93;20322:3;20233:93;:::i;:::-;20351:2;20346:3;20342:12;20335:19;;19994:366;;;:::o;20366:419::-;20532:4;20570:2;20559:9;20555:18;20547:26;;20619:9;20613:4;20609:20;20605:1;20594:9;20590:17;20583:47;20647:131;20773:4;20647:131;:::i;:::-;20639:139;;20366:419;;;:::o;20791:224::-;20931:34;20927:1;20919:6;20915:14;20908:58;21000:7;20995:2;20987:6;20983:15;20976:32;20791:224;:::o;21021:366::-;21163:3;21184:67;21248:2;21243:3;21184:67;:::i;:::-;21177:74;;21260:93;21349:3;21260:93;:::i;:::-;21378:2;21373:3;21369:12;21362:19;;21021:366;;;:::o;21393:419::-;21559:4;21597:2;21586:9;21582:18;21574:26;;21646:9;21640:4;21636:20;21632:1;21621:9;21617:17;21610:47;21674:131;21800:4;21674:131;:::i;:::-;21666:139;;21393:419;;;:::o;21818:250::-;21958:34;21954:1;21946:6;21942:14;21935:58;22027:33;22022:2;22014:6;22010:15;22003:58;21818:250;:::o;22074:366::-;22216:3;22237:67;22301:2;22296:3;22237:67;:::i;:::-;22230:74;;22313:93;22402:3;22313:93;:::i;:::-;22431:2;22426:3;22422:12;22415:19;;22074:366;;;:::o;22446:419::-;22612:4;22650:2;22639:9;22635:18;22627:26;;22699:9;22693:4;22689:20;22685:1;22674:9;22670:17;22663:47;22727:131;22853:4;22727:131;:::i;:::-;22719:139;;22446:419;;;:::o;22871:230::-;23011:34;23007:1;22999:6;22995:14;22988:58;23080:13;23075:2;23067:6;23063:15;23056:38;22871:230;:::o;23107:366::-;23249:3;23270:67;23334:2;23329:3;23270:67;:::i;:::-;23263:74;;23346:93;23435:3;23346:93;:::i;:::-;23464:2;23459:3;23455:12;23448:19;;23107:366;;;:::o;23479:419::-;23645:4;23683:2;23672:9;23668:18;23660:26;;23732:9;23726:4;23722:20;23718:1;23707:9;23703:17;23696:47;23760:131;23886:4;23760:131;:::i;:::-;23752:139;;23479:419;;;:::o;23904:229::-;24044:34;24040:1;24032:6;24028:14;24021:58;24113:12;24108:2;24100:6;24096:15;24089:37;23904:229;:::o;24139:366::-;24281:3;24302:67;24366:2;24361:3;24302:67;:::i;:::-;24295:74;;24378:93;24467:3;24378:93;:::i;:::-;24496:2;24491:3;24487:12;24480:19;;24139:366;;;:::o;24511:419::-;24677:4;24715:2;24704:9;24700:18;24692:26;;24764:9;24758:4;24754:20;24750:1;24739:9;24735:17;24728:47;24792:131;24918:4;24792:131;:::i;:::-;24784:139;;24511:419;;;:::o;24936:225::-;25076:34;25072:1;25064:6;25060:14;25053:58;25145:8;25140:2;25132:6;25128:15;25121:33;24936:225;:::o;25167:366::-;25309:3;25330:67;25394:2;25389:3;25330:67;:::i;:::-;25323:74;;25406:93;25495:3;25406:93;:::i;:::-;25524:2;25519:3;25515:12;25508:19;;25167:366;;;:::o;25539:419::-;25705:4;25743:2;25732:9;25728:18;25720:26;;25792:9;25786:4;25782:20;25778:1;25767:9;25763:17;25756:47;25820:131;25946:4;25820:131;:::i;:::-;25812:139;;25539:419;;;:::o;25964:147::-;26065:11;26102:3;26087:18;;25964:147;;;;:::o;26117:114::-;;:::o;26237:398::-;26396:3;26417:83;26498:1;26493:3;26417:83;:::i;:::-;26410:90;;26509:93;26598:3;26509:93;:::i;:::-;26627:1;26622:3;26618:11;26611:18;;26237:398;;;:::o;26641:379::-;26825:3;26847:147;26990:3;26847:147;:::i;:::-;26840:154;;27011:3;27004:10;;26641:379;;;:::o;27026:162::-;27166:14;27162:1;27154:6;27150:14;27143:38;27026:162;:::o;27194:366::-;27336:3;27357:67;27421:2;27416:3;27357:67;:::i;:::-;27350:74;;27433:93;27522:3;27433:93;:::i;:::-;27551:2;27546:3;27542:12;27535:19;;27194:366;;;:::o;27566:419::-;27732:4;27770:2;27759:9;27755:18;27747:26;;27819:9;27813:4;27809:20;27805:1;27794:9;27790:17;27783:47;27847:131;27973:4;27847:131;:::i;:::-;27839:139;;27566:419;;;:::o;27991:143::-;28048:5;28079:6;28073:13;28064:22;;28095:33;28122:5;28095:33;:::i;:::-;27991:143;;;;:::o;28140:351::-;28210:6;28259:2;28247:9;28238:7;28234:23;28230:32;28227:119;;;28265:79;;:::i;:::-;28227:119;28385:1;28410:64;28466:7;28457:6;28446:9;28442:22;28410:64;:::i;:::-;28400:74;;28356:128;28140:351;;;;:::o;28497:332::-;28618:4;28656:2;28645:9;28641:18;28633:26;;28669:71;28737:1;28726:9;28722:17;28713:6;28669:71;:::i;:::-;28750:72;28818:2;28807:9;28803:18;28794:6;28750:72;:::i;:::-;28497:332;;;;;:::o;28835:137::-;28889:5;28920:6;28914:13;28905:22;;28936:30;28960:5;28936:30;:::i;:::-;28835:137;;;;:::o;28978:345::-;29045:6;29094:2;29082:9;29073:7;29069:23;29065:32;29062:119;;;29100:79;;:::i;:::-;29062:119;29220:1;29245:61;29298:7;29289:6;29278:9;29274:22;29245:61;:::i;:::-;29235:71;;29191:125;28978:345;;;;:::o;29329:223::-;29469:34;29465:1;29457:6;29453:14;29446:58;29538:6;29533:2;29525:6;29521:15;29514:31;29329:223;:::o;29558:366::-;29700:3;29721:67;29785:2;29780:3;29721:67;:::i;:::-;29714:74;;29797:93;29886:3;29797:93;:::i;:::-;29915:2;29910:3;29906:12;29899:19;;29558:366;;;:::o;29930:419::-;30096:4;30134:2;30123:9;30119:18;30111:26;;30183:9;30177:4;30173:20;30169:1;30158:9;30154:17;30147:47;30211:131;30337:4;30211:131;:::i;:::-;30203:139;;29930:419;;;:::o;30355:221::-;30495:34;30491:1;30483:6;30479:14;30472:58;30564:4;30559:2;30551:6;30547:15;30540:29;30355:221;:::o;30582:366::-;30724:3;30745:67;30809:2;30804:3;30745:67;:::i;:::-;30738:74;;30821:93;30910:3;30821:93;:::i;:::-;30939:2;30934:3;30930:12;30923:19;;30582:366;;;:::o;30954:419::-;31120:4;31158:2;31147:9;31143:18;31135:26;;31207:9;31201:4;31197:20;31193:1;31182:9;31178:17;31171:47;31235:131;31361:4;31235:131;:::i;:::-;31227:139;;30954:419;;;:::o;31379:224::-;31519:34;31515:1;31507:6;31503:14;31496:58;31588:7;31583:2;31575:6;31571:15;31564:32;31379:224;:::o;31609:366::-;31751:3;31772:67;31836:2;31831:3;31772:67;:::i;:::-;31765:74;;31848:93;31937:3;31848:93;:::i;:::-;31966:2;31961:3;31957:12;31950:19;;31609:366;;;:::o;31981:419::-;32147:4;32185:2;32174:9;32170:18;32162:26;;32234:9;32228:4;32224:20;32220:1;32209:9;32205:17;32198:47;32262:131;32388:4;32262:131;:::i;:::-;32254:139;;31981:419;;;:::o;32406:222::-;32546:34;32542:1;32534:6;32530:14;32523:58;32615:5;32610:2;32602:6;32598:15;32591:30;32406:222;:::o;32634:366::-;32776:3;32797:67;32861:2;32856:3;32797:67;:::i;:::-;32790:74;;32873:93;32962:3;32873:93;:::i;:::-;32991:2;32986:3;32982:12;32975:19;;32634:366;;;:::o;33006:419::-;33172:4;33210:2;33199:9;33195:18;33187:26;;33259:9;33253:4;33249:20;33245:1;33234:9;33230:17;33223:47;33287:131;33413:4;33287:131;:::i;:::-;33279:139;;33006:419;;;:::o;33431:176::-;33571:28;33567:1;33559:6;33555:14;33548:52;33431:176;:::o;33613:366::-;33755:3;33776:67;33840:2;33835:3;33776:67;:::i;:::-;33769:74;;33852:93;33941:3;33852:93;:::i;:::-;33970:2;33965:3;33961:12;33954:19;;33613:366;;;:::o;33985:419::-;34151:4;34189:2;34178:9;34174:18;34166:26;;34238:9;34232:4;34228:20;34224:1;34213:9;34209:17;34202:47;34266:131;34392:4;34266:131;:::i;:::-;34258:139;;33985:419;;;:::o;34410:246::-;34550:34;34546:1;34538:6;34534:14;34527:58;34619:29;34614:2;34606:6;34602:15;34595:54;34410:246;:::o;34662:366::-;34804:3;34825:67;34889:2;34884:3;34825:67;:::i;:::-;34818:74;;34901:93;34990:3;34901:93;:::i;:::-;35019:2;35014:3;35010:12;35003:19;;34662:366;;;:::o;35034:419::-;35200:4;35238:2;35227:9;35223:18;35215:26;;35287:9;35281:4;35277:20;35273:1;35262:9;35258:17;35251:47;35315:131;35441:4;35315:131;:::i;:::-;35307:139;;35034:419;;;:::o;35459:235::-;35599:34;35595:1;35587:6;35583:14;35576:58;35668:18;35663:2;35655:6;35651:15;35644:43;35459:235;:::o;35700:366::-;35842:3;35863:67;35927:2;35922:3;35863:67;:::i;:::-;35856:74;;35939:93;36028:3;35939:93;:::i;:::-;36057:2;36052:3;36048:12;36041:19;;35700:366;;;:::o;36072:419::-;36238:4;36276:2;36265:9;36261:18;36253:26;;36325:9;36319:4;36315:20;36311:1;36300:9;36296:17;36289:47;36353:131;36479:4;36353:131;:::i;:::-;36345:139;;36072:419;;;:::o;36497:225::-;36637:34;36633:1;36625:6;36621:14;36614:58;36706:8;36701:2;36693:6;36689:15;36682:33;36497:225;:::o;36728:366::-;36870:3;36891:67;36955:2;36950:3;36891:67;:::i;:::-;36884:74;;36967:93;37056:3;36967:93;:::i;:::-;37085:2;37080:3;37076:12;37069:19;;36728:366;;;:::o;37100:419::-;37266:4;37304:2;37293:9;37289:18;37281:26;;37353:9;37347:4;37343:20;37339:1;37328:9;37324:17;37317:47;37381:131;37507:4;37381:131;:::i;:::-;37373:139;;37100:419;;;:::o;37525:180::-;37573:77;37570:1;37563:88;37670:4;37667:1;37660:15;37694:4;37691:1;37684:15;37711:180;37759:77;37756:1;37749:88;37856:4;37853:1;37846:15;37880:4;37877:1;37870:15;37897:143;37954:5;37985:6;37979:13;37970:22;;38001:33;38028:5;38001:33;:::i;:::-;37897:143;;;;:::o;38046:351::-;38116:6;38165:2;38153:9;38144:7;38140:23;38136:32;38133:119;;;38171:79;;:::i;:::-;38133:119;38291:1;38316:64;38372:7;38363:6;38352:9;38348:22;38316:64;:::i;:::-;38306:74;;38262:128;38046:351;;;;:::o;38403:85::-;38448:7;38477:5;38466:16;;38403:85;;;:::o;38494:158::-;38552:9;38585:61;38603:42;38612:32;38638:5;38612:32;:::i;:::-;38603:42;:::i;:::-;38585:61;:::i;:::-;38572:74;;38494:158;;;:::o;38658:147::-;38753:45;38792:5;38753:45;:::i;:::-;38748:3;38741:58;38658:147;;:::o;38811:114::-;38878:6;38912:5;38906:12;38896:22;;38811:114;;;:::o;38931:184::-;39030:11;39064:6;39059:3;39052:19;39104:4;39099:3;39095:14;39080:29;;38931:184;;;;:::o;39121:132::-;39188:4;39211:3;39203:11;;39241:4;39236:3;39232:14;39224:22;;39121:132;;;:::o;39259:108::-;39336:24;39354:5;39336:24;:::i;:::-;39331:3;39324:37;39259:108;;:::o;39373:179::-;39442:10;39463:46;39505:3;39497:6;39463:46;:::i;:::-;39541:4;39536:3;39532:14;39518:28;;39373:179;;;;:::o;39558:113::-;39628:4;39660;39655:3;39651:14;39643:22;;39558:113;;;:::o;39707:732::-;39826:3;39855:54;39903:5;39855:54;:::i;:::-;39925:86;40004:6;39999:3;39925:86;:::i;:::-;39918:93;;40035:56;40085:5;40035:56;:::i;:::-;40114:7;40145:1;40130:284;40155:6;40152:1;40149:13;40130:284;;;40231:6;40225:13;40258:63;40317:3;40302:13;40258:63;:::i;:::-;40251:70;;40344:60;40397:6;40344:60;:::i;:::-;40334:70;;40190:224;40177:1;40174;40170:9;40165:14;;40130:284;;;40134:14;40430:3;40423:10;;39831:608;;;39707:732;;;;:::o;40445:831::-;40708:4;40746:3;40735:9;40731:19;40723:27;;40760:71;40828:1;40817:9;40813:17;40804:6;40760:71;:::i;:::-;40841:80;40917:2;40906:9;40902:18;40893:6;40841:80;:::i;:::-;40968:9;40962:4;40958:20;40953:2;40942:9;40938:18;40931:48;40996:108;41099:4;41090:6;40996:108;:::i;:::-;40988:116;;41114:72;41182:2;41171:9;41167:18;41158:6;41114:72;:::i;:::-;41196:73;41264:3;41253:9;41249:19;41240:6;41196:73;:::i;:::-;40445:831;;;;;;;;:::o;41282:332::-;41403:4;41441:2;41430:9;41426:18;41418:26;;41454:71;41522:1;41511:9;41507:17;41498:6;41454:71;:::i;:::-;41535:72;41603:2;41592:9;41588:18;41579:6;41535:72;:::i;:::-;41282:332;;;;;:::o

Swarm Source

ipfs://a14e2b1b0210317e3c9c2aa7e65a623f525b632c34494168b583632cdbd5d0e1

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.