ETH Price: $3,389.15 (+1.72%)

Token

AI PEPE (AIPEPE)
 

Overview

Max Total Supply

1,000,000,000 AIPEPE

Holders

341

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.483016444595142807 AIPEPE

Value
$0.00
0x36c28fcaf92133c823e526da41c1d2ea6421a290
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
AIPEPE

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-19
*/

// TELEGRAM: https://t.me/AIPEPE_Portal
// TWITTER: https://twitter.com/AI_PEPE_TOKEN
// WEB: http://ai-pepe.lol/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.20;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
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 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);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    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) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        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);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 {}
}
 
library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
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;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
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;
}
 
contract AIPEPE is ERC20, Ownable {

    string _name = "AI PEPE";
    string _symbol = "AIPEPE";

    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private isSwapping;
 
    address private treasuryWallet;
    address private devWallet;
 
    uint256 public maxTx;
    uint256 public swapTreshold;
    uint256 public maxWallet;
 
    bool public limitsActive = true;
    bool public tradingLive = false;
    bool public swapEnabled = true;
    bool public shouldContractSellAll = false;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyTreasuryFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellTreasuryFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForTreasury;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event treasuryWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20(_name, _symbol) {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyTreasuryFee = 27;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;
 
        uint256 _sellTreasuryFee = 88;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
 
        uint256 totalSupply = 1000000000 * 1e18;
 
        maxTx = totalSupply * 20 / 1000; // 2%
        maxWallet = totalSupply * 20 / 1000; // 2% 
        swapTreshold = totalSupply * 1 / 1000; // 0.05%
 
        buyTreasuryFee = _buyTreasuryFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyTreasuryFee + buyLiquidityFee + buyDevFee;
 
        sellTreasuryFee = _sellTreasuryFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellTreasuryFee + sellLiquidityFee + sellDevFee;

        treasuryWallet = address(0x98C1e9cc83978D8f42ab135df186E2e769889f5e);
        devWallet = address(0x98C1e9cc83978D8f42ab135df186E2e769889f5e);
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(treasuryWallet), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(devWallet), true);
        excludeFromMaxTransaction(address(treasuryWallet), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
       
        tradingLive = true;
        swapEnabled = true;
        launchedAt = block.number;

       
       
        
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsActive = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }

    function enableEmptyContract(bool enabled) external onlyOwner{
        shouldContractSellAll = enabled;
    }
 
     // change the minimum amount of tokens to sell from fees
    function setSwapTreshold(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTreshold = newAmount;
        return true;
    }
 
    function updateTransactionLimits(uint256 _maxTx, uint256 _maxWallet) external onlyOwner {
        require(_maxTx >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        require(_maxWallet >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxTx = _maxTx * (10**18);
        maxWallet = _maxWallet * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setFees(
        uint256 _devBuyFee,
        uint256 _liquidityBuyFee,
        uint256 _treasuryBuyFee,
        uint256 _devSellFee,
        uint256 _liquiditySellFee,
        uint256 _treasurySellFee
    ) external onlyOwner {
    
        buyDevFee = _devBuyFee;
        buyLiquidityFee = _liquidityBuyFee;
        buyTreasuryFee = _treasuryBuyFee;
        buyTotalFees = buyDevFee + buyLiquidityFee + buyTreasuryFee;
        sellDevFee = _devSellFee;
        sellLiquidityFee = _liquiditySellFee;
        sellTreasuryFee = _treasurySellFee;
        sellTotalFees = sellDevFee + sellLiquidityFee + sellTreasuryFee;
        require(buyTotalFees <= 30 && sellTotalFees <= 30, "Fees cannot be higher then 30%");
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateContractSellEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function blacklist(address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateFeeRecivers(address newTreasuryWallet, address newDevWallet) external onlyOwner{
        emit treasuryWalletUpdated(newTreasuryWallet, treasuryWallet);
        treasuryWallet = newTreasuryWallet;
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }

 
  
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    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(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
        
        if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
        
    }
        
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsActive){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !isSwapping
            ){
                if(!tradingLive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTx, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTx, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTreshold;
 
        if( 
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            isSwapping = true;
 
            swapBack();
 
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForTreasury += fees * sellTreasuryFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForTreasury += fees * buyTreasuryFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForTreasury + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(shouldContractSellAll == false){
            if(contractBalance > swapTreshold * 20){
                contractBalance = swapTreshold * 20;
            }
        }else{
            contractBalance = balanceOf(address(this));
        }
        
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForTreasury).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForTreasury = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(treasuryWallet).call{value: address(this).balance}("");
    }
}

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":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"treasuryWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"enableEmptyContract","outputs":[],"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":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","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":[],"name":"limitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devBuyFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityBuyFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryBuyFee","type":"uint256"},{"internalType":"uint256","name":"_devSellFee","type":"uint256"},{"internalType":"uint256","name":"_liquiditySellFee","type":"uint256"},{"internalType":"uint256","name":"_treasurySellFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldContractSellAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingLive","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateContractSellEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"},{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateFeeRecivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTx","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateTransactionLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526040518060400160405280600781526020017f4149205045504500000000000000000000000000000000000000000000000000815250600690816200004a919062000fa6565b506040518060400160405280600681526020017f41495045504500000000000000000000000000000000000000000000000000008152506007908162000091919062000fa6565b506001600d5f6101000a81548160ff0219169083151502179055505f600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff0219169083151502179055505f600d60036101000a81548160ff021916908315150217905550600160115f6101000a81548160ff02191690831515021790555034801562000121575f80fd5b5060068054620001319062000da6565b80601f01602080910402602001604051908101604052809291908181526020018280546200015f9062000da6565b8015620001ae5780601f106200018457610100808354040283529160200191620001ae565b820191905f5260205f20905b8154815290600101906020018083116200019057829003601f168201915b505050505060078054620001c29062000da6565b80601f0160208091040260200160405190810160405280929190818152602001828054620001f09062000da6565b80156200023f5780601f1062000215576101008083540402835291602001916200023f565b820191905f5260205f20905b8154815290600101906020018083116200022157829003601f168201915b5050505050816003908162000255919062000fa6565b50806004908162000267919062000fa6565b5050505f6200027b6200082f60201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d9050620003438160016200083660201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003e79190620010ef565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200044d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004739190620010ef565b6040518363ffffffff1660e01b81526004016200049292919062001130565b6020604051808303815f875af1158015620004af573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004d59190620010ef565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200051d60a05160016200083660201b60201c565b6200053260a05160016200092f60201b60201c565b5f601b90505f805f605890505f805f6b033b2e3c9fd0803ce800000090506103e860148262000562919062001188565b6200056e9190620011ff565b600a819055506103e860148262000586919062001188565b620005929190620011ff565b600c819055506103e8600182620005aa919062001188565b620005b69190620011ff565b600b81905550866013819055508560148190555084601581905550601554601454601354620005e6919062001236565b620005f2919062001236565b60128190555083601781905550826018819055508160198190555060195460185460175462000622919062001236565b6200062e919062001236565b6016819055507398c1e9cc83978d8f42ab135df186e2e769889f5e600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507398c1e9cc83978d8f42ab135df186e2e769889f5e60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006ff620006f1620009cd60201b60201c565b6001620009f560201b60201c565b62000712306001620009f560201b60201c565b6200072761dead6001620009f560201b60201c565b6200075c600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009f560201b60201c565b6200077e62000770620009cd60201b60201c565b60016200083660201b60201c565b620007913060016200083660201b60201c565b620007a661dead60016200083660201b60201c565b620007da60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200083660201b60201c565b6200080f600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200083660201b60201c565b62000821338262000b3e60201b60201c565b50505050505050506200142d565b5f33905090565b620008466200082f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ce90620012ce565b60405180910390fd5b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000a056200082f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000a96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8d90620012ce565b60405180910390fd5b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000b3291906200130a565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000baf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ba69062001373565b60405180910390fd5b62000bc25f838362000cdb60201b60201c565b62000bd98160025462000ce060201b90919060201c565b60028190555062000c30815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205462000ce060201b90919060201c565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ccf9190620013a4565b60405180910390a35050565b505050565b5f80828462000cf0919062001236565b90508381101562000d38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d2f906200140d565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000dbe57607f821691505b60208210810362000dd45762000dd362000d79565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000e387fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000dfb565b62000e44868362000dfb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000e8e62000e8862000e828462000e5c565b62000e65565b62000e5c565b9050919050565b5f819050919050565b62000ea98362000e6e565b62000ec162000eb88262000e95565b84845462000e07565b825550505050565b5f90565b62000ed762000ec9565b62000ee481848462000e9e565b505050565b5b8181101562000f0b5762000eff5f8262000ecd565b60018101905062000eea565b5050565b601f82111562000f5a5762000f248162000dda565b62000f2f8462000dec565b8101602085101562000f3f578190505b62000f5762000f4e8562000dec565b83018262000ee9565b50505b505050565b5f82821c905092915050565b5f62000f7c5f198460080262000f5f565b1980831691505092915050565b5f62000f96838362000f6b565b9150826002028217905092915050565b62000fb18262000d42565b67ffffffffffffffff81111562000fcd5762000fcc62000d4c565b5b62000fd9825462000da6565b62000fe682828562000f0f565b5f60209050601f8311600181146200101c575f841562001007578287015190505b62001013858262000f89565b86555062001082565b601f1984166200102c8662000dda565b5f5b8281101562001055578489015182556001820191506020850194506020810190506200102e565b8683101562001075578489015162001071601f89168262000f6b565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620010b9826200108e565b9050919050565b620010cb81620010ad565b8114620010d6575f80fd5b50565b5f81519050620010e981620010c0565b92915050565b5f602082840312156200110757620011066200108a565b5b5f6200111684828501620010d9565b91505092915050565b6200112a81620010ad565b82525050565b5f604082019050620011455f8301856200111f565b6200115460208301846200111f565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620011948262000e5c565b9150620011a18362000e5c565b9250828202620011b18162000e5c565b91508282048414831517620011cb57620011ca6200115b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6200120b8262000e5c565b9150620012188362000e5c565b9250826200122b576200122a620011d2565b5b828204905092915050565b5f620012428262000e5c565b91506200124f8362000e5c565b92508282019050808211156200126a57620012696200115b565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620012b660208362001270565b9150620012c38262001280565b602082019050919050565b5f6020820190508181035f830152620012e781620012a8565b9050919050565b5f8115159050919050565b6200130481620012ee565b82525050565b5f6020820190506200131f5f830184620012f9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200135b601f8362001270565b9150620013688262001325565b602082019050919050565b5f6020820190508181035f8301526200138c816200134d565b9050919050565b6200139e8162000e5c565b82525050565b5f602082019050620013b95f83018462001393565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620013f5601b8362001270565b91506200140282620013bf565b602082019050919050565b5f6020820190508181035f8301526200142681620013e7565b9050919050565b60805160a051615347620014875f395f818161124e01528181611c1f0152612a9301525f8181610cb901528181612a3b01528181613bc601528181613ca501528181613ccc01528181613d620152613d8901526153475ff3fe6080604052600436106102e7575f3560e01c8063751039fc1161018f578063b62496f5116100db578063dd62ed3e11610094578063f11a24d31161006e578063f11a24d314610b34578063f2fde38b14610b5e578063f637434214610b86578063f8b45b0514610bb0576102ee565b8063dd62ed3e14610aa4578063e52fb9ec14610ae0578063e884f26014610b0a576102ee565b8063b62496f514610986578063c0246668146109c2578063c876d0b9146109ea578063cc2ffe7c14610a14578063cfd1940e14610a3e578063d85ba06314610a7a576102ee565b806395d89b41116101485780639fccce32116101225780639fccce32146108ba578063a0d82dc5146108e4578063a457c2d71461090e578063a9059cbb1461094a576102ee565b806395d89b411461083e5780639a7a23d6146108685780639c3b4fdc14610890576102ee565b8063751039fc1461075c5780637571336a146107865780637ebb640a146107ae57806386f6c3c1146107d65780638a8c523c146107fe5780638da5cb5b14610814576102ee565b8063313ce5671161024e5780635f5828f6116102075780636ddd1713116101e15780636ddd1713146106b657806370a08231146106e0578063715018a61461071c5780637437681e14610732576102ee565b80635f5828f61461063a5780636a486a8e146106625780636b2fb1241461068c576102ee565b8063313ce5671461051c5780633950935114610546578063404e51291461058257806349bd5a5e146105aa5780634fbee193146105d45780635c068a8c14610610576102ee565b8063184f5c6a116102a0578063184f5c6a146104125780631864217b1461043a5780631a8145bb146104645780631cce34ee1461048e57806322b55037146104b857806323b872dd146104e0576102ee565b806306fdde03146102f2578063095ea7b31461031c57806310d5de531461035857806311704f52146103945780631694505e146103be57806318160ddd146103e8576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610bda565b6040516103139190613f1e565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190613fcf565b610c6a565b60405161034f9190614027565b60405180910390f35b348015610363575f80fd5b5061037e60048036038101906103799190614040565b610c87565b60405161038b9190614027565b60405180910390f35b34801561039f575f80fd5b506103a8610ca4565b6040516103b59190614027565b60405180910390f35b3480156103c9575f80fd5b506103d2610cb7565b6040516103df91906140c6565b60405180910390f35b3480156103f3575f80fd5b506103fc610cdb565b60405161040991906140ee565b60405180910390f35b34801561041d575f80fd5b5061043860048036038101906104339190614131565b610ce4565b005b348015610445575f80fd5b5061044e610d97565b60405161045b9190614027565b60405180910390f35b34801561046f575f80fd5b50610478610daa565b60405161048591906140ee565b60405180910390f35b348015610499575f80fd5b506104a2610db0565b6040516104af9190614027565b60405180910390f35b3480156104c3575f80fd5b506104de60048036038101906104d9919061415c565b610dc2565b005b3480156104eb575f80fd5b506105066004803603810190610501919061419a565b610fd4565b6040516105139190614027565b60405180910390f35b348015610527575f80fd5b506105306110a8565b60405161053d9190614205565b60405180910390f35b348015610551575f80fd5b5061056c60048036038101906105679190613fcf565b6110b0565b6040516105799190614027565b60405180910390f35b34801561058d575f80fd5b506105a860048036038101906105a3919061421e565b61115e565b005b3480156105b5575f80fd5b506105be61124c565b6040516105cb919061426b565b60405180910390f35b3480156105df575f80fd5b506105fa60048036038101906105f59190614040565b611270565b6040516106079190614027565b60405180910390f35b34801561061b575f80fd5b506106246112c2565b60405161063191906140ee565b60405180910390f35b348015610645575f80fd5b50610660600480360381019061065b9190614131565b6112c8565b005b34801561066d575f80fd5b5061067661137b565b60405161068391906140ee565b60405180910390f35b348015610697575f80fd5b506106a0611381565b6040516106ad91906140ee565b60405180910390f35b3480156106c1575f80fd5b506106ca611387565b6040516106d79190614027565b60405180910390f35b3480156106eb575f80fd5b5061070660048036038101906107019190614040565b61139a565b60405161071391906140ee565b60405180910390f35b348015610727575f80fd5b506107306113df565b005b34801561073d575f80fd5b50610746611532565b60405161075391906140ee565b60405180910390f35b348015610767575f80fd5b50610770611538565b60405161077d9190614027565b60405180910390f35b348015610791575f80fd5b506107ac60048036038101906107a7919061421e565b6115ef565b005b3480156107b9575f80fd5b506107d460048036038101906107cf9190614284565b6116dd565b005b3480156107e1575f80fd5b506107fc60048036038101906107f791906142c2565b611897565b005b348015610809575f80fd5b506108126119fa565b005b34801561081f575f80fd5b50610828611acf565b604051610835919061426b565b60405180910390f35b348015610849575f80fd5b50610852611af7565b60405161085f9190613f1e565b60405180910390f35b348015610873575f80fd5b5061088e6004803603810190610889919061421e565b611b87565b005b34801561089b575f80fd5b506108a4611cb9565b6040516108b191906140ee565b60405180910390f35b3480156108c5575f80fd5b506108ce611cbf565b6040516108db91906140ee565b60405180910390f35b3480156108ef575f80fd5b506108f8611cc5565b60405161090591906140ee565b60405180910390f35b348015610919575f80fd5b50610934600480360381019061092f9190613fcf565b611ccb565b6040516109419190614027565b60405180910390f35b348015610955575f80fd5b50610970600480360381019061096b9190613fcf565b611d93565b60405161097d9190614027565b60405180910390f35b348015610991575f80fd5b506109ac60048036038101906109a79190614040565b611db0565b6040516109b99190614027565b60405180910390f35b3480156109cd575f80fd5b506109e860048036038101906109e3919061421e565b611dcc565b005b3480156109f5575f80fd5b506109fe611f08565b604051610a0b9190614027565b60405180910390f35b348015610a1f575f80fd5b50610a28611f1a565b604051610a3591906140ee565b60405180910390f35b348015610a49575f80fd5b50610a646004803603810190610a5f919061434b565b611f20565b604051610a719190614027565b60405180910390f35b348015610a85575f80fd5b50610a8e61208e565b604051610a9b91906140ee565b60405180910390f35b348015610aaf575f80fd5b50610aca6004803603810190610ac5919061415c565b612094565b604051610ad791906140ee565b60405180910390f35b348015610aeb575f80fd5b50610af4612116565b604051610b0191906140ee565b60405180910390f35b348015610b15575f80fd5b50610b1e61211c565b604051610b2b9190614027565b60405180910390f35b348015610b3f575f80fd5b50610b486121d3565b604051610b5591906140ee565b60405180910390f35b348015610b69575f80fd5b50610b846004803603810190610b7f9190614040565b6121d9565b005b348015610b91575f80fd5b50610b9a61239b565b604051610ba791906140ee565b60405180910390f35b348015610bbb575f80fd5b50610bc46123a1565b604051610bd191906140ee565b60405180910390f35b606060038054610be9906143a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c15906143a3565b8015610c605780601f10610c3757610100808354040283529160200191610c60565b820191905f5260205f20905b815481529060010190602001808311610c4357829003601f168201915b5050505050905090565b5f610c7d610c766123a7565b84846123ae565b6001905092915050565b601f602052805f5260405f205f915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610cec6123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d719061441d565b60405180910390fd5b80600d60036101000a81548160ff02191690831515021790555050565b600d60039054906101000a900460ff1681565b601b5481565b600d5f9054906101000a900460ff1681565b610dca6123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f9061441d565b60405180910390fd5b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a381600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f610fe0848484612571565b61109d84610fec6123a7565b611098856040518060600160405280602881526020016152c56028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61104f6123a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461333a9092919063ffffffff16565b6123ae565b600190509392505050565b5f6012905090565b5f6111546110bc6123a7565b8461114f8560015f6110cc6123a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461339c90919063ffffffff16565b6123ae565b6001905092915050565b6111666123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb9061441d565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60135481565b6112d06123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113559061441d565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b60165481565b60175481565b600d60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113e76123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c9061441d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600a5481565b5f6115416123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c69061441d565b60405180910390fd5b5f600d5f6101000a81548160ff0219169083151502179055506001905090565b6115f76123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c9061441d565b60405180910390fd5b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6116e56123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a9061441d565b60405180910390fd5b670de0b6b3a76400006103e86001611789610cdb565b6117939190614468565b61179d91906144d6565b6117a791906144d6565b8210156117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090614576565b60405180910390fd5b670de0b6b3a76400006103e860056117ff610cdb565b6118099190614468565b61181391906144d6565b61181d91906144d6565b81101561185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690614604565b60405180910390fd5b670de0b6b3a7640000826118739190614468565b600a81905550670de0b6b3a76400008161188d9190614468565b600c819055505050565b61189f6123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119249061441d565b60405180910390fd5b8560158190555084601481905550836013819055506013546014546015546119559190614622565b61195f9190614622565b60128190555082601981905550816018819055508060178190555060175460185460195461198d9190614622565b6119979190614622565b601681905550601e601254111580156119b35750601e60165411155b6119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e99061469f565b60405180910390fd5b505050505050565b611a026123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a879061441d565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555043601d81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b06906143a3565b80601f0160208091040260200160405190810160405280929190818152602001828054611b32906143a3565b8015611b7d5780601f10611b5457610100808354040283529160200191611b7d565b820191905f5260205f20905b815481529060010190602001808311611b6057829003601f168201915b5050505050905090565b611b8f6123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c149061441d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca29061472d565b60405180910390fd5b611cb582826133f9565b5050565b60155481565b601c5481565b60195481565b5f611d89611cd76123a7565b84611d84856040518060600160405280602581526020016152ed6025913960015f611d006123a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461333a9092919063ffffffff16565b6123ae565b6001905092915050565b5f611da6611d9f6123a7565b8484612571565b6001905092915050565b60208052805f5260405f205f915054906101000a900460ff1681565b611dd46123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e599061441d565b60405180910390fd5b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611efc9190614027565b60405180910390a25050565b60115f9054906101000a900460ff1681565b601a5481565b5f611f296123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae9061441d565b60405180910390fd5b620186a06001611fc5610cdb565b611fcf9190614468565b611fd991906144d6565b82101561201b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612012906147bb565b60405180910390fd5b6103e86005612028610cdb565b6120329190614468565b61203c91906144d6565b82111561207e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207590614849565b60405180910390fd5b81600b8190555060019050919050565b60125481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b5f6121256123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa9061441d565b60405180910390fd5b5f60115f6101000a81548160ff0219169083151502179055506001905090565b60145481565b6121e16123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122669061441d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d4906148d7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b600c5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241390614965565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361248a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612481906149f3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161256491906140ee565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d690614a81565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361264d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264490614b0f565b60405180910390fd5b60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156126eb575060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b61272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614b9d565b60405180910390fd5b60205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127c75750601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b505f81036127df576127da83835f613497565b613335565b600d5f9054906101000a900460ff1615612e85576127fb611acf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128695750612839611acf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128a157505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128db575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128f3575060085f9054906101000a900460ff16155b15612e8457600d60019054906101000a900460ff166129e757601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129a75750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dd90614c05565b60405180910390fd5b5b60115f9054906101000a900460ff1615612baa57612a03611acf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a8a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ba95743600e5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5d90614cb9565b60405180910390fd5b43600e5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c475750601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cee57600a54811115612c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8890614d47565b60405180910390fd5b600c54612c9d8361139a565b82612ca89190614622565b1115612ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce090614daf565b60405180910390fd5b612e83565b60205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d8b5750601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612dda57600a54811115612dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcc90614e3d565b60405180910390fd5b612e82565b601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e8157600c54612e348361139a565b82612e3f9190614622565b1115612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7790614daf565b60405180910390fd5b5b5b5b5b5b5f612e8f3061139a565b90505f600b548210159050808015612eb35750600d60029054906101000a900460ff165b8015612ecb575060085f9054906101000a900460ff16155b8015612f1e575060205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f715750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612fc45750601e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561300557600160085f6101000a81548160ff021916908315150217905550612feb613720565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff16159050601e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806130b35750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156130bc575f90505b5f81156133255760205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561311a57505f601654115b156131e457613147606461313960165488613a1b90919063ffffffff16565b613a9290919063ffffffff16565b90506016546018548261315a9190614468565b61316491906144d6565b601b5f8282546131749190614622565b925050819055506016546019548261318c9190614468565b61319691906144d6565b601c5f8282546131a69190614622565b92505081905550601654601754826131be9190614468565b6131c891906144d6565b601a5f8282546131d89190614622565b92505081905550613302565b60205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561323b57505f601254115b1561330157613268606461325a60125488613a1b90919063ffffffff16565b613a9290919063ffffffff16565b90506012546014548261327b9190614468565b61328591906144d6565b601b5f8282546132959190614622565b92505081905550601254601554826132ad9190614468565b6132b791906144d6565b601c5f8282546132c79190614622565b92505081905550601254601354826132df9190614468565b6132e991906144d6565b601a5f8282546132f99190614622565b925050819055505b5b5f81111561331657613315873083613497565b5b80856133229190614e5b565b94505b613330878787613497565b505050505b505050565b5f838311158290613381576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133789190613f1e565b60405180910390fd5b505f838561338f9190614e5b565b9050809150509392505050565b5f8082846133aa9190614622565b9050838110156133ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e690614ed8565b60405180910390fd5b8091505092915050565b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fc90614a81565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356a90614b0f565b60405180910390fd5b61357e838383613adb565b6135e78160405180606001604052806026815260200161529f602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461333a9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613676815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461339c90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161371391906140ee565b60405180910390a3505050565b5f61372a3061139a565b90505f601c54601a54601b546137409190614622565b61374a9190614622565b90505f8083148061375a57505f82145b1561376757505050613a19565b5f1515600d60039054906101000a900460ff161515036137ae576014600b546137909190614468565b8311156137a9576014600b546137a69190614468565b92505b6137ba565b6137b73061139a565b92505b5f600283601b54866137cc9190614468565b6137d691906144d6565b6137e091906144d6565b90505f6137f68286613ae090919063ffffffff16565b90505f47905061380582613b29565b5f6138198247613ae090919063ffffffff16565b90505f61384387613835601a5485613a1b90919063ffffffff16565b613a9290919063ffffffff16565b90505f61386d8861385f601c5486613a1b90919063ffffffff16565b613a9290919063ffffffff16565b90505f81838561387d9190614e5b565b6138879190614e5b565b90505f601b819055505f601a819055505f601c8190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516138e390614f23565b5f6040518083038185875af1925050503d805f811461391d576040519150601f19603f3d011682016040523d82523d5f602084013e613922565b606091505b5050809850505f8711801561393657505f81115b15613983576139458782613d5c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601b5460405161397a93929190614f37565b60405180910390a15b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516139c990614f23565b5f6040518083038185875af1925050503d805f8114613a03576040519150601f19603f3d011682016040523d82523d5f602084013e613a08565b606091505b505080985050505050505050505050505b565b5f808303613a2b575f9050613a8c565b5f8284613a389190614468565b9050828482613a4791906144d6565b14613a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7e90614fdc565b60405180910390fd5b809150505b92915050565b5f613ad383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e33565b905092915050565b505050565b5f613b2183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061333a565b905092915050565b5f600267ffffffffffffffff811115613b4557613b44614ffa565b5b604051908082528060200260200182016040528015613b735781602001602082028036833780820191505090505b50905030815f81518110613b8a57613b89615027565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c519190615068565b81600181518110613c6557613c64615027565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cca307f0000000000000000000000000000000000000000000000000000000000000000846123ae565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613d2b959493929190615183565b5f604051808303815f87803b158015613d42575f80fd5b505af1158015613d54573d5f803e3d5ffd5b505050505050565b613d87307f0000000000000000000000000000000000000000000000000000000000000000846123ae565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613deb969594939291906151db565b60606040518083038185885af1158015613e07573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613e2c919061524e565b5050505050565b5f8083118290613e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e709190613f1e565b60405180910390fd5b505f8385613e8791906144d6565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613ecb578082015181840152602081019050613eb0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613ef082613e94565b613efa8185613e9e565b9350613f0a818560208601613eae565b613f1381613ed6565b840191505092915050565b5f6020820190508181035f830152613f368184613ee6565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f6b82613f42565b9050919050565b613f7b81613f61565b8114613f85575f80fd5b50565b5f81359050613f9681613f72565b92915050565b5f819050919050565b613fae81613f9c565b8114613fb8575f80fd5b50565b5f81359050613fc981613fa5565b92915050565b5f8060408385031215613fe557613fe4613f3e565b5b5f613ff285828601613f88565b925050602061400385828601613fbb565b9150509250929050565b5f8115159050919050565b6140218161400d565b82525050565b5f60208201905061403a5f830184614018565b92915050565b5f6020828403121561405557614054613f3e565b5b5f61406284828501613f88565b91505092915050565b5f819050919050565b5f61408e61408961408484613f42565b61406b565b613f42565b9050919050565b5f61409f82614074565b9050919050565b5f6140b082614095565b9050919050565b6140c0816140a6565b82525050565b5f6020820190506140d95f8301846140b7565b92915050565b6140e881613f9c565b82525050565b5f6020820190506141015f8301846140df565b92915050565b6141108161400d565b811461411a575f80fd5b50565b5f8135905061412b81614107565b92915050565b5f6020828403121561414657614145613f3e565b5b5f6141538482850161411d565b91505092915050565b5f806040838503121561417257614171613f3e565b5b5f61417f85828601613f88565b925050602061419085828601613f88565b9150509250929050565b5f805f606084860312156141b1576141b0613f3e565b5b5f6141be86828701613f88565b93505060206141cf86828701613f88565b92505060406141e086828701613fbb565b9150509250925092565b5f60ff82169050919050565b6141ff816141ea565b82525050565b5f6020820190506142185f8301846141f6565b92915050565b5f806040838503121561423457614233613f3e565b5b5f61424185828601613f88565b92505060206142528582860161411d565b9150509250929050565b61426581613f61565b82525050565b5f60208201905061427e5f83018461425c565b92915050565b5f806040838503121561429a57614299613f3e565b5b5f6142a785828601613fbb565b92505060206142b885828601613fbb565b9150509250929050565b5f805f805f8060c087890312156142dc576142db613f3e565b5b5f6142e989828a01613fbb565b96505060206142fa89828a01613fbb565b955050604061430b89828a01613fbb565b945050606061431c89828a01613fbb565b935050608061432d89828a01613fbb565b92505060a061433e89828a01613fbb565b9150509295509295509295565b5f602082840312156143605761435f613f3e565b5b5f61436d84828501613fbb565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806143ba57607f821691505b6020821081036143cd576143cc614376565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614407602083613e9e565b9150614412826143d3565b602082019050919050565b5f6020820190508181035f830152614434816143fb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61447282613f9c565b915061447d83613f9c565b925082820261448b81613f9c565b915082820484148315176144a2576144a161443b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6144e082613f9c565b91506144eb83613f9c565b9250826144fb576144fa6144a9565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614560602f83613e9e565b915061456b82614506565b604082019050919050565b5f6020820190508181035f83015261458d81614554565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6145ee602483613e9e565b91506145f982614594565b604082019050919050565b5f6020820190508181035f83015261461b816145e2565b9050919050565b5f61462c82613f9c565b915061463783613f9c565b925082820190508082111561464f5761464e61443b565b5b92915050565b7f466565732063616e6e6f7420626520686967686572207468656e2033302500005f82015250565b5f614689601e83613e9e565b915061469482614655565b602082019050919050565b5f6020820190508181035f8301526146b68161467d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614717603983613e9e565b9150614722826146bd565b604082019050919050565b5f6020820190508181035f8301526147448161470b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6147a5603583613e9e565b91506147b08261474b565b604082019050919050565b5f6020820190508181035f8301526147d281614799565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614833603483613e9e565b915061483e826147d9565b604082019050919050565b5f6020820190508181035f83015261486081614827565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6148c1602683613e9e565b91506148cc82614867565b604082019050919050565b5f6020820190508181035f8301526148ee816148b5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61494f602483613e9e565b915061495a826148f5565b604082019050919050565b5f6020820190508181035f83015261497c81614943565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6149dd602283613e9e565b91506149e882614983565b604082019050919050565b5f6020820190508181035f830152614a0a816149d1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614a6b602583613e9e565b9150614a7682614a11565b604082019050919050565b5f6020820190508181035f830152614a9881614a5f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614af9602383613e9e565b9150614b0482614a9f565b604082019050919050565b5f6020820190508181035f830152614b2681614aed565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f614b87603183613e9e565b9150614b9282614b2d565b604082019050919050565b5f6020820190508181035f830152614bb481614b7b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614bef601683613e9e565b9150614bfa82614bbb565b602082019050919050565b5f6020820190508181035f830152614c1c81614be3565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614ca3604983613e9e565b9150614cae82614c23565b606082019050919050565b5f6020820190508181035f830152614cd081614c97565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614d31603583613e9e565b9150614d3c82614cd7565b604082019050919050565b5f6020820190508181035f830152614d5e81614d25565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614d99601383613e9e565b9150614da482614d65565b602082019050919050565b5f6020820190508181035f830152614dc681614d8d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614e27603683613e9e565b9150614e3282614dcd565b604082019050919050565b5f6020820190508181035f830152614e5481614e1b565b9050919050565b5f614e6582613f9c565b9150614e7083613f9c565b9250828203905081811115614e8857614e8761443b565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614ec2601b83613e9e565b9150614ecd82614e8e565b602082019050919050565b5f6020820190508181035f830152614eef81614eb6565b9050919050565b5f81905092915050565b50565b5f614f0e5f83614ef6565b9150614f1982614f00565b5f82019050919050565b5f614f2d82614f03565b9150819050919050565b5f606082019050614f4a5f8301866140df565b614f5760208301856140df565b614f6460408301846140df565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614fc6602183613e9e565b9150614fd182614f6c565b604082019050919050565b5f6020820190508181035f830152614ff381614fba565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061506281613f72565b92915050565b5f6020828403121561507d5761507c613f3e565b5b5f61508a84828501615054565b91505092915050565b5f819050919050565b5f6150b66150b16150ac84615093565b61406b565b613f9c565b9050919050565b6150c68161509c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6150fe81613f61565b82525050565b5f61510f83836150f5565b60208301905092915050565b5f602082019050919050565b5f615131826150cc565b61513b81856150d6565b9350615146836150e6565b805f5b8381101561517657815161515d8882615104565b97506151688361511b565b925050600181019050615149565b5085935050505092915050565b5f60a0820190506151965f8301886140df565b6151a360208301876150bd565b81810360408301526151b58186615127565b90506151c4606083018561425c565b6151d160808301846140df565b9695505050505050565b5f60c0820190506151ee5f83018961425c565b6151fb60208301886140df565b61520860408301876150bd565b61521560608301866150bd565b615222608083018561425c565b61522f60a08301846140df565b979650505050505050565b5f8151905061524881613fa5565b92915050565b5f805f6060848603121561526557615264613f3e565b5b5f6152728682870161523a565b93505060206152838682870161523a565b92505060406152948682870161523a565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220395f0da670e3e83ed0ab5ec46904ee43917664d8c4a8ffe2ff83121a5f458f4864736f6c63430008140033

Deployed Bytecode

0x6080604052600436106102e7575f3560e01c8063751039fc1161018f578063b62496f5116100db578063dd62ed3e11610094578063f11a24d31161006e578063f11a24d314610b34578063f2fde38b14610b5e578063f637434214610b86578063f8b45b0514610bb0576102ee565b8063dd62ed3e14610aa4578063e52fb9ec14610ae0578063e884f26014610b0a576102ee565b8063b62496f514610986578063c0246668146109c2578063c876d0b9146109ea578063cc2ffe7c14610a14578063cfd1940e14610a3e578063d85ba06314610a7a576102ee565b806395d89b41116101485780639fccce32116101225780639fccce32146108ba578063a0d82dc5146108e4578063a457c2d71461090e578063a9059cbb1461094a576102ee565b806395d89b411461083e5780639a7a23d6146108685780639c3b4fdc14610890576102ee565b8063751039fc1461075c5780637571336a146107865780637ebb640a146107ae57806386f6c3c1146107d65780638a8c523c146107fe5780638da5cb5b14610814576102ee565b8063313ce5671161024e5780635f5828f6116102075780636ddd1713116101e15780636ddd1713146106b657806370a08231146106e0578063715018a61461071c5780637437681e14610732576102ee565b80635f5828f61461063a5780636a486a8e146106625780636b2fb1241461068c576102ee565b8063313ce5671461051c5780633950935114610546578063404e51291461058257806349bd5a5e146105aa5780634fbee193146105d45780635c068a8c14610610576102ee565b8063184f5c6a116102a0578063184f5c6a146104125780631864217b1461043a5780631a8145bb146104645780631cce34ee1461048e57806322b55037146104b857806323b872dd146104e0576102ee565b806306fdde03146102f2578063095ea7b31461031c57806310d5de531461035857806311704f52146103945780631694505e146103be57806318160ddd146103e8576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b50610306610bda565b6040516103139190613f1e565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190613fcf565b610c6a565b60405161034f9190614027565b60405180910390f35b348015610363575f80fd5b5061037e60048036038101906103799190614040565b610c87565b60405161038b9190614027565b60405180910390f35b34801561039f575f80fd5b506103a8610ca4565b6040516103b59190614027565b60405180910390f35b3480156103c9575f80fd5b506103d2610cb7565b6040516103df91906140c6565b60405180910390f35b3480156103f3575f80fd5b506103fc610cdb565b60405161040991906140ee565b60405180910390f35b34801561041d575f80fd5b5061043860048036038101906104339190614131565b610ce4565b005b348015610445575f80fd5b5061044e610d97565b60405161045b9190614027565b60405180910390f35b34801561046f575f80fd5b50610478610daa565b60405161048591906140ee565b60405180910390f35b348015610499575f80fd5b506104a2610db0565b6040516104af9190614027565b60405180910390f35b3480156104c3575f80fd5b506104de60048036038101906104d9919061415c565b610dc2565b005b3480156104eb575f80fd5b506105066004803603810190610501919061419a565b610fd4565b6040516105139190614027565b60405180910390f35b348015610527575f80fd5b506105306110a8565b60405161053d9190614205565b60405180910390f35b348015610551575f80fd5b5061056c60048036038101906105679190613fcf565b6110b0565b6040516105799190614027565b60405180910390f35b34801561058d575f80fd5b506105a860048036038101906105a3919061421e565b61115e565b005b3480156105b5575f80fd5b506105be61124c565b6040516105cb919061426b565b60405180910390f35b3480156105df575f80fd5b506105fa60048036038101906105f59190614040565b611270565b6040516106079190614027565b60405180910390f35b34801561061b575f80fd5b506106246112c2565b60405161063191906140ee565b60405180910390f35b348015610645575f80fd5b50610660600480360381019061065b9190614131565b6112c8565b005b34801561066d575f80fd5b5061067661137b565b60405161068391906140ee565b60405180910390f35b348015610697575f80fd5b506106a0611381565b6040516106ad91906140ee565b60405180910390f35b3480156106c1575f80fd5b506106ca611387565b6040516106d79190614027565b60405180910390f35b3480156106eb575f80fd5b5061070660048036038101906107019190614040565b61139a565b60405161071391906140ee565b60405180910390f35b348015610727575f80fd5b506107306113df565b005b34801561073d575f80fd5b50610746611532565b60405161075391906140ee565b60405180910390f35b348015610767575f80fd5b50610770611538565b60405161077d9190614027565b60405180910390f35b348015610791575f80fd5b506107ac60048036038101906107a7919061421e565b6115ef565b005b3480156107b9575f80fd5b506107d460048036038101906107cf9190614284565b6116dd565b005b3480156107e1575f80fd5b506107fc60048036038101906107f791906142c2565b611897565b005b348015610809575f80fd5b506108126119fa565b005b34801561081f575f80fd5b50610828611acf565b604051610835919061426b565b60405180910390f35b348015610849575f80fd5b50610852611af7565b60405161085f9190613f1e565b60405180910390f35b348015610873575f80fd5b5061088e6004803603810190610889919061421e565b611b87565b005b34801561089b575f80fd5b506108a4611cb9565b6040516108b191906140ee565b60405180910390f35b3480156108c5575f80fd5b506108ce611cbf565b6040516108db91906140ee565b60405180910390f35b3480156108ef575f80fd5b506108f8611cc5565b60405161090591906140ee565b60405180910390f35b348015610919575f80fd5b50610934600480360381019061092f9190613fcf565b611ccb565b6040516109419190614027565b60405180910390f35b348015610955575f80fd5b50610970600480360381019061096b9190613fcf565b611d93565b60405161097d9190614027565b60405180910390f35b348015610991575f80fd5b506109ac60048036038101906109a79190614040565b611db0565b6040516109b99190614027565b60405180910390f35b3480156109cd575f80fd5b506109e860048036038101906109e3919061421e565b611dcc565b005b3480156109f5575f80fd5b506109fe611f08565b604051610a0b9190614027565b60405180910390f35b348015610a1f575f80fd5b50610a28611f1a565b604051610a3591906140ee565b60405180910390f35b348015610a49575f80fd5b50610a646004803603810190610a5f919061434b565b611f20565b604051610a719190614027565b60405180910390f35b348015610a85575f80fd5b50610a8e61208e565b604051610a9b91906140ee565b60405180910390f35b348015610aaf575f80fd5b50610aca6004803603810190610ac5919061415c565b612094565b604051610ad791906140ee565b60405180910390f35b348015610aeb575f80fd5b50610af4612116565b604051610b0191906140ee565b60405180910390f35b348015610b15575f80fd5b50610b1e61211c565b604051610b2b9190614027565b60405180910390f35b348015610b3f575f80fd5b50610b486121d3565b604051610b5591906140ee565b60405180910390f35b348015610b69575f80fd5b50610b846004803603810190610b7f9190614040565b6121d9565b005b348015610b91575f80fd5b50610b9a61239b565b604051610ba791906140ee565b60405180910390f35b348015610bbb575f80fd5b50610bc46123a1565b604051610bd191906140ee565b60405180910390f35b606060038054610be9906143a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c15906143a3565b8015610c605780601f10610c3757610100808354040283529160200191610c60565b820191905f5260205f20905b815481529060010190602001808311610c4357829003601f168201915b5050505050905090565b5f610c7d610c766123a7565b84846123ae565b6001905092915050565b601f602052805f5260405f205f915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610cec6123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d719061441d565b60405180910390fd5b80600d60036101000a81548160ff02191690831515021790555050565b600d60039054906101000a900460ff1681565b601b5481565b600d5f9054906101000a900460ff1681565b610dca6123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f9061441d565b60405180910390fd5b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a381600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f610fe0848484612571565b61109d84610fec6123a7565b611098856040518060600160405280602881526020016152c56028913960015f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61104f6123a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461333a9092919063ffffffff16565b6123ae565b600190509392505050565b5f6012905090565b5f6111546110bc6123a7565b8461114f8560015f6110cc6123a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461339c90919063ffffffff16565b6123ae565b6001905092915050565b6111666123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb9061441d565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b7f00000000000000000000000064b3baed8eae37217a0ec59a97842caa1c6a559681565b5f601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60135481565b6112d06123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113559061441d565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b60165481565b60175481565b600d60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113e76123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611475576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146c9061441d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600a5481565b5f6115416123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c69061441d565b60405180910390fd5b5f600d5f6101000a81548160ff0219169083151502179055506001905090565b6115f76123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c9061441d565b60405180910390fd5b80601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6116e56123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176a9061441d565b60405180910390fd5b670de0b6b3a76400006103e86001611789610cdb565b6117939190614468565b61179d91906144d6565b6117a791906144d6565b8210156117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090614576565b60405180910390fd5b670de0b6b3a76400006103e860056117ff610cdb565b6118099190614468565b61181391906144d6565b61181d91906144d6565b81101561185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690614604565b60405180910390fd5b670de0b6b3a7640000826118739190614468565b600a81905550670de0b6b3a76400008161188d9190614468565b600c819055505050565b61189f6123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119249061441d565b60405180910390fd5b8560158190555084601481905550836013819055506013546014546015546119559190614622565b61195f9190614622565b60128190555082601981905550816018819055508060178190555060175460185460195461198d9190614622565b6119979190614622565b601681905550601e601254111580156119b35750601e60165411155b6119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e99061469f565b60405180910390fd5b505050505050565b611a026123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a879061441d565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff02191690831515021790555043601d81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b06906143a3565b80601f0160208091040260200160405190810160405280929190818152602001828054611b32906143a3565b8015611b7d5780601f10611b5457610100808354040283529160200191611b7d565b820191905f5260205f20905b815481529060010190602001808311611b6057829003601f168201915b5050505050905090565b611b8f6123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c149061441d565b60405180910390fd5b7f00000000000000000000000064b3baed8eae37217a0ec59a97842caa1c6a559673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca29061472d565b60405180910390fd5b611cb582826133f9565b5050565b60155481565b601c5481565b60195481565b5f611d89611cd76123a7565b84611d84856040518060600160405280602581526020016152ed6025913960015f611d006123a7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461333a9092919063ffffffff16565b6123ae565b6001905092915050565b5f611da6611d9f6123a7565b8484612571565b6001905092915050565b60208052805f5260405f205f915054906101000a900460ff1681565b611dd46123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e599061441d565b60405180910390fd5b80601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611efc9190614027565b60405180910390a25050565b60115f9054906101000a900460ff1681565b601a5481565b5f611f296123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fae9061441d565b60405180910390fd5b620186a06001611fc5610cdb565b611fcf9190614468565b611fd991906144d6565b82101561201b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612012906147bb565b60405180910390fd5b6103e86005612028610cdb565b6120329190614468565b61203c91906144d6565b82111561207e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207590614849565b60405180910390fd5b81600b8190555060019050919050565b60125481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b5f6121256123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa9061441d565b60405180910390fd5b5f60115f6101000a81548160ff0219169083151502179055506001905090565b60145481565b6121e16123a7565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122669061441d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d4906148d7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b600c5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361241c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241390614965565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361248a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612481906149f3565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161256491906140ee565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d690614a81565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361264d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264490614b0f565b60405180910390fd5b60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156126eb575060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b61272a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272190614b9d565b60405180910390fd5b60205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156127c75750601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b505f81036127df576127da83835f613497565b613335565b600d5f9054906101000a900460ff1615612e85576127fb611acf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128695750612839611acf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128a157505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128db575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128f3575060085f9054906101000a900460ff16155b15612e8457600d60019054906101000a900460ff166129e757601e5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806129a75750601e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6129e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dd90614c05565b60405180910390fd5b5b60115f9054906101000a900460ff1615612baa57612a03611acf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612a8a57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ae257507f00000000000000000000000064b3baed8eae37217a0ec59a97842caa1c6a559673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ba95743600e5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5d90614cb9565b60405180910390fd5b43600e5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612c475750601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612cee57600a54811115612c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8890614d47565b60405180910390fd5b600c54612c9d8361139a565b82612ca89190614622565b1115612ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce090614daf565b60405180910390fd5b612e83565b60205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d8b5750601f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612dda57600a54811115612dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcc90614e3d565b60405180910390fd5b612e82565b601f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e8157600c54612e348361139a565b82612e3f9190614622565b1115612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7790614daf565b60405180910390fd5b5b5b5b5b5b5f612e8f3061139a565b90505f600b548210159050808015612eb35750600d60029054906101000a900460ff165b8015612ecb575060085f9054906101000a900460ff16155b8015612f1e575060205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612f715750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612fc45750601e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561300557600160085f6101000a81548160ff021916908315150217905550612feb613720565b5f60085f6101000a81548160ff0219169083151502179055505b5f60085f9054906101000a900460ff16159050601e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806130b35750601e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156130bc575f90505b5f81156133255760205f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561311a57505f601654115b156131e457613147606461313960165488613a1b90919063ffffffff16565b613a9290919063ffffffff16565b90506016546018548261315a9190614468565b61316491906144d6565b601b5f8282546131749190614622565b925050819055506016546019548261318c9190614468565b61319691906144d6565b601c5f8282546131a69190614622565b92505081905550601654601754826131be9190614468565b6131c891906144d6565b601a5f8282546131d89190614622565b92505081905550613302565b60205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561323b57505f601254115b1561330157613268606461325a60125488613a1b90919063ffffffff16565b613a9290919063ffffffff16565b90506012546014548261327b9190614468565b61328591906144d6565b601b5f8282546132959190614622565b92505081905550601254601554826132ad9190614468565b6132b791906144d6565b601c5f8282546132c79190614622565b92505081905550601254601354826132df9190614468565b6132e991906144d6565b601a5f8282546132f99190614622565b925050819055505b5b5f81111561331657613315873083613497565b5b80856133229190614e5b565b94505b613330878787613497565b505050505b505050565b5f838311158290613381576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133789190613f1e565b60405180910390fd5b505f838561338f9190614e5b565b9050809150509392505050565b5f8082846133aa9190614622565b9050838110156133ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e690614ed8565b60405180910390fd5b8091505092915050565b8060205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fc90614a81565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356a90614b0f565b60405180910390fd5b61357e838383613adb565b6135e78160405180606001604052806026815260200161529f602691395f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461333a9092919063ffffffff16565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550613676815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461339c90919063ffffffff16565b5f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161371391906140ee565b60405180910390a3505050565b5f61372a3061139a565b90505f601c54601a54601b546137409190614622565b61374a9190614622565b90505f8083148061375a57505f82145b1561376757505050613a19565b5f1515600d60039054906101000a900460ff161515036137ae576014600b546137909190614468565b8311156137a9576014600b546137a69190614468565b92505b6137ba565b6137b73061139a565b92505b5f600283601b54866137cc9190614468565b6137d691906144d6565b6137e091906144d6565b90505f6137f68286613ae090919063ffffffff16565b90505f47905061380582613b29565b5f6138198247613ae090919063ffffffff16565b90505f61384387613835601a5485613a1b90919063ffffffff16565b613a9290919063ffffffff16565b90505f61386d8861385f601c5486613a1b90919063ffffffff16565b613a9290919063ffffffff16565b90505f81838561387d9190614e5b565b6138879190614e5b565b90505f601b819055505f601a819055505f601c8190555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516138e390614f23565b5f6040518083038185875af1925050503d805f811461391d576040519150601f19603f3d011682016040523d82523d5f602084013e613922565b606091505b5050809850505f8711801561393657505f81115b15613983576139458782613d5c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601b5460405161397a93929190614f37565b60405180910390a15b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516139c990614f23565b5f6040518083038185875af1925050503d805f8114613a03576040519150601f19603f3d011682016040523d82523d5f602084013e613a08565b606091505b505080985050505050505050505050505b565b5f808303613a2b575f9050613a8c565b5f8284613a389190614468565b9050828482613a4791906144d6565b14613a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7e90614fdc565b60405180910390fd5b809150505b92915050565b5f613ad383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e33565b905092915050565b505050565b5f613b2183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061333a565b905092915050565b5f600267ffffffffffffffff811115613b4557613b44614ffa565b5b604051908082528060200260200182016040528015613b735781602001602082028036833780820191505090505b50905030815f81518110613b8a57613b89615027565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c519190615068565b81600181518110613c6557613c64615027565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613cca307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123ae565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613d2b959493929190615183565b5f604051808303815f87803b158015613d42575f80fd5b505af1158015613d54573d5f803e3d5ffd5b505050505050565b613d87307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123ae565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613deb969594939291906151db565b60606040518083038185885af1158015613e07573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613e2c919061524e565b5050505050565b5f8083118290613e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e709190613f1e565b60405180910390fd5b505f8385613e8791906144d6565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613ecb578082015181840152602081019050613eb0565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613ef082613e94565b613efa8185613e9e565b9350613f0a818560208601613eae565b613f1381613ed6565b840191505092915050565b5f6020820190508181035f830152613f368184613ee6565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f6b82613f42565b9050919050565b613f7b81613f61565b8114613f85575f80fd5b50565b5f81359050613f9681613f72565b92915050565b5f819050919050565b613fae81613f9c565b8114613fb8575f80fd5b50565b5f81359050613fc981613fa5565b92915050565b5f8060408385031215613fe557613fe4613f3e565b5b5f613ff285828601613f88565b925050602061400385828601613fbb565b9150509250929050565b5f8115159050919050565b6140218161400d565b82525050565b5f60208201905061403a5f830184614018565b92915050565b5f6020828403121561405557614054613f3e565b5b5f61406284828501613f88565b91505092915050565b5f819050919050565b5f61408e61408961408484613f42565b61406b565b613f42565b9050919050565b5f61409f82614074565b9050919050565b5f6140b082614095565b9050919050565b6140c0816140a6565b82525050565b5f6020820190506140d95f8301846140b7565b92915050565b6140e881613f9c565b82525050565b5f6020820190506141015f8301846140df565b92915050565b6141108161400d565b811461411a575f80fd5b50565b5f8135905061412b81614107565b92915050565b5f6020828403121561414657614145613f3e565b5b5f6141538482850161411d565b91505092915050565b5f806040838503121561417257614171613f3e565b5b5f61417f85828601613f88565b925050602061419085828601613f88565b9150509250929050565b5f805f606084860312156141b1576141b0613f3e565b5b5f6141be86828701613f88565b93505060206141cf86828701613f88565b92505060406141e086828701613fbb565b9150509250925092565b5f60ff82169050919050565b6141ff816141ea565b82525050565b5f6020820190506142185f8301846141f6565b92915050565b5f806040838503121561423457614233613f3e565b5b5f61424185828601613f88565b92505060206142528582860161411d565b9150509250929050565b61426581613f61565b82525050565b5f60208201905061427e5f83018461425c565b92915050565b5f806040838503121561429a57614299613f3e565b5b5f6142a785828601613fbb565b92505060206142b885828601613fbb565b9150509250929050565b5f805f805f8060c087890312156142dc576142db613f3e565b5b5f6142e989828a01613fbb565b96505060206142fa89828a01613fbb565b955050604061430b89828a01613fbb565b945050606061431c89828a01613fbb565b935050608061432d89828a01613fbb565b92505060a061433e89828a01613fbb565b9150509295509295509295565b5f602082840312156143605761435f613f3e565b5b5f61436d84828501613fbb565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806143ba57607f821691505b6020821081036143cd576143cc614376565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f614407602083613e9e565b9150614412826143d3565b602082019050919050565b5f6020820190508181035f830152614434816143fb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61447282613f9c565b915061447d83613f9c565b925082820261448b81613f9c565b915082820484148315176144a2576144a161443b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6144e082613f9c565b91506144eb83613f9c565b9250826144fb576144fa6144a9565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f614560602f83613e9e565b915061456b82614506565b604082019050919050565b5f6020820190508181035f83015261458d81614554565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f6145ee602483613e9e565b91506145f982614594565b604082019050919050565b5f6020820190508181035f83015261461b816145e2565b9050919050565b5f61462c82613f9c565b915061463783613f9c565b925082820190508082111561464f5761464e61443b565b5b92915050565b7f466565732063616e6e6f7420626520686967686572207468656e2033302500005f82015250565b5f614689601e83613e9e565b915061469482614655565b602082019050919050565b5f6020820190508181035f8301526146b68161467d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614717603983613e9e565b9150614722826146bd565b604082019050919050565b5f6020820190508181035f8301526147448161470b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6147a5603583613e9e565b91506147b08261474b565b604082019050919050565b5f6020820190508181035f8301526147d281614799565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614833603483613e9e565b915061483e826147d9565b604082019050919050565b5f6020820190508181035f83015261486081614827565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6148c1602683613e9e565b91506148cc82614867565b604082019050919050565b5f6020820190508181035f8301526148ee816148b5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61494f602483613e9e565b915061495a826148f5565b604082019050919050565b5f6020820190508181035f83015261497c81614943565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6149dd602283613e9e565b91506149e882614983565b604082019050919050565b5f6020820190508181035f830152614a0a816149d1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614a6b602583613e9e565b9150614a7682614a11565b604082019050919050565b5f6020820190508181035f830152614a9881614a5f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614af9602383613e9e565b9150614b0482614a9f565b604082019050919050565b5f6020820190508181035f830152614b2681614aed565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d20745f8201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b5f614b87603183613e9e565b9150614b9282614b2d565b604082019050919050565b5f6020820190508181035f830152614bb481614b7b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614bef601683613e9e565b9150614bfa82614bbb565b602082019050919050565b5f6020820190508181035f830152614c1c81614be3565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b5f614ca3604983613e9e565b9150614cae82614c23565b606082019050919050565b5f6020820190508181035f830152614cd081614c97565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614d31603583613e9e565b9150614d3c82614cd7565b604082019050919050565b5f6020820190508181035f830152614d5e81614d25565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614d99601383613e9e565b9150614da482614d65565b602082019050919050565b5f6020820190508181035f830152614dc681614d8d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f614e27603683613e9e565b9150614e3282614dcd565b604082019050919050565b5f6020820190508181035f830152614e5481614e1b565b9050919050565b5f614e6582613f9c565b9150614e7083613f9c565b9250828203905081811115614e8857614e8761443b565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614ec2601b83613e9e565b9150614ecd82614e8e565b602082019050919050565b5f6020820190508181035f830152614eef81614eb6565b9050919050565b5f81905092915050565b50565b5f614f0e5f83614ef6565b9150614f1982614f00565b5f82019050919050565b5f614f2d82614f03565b9150819050919050565b5f606082019050614f4a5f8301866140df565b614f5760208301856140df565b614f6460408301846140df565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614fc6602183613e9e565b9150614fd182614f6c565b604082019050919050565b5f6020820190508181035f830152614ff381614fba565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061506281613f72565b92915050565b5f6020828403121561507d5761507c613f3e565b5b5f61508a84828501615054565b91505092915050565b5f819050919050565b5f6150b66150b16150ac84615093565b61406b565b613f9c565b9050919050565b6150c68161509c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6150fe81613f61565b82525050565b5f61510f83836150f5565b60208301905092915050565b5f602082019050919050565b5f615131826150cc565b61513b81856150d6565b9350615146836150e6565b805f5b8381101561517657815161515d8882615104565b97506151688361511b565b925050600181019050615149565b5085935050505092915050565b5f60a0820190506151965f8301886140df565b6151a360208301876150bd565b81810360408301526151b58186615127565b90506151c4606083018561425c565b6151d160808301846140df565b9695505050505050565b5f60c0820190506151ee5f83018961425c565b6151fb60208301886140df565b61520860408301876150bd565b61521560608301866150bd565b615222608083018561425c565b61522f60a08301846140df565b979650505050505050565b5f8151905061524881613fa5565b92915050565b5f805f6060848603121561526557615264613f3e565b5b5f6152728682870161523a565b93505060206152838682870161523a565b92505060406152948682870161523a565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220395f0da670e3e83ed0ab5ec46904ee43917664d8c4a8ffe2ff83121a5f458f4864736f6c63430008140033

Deployed Bytecode Sourcemap

17671:15900:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4869:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5783:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19290:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18159:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17815:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5190:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23161:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18234:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19004:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18121:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26013:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5960:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5089:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6323:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25426:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17873:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26339:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18713:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25117:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18820:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18855:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18197;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5306:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10844:148;;;;;;;;;;;;;:::i;:::-;;18026:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22839:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24126:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23724:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24278:743;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22601:185;;;;;;;;;;;;;:::i;:::-;;10630:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4977:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25562:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18786:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19044:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18930:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6549:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5441:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19513:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25235:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18630:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18965:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23344:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18679:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5624:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18053:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23019:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18749:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11000:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18892:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18087:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4869:100;4923:13;4956:5;4949:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4869:100;:::o;5783:169::-;5866:4;5883:39;5892:12;:10;:12::i;:::-;5906:7;5915:6;5883:8;:39::i;:::-;5940:4;5933:11;;5783:169;;;;:::o;19290:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;18159:31::-;;;;;;;;;;;;;:::o;17815:51::-;;;:::o;5190:108::-;5251:7;5278:12;;5271:19;;5190:108;:::o;23161:111::-;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23257:7:::1;23233:21;;:31;;;;;;;;;;;;;;;;;;23161:111:::0;:::o;18234:41::-;;;;;;;;;;;;;:::o;19004:33::-;;;;:::o;18121:31::-;;;;;;;;;;;;;:::o;26013:311::-;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26164:14:::1;;;;;;;;;;;26123:56;;26145:17;26123:56;;;;;;;;;;;;26207:17;26190:14;;:34;;;;;;;;;;;;;;;;;;26271:9;;;;;;;;;;;26240:41;;26257:12;26240:41;;;;;;;;;;;;26304:12;26292:9;;:24;;;;;;;;;;;;;;;;;;26013:311:::0;;:::o;5960:355::-;6100:4;6117:36;6127:6;6135:9;6146:6;6117:9;:36::i;:::-;6164:121;6173:6;6181:12;:10;:12::i;:::-;6195:89;6233:6;6195:89;;;;;;;;;;;;;;;;;:11;:19;6207:6;6195:19;;;;;;;;;;;;;;;:33;6215:12;:10;:12::i;:::-;6195:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;6164:8;:121::i;:::-;6303:4;6296:11;;5960:355;;;;;:::o;5089:93::-;5147:5;5172:2;5165:9;;5089:93;:::o;6323:218::-;6411:4;6428:83;6437:12;:10;:12::i;:::-;6451:7;6460:50;6499:10;6460:11;:25;6472:12;:10;:12::i;:::-;6460:25;;;;;;;;;;;;;;;:34;6486:7;6460:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;6428:8;:83::i;:::-;6529:4;6522:11;;6323:218;;;;:::o;25426:127::-;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25532:13:::1;25510:10;:19;25521:7;25510:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25426:127:::0;;:::o;17873:38::-;;;:::o;26339:125::-;26404:4;26428:19;:28;26448:7;26428:28;;;;;;;;;;;;;;;;;;;;;;;;;26421:35;;26339:125;;;:::o;18713:29::-;;;;:::o;25117:109::-;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25211:7:::1;25197:11;;:21;;;;;;;;;;;;;;;;;;25117:109:::0;:::o;18820:28::-;;;;:::o;18855:30::-;;;;:::o;18197:::-;;;;;;;;;;;;;:::o;5306:127::-;5380:7;5407:9;:18;5417:7;5407:18;;;;;;;;;;;;;;;;5400:25;;5306:127;;;:::o;10844:148::-;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10951:1:::1;10914:40;;10935:6;;;;;;;;;;;10914:40;;;;;;;;;;;;10982:1;10965:6;;:19;;;;;;;;;;;;;;;;;;10844:148::o:0;18026:20::-;;;;:::o;22839:118::-;22891:4;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22922:5:::1;22907:12;;:20;;;;;;;;;;;;;;;;;;22945:4;22938:11;;22839:118:::0;:::o;24126:144::-;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24258:4:::1;24216:31;:39;24248:6;24216:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24126:144:::0;;:::o;23724:393::-;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23868:4:::1;23862;23858:1;23842:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23841:31;;;;:::i;:::-;23831:6;:41;;23823:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;23984:4;23978;23974:1;23958:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23957:31;;;;:::i;:::-;23943:10;:45;;23935:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;24058:6;24048;:17;;;;:::i;:::-;24040:5;:25;;;;24102:6;24088:10;:21;;;;:::i;:::-;24076:9;:33;;;;23724:393:::0;;:::o;24278:743::-;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24549:10:::1;24537:9;:22;;;;24588:16;24570:15;:34;;;;24632:15;24615:14;:32;;;;24703:14;;24685:15;;24673:9;;:27;;;;:::i;:::-;:44;;;;:::i;:::-;24658:12;:59;;;;24741:11;24728:10;:24;;;;24782:17;24763:16;:36;;;;24828:16;24810:15;:34;;;;24903:15;;24884:16;;24871:10;;:29;;;;:::i;:::-;:47;;;;:::i;:::-;24855:13;:63;;;;24953:2;24937:12;;:18;;:41;;;;;24976:2;24959:13;;:19;;24937:41;24929:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;24278:743:::0;;;;;;:::o;22601:185::-;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22679:4:::1;22665:11;;:18;;;;;;;;;;;;;;;;;;22708:4;22694:11;;:18;;;;;;;;;;;;;;;;;;22736:12;22723:10;:25;;;;22601:185::o:0;10630:79::-;10668:7;10695:6;;;;;;;;;;;10688:13;;10630:79;:::o;4977:104::-;5033:13;5066:7;5059:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4977:104;:::o;25562:245::-;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25669:13:::1;25661:21;;:4;:21;;::::0;25653:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25758:41;25787:4;25793:5;25758:28;:41::i;:::-;25562:245:::0;;:::o;18786:24::-;;;;:::o;19044:27::-;;;;:::o;18930:25::-;;;;:::o;6549:269::-;6642:4;6659:129;6668:12;:10;:12::i;:::-;6682:7;6691:96;6730:15;6691:96;;;;;;;;;;;;;;;;;:11;:25;6703:12;:10;:12::i;:::-;6691:25;;;;;;;;;;;;;;;:34;6717:7;6691:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;6659:8;:129::i;:::-;6806:4;6799:11;;6549:269;;;;:::o;5441:175::-;5527:4;5544:42;5554:12;:10;:12::i;:::-;5568:9;5579:6;5544:9;:42::i;:::-;5604:4;5597:11;;5441:175;;;;:::o;19513:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;25235:182::-;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25351:8:::1;25320:19;:28;25340:7;25320:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25391:7;25375:34;;;25400:8;25375:34;;;;;;:::i;:::-;;;;;;;;25235:182:::0;;:::o;18630:39::-;;;;;;;;;;;;;:::o;18965:32::-;;;;:::o;23344:371::-;23416:4;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23473:6:::1;23469:1;23453:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;23440:9;:39;;23432:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;23589:4;23585:1;23569:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;23556:9;:37;;23548:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;23676:9;23661:12;:24;;;;23703:4;23696:11;;23344:371:::0;;;:::o;18679:27::-;;;;:::o;5624:151::-;5713:7;5740:11;:18;5752:5;5740:18;;;;;;;;;;;;;;;:27;5759:7;5740:27;;;;;;;;;;;;;;;;5733:34;;5624:151;;;;:::o;18053:27::-;;;;:::o;23019:134::-;23079:4;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23118:5:::1;23095:20;;:28;;;;;;;;;;;;;;;;;;23141:4;23134:11;;23019:134:::0;:::o;18749:30::-;;;;:::o;11000:244::-;10767:12;:10;:12::i;:::-;10757:22;;:6;;;;;;;;;;;:22;;;10749:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11109:1:::1;11089:22;;:8;:22;;::::0;11081:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11199:8;11170:38;;11191:6;;;;;;;;;;;11170:38;;;;;;;;;;;;11228:8;11219:6;;:17;;;;;;;;;;;;;;;;;;11000:244:::0;:::o;18892:31::-;;;;:::o;18087:24::-;;;;:::o;222:98::-;275:7;302:10;295:17;;222:98;:::o;8225:381::-;8378:1;8361:19;;:5;:19;;;8353:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8459:1;8440:21;;:7;:21;;;8432:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8544:6;8514:11;:18;8526:5;8514:18;;;;;;;;;;;;;;;:27;8533:7;8514:27;;;;;;;;;;;;;;;:36;;;;8582:7;8566:32;;8575:5;8566:32;;;8591:6;8566:32;;;;;;:::i;:::-;;;;;;;;8225:381;;;:::o;26473:4246::-;26621:1;26605:18;;:4;:18;;;26597:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26698:1;26684:16;;:2;:16;;;26676:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26760:10;:14;26771:2;26760:14;;;;;;;;;;;;;;;;;;;;;;;;;26759:15;:36;;;;;26779:10;:16;26790:4;26779:16;;;;;;;;;;;;;;;;;;;;;;;;;26778:17;26759:36;26751:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;26874:25;:31;26900:4;26874:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;26910:31;:35;26942:2;26910:35;;;;;;;;;;;;;;;;;;;;;;;;;26909:36;26874:71;26870:95;27009:1;26999:6;:11;26996:92;;27027:28;27043:4;27049:2;27053:1;27027:15;:28::i;:::-;27070:7;;26996:92;27104:12;;;;;;;;;;;27101:1779;;;27162:7;:5;:7::i;:::-;27154:15;;:4;:15;;;;:49;;;;;27196:7;:5;:7::i;:::-;27190:13;;:2;:13;;;;27154:49;:86;;;;;27238:1;27224:16;;:2;:16;;;;27154:86;:128;;;;;27275:6;27261:21;;:2;:21;;;;27154:128;:160;;;;;27304:10;;;;;;;;;;;27303:11;27154:160;27132:1737;;;27352:11;;;;;;;;;;;27348:146;;27395:19;:25;27415:4;27395:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27424:19;:23;27444:2;27424:23;;;;;;;;;;;;;;;;;;;;;;;;;27395:52;27387:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;27348:146;27653:20;;;;;;;;;;;27649:423;;;27707:7;:5;:7::i;:::-;27701:13;;:2;:13;;;;:47;;;;;27732:15;27718:30;;:2;:30;;;;27701:47;:79;;;;;27766:13;27752:28;;:2;:28;;;;27701:79;27697:356;;;27858:12;27816:28;:39;27845:9;27816:39;;;;;;;;;;;;;;;;:54;27808:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28017:12;27975:28;:39;28004:9;27975:39;;;;;;;;;;;;;;;:54;;;;27697:356;27649:423;28125:25;:31;28151:4;28125:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28161:31;:35;28193:2;28161:35;;;;;;;;;;;;;;;;;;;;;;;;;28160:36;28125:71;28121:733;;;28243:5;;28233:6;:15;;28225:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28367:9;;28350:13;28360:2;28350:9;:13::i;:::-;28341:6;:22;;;;:::i;:::-;:35;;28333:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28121:733;;;28479:25;:29;28505:2;28479:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;28513:31;:37;28545:4;28513:37;;;;;;;;;;;;;;;;;;;;;;;;;28512:38;28479:71;28475:379;;;28597:5;;28587:6;:15;;28579:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;28475:379;;;28708:31;:35;28740:2;28708:35;;;;;;;;;;;;;;;;;;;;;;;;;28704:150;;28801:9;;28784:13;28794:2;28784:9;:13::i;:::-;28775:6;:22;;;;:::i;:::-;:35;;28767:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28704:150;28475:379;28121:733;27132:1737;27101:1779;28893:28;28924:24;28942:4;28924:9;:24::i;:::-;28893:55;;28962:12;29001;;28977:20;:36;;28962:51;;29045:7;:35;;;;;29069:11;;;;;;;;;;;29045:35;:63;;;;;29098:10;;;;;;;;;;;29097:11;29045:63;:112;;;;;29126:25;:31;29152:4;29126:31;;;;;;;;;;;;;;;;;;;;;;;;;29125:32;29045:112;:155;;;;;29175:19;:25;29195:4;29175:25;;;;;;;;;;;;;;;;;;;;;;;;;29174:26;29045:155;:196;;;;;29218:19;:23;29238:2;29218:23;;;;;;;;;;;;;;;;;;;;;;;;;29217:24;29045:196;29027:334;;;29281:4;29268:10;;:17;;;;;;;;;;;;;;;;;;29303:10;:8;:10::i;:::-;29344:5;29331:10;;:18;;;;;;;;;;;;;;;;;;29027:334;29374:12;29390:10;;;;;;;;;;;29389:11;29374:26;;29502:19;:25;29522:4;29502:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29531:19;:23;29551:2;29531:23;;;;;;;;;;;;;;;;;;;;;;;;;29502:52;29499:99;;;29581:5;29571:15;;29499:99;29611:12;29715:7;29712:953;;;29766:25;:29;29792:2;29766:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29815:1;29799:13;;:17;29766:50;29762:750;;;29843:34;29873:3;29843:25;29854:13;;29843:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29836:41;;29944:13;;29925:16;;29918:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;29896:18;;:61;;;;;;;:::i;:::-;;;;;;;;30012:13;;29999:10;;29992:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;29976:12;;:49;;;;;;;:::i;:::-;;;;;;;;30090:13;;30072:15;;30065:4;:22;;;;:::i;:::-;:38;;;;:::i;:::-;30044:17;;:59;;;;;;;:::i;:::-;;;;;;;;29762:750;;;30164:25;:31;30190:4;30164:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;30214:1;30199:12;;:16;30164:51;30161:351;;;30243:33;30272:3;30243:24;30254:12;;30243:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;30236:40;;30342:12;;30324:15;;30317:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;30295:18;;:59;;;;;;;:::i;:::-;;;;;;;;30408:12;;30396:9;;30389:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;30373:12;;:47;;;;;;;:::i;:::-;;;;;;;;30484:12;;30467:14;;30460:4;:21;;;;:::i;:::-;:36;;;;:::i;:::-;30439:17;;:57;;;;;;;:::i;:::-;;;;;;;;30161:351;29762:750;30539:1;30532:4;:8;30529:93;;;30564:42;30580:4;30594;30601;30564:15;:42::i;:::-;30529:93;30649:4;30639:14;;;;;:::i;:::-;;;29712:953;30678:33;30694:4;30700:2;30704:6;30678:15;:33::i;:::-;26586:4133;;;;26473:4246;;;;:::o;9107:193::-;9193:7;9226:1;9221;:6;;9229:12;9213:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9253:9;9269:1;9265;:5;;;;:::i;:::-;9253:17;;9291:1;9284:8;;;9107:193;;;;;:::o;8773:182::-;8831:7;8851:9;8867:1;8863;:5;;;;:::i;:::-;8851:17;;8892:1;8887;:6;;8879:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8946:1;8939:8;;;8773:182;;;;:::o;25816:189::-;25933:5;25899:25;:31;25925:4;25899:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;25991:5;25957:40;;25985:4;25957:40;;;;;;;;;;;;25816:189;;:::o;6826:575::-;6984:1;6966:20;;:6;:20;;;6958:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7068:1;7047:23;;:9;:23;;;7039:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7124:47;7145:6;7153:9;7164:6;7124:20;:47::i;:::-;7205:71;7227:6;7205:71;;;;;;;;;;;;;;;;;:9;:17;7215:6;7205:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;7185:9;:17;7195:6;7185:17;;;;;;;;;;;;;;;:91;;;;7310:32;7335:6;7310:9;:20;7320:9;7310:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;7287:9;:20;7297:9;7287:20;;;;;;;;;;;;;;;:55;;;;7375:9;7358:35;;7367:6;7358:35;;;7386:6;7358:35;;;;;;:::i;:::-;;;;;;;;6826:575;;;:::o;31863:1705::-;31902:23;31928:24;31946:4;31928:9;:24::i;:::-;31902:50;;31963:25;32032:12;;32012:17;;31991:18;;:38;;;;:::i;:::-;:53;;;;:::i;:::-;31963:81;;32055:12;32103:1;32084:15;:20;:46;;;;32129:1;32108:17;:22;32084:46;32081:60;;;32133:7;;;;;32081:60;32182:5;32157:30;;:21;;;;;;;;;;;:30;;;32154:242;;32239:2;32224:12;;:17;;;;:::i;:::-;32206:15;:35;32203:109;;;32294:2;32279:12;;:17;;;;:::i;:::-;32261:35;;32203:109;32154:242;;;32360:24;32378:4;32360:9;:24::i;:::-;32342:42;;32154:242;32468:23;32553:1;32533:17;32512:18;;32494:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;32468:86;;32565:26;32594:36;32614:15;32594;:19;;:36;;;;:::i;:::-;32565:65;;32644:25;32672:21;32644:49;;32707:36;32724:18;32707:16;:36::i;:::-;32758:18;32779:44;32805:17;32779:21;:25;;:44;;;;:::i;:::-;32758:65;;32837:23;32863:56;32901:17;32863:33;32878:17;;32863:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;32837:82;;32930:17;32950:51;32983:17;32950:28;32965:12;;32950:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;32930:71;;33012:23;33069:9;33051:15;33038:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;33012:66;;33116:1;33095:18;:22;;;;33148:1;33128:17;:21;;;;33175:1;33160:12;:16;;;;33211:9;;;;;;;;;;;33203:23;;33234:9;33203:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33190:58;;;;;33283:1;33265:15;:19;:42;;;;;33306:1;33288:15;:19;33265:42;33262:210;;;33323:46;33336:15;33353;33323:12;:46::i;:::-;33389:71;33404:18;33424:15;33441:18;;33389:71;;;;;;;;:::i;:::-;;;;;;;;33262:210;33506:14;;;;;;;;;;;33498:28;;33534:21;33498:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33485:75;;;;;31891:1677;;;;;;;;;;31863:1705;:::o;9308:254::-;9366:7;9397:1;9392;:6;9388:47;;9422:1;9415:8;;;;9388:47;9448:9;9464:1;9460;:5;;;;:::i;:::-;9448:17;;9493:1;9488;9484;:5;;;;:::i;:::-;:10;9476:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9553:1;9546:8;;;9308:254;;;;;:::o;9570:132::-;9628:7;9655:39;9659:1;9662;9655:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9648:46;;9570:132;;;;:::o;8614:125::-;;;;:::o;8963:136::-;9021:7;9048:43;9052:1;9055;9048:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;9041:50;;8963:136;;;;:::o;30728:597::-;30857:21;30895:1;30881:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30857:40;;30926:4;30908;30913:1;30908:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30952:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30942:4;30947:1;30942:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30988:62;31005:4;31020:15;31038:11;30988:8;:62::i;:::-;31090:15;:66;;;31171:11;31197:1;31241:4;31268;31288:15;31090:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30783:542;30728:597;:::o;31334:520::-;31482:62;31499:4;31514:15;31532:11;31482:8;:62::i;:::-;31588:15;:31;;;31627:9;31660:4;31680:11;31706:1;31749;31800:4;31820:15;31588:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31334:520;;:::o;9710:279::-;9796:7;9828:1;9824;:5;9831:12;9816:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9855:9;9871:1;9867;:5;;;;:::i;:::-;9855:17;;9980:1;9973:8;;;9710:279;;;;;:::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:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:116::-;5181:21;5196:5;5181:21;:::i;:::-;5174:5;5171:32;5161:60;;5217:1;5214;5207:12;5161:60;5111:116;:::o;5233:133::-;5276:5;5314:6;5301:20;5292:29;;5330:30;5354:5;5330:30;:::i;:::-;5233:133;;;;:::o;5372:323::-;5428:6;5477:2;5465:9;5456:7;5452:23;5448:32;5445:119;;;5483:79;;:::i;:::-;5445:119;5603:1;5628:50;5670:7;5661:6;5650:9;5646:22;5628:50;:::i;:::-;5618:60;;5574:114;5372:323;;;;:::o;5701:474::-;5769:6;5777;5826:2;5814:9;5805:7;5801:23;5797:32;5794:119;;;5832:79;;:::i;:::-;5794:119;5952:1;5977:53;6022:7;6013:6;6002:9;5998:22;5977:53;:::i;:::-;5967:63;;5923:117;6079:2;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6050:118;5701:474;;;;;:::o;6181:619::-;6258:6;6266;6274;6323:2;6311:9;6302:7;6298:23;6294:32;6291:119;;;6329:79;;:::i;:::-;6291:119;6449:1;6474:53;6519:7;6510:6;6499:9;6495:22;6474:53;:::i;:::-;6464:63;;6420:117;6576:2;6602:53;6647:7;6638:6;6627:9;6623:22;6602:53;:::i;:::-;6592:63;;6547:118;6704:2;6730:53;6775:7;6766:6;6755:9;6751:22;6730:53;:::i;:::-;6720:63;;6675:118;6181:619;;;;;:::o;6806:86::-;6841:7;6881:4;6874:5;6870:16;6859:27;;6806:86;;;:::o;6898:112::-;6981:22;6997:5;6981:22;:::i;:::-;6976:3;6969:35;6898:112;;:::o;7016:214::-;7105:4;7143:2;7132:9;7128:18;7120:26;;7156:67;7220:1;7209:9;7205:17;7196:6;7156:67;:::i;:::-;7016:214;;;;:::o;7236:468::-;7301:6;7309;7358:2;7346:9;7337:7;7333:23;7329:32;7326:119;;;7364:79;;:::i;:::-;7326:119;7484:1;7509:53;7554:7;7545:6;7534:9;7530:22;7509:53;:::i;:::-;7499:63;;7455:117;7611:2;7637:50;7679:7;7670:6;7659:9;7655:22;7637:50;:::i;:::-;7627:60;;7582:115;7236:468;;;;;:::o;7710:118::-;7797:24;7815:5;7797:24;:::i;:::-;7792:3;7785:37;7710:118;;:::o;7834:222::-;7927:4;7965:2;7954:9;7950:18;7942:26;;7978:71;8046:1;8035:9;8031:17;8022:6;7978:71;:::i;:::-;7834:222;;;;:::o;8062:474::-;8130:6;8138;8187:2;8175:9;8166:7;8162:23;8158:32;8155:119;;;8193:79;;:::i;:::-;8155:119;8313:1;8338:53;8383:7;8374:6;8363:9;8359:22;8338:53;:::i;:::-;8328:63;;8284:117;8440:2;8466:53;8511:7;8502:6;8491:9;8487:22;8466:53;:::i;:::-;8456:63;;8411:118;8062:474;;;;;:::o;8542:1057::-;8646:6;8654;8662;8670;8678;8686;8735:3;8723:9;8714:7;8710:23;8706:33;8703:120;;;8742:79;;:::i;:::-;8703:120;8862:1;8887:53;8932:7;8923:6;8912:9;8908:22;8887:53;:::i;:::-;8877:63;;8833:117;8989:2;9015:53;9060:7;9051:6;9040:9;9036:22;9015:53;:::i;:::-;9005:63;;8960:118;9117:2;9143:53;9188:7;9179:6;9168:9;9164:22;9143:53;:::i;:::-;9133:63;;9088:118;9245:2;9271:53;9316:7;9307:6;9296:9;9292:22;9271:53;:::i;:::-;9261:63;;9216:118;9373:3;9400:53;9445:7;9436:6;9425:9;9421:22;9400:53;:::i;:::-;9390:63;;9344:119;9502:3;9529:53;9574:7;9565:6;9554:9;9550:22;9529:53;:::i;:::-;9519:63;;9473:119;8542:1057;;;;;;;;:::o;9605:329::-;9664:6;9713:2;9701:9;9692:7;9688:23;9684:32;9681:119;;;9719:79;;:::i;:::-;9681:119;9839:1;9864:53;9909:7;9900:6;9889:9;9885:22;9864:53;:::i;:::-;9854:63;;9810:117;9605:329;;;;:::o;9940:180::-;9988:77;9985:1;9978:88;10085:4;10082:1;10075:15;10109:4;10106:1;10099:15;10126:320;10170:6;10207:1;10201:4;10197:12;10187:22;;10254:1;10248:4;10244:12;10275:18;10265:81;;10331:4;10323:6;10319:17;10309:27;;10265:81;10393:2;10385:6;10382:14;10362:18;10359:38;10356:84;;10412:18;;:::i;:::-;10356:84;10177:269;10126:320;;;:::o;10452:182::-;10592:34;10588:1;10580:6;10576:14;10569:58;10452:182;:::o;10640:366::-;10782:3;10803:67;10867:2;10862:3;10803:67;:::i;:::-;10796:74;;10879:93;10968:3;10879:93;:::i;:::-;10997:2;10992:3;10988:12;10981:19;;10640:366;;;:::o;11012:419::-;11178:4;11216:2;11205:9;11201:18;11193:26;;11265:9;11259:4;11255:20;11251:1;11240:9;11236:17;11229:47;11293:131;11419:4;11293:131;:::i;:::-;11285:139;;11012:419;;;:::o;11437:180::-;11485:77;11482:1;11475:88;11582:4;11579:1;11572:15;11606:4;11603:1;11596:15;11623:410;11663:7;11686:20;11704:1;11686:20;:::i;:::-;11681:25;;11720:20;11738:1;11720:20;:::i;:::-;11715:25;;11775:1;11772;11768:9;11797:30;11815:11;11797:30;:::i;:::-;11786:41;;11976:1;11967:7;11963:15;11960:1;11957:22;11937:1;11930:9;11910:83;11887:139;;12006:18;;:::i;:::-;11887:139;11671:362;11623:410;;;;:::o;12039:180::-;12087:77;12084:1;12077:88;12184:4;12181:1;12174:15;12208:4;12205:1;12198:15;12225:185;12265:1;12282:20;12300:1;12282:20;:::i;:::-;12277:25;;12316:20;12334:1;12316:20;:::i;:::-;12311:25;;12355:1;12345:35;;12360:18;;:::i;:::-;12345:35;12402:1;12399;12395:9;12390:14;;12225:185;;;;:::o;12416:234::-;12556:34;12552:1;12544:6;12540:14;12533:58;12625:17;12620:2;12612:6;12608:15;12601:42;12416:234;:::o;12656:366::-;12798:3;12819:67;12883:2;12878:3;12819:67;:::i;:::-;12812:74;;12895:93;12984:3;12895:93;:::i;:::-;13013:2;13008:3;13004:12;12997:19;;12656:366;;;:::o;13028:419::-;13194:4;13232:2;13221:9;13217:18;13209:26;;13281:9;13275:4;13271:20;13267:1;13256:9;13252:17;13245:47;13309:131;13435:4;13309:131;:::i;:::-;13301:139;;13028:419;;;:::o;13453:223::-;13593:34;13589:1;13581:6;13577:14;13570:58;13662:6;13657:2;13649:6;13645:15;13638:31;13453:223;:::o;13682:366::-;13824:3;13845:67;13909:2;13904:3;13845:67;:::i;:::-;13838:74;;13921:93;14010:3;13921:93;:::i;:::-;14039:2;14034:3;14030:12;14023:19;;13682:366;;;:::o;14054:419::-;14220:4;14258:2;14247:9;14243:18;14235:26;;14307:9;14301:4;14297:20;14293:1;14282:9;14278:17;14271:47;14335:131;14461:4;14335:131;:::i;:::-;14327:139;;14054:419;;;:::o;14479:191::-;14519:3;14538:20;14556:1;14538:20;:::i;:::-;14533:25;;14572:20;14590:1;14572:20;:::i;:::-;14567:25;;14615:1;14612;14608:9;14601:16;;14636:3;14633:1;14630:10;14627:36;;;14643:18;;:::i;:::-;14627:36;14479:191;;;;:::o;14676:180::-;14816:32;14812:1;14804:6;14800:14;14793:56;14676:180;:::o;14862:366::-;15004:3;15025:67;15089:2;15084:3;15025:67;:::i;:::-;15018:74;;15101:93;15190:3;15101:93;:::i;:::-;15219:2;15214:3;15210:12;15203:19;;14862:366;;;:::o;15234:419::-;15400:4;15438:2;15427:9;15423:18;15415:26;;15487:9;15481:4;15477:20;15473:1;15462:9;15458:17;15451:47;15515:131;15641:4;15515:131;:::i;:::-;15507:139;;15234:419;;;:::o;15659:244::-;15799:34;15795:1;15787:6;15783:14;15776:58;15868:27;15863:2;15855:6;15851:15;15844:52;15659:244;:::o;15909:366::-;16051:3;16072:67;16136:2;16131:3;16072:67;:::i;:::-;16065:74;;16148:93;16237:3;16148:93;:::i;:::-;16266:2;16261:3;16257:12;16250:19;;15909:366;;;:::o;16281:419::-;16447:4;16485:2;16474:9;16470:18;16462:26;;16534:9;16528:4;16524:20;16520:1;16509:9;16505:17;16498:47;16562:131;16688:4;16562:131;:::i;:::-;16554:139;;16281:419;;;:::o;16706:240::-;16846:34;16842:1;16834:6;16830:14;16823:58;16915:23;16910:2;16902:6;16898:15;16891:48;16706:240;:::o;16952:366::-;17094:3;17115:67;17179:2;17174:3;17115:67;:::i;:::-;17108:74;;17191:93;17280:3;17191:93;:::i;:::-;17309:2;17304:3;17300:12;17293:19;;16952:366;;;:::o;17324:419::-;17490:4;17528:2;17517:9;17513:18;17505:26;;17577:9;17571:4;17567:20;17563:1;17552:9;17548:17;17541:47;17605:131;17731:4;17605:131;:::i;:::-;17597:139;;17324:419;;;:::o;17749:239::-;17889:34;17885:1;17877:6;17873:14;17866:58;17958:22;17953:2;17945:6;17941:15;17934:47;17749:239;:::o;17994:366::-;18136:3;18157:67;18221:2;18216:3;18157:67;:::i;:::-;18150:74;;18233:93;18322:3;18233:93;:::i;:::-;18351:2;18346:3;18342:12;18335:19;;17994:366;;;:::o;18366:419::-;18532:4;18570:2;18559:9;18555:18;18547:26;;18619:9;18613:4;18609:20;18605:1;18594:9;18590:17;18583:47;18647:131;18773:4;18647:131;:::i;:::-;18639:139;;18366:419;;;:::o;18791:225::-;18931:34;18927:1;18919:6;18915:14;18908:58;19000:8;18995:2;18987:6;18983:15;18976:33;18791:225;:::o;19022:366::-;19164:3;19185:67;19249:2;19244:3;19185:67;:::i;:::-;19178:74;;19261:93;19350:3;19261:93;:::i;:::-;19379:2;19374:3;19370:12;19363:19;;19022:366;;;:::o;19394:419::-;19560:4;19598:2;19587:9;19583:18;19575:26;;19647:9;19641:4;19637:20;19633:1;19622:9;19618:17;19611:47;19675:131;19801:4;19675:131;:::i;:::-;19667:139;;19394:419;;;:::o;19819:223::-;19959:34;19955:1;19947:6;19943:14;19936:58;20028:6;20023:2;20015:6;20011:15;20004:31;19819:223;:::o;20048:366::-;20190:3;20211:67;20275:2;20270:3;20211:67;:::i;:::-;20204:74;;20287:93;20376:3;20287:93;:::i;:::-;20405:2;20400:3;20396:12;20389:19;;20048:366;;;:::o;20420:419::-;20586:4;20624:2;20613:9;20609:18;20601:26;;20673:9;20667:4;20663:20;20659:1;20648:9;20644:17;20637:47;20701:131;20827:4;20701:131;:::i;:::-;20693:139;;20420:419;;;:::o;20845:221::-;20985:34;20981:1;20973:6;20969:14;20962:58;21054:4;21049:2;21041:6;21037:15;21030:29;20845:221;:::o;21072:366::-;21214:3;21235:67;21299:2;21294:3;21235:67;:::i;:::-;21228:74;;21311:93;21400:3;21311:93;:::i;:::-;21429:2;21424:3;21420:12;21413:19;;21072:366;;;:::o;21444:419::-;21610:4;21648:2;21637:9;21633:18;21625:26;;21697:9;21691:4;21687:20;21683:1;21672:9;21668:17;21661:47;21725:131;21851:4;21725:131;:::i;:::-;21717:139;;21444:419;;;:::o;21869:224::-;22009:34;22005:1;21997:6;21993:14;21986:58;22078:7;22073:2;22065:6;22061:15;22054:32;21869:224;:::o;22099:366::-;22241:3;22262:67;22326:2;22321:3;22262:67;:::i;:::-;22255:74;;22338:93;22427:3;22338:93;:::i;:::-;22456:2;22451:3;22447:12;22440:19;;22099:366;;;:::o;22471:419::-;22637:4;22675:2;22664:9;22660:18;22652:26;;22724:9;22718:4;22714:20;22710:1;22699:9;22695:17;22688:47;22752:131;22878:4;22752:131;:::i;:::-;22744:139;;22471:419;;;:::o;22896:222::-;23036:34;23032:1;23024:6;23020:14;23013:58;23105:5;23100:2;23092:6;23088:15;23081:30;22896:222;:::o;23124:366::-;23266:3;23287:67;23351:2;23346:3;23287:67;:::i;:::-;23280:74;;23363:93;23452:3;23363:93;:::i;:::-;23481:2;23476:3;23472:12;23465:19;;23124:366;;;:::o;23496:419::-;23662:4;23700:2;23689:9;23685:18;23677:26;;23749:9;23743:4;23739:20;23735:1;23724:9;23720:17;23713:47;23777:131;23903:4;23777:131;:::i;:::-;23769:139;;23496:419;;;:::o;23921:236::-;24061:34;24057:1;24049:6;24045:14;24038:58;24130:19;24125:2;24117:6;24113:15;24106:44;23921:236;:::o;24163:366::-;24305:3;24326:67;24390:2;24385:3;24326:67;:::i;:::-;24319:74;;24402:93;24491:3;24402:93;:::i;:::-;24520:2;24515:3;24511:12;24504:19;;24163:366;;;:::o;24535:419::-;24701:4;24739:2;24728:9;24724:18;24716:26;;24788:9;24782:4;24778:20;24774:1;24763:9;24759:17;24752:47;24816:131;24942:4;24816:131;:::i;:::-;24808:139;;24535:419;;;:::o;24960:172::-;25100:24;25096:1;25088:6;25084:14;25077:48;24960:172;:::o;25138:366::-;25280:3;25301:67;25365:2;25360:3;25301:67;:::i;:::-;25294:74;;25377:93;25466:3;25377:93;:::i;:::-;25495:2;25490:3;25486:12;25479:19;;25138:366;;;:::o;25510:419::-;25676:4;25714:2;25703:9;25699:18;25691:26;;25763:9;25757:4;25753:20;25749:1;25738:9;25734:17;25727:47;25791:131;25917:4;25791:131;:::i;:::-;25783:139;;25510:419;;;:::o;25935:297::-;26075:34;26071:1;26063:6;26059:14;26052:58;26144:34;26139:2;26131:6;26127:15;26120:59;26213:11;26208:2;26200:6;26196:15;26189:36;25935:297;:::o;26238:366::-;26380:3;26401:67;26465:2;26460:3;26401:67;:::i;:::-;26394:74;;26477:93;26566:3;26477:93;:::i;:::-;26595:2;26590:3;26586:12;26579:19;;26238:366;;;:::o;26610:419::-;26776:4;26814:2;26803:9;26799:18;26791:26;;26863:9;26857:4;26853:20;26849:1;26838:9;26834:17;26827:47;26891:131;27017:4;26891:131;:::i;:::-;26883:139;;26610:419;;;:::o;27035:240::-;27175:34;27171:1;27163:6;27159:14;27152:58;27244:23;27239:2;27231:6;27227:15;27220:48;27035:240;:::o;27281:366::-;27423:3;27444:67;27508:2;27503:3;27444:67;:::i;:::-;27437:74;;27520:93;27609:3;27520:93;:::i;:::-;27638:2;27633:3;27629:12;27622:19;;27281:366;;;:::o;27653:419::-;27819:4;27857:2;27846:9;27842:18;27834:26;;27906:9;27900:4;27896:20;27892:1;27881:9;27877:17;27870:47;27934:131;28060:4;27934:131;:::i;:::-;27926:139;;27653:419;;;:::o;28078:169::-;28218:21;28214:1;28206:6;28202:14;28195:45;28078:169;:::o;28253:366::-;28395:3;28416:67;28480:2;28475:3;28416:67;:::i;:::-;28409:74;;28492:93;28581:3;28492:93;:::i;:::-;28610:2;28605:3;28601:12;28594:19;;28253:366;;;:::o;28625:419::-;28791:4;28829:2;28818:9;28814:18;28806:26;;28878:9;28872:4;28868:20;28864:1;28853:9;28849:17;28842:47;28906:131;29032:4;28906:131;:::i;:::-;28898:139;;28625:419;;;:::o;29050:241::-;29190:34;29186:1;29178:6;29174:14;29167:58;29259:24;29254:2;29246:6;29242:15;29235:49;29050:241;:::o;29297:366::-;29439:3;29460:67;29524:2;29519:3;29460:67;:::i;:::-;29453:74;;29536:93;29625:3;29536:93;:::i;:::-;29654:2;29649:3;29645:12;29638:19;;29297:366;;;:::o;29669:419::-;29835:4;29873:2;29862:9;29858:18;29850:26;;29922:9;29916:4;29912:20;29908:1;29897:9;29893:17;29886:47;29950:131;30076:4;29950:131;:::i;:::-;29942:139;;29669:419;;;:::o;30094:194::-;30134:4;30154:20;30172:1;30154:20;:::i;:::-;30149:25;;30188:20;30206:1;30188:20;:::i;:::-;30183:25;;30232:1;30229;30225:9;30217:17;;30256:1;30250:4;30247:11;30244:37;;;30261:18;;:::i;:::-;30244:37;30094:194;;;;:::o;30294:177::-;30434:29;30430:1;30422:6;30418:14;30411:53;30294:177;:::o;30477:366::-;30619:3;30640:67;30704:2;30699:3;30640:67;:::i;:::-;30633:74;;30716:93;30805:3;30716:93;:::i;:::-;30834:2;30829:3;30825:12;30818:19;;30477:366;;;:::o;30849:419::-;31015:4;31053:2;31042:9;31038:18;31030:26;;31102:9;31096:4;31092:20;31088:1;31077:9;31073:17;31066:47;31130:131;31256:4;31130:131;:::i;:::-;31122:139;;30849:419;;;:::o;31274:147::-;31375:11;31412:3;31397:18;;31274:147;;;;:::o;31427:114::-;;:::o;31547:398::-;31706:3;31727:83;31808:1;31803:3;31727:83;:::i;:::-;31720:90;;31819:93;31908:3;31819:93;:::i;:::-;31937:1;31932:3;31928:11;31921:18;;31547:398;;;:::o;31951:379::-;32135:3;32157:147;32300:3;32157:147;:::i;:::-;32150:154;;32321:3;32314:10;;31951:379;;;:::o;32336:442::-;32485:4;32523:2;32512:9;32508:18;32500:26;;32536:71;32604:1;32593:9;32589:17;32580:6;32536:71;:::i;:::-;32617:72;32685:2;32674:9;32670:18;32661:6;32617:72;:::i;:::-;32699;32767:2;32756:9;32752:18;32743:6;32699:72;:::i;:::-;32336:442;;;;;;:::o;32784:220::-;32924:34;32920:1;32912:6;32908:14;32901:58;32993:3;32988:2;32980:6;32976:15;32969:28;32784:220;:::o;33010:366::-;33152:3;33173:67;33237:2;33232:3;33173:67;:::i;:::-;33166:74;;33249:93;33338:3;33249:93;:::i;:::-;33367:2;33362:3;33358:12;33351:19;;33010:366;;;:::o;33382:419::-;33548:4;33586:2;33575:9;33571:18;33563:26;;33635:9;33629:4;33625:20;33621:1;33610:9;33606:17;33599:47;33663:131;33789:4;33663:131;:::i;:::-;33655:139;;33382:419;;;:::o;33807:180::-;33855:77;33852:1;33845:88;33952:4;33949:1;33942:15;33976:4;33973:1;33966:15;33993:180;34041:77;34038:1;34031:88;34138:4;34135:1;34128:15;34162:4;34159:1;34152:15;34179:143;34236:5;34267:6;34261:13;34252:22;;34283:33;34310:5;34283:33;:::i;:::-;34179:143;;;;:::o;34328:351::-;34398:6;34447:2;34435:9;34426:7;34422:23;34418:32;34415:119;;;34453:79;;:::i;:::-;34415:119;34573:1;34598:64;34654:7;34645:6;34634:9;34630:22;34598:64;:::i;:::-;34588:74;;34544:128;34328:351;;;;:::o;34685:85::-;34730:7;34759:5;34748:16;;34685:85;;;:::o;34776:158::-;34834:9;34867:61;34885:42;34894:32;34920:5;34894:32;:::i;:::-;34885:42;:::i;:::-;34867:61;:::i;:::-;34854:74;;34776:158;;;:::o;34940:147::-;35035:45;35074:5;35035:45;:::i;:::-;35030:3;35023:58;34940:147;;:::o;35093:114::-;35160:6;35194:5;35188:12;35178:22;;35093:114;;;:::o;35213:184::-;35312:11;35346:6;35341:3;35334:19;35386:4;35381:3;35377:14;35362:29;;35213:184;;;;:::o;35403:132::-;35470:4;35493:3;35485:11;;35523:4;35518:3;35514:14;35506:22;;35403:132;;;:::o;35541:108::-;35618:24;35636:5;35618:24;:::i;:::-;35613:3;35606:37;35541:108;;:::o;35655:179::-;35724:10;35745:46;35787:3;35779:6;35745:46;:::i;:::-;35823:4;35818:3;35814:14;35800:28;;35655:179;;;;:::o;35840:113::-;35910:4;35942;35937:3;35933:14;35925:22;;35840:113;;;:::o;35989:732::-;36108:3;36137:54;36185:5;36137:54;:::i;:::-;36207:86;36286:6;36281:3;36207:86;:::i;:::-;36200:93;;36317:56;36367:5;36317:56;:::i;:::-;36396:7;36427:1;36412:284;36437:6;36434:1;36431:13;36412:284;;;36513:6;36507:13;36540:63;36599:3;36584:13;36540:63;:::i;:::-;36533:70;;36626:60;36679:6;36626:60;:::i;:::-;36616:70;;36472:224;36459:1;36456;36452:9;36447:14;;36412:284;;;36416:14;36712:3;36705:10;;36113:608;;;35989:732;;;;:::o;36727:831::-;36990:4;37028:3;37017:9;37013:19;37005:27;;37042:71;37110:1;37099:9;37095:17;37086:6;37042:71;:::i;:::-;37123:80;37199:2;37188:9;37184:18;37175:6;37123:80;:::i;:::-;37250:9;37244:4;37240:20;37235:2;37224:9;37220:18;37213:48;37278:108;37381:4;37372:6;37278:108;:::i;:::-;37270:116;;37396:72;37464:2;37453:9;37449:18;37440:6;37396:72;:::i;:::-;37478:73;37546:3;37535:9;37531:19;37522:6;37478:73;:::i;:::-;36727:831;;;;;;;;:::o;37564:807::-;37813:4;37851:3;37840:9;37836:19;37828:27;;37865:71;37933:1;37922:9;37918:17;37909:6;37865:71;:::i;:::-;37946:72;38014:2;38003:9;37999:18;37990:6;37946:72;:::i;:::-;38028:80;38104:2;38093:9;38089:18;38080:6;38028:80;:::i;:::-;38118;38194:2;38183:9;38179:18;38170:6;38118:80;:::i;:::-;38208:73;38276:3;38265:9;38261:19;38252:6;38208:73;:::i;:::-;38291;38359:3;38348:9;38344:19;38335:6;38291:73;:::i;:::-;37564:807;;;;;;;;;:::o;38377:143::-;38434:5;38465:6;38459:13;38450:22;;38481:33;38508:5;38481:33;:::i;:::-;38377:143;;;;:::o;38526:663::-;38614:6;38622;38630;38679:2;38667:9;38658:7;38654:23;38650:32;38647:119;;;38685:79;;:::i;:::-;38647:119;38805:1;38830:64;38886:7;38877:6;38866:9;38862:22;38830:64;:::i;:::-;38820:74;;38776:128;38943:2;38969:64;39025:7;39016:6;39005:9;39001:22;38969:64;:::i;:::-;38959:74;;38914:129;39082:2;39108:64;39164:7;39155:6;39144:9;39140:22;39108:64;:::i;:::-;39098:74;;39053:129;38526:663;;;;;:::o

Swarm Source

ipfs://395f0da670e3e83ed0ab5ec46904ee43917664d8c4a8ffe2ff83121a5f458f48
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.