ETH Price: $3,440.50 (+1.77%)
Gas: 3 Gwei

Contract

0xD5bc75fE875E2234458957f88756A618C078760F
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Value
Approve198961212024-05-18 10:05:2343 days ago1716026723IN
0xD5bc75fE...8C078760F
0 ETH0.000161523.42405309
Transfer198364632024-05-10 1:48:2351 days ago1715305703IN
0xD5bc75fE...8C078760F
0 ETH0.000258633.9284347
Transfer198226252024-05-08 3:20:4753 days ago1715138447IN
0xD5bc75fE...8C078760F
0 ETH0.000355145.39533623
Transfer198208432024-05-07 21:22:1154 days ago1715116931IN
0xD5bc75fE...8C078760F
0 ETH0.000417166.33751958
Approve196045222024-04-07 14:50:4784 days ago1712501447IN
0xD5bc75fE...8C078760F
0 ETH0.0009124719.34324355
Approve195735002024-04-03 6:35:4788 days ago1712126147IN
0xD5bc75fE...8C078760F
0 ETH0.0005760123.08755954
Approve195021412024-03-24 4:49:2398 days ago1711255763IN
0xD5bc75fE...8C078760F
0 ETH0.0007831216.69456895
Approve191126492024-01-29 14:02:11153 days ago1706536931IN
0xD5bc75fE...8C078760F
0 ETH0.0008781818.59267063
Approve190649012024-01-22 21:22:47160 days ago1705958567IN
0xD5bc75fE...8C078760F
0 ETH0.0008167317.29159658
Approve190153672024-01-15 22:48:35167 days ago1705358915IN
0xD5bc75fE...8C078760F
0 ETH0.0009467820.07046904
Approve190028422024-01-14 4:48:35168 days ago1705207715IN
0xD5bc75fE...8C078760F
0 ETH0.0009413219.95471345
Approve189923372024-01-12 17:34:47170 days ago1705080887IN
0xD5bc75fE...8C078760F
0 ETH0.002446451.86027062
Approve189861232024-01-11 20:41:35171 days ago1705005695IN
0xD5bc75fE...8C078760F
0 ETH0.001609434.0737723
Approve189861202024-01-11 20:40:59171 days ago1705005659IN
0xD5bc75fE...8C078760F
0 ETH0.0017368936.77293627
Approve189861172024-01-11 20:40:23171 days ago1705005623IN
0xD5bc75fE...8C078760F
0 ETH0.0016839135.65129099
Approve189861142024-01-11 20:39:47171 days ago1705005587IN
0xD5bc75fE...8C078760F
0 ETH0.0017206836.42973503
Approve189804672024-01-11 1:38:11171 days ago1704937091IN
0xD5bc75fE...8C078760F
0 ETH0.0020966244.44538905
Approve189734222024-01-10 1:58:23172 days ago1704851903IN
0xD5bc75fE...8C078760F
0 ETH0.0010952923.21878479
Approve189668942024-01-09 3:59:47173 days ago1704772787IN
0xD5bc75fE...8C078760F
0 ETH0.0006894914.67970192
Approve189659512024-01-09 0:48:23174 days ago1704761303IN
0xD5bc75fE...8C078760F
0 ETH0.0008848618.86826496
Approve189653732024-01-08 22:51:11174 days ago1704754271IN
0xD5bc75fE...8C078760F
0 ETH0.0009289819.6931658
Approve189621312024-01-08 11:54:47174 days ago1704714887IN
0xD5bc75fE...8C078760F
0 ETH0.0007201215.26554984
Approve189598752024-01-08 4:15:59174 days ago1704687359IN
0xD5bc75fE...8C078760F
0 ETH0.0013539728.70234485
Transfer189581822024-01-07 22:31:11175 days ago1704666671IN
0xD5bc75fE...8C078760F
0 ETH0.0015370431.55373231
Approve189535242024-01-07 6:45:11175 days ago1704609911IN
0xD5bc75fE...8C078760F
0 ETH0.0007843831.48510991
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
191126502024-01-29 14:02:23153 days ago1706536943
0xD5bc75fE...8C078760F
0.00090476 ETH
191126502024-01-29 14:02:23153 days ago1706536943
0xD5bc75fE...8C078760F
0.00090476 ETH
191126502024-01-29 14:02:23153 days ago1706536943
0xD5bc75fE...8C078760F
0.00180952 ETH
190028432024-01-14 4:48:47168 days ago1705207727
0xD5bc75fE...8C078760F
0.00100259 ETH
190028432024-01-14 4:48:47168 days ago1705207727
0xD5bc75fE...8C078760F
0.00100259 ETH
190028432024-01-14 4:48:47168 days ago1705207727
0xD5bc75fE...8C078760F
0.00200518 ETH
189897192024-01-12 8:47:11170 days ago1705049231
0xD5bc75fE...8C078760F
0.00107495 ETH
189897192024-01-12 8:47:11170 days ago1705049231
0xD5bc75fE...8C078760F
0.00107495 ETH
189897192024-01-12 8:47:11170 days ago1705049231
0xD5bc75fE...8C078760F
0.00214991 ETH
189861152024-01-11 20:39:59171 days ago1705005599
0xD5bc75fE...8C078760F
0.00183168 ETH
189861152024-01-11 20:39:59171 days ago1705005599
0xD5bc75fE...8C078760F
0.00183168 ETH
189861152024-01-11 20:39:59171 days ago1705005599
0xD5bc75fE...8C078760F
0.00366336 ETH
189628802024-01-08 14:27:35174 days ago1704724055
0xD5bc75fE...8C078760F
0.00198607 ETH
189628802024-01-08 14:27:35174 days ago1704724055
0xD5bc75fE...8C078760F
0.00198607 ETH
189628802024-01-08 14:27:35174 days ago1704724055
0xD5bc75fE...8C078760F
0.00397214 ETH
189598762024-01-08 4:16:11174 days ago1704687371
0xD5bc75fE...8C078760F
0.00206495 ETH
189598762024-01-08 4:16:11174 days ago1704687371
0xD5bc75fE...8C078760F
0.00206495 ETH
189598762024-01-08 4:16:11174 days ago1704687371
0xD5bc75fE...8C078760F
0.0041299 ETH
189568482024-01-07 18:01:11175 days ago1704650471
0xD5bc75fE...8C078760F
0.00225575 ETH
189568482024-01-07 18:01:11175 days ago1704650471
0xD5bc75fE...8C078760F
0.00225575 ETH
189568482024-01-07 18:01:11175 days ago1704650471
0xD5bc75fE...8C078760F
0.00451151 ETH
189469862024-01-06 8:27:11176 days ago1704529631
0xD5bc75fE...8C078760F
0.00235913 ETH
189469862024-01-06 8:27:11176 days ago1704529631
0xD5bc75fE...8C078760F
0.00235913 ETH
189469862024-01-06 8:27:11176 days ago1704529631
0xD5bc75fE...8C078760F
0.00471827 ETH
189440692024-01-05 22:36:23177 days ago1704494183
0xD5bc75fE...8C078760F
0.0066669 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Yummy

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/*
🍕 $YUMMY Official Links 🍕

website: yummycoin.vip

tg channel: t.me/yummycoinportal

twitter: https://x.com/yummyerc
*/

pragma solidity ^0.8.23;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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 {
    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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract Yummy is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public developmentWallet;

    uint256 public maxT;
    uint256 public swapTokensAtAmount;
    uint256 public maxW;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevelopmentFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevelopmentFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForDevelopment;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxT;

    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 marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event developmentWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    constructor() ERC20("Yummy", unicode"YUMMY") {
        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 _buyMarketingFee = 11;
        uint256 _buyDevelopmentFee = 4;

        uint256 _sellMarketingFee = 45;
        uint256 _sellDevelopmentFee = 15;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxT = 2_000_000 * 1e18; // 2% from total supply maxTTxn
        maxW = 2_000_000 * 1e18; // 2% from total supply maxW
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyTotalFees = buyMarketingFee + buyDevelopmentFee;

        sellMarketingFee = _sellMarketingFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellTotalFees = sellMarketingFee + sellDevelopmentFee;

        marketingWallet = address(0x3c7223cBcF3188D7B446f89de63bDaB1D339609e);
        developmentWallet = address(0x0dF80b7073C21393521e5E37C80cd1A40521407C);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    function enableTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
                keccak256(bytes('Trading Token')),
                keccak256(bytes('1')),
                block.chainid,
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes('Enable Trading')),
                uint256(0)
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                domainHash,
                structHash                
            )
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(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."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updatemaxTAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxT lower than 0.1%"
        );
        maxT = newNum * (10**18);
    }

    function updatemaxWAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxW lower than 0.5%"
        );
        maxW = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxT[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevelopmentFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevelopmentFee;
        require(buyTotalFees <= 30, "Must keep fees at 30% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevelopmentFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevelopmentFee;
        require(sellTotalFees <= 60, "Must keep fees at 60% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    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 updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updatedevelopmentWallet(address newWallet) external onlyOwner {
        emit developmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

    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");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedmaxT[to]) {
                    require(amount <= maxT, "Buy transfer amount exceeds the maxT.");
                    require(amount + balanceOf(to) <= maxW, "Max wallet exceeded");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxT[from]) {
                    require(amount <= maxT, "Sell transfer amount exceeds the maxT.");
                }
                else if (!_isExcludedmaxT[to]) {
                    require(amount + balanceOf(to) <= maxW, "Max wallet exceeded");
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // 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);
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function manualSwap(uint256 amount) external {
      require(_msgSender() == marketingWallet);
        require(amount <= balanceOf(address(this)) && amount > 0, "Wrong amount");
        swapTokensForEth(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 swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForDevelopment;
        bool success;

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);

        tokensForMarketing = 0;
        tokensForDevelopment = 0;

        (success, ) = address(developmentWallet).call{value: ethForDev}("");
        (success, ) = address(marketingWallet).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":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":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":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxT","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":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"enableTradingWithPermit","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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxW","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":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","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":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxTAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaxWAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600c5f6101000a81548160ff0219169083151502179055505f600c60016101000a81548160ff0219169083151502179055505f600c60026101000a81548160ff0219169083151502179055503480156200005e575f80fd5b506040518060400160405280600581526020017f59756d6d790000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f59554d4d590000000000000000000000000000000000000000000000000000008152508160039081620000dc919062000d12565b508060049081620000ee919062000d12565b50505062000111620001056200058660201b60201c565b6200058d60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506200013c8160016200065060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e0919062000e5b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000246573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026c919062000e5b565b6040518363ffffffff1660e01b81526004016200028b92919062000e9c565b6020604051808303815f875af1158015620002a8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002ce919062000e5b565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200034160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200065060201b60201c565b6200037560065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200073760201b60201c565b5f600b90505f600490505f602d90505f600f90505f6a52b7d2dcc80cd2e400000090506a01a784379d99db420000006009819055506a01a784379d99db42000000600b81905550612710600582620003ce919062000ef4565b620003da919062000f6b565b600a8190555084600e8190555083600f81905550600f54600e5462000400919062000fa2565b600d81905550826011819055508160128190555060125460115462000426919062000fa2565b601081905550733c7223cbcf3188d7b446f89de63bdab1d339609e60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730df80b7073c21393521e5e37c80cd1a40521407c60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004f6620004e8620007d560201b60201c565b6001620007fd60201b60201c565b62000509306001620007fd60201b60201c565b6200051e61dead6001620007fd60201b60201c565b6200054062000532620007d560201b60201c565b60016200065060201b60201c565b620005533060016200065060201b60201c565b6200056861dead60016200065060201b60201c565b6200057a33826200093460201b60201c565b5050505050506200112b565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006606200058660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000686620007d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d6906200103a565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200080d6200058660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000833620007d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200088c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000883906200103a565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000928919062001076565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099c90620010df565b60405180910390fd5b620009b85f838362000aa460201b60201c565b8060025f828254620009cb919062000fa2565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000a1f919062000fa2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a85919062001110565b60405180910390a362000aa05f838362000aa960201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b2a57607f821691505b60208210810362000b405762000b3f62000ae5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000ba47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b67565b62000bb0868362000b67565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000bfa62000bf462000bee8462000bc8565b62000bd1565b62000bc8565b9050919050565b5f819050919050565b62000c158362000bda565b62000c2d62000c248262000c01565b84845462000b73565b825550505050565b5f90565b62000c4362000c35565b62000c5081848462000c0a565b505050565b5b8181101562000c775762000c6b5f8262000c39565b60018101905062000c56565b5050565b601f82111562000cc65762000c908162000b46565b62000c9b8462000b58565b8101602085101562000cab578190505b62000cc362000cba8562000b58565b83018262000c55565b50505b505050565b5f82821c905092915050565b5f62000ce85f198460080262000ccb565b1980831691505092915050565b5f62000d02838362000cd7565b9150826002028217905092915050565b62000d1d8262000aae565b67ffffffffffffffff81111562000d395762000d3862000ab8565b5b62000d45825462000b12565b62000d5282828562000c7b565b5f60209050601f83116001811462000d88575f841562000d73578287015190505b62000d7f858262000cf5565b86555062000dee565b601f19841662000d988662000b46565b5f5b8281101562000dc15784890151825560018201915060208501945060208101905062000d9a565b8683101562000de1578489015162000ddd601f89168262000cd7565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000e258262000dfa565b9050919050565b62000e378162000e19565b811462000e42575f80fd5b50565b5f8151905062000e558162000e2c565b92915050565b5f6020828403121562000e735762000e7262000df6565b5b5f62000e828482850162000e45565b91505092915050565b62000e968162000e19565b82525050565b5f60408201905062000eb15f83018562000e8b565b62000ec0602083018462000e8b565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f008262000bc8565b915062000f0d8362000bc8565b925082820262000f1d8162000bc8565b9150828204841483151762000f375762000f3662000ec7565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000f778262000bc8565b915062000f848362000bc8565b92508262000f975762000f9662000f3e565b5b828204905092915050565b5f62000fae8262000bc8565b915062000fbb8362000bc8565b925082820190508082111562000fd65762000fd562000ec7565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200102260208362000fdc565b91506200102f8262000fec565b602082019050919050565b5f6020820190508181035f830152620010538162001014565b9050919050565b5f8115159050919050565b62001070816200105a565b82525050565b5f6020820190506200108b5f83018462001065565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620010c7601f8362000fdc565b9150620010d48262001091565b602082019050919050565b5f6020820190508181035f830152620010f881620010b9565b9050919050565b6200110a8162000bc8565b82525050565b5f602082019050620011255f830184620010ff565b92915050565b608051614d23620011595f395f8181610d6d015281816131b40152818161329301526132ba0152614d235ff3fe6080604052600436106102e7575f3560e01c80638a8c523c1161018f578063b62496f5116100db578063d257b34f11610094578063e2f456051161006e578063e2f4560514610b30578063ef8700e514610b5a578063f2fde38b14610b84578063fbc03bc814610bac576102ee565b8063d257b34f14610a8e578063d85ba06314610aca578063dd62ed3e14610af4576102ee565b8063b62496f514610986578063b70143c9146109c2578063bbc0c742146109ea578063c024666814610a14578063c04a541414610a3c578063c79c04fd14610a66576102ee565b8063a44edb2b11610148578063a90eab8c11610122578063a90eab8c146108d0578063aacebbe3146108f8578063af5b0f3714610920578063b20414111461095c576102ee565b8063a44edb2b1461082e578063a457c2d714610858578063a9059cbb14610894576102ee565b80638a8c523c1461074a5780638da5cb5b14610760578063921369131461078a578063924de9b7146107b457806395d89b41146107dc5780639a7a23d614610806576102ee565b80633aa7a74d1161024e5780636ddd171311610207578063751039fc116101e1578063751039fc146106a45780637571336a146106ce57806375f0a874146106f65780637bce5a0414610720576102ee565b80636ddd17131461062857806370a0823114610652578063715018a61461068e576102ee565b80633aa7a74d1461051e57806349bd5a5e146105465780634a62bb65146105705780634fbee1931461059a57806366ca9b83146105d65780636a486a8e146105fe576102ee565b806318a94cf1116102a057806318a94cf1146103fe5780631f3fed8f1461042857806323b872dd1461045257806327c8f8351461048e578063313ce567146104b857806339509351146104e2576102ee565b806302dbd8f8146102f257806306fdde031461031a578063095ea7b3146103445780631694505e1461038057806318126dce146103aa57806318160ddd146103d4576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b506103186004803603810190610313919061380e565b610bd4565b005b348015610325575f80fd5b5061032e610cbe565b60405161033b91906138d6565b60405180910390f35b34801561034f575f80fd5b5061036a60048036038101906103659190613950565b610d4e565b60405161037791906139a8565b60405180910390f35b34801561038b575f80fd5b50610394610d6b565b6040516103a19190613a1c565b60405180910390f35b3480156103b5575f80fd5b506103be610d8f565b6040516103cb9190613a44565b60405180910390f35b3480156103df575f80fd5b506103e8610d95565b6040516103f59190613a44565b60405180910390f35b348015610409575f80fd5b50610412610d9e565b60405161041f9190613a44565b60405180910390f35b348015610433575f80fd5b5061043c610da4565b6040516104499190613a44565b60405180910390f35b34801561045d575f80fd5b5061047860048036038101906104739190613a5d565b610daa565b60405161048591906139a8565b60405180910390f35b348015610499575f80fd5b506104a2610e9c565b6040516104af9190613abc565b60405180910390f35b3480156104c3575f80fd5b506104cc610ea2565b6040516104d99190613af0565b60405180910390f35b3480156104ed575f80fd5b5061050860048036038101906105039190613950565b610eaa565b60405161051591906139a8565b60405180910390f35b348015610529575f80fd5b50610544600480360381019061053f9190613b09565b610f51565b005b348015610551575f80fd5b5061055a611060565b6040516105679190613abc565b60405180910390f35b34801561057b575f80fd5b50610584611085565b60405161059191906139a8565b60405180910390f35b3480156105a5575f80fd5b506105c060048036038101906105bb9190613b34565b611097565b6040516105cd91906139a8565b60405180910390f35b3480156105e1575f80fd5b506105fc60048036038101906105f7919061380e565b6110e9565b005b348015610609575f80fd5b506106126111d3565b60405161061f9190613a44565b60405180910390f35b348015610633575f80fd5b5061063c6111d9565b60405161064991906139a8565b60405180910390f35b34801561065d575f80fd5b5061067860048036038101906106739190613b34565b6111ec565b6040516106859190613a44565b60405180910390f35b348015610699575f80fd5b506106a2611231565b005b3480156106af575f80fd5b506106b86112b8565b6040516106c591906139a8565b60405180910390f35b3480156106d9575f80fd5b506106f460048036038101906106ef9190613b89565b611355565b005b348015610701575f80fd5b5061070a611429565b6040516107179190613abc565b60405180910390f35b34801561072b575f80fd5b5061073461144e565b6040516107419190613a44565b60405180910390f35b348015610755575f80fd5b5061075e611454565b005b34801561076b575f80fd5b50610774611508565b6040516107819190613abc565b60405180910390f35b348015610795575f80fd5b5061079e611530565b6040516107ab9190613a44565b60405180910390f35b3480156107bf575f80fd5b506107da60048036038101906107d59190613bc7565b611536565b005b3480156107e7575f80fd5b506107f06115cf565b6040516107fd91906138d6565b60405180910390f35b348015610811575f80fd5b5061082c60048036038101906108279190613b89565b61165f565b005b348015610839575f80fd5b50610842611778565b60405161084f9190613a44565b60405180910390f35b348015610863575f80fd5b5061087e60048036038101906108799190613950565b61177e565b60405161088b91906139a8565b60405180910390f35b34801561089f575f80fd5b506108ba60048036038101906108b59190613950565b611864565b6040516108c791906139a8565b60405180910390f35b3480156108db575f80fd5b506108f660048036038101906108f19190613c4f565b611881565b005b348015610903575f80fd5b5061091e60048036038101906109199190613b34565b611b04565b005b34801561092b575f80fd5b5061094660048036038101906109419190613b34565b611c3e565b60405161095391906139a8565b60405180910390f35b348015610967575f80fd5b50610970611c5b565b60405161097d9190613a44565b60405180910390f35b348015610991575f80fd5b506109ac60048036038101906109a79190613b34565b611c61565b6040516109b991906139a8565b60405180910390f35b3480156109cd575f80fd5b506109e860048036038101906109e39190613b09565b611c7e565b005b3480156109f5575f80fd5b506109fe611d3f565b604051610a0b91906139a8565b60405180910390f35b348015610a1f575f80fd5b50610a3a6004803603810190610a359190613b89565b611d52565b005b348015610a47575f80fd5b50610a50611e74565b604051610a5d9190613abc565b60405180910390f35b348015610a71575f80fd5b50610a8c6004803603810190610a879190613b34565b611e99565b005b348015610a99575f80fd5b50610ab46004803603810190610aaf9190613b09565b611fd3565b604051610ac191906139a8565b60405180910390f35b348015610ad5575f80fd5b50610ade612127565b604051610aeb9190613a44565b60405180910390f35b348015610aff575f80fd5b50610b1a6004803603810190610b159190613c9f565b61212d565b604051610b279190613a44565b60405180910390f35b348015610b3b575f80fd5b50610b446121af565b604051610b519190613a44565b60405180910390f35b348015610b65575f80fd5b50610b6e6121b5565b604051610b7b9190613a44565b60405180910390f35b348015610b8f575f80fd5b50610baa6004803603810190610ba59190613b34565b6121bb565b005b348015610bb7575f80fd5b50610bd26004803603810190610bcd9190613b09565b6122b1565b005b610bdc6123c0565b73ffffffffffffffffffffffffffffffffffffffff16610bfa611508565b73ffffffffffffffffffffffffffffffffffffffff1614610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790613d27565b60405180910390fd5b8160118190555080601281905550601254601154610c6e9190613d72565b601081905550603c6010541115610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613def565b60405180910390fd5b5050565b606060038054610ccd90613e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf990613e3a565b8015610d445780601f10610d1b57610100808354040283529160200191610d44565b820191905f5260205f20905b815481529060010190602001808311610d2757829003601f168201915b5050505050905090565b5f610d61610d5a6123c0565b84846123c7565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60095481565b5f600254905090565b60125481565b60135481565b5f610db684848461258a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610dfd6123c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7390613eda565b60405180910390fd5b610e9085610e886123c0565b8584036123c7565b60019150509392505050565b61dead81565b5f6012905090565b5f610f47610eb66123c0565b848460015f610ec36123c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f429190613d72565b6123c7565b6001905092915050565b610f596123c0565b73ffffffffffffffffffffffffffffffffffffffff16610f77611508565b73ffffffffffffffffffffffffffffffffffffffff1614610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc490613d27565b60405180910390fd5b670de0b6b3a76400006103e86001610fe3610d95565b610fed9190613ef8565b610ff79190613f66565b6110019190613f66565b811015611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613fe0565b60405180910390fd5b670de0b6b3a7640000816110579190613ef8565b60098190555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6110f16123c0565b73ffffffffffffffffffffffffffffffffffffffff1661110f611508565b73ffffffffffffffffffffffffffffffffffffffff1614611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90613d27565b60405180910390fd5b81600e8190555080600f81905550600f54600e546111839190613d72565b600d81905550601e600d5411156111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c690614048565b60405180910390fd5b5050565b60105481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112396123c0565b73ffffffffffffffffffffffffffffffffffffffff16611257611508565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613d27565b60405180910390fd5b6112b65f612fb6565b565b5f6112c16123c0565b73ffffffffffffffffffffffffffffffffffffffff166112df611508565b73ffffffffffffffffffffffffffffffffffffffff1614611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c90613d27565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b61135d6123c0565b73ffffffffffffffffffffffffffffffffffffffff1661137b611508565b73ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890613d27565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b61145c6123c0565b73ffffffffffffffffffffffffffffffffffffffff1661147a611508565b73ffffffffffffffffffffffffffffffffffffffff16146114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613d27565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b61153e6123c0565b73ffffffffffffffffffffffffffffffffffffffff1661155c611508565b73ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990613d27565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546115de90613e3a565b80601f016020809104026020016040519081016040528092919081815260200182805461160a90613e3a565b80156116555780601f1061162c57610100808354040283529160200191611655565b820191905f5260205f20905b81548152906001019060200180831161163857829003601f168201915b5050505050905090565b6116676123c0565b73ffffffffffffffffffffffffffffffffffffffff16611685611508565b73ffffffffffffffffffffffffffffffffffffffff16146116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290613d27565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361176a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611761906140d6565b60405180910390fd5b6117748282613079565b5050565b600b5481565b5f8060015f61178b6123c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c90614164565b60405180910390fd5b6118596118506123c0565b858584036123c7565b600191505092915050565b5f6118776118706123c0565b848461258a565b6001905092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611933959493929190614191565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f6040516020016119bd939291906141e2565b6040516020818303038152906040528051906020012090505f82826040516020016119e992919061428b565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611a2494939291906142c1565b6020604051602081039080840390855afa158015611a44573d5f803e3d5ffd5b505050602060405103519050611a58611508565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc9061434e565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555050505050505050565b611b0c6123c0565b73ffffffffffffffffffffffffffffffffffffffff16611b2a611508565b73ffffffffffffffffffffffffffffffffffffffff1614611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790613d27565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6016602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b6017602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611cbe6123c0565b73ffffffffffffffffffffffffffffffffffffffff1614611cdd575f80fd5b611ce6306111ec565b8111158015611cf457505f81115b611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a906143b6565b60405180910390fd5b611d3c81613117565b50565b600c60019054906101000a900460ff1681565b611d5a6123c0565b73ffffffffffffffffffffffffffffffffffffffff16611d78611508565b73ffffffffffffffffffffffffffffffffffffffff1614611dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc590613d27565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e6891906139a8565b60405180910390a25050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ea16123c0565b73ffffffffffffffffffffffffffffffffffffffff16611ebf611508565b73ffffffffffffffffffffffffffffffffffffffff1614611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c90613d27565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f611fdc6123c0565b73ffffffffffffffffffffffffffffffffffffffff16611ffa611508565b73ffffffffffffffffffffffffffffffffffffffff1614612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204790613d27565b60405180910390fd5b620186a0600161205e610d95565b6120689190613ef8565b6120729190613f66565b8210156120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab90614444565b60405180910390fd5b6103e860056120c1610d95565b6120cb9190613ef8565b6120d59190613f66565b821115612117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210e906144d2565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b60145481565b6121c36123c0565b73ffffffffffffffffffffffffffffffffffffffff166121e1611508565b73ffffffffffffffffffffffffffffffffffffffff1614612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90613d27565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c90614560565b60405180910390fd5b6122ae81612fb6565b50565b6122b96123c0565b73ffffffffffffffffffffffffffffffffffffffff166122d7611508565b73ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490613d27565b60405180910390fd5b670de0b6b3a76400006103e86005612343610d95565b61234d9190613ef8565b6123579190613f66565b6123619190613f66565b8110156123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a906145c8565b60405180910390fd5b670de0b6b3a7640000816123b79190613ef8565b600b8190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c90614656565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a906146e4565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161257d9190613a44565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef90614772565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d90614800565b60405180910390fd5b5f810361267d5761267883835f61334a565b612fb1565b600c5f9054906101000a900460ff1615612b6157612699611508565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561270757506126d7611508565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561273f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612779575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127925750600660149054906101000a900460ff16155b15612b6057600c60019054906101000a900460ff166128865760155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612846575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c90614868565b60405180910390fd5b5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612923575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129ca5760095481111561296d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612964906148f6565b60405180910390fd5b600b54612979836111ec565b826129849190613d72565b11156129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc9061495e565b60405180910390fd5b612b5f565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a67575060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ab657600954811115612ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa8906149ec565b60405180910390fd5b612b5e565b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b5d57600b54612b10836111ec565b82612b1b9190613d72565b1115612b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b539061495e565b60405180910390fd5b5b5b5b5b5b5f612b6b306111ec565b90505f600a548210159050808015612b8f5750600c60029054906101000a900460ff165b8015612ba85750600660149054906101000a900460ff16155b8015612bfb575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c4e575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ca1575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ce4576001600660146101000a81548160ff021916908315150217905550612cc96135bf565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d93575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d9c575f90505b5f8115612fa15760175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612dfa57505f601054115b15612e9257612e276064612e196010548861378e90919063ffffffff16565b6137a390919063ffffffff16565b905060105460125482612e3a9190613ef8565b612e449190613f66565b60145f828254612e549190613d72565b9250508190555060105460115482612e6c9190613ef8565b612e769190613f66565b60135f828254612e869190613d72565b92505081905550612f7e565b60175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ee957505f600d54115b15612f7d57612f166064612f08600d548861378e90919063ffffffff16565b6137a390919063ffffffff16565b9050600d54600f5482612f299190613ef8565b612f339190613f66565b60145f828254612f439190613d72565b92505081905550600d54600e5482612f5b9190613ef8565b612f659190613f66565b60135f828254612f759190613d72565b925050819055505b5b5f811115612f9257612f9187308361334a565b5b8085612f9e9190614a0a565b94505b612fac87878761334a565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561313357613132614a3d565b5b6040519080825280602002602001820160405280156131615781602001602082028036833780820191505090505b50905030815f8151811061317857613177614a6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061323f9190614aab565b8160018151811061325357613252614a6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132b8307f0000000000000000000000000000000000000000000000000000000000000000846123c7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613319959493929190614bc6565b5f604051808303815f87803b158015613330575f80fd5b505af1158015613342573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133af90614772565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341d90614800565b60405180910390fd5b6134318383836137b8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156134b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ab90614c8e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546135429190613d72565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135a69190613a44565b60405180910390a36135b98484846137bd565b50505050565b5f6135c9306111ec565b90505f6014546013546135dc9190613d72565b90505f8083036135ee5750505061378c565b6014600a546135fd9190613ef8565b831115613616576014600a546136139190613ef8565b92505b5f47905061362384613117565b5f61363782476137c290919063ffffffff16565b90505f613661856136536014548561378e90919063ffffffff16565b6137a390919063ffffffff16565b90505f6013819055505f60148190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516136b690614cd9565b5f6040518083038185875af1925050503d805f81146136f0576040519150601f19603f3d011682016040523d82523d5f602084013e6136f5565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161374090614cd9565b5f6040518083038185875af1925050503d805f811461377a576040519150601f19603f3d011682016040523d82523d5f602084013e61377f565b606091505b5050809450505050505050505b565b5f818361379b9190613ef8565b905092915050565b5f81836137b09190613f66565b905092915050565b505050565b505050565b5f81836137cf9190614a0a565b905092915050565b5f80fd5b5f819050919050565b6137ed816137db565b81146137f7575f80fd5b50565b5f81359050613808816137e4565b92915050565b5f8060408385031215613824576138236137d7565b5b5f613831858286016137fa565b9250506020613842858286016137fa565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613883578082015181840152602081019050613868565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6138a88261384c565b6138b28185613856565b93506138c2818560208601613866565b6138cb8161388e565b840191505092915050565b5f6020820190508181035f8301526138ee818461389e565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61391f826138f6565b9050919050565b61392f81613915565b8114613939575f80fd5b50565b5f8135905061394a81613926565b92915050565b5f8060408385031215613966576139656137d7565b5b5f6139738582860161393c565b9250506020613984858286016137fa565b9150509250929050565b5f8115159050919050565b6139a28161398e565b82525050565b5f6020820190506139bb5f830184613999565b92915050565b5f819050919050565b5f6139e46139df6139da846138f6565b6139c1565b6138f6565b9050919050565b5f6139f5826139ca565b9050919050565b5f613a06826139eb565b9050919050565b613a16816139fc565b82525050565b5f602082019050613a2f5f830184613a0d565b92915050565b613a3e816137db565b82525050565b5f602082019050613a575f830184613a35565b92915050565b5f805f60608486031215613a7457613a736137d7565b5b5f613a818682870161393c565b9350506020613a928682870161393c565b9250506040613aa3868287016137fa565b9150509250925092565b613ab681613915565b82525050565b5f602082019050613acf5f830184613aad565b92915050565b5f60ff82169050919050565b613aea81613ad5565b82525050565b5f602082019050613b035f830184613ae1565b92915050565b5f60208284031215613b1e57613b1d6137d7565b5b5f613b2b848285016137fa565b91505092915050565b5f60208284031215613b4957613b486137d7565b5b5f613b568482850161393c565b91505092915050565b613b688161398e565b8114613b72575f80fd5b50565b5f81359050613b8381613b5f565b92915050565b5f8060408385031215613b9f57613b9e6137d7565b5b5f613bac8582860161393c565b9250506020613bbd85828601613b75565b9150509250929050565b5f60208284031215613bdc57613bdb6137d7565b5b5f613be984828501613b75565b91505092915050565b613bfb81613ad5565b8114613c05575f80fd5b50565b5f81359050613c1681613bf2565b92915050565b5f819050919050565b613c2e81613c1c565b8114613c38575f80fd5b50565b5f81359050613c4981613c25565b92915050565b5f805f60608486031215613c6657613c656137d7565b5b5f613c7386828701613c08565b9350506020613c8486828701613c3b565b9250506040613c9586828701613c3b565b9150509250925092565b5f8060408385031215613cb557613cb46137d7565b5b5f613cc28582860161393c565b9250506020613cd38582860161393c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613d11602083613856565b9150613d1c82613cdd565b602082019050919050565b5f6020820190508181035f830152613d3e81613d05565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d7c826137db565b9150613d87836137db565b9250828201905080821115613d9f57613d9e613d45565b5b92915050565b7f4d757374206b656570206665657320617420363025206f72206c6573730000005f82015250565b5f613dd9601d83613856565b9150613de482613da5565b602082019050919050565b5f6020820190508181035f830152613e0681613dcd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e5157607f821691505b602082108103613e6457613e63613e0d565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613ec4602883613856565b9150613ecf82613e6a565b604082019050919050565b5f6020820190508181035f830152613ef181613eb8565b9050919050565b5f613f02826137db565b9150613f0d836137db565b9250828202613f1b816137db565b91508282048414831517613f3257613f31613d45565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f70826137db565b9150613f7b836137db565b925082613f8b57613f8a613f39565b5b828204905092915050565b7f43616e6e6f7420736574206d617854206c6f776572207468616e20302e3125005f82015250565b5f613fca601f83613856565b9150613fd582613f96565b602082019050919050565b5f6020820190508181035f830152613ff781613fbe565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c6573730000005f82015250565b5f614032601d83613856565b915061403d82613ffe565b602082019050919050565b5f6020820190508181035f83015261405f81614026565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6140c0603983613856565b91506140cb82614066565b604082019050919050565b5f6020820190508181035f8301526140ed816140b4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61414e602583613856565b9150614159826140f4565b604082019050919050565b5f6020820190508181035f83015261417b81614142565b9050919050565b61418b81613c1c565b82525050565b5f60a0820190506141a45f830188614182565b6141b16020830187614182565b6141be6040830186614182565b6141cb6060830185613a35565b6141d86080830184613aad565b9695505050505050565b5f6060820190506141f55f830186614182565b6142026020830185614182565b61420f6040830184613a35565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614255600283614217565b915061426082614221565b600282019050919050565b5f819050919050565b61428561428082613c1c565b61426b565b82525050565b5f61429582614249565b91506142a18285614274565b6020820191506142b18284614274565b6020820191508190509392505050565b5f6080820190506142d45f830187614182565b6142e16020830186613ae1565b6142ee6040830185614182565b6142fb6060830184614182565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f614338601183613856565b915061434382614304565b602082019050919050565b5f6020820190508181035f8301526143658161432c565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f6143a0600c83613856565b91506143ab8261436c565b602082019050919050565b5f6020820190508181035f8301526143cd81614394565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61442e603583613856565b9150614439826143d4565b604082019050919050565b5f6020820190508181035f83015261445b81614422565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6144bc603483613856565b91506144c782614462565b604082019050919050565b5f6020820190508181035f8301526144e9816144b0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61454a602683613856565b9150614555826144f0565b604082019050919050565b5f6020820190508181035f8301526145778161453e565b9050919050565b7f43616e6e6f7420736574206d617857206c6f776572207468616e20302e3525005f82015250565b5f6145b2601f83613856565b91506145bd8261457e565b602082019050919050565b5f6020820190508181035f8301526145df816145a6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614640602483613856565b915061464b826145e6565b604082019050919050565b5f6020820190508181035f83015261466d81614634565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6146ce602283613856565b91506146d982614674565b604082019050919050565b5f6020820190508181035f8301526146fb816146c2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61475c602583613856565b915061476782614702565b604082019050919050565b5f6020820190508181035f83015261478981614750565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6147ea602383613856565b91506147f582614790565b604082019050919050565b5f6020820190508181035f830152614817816147de565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614852601683613856565b915061485d8261481e565b602082019050919050565b5f6020820190508181035f83015261487f81614846565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178542e000000000000000000000000000000000000000000000000000000602082015250565b5f6148e0602583613856565b91506148eb82614886565b604082019050919050565b5f6020820190508181035f83015261490d816148d4565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614948601383613856565b915061495382614914565b602082019050919050565b5f6020820190508181035f8301526149758161493c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d6178542e0000000000000000000000000000000000000000000000000000602082015250565b5f6149d6602683613856565b91506149e18261497c565b604082019050919050565b5f6020820190508181035f830152614a03816149ca565b9050919050565b5f614a14826137db565b9150614a1f836137db565b9250828203905081811115614a3757614a36613d45565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614aa581613926565b92915050565b5f60208284031215614ac057614abf6137d7565b5b5f614acd84828501614a97565b91505092915050565b5f819050919050565b5f614af9614af4614aef84614ad6565b6139c1565b6137db565b9050919050565b614b0981614adf565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b4181613915565b82525050565b5f614b528383614b38565b60208301905092915050565b5f602082019050919050565b5f614b7482614b0f565b614b7e8185614b19565b9350614b8983614b29565b805f5b83811015614bb9578151614ba08882614b47565b9750614bab83614b5e565b925050600181019050614b8c565b5085935050505092915050565b5f60a082019050614bd95f830188613a35565b614be66020830187614b00565b8181036040830152614bf88186614b6a565b9050614c076060830185613aad565b614c146080830184613a35565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614c78602683613856565b9150614c8382614c1e565b604082019050919050565b5f6020820190508181035f830152614ca581614c6c565b9050919050565b5f81905092915050565b50565b5f614cc45f83614cac565b9150614ccf82614cb6565b5f82019050919050565b5f614ce382614cb9565b915081905091905056fea2646970667358221220b10db0fa2caf57347c42e0ff04b6e13c89aae83ed761c30fe9a80610fa54f61a64736f6c63430008170033

Deployed Bytecode

0x6080604052600436106102e7575f3560e01c80638a8c523c1161018f578063b62496f5116100db578063d257b34f11610094578063e2f456051161006e578063e2f4560514610b30578063ef8700e514610b5a578063f2fde38b14610b84578063fbc03bc814610bac576102ee565b8063d257b34f14610a8e578063d85ba06314610aca578063dd62ed3e14610af4576102ee565b8063b62496f514610986578063b70143c9146109c2578063bbc0c742146109ea578063c024666814610a14578063c04a541414610a3c578063c79c04fd14610a66576102ee565b8063a44edb2b11610148578063a90eab8c11610122578063a90eab8c146108d0578063aacebbe3146108f8578063af5b0f3714610920578063b20414111461095c576102ee565b8063a44edb2b1461082e578063a457c2d714610858578063a9059cbb14610894576102ee565b80638a8c523c1461074a5780638da5cb5b14610760578063921369131461078a578063924de9b7146107b457806395d89b41146107dc5780639a7a23d614610806576102ee565b80633aa7a74d1161024e5780636ddd171311610207578063751039fc116101e1578063751039fc146106a45780637571336a146106ce57806375f0a874146106f65780637bce5a0414610720576102ee565b80636ddd17131461062857806370a0823114610652578063715018a61461068e576102ee565b80633aa7a74d1461051e57806349bd5a5e146105465780634a62bb65146105705780634fbee1931461059a57806366ca9b83146105d65780636a486a8e146105fe576102ee565b806318a94cf1116102a057806318a94cf1146103fe5780631f3fed8f1461042857806323b872dd1461045257806327c8f8351461048e578063313ce567146104b857806339509351146104e2576102ee565b806302dbd8f8146102f257806306fdde031461031a578063095ea7b3146103445780631694505e1461038057806318126dce146103aa57806318160ddd146103d4576102ee565b366102ee57005b5f80fd5b3480156102fd575f80fd5b506103186004803603810190610313919061380e565b610bd4565b005b348015610325575f80fd5b5061032e610cbe565b60405161033b91906138d6565b60405180910390f35b34801561034f575f80fd5b5061036a60048036038101906103659190613950565b610d4e565b60405161037791906139a8565b60405180910390f35b34801561038b575f80fd5b50610394610d6b565b6040516103a19190613a1c565b60405180910390f35b3480156103b5575f80fd5b506103be610d8f565b6040516103cb9190613a44565b60405180910390f35b3480156103df575f80fd5b506103e8610d95565b6040516103f59190613a44565b60405180910390f35b348015610409575f80fd5b50610412610d9e565b60405161041f9190613a44565b60405180910390f35b348015610433575f80fd5b5061043c610da4565b6040516104499190613a44565b60405180910390f35b34801561045d575f80fd5b5061047860048036038101906104739190613a5d565b610daa565b60405161048591906139a8565b60405180910390f35b348015610499575f80fd5b506104a2610e9c565b6040516104af9190613abc565b60405180910390f35b3480156104c3575f80fd5b506104cc610ea2565b6040516104d99190613af0565b60405180910390f35b3480156104ed575f80fd5b5061050860048036038101906105039190613950565b610eaa565b60405161051591906139a8565b60405180910390f35b348015610529575f80fd5b50610544600480360381019061053f9190613b09565b610f51565b005b348015610551575f80fd5b5061055a611060565b6040516105679190613abc565b60405180910390f35b34801561057b575f80fd5b50610584611085565b60405161059191906139a8565b60405180910390f35b3480156105a5575f80fd5b506105c060048036038101906105bb9190613b34565b611097565b6040516105cd91906139a8565b60405180910390f35b3480156105e1575f80fd5b506105fc60048036038101906105f7919061380e565b6110e9565b005b348015610609575f80fd5b506106126111d3565b60405161061f9190613a44565b60405180910390f35b348015610633575f80fd5b5061063c6111d9565b60405161064991906139a8565b60405180910390f35b34801561065d575f80fd5b5061067860048036038101906106739190613b34565b6111ec565b6040516106859190613a44565b60405180910390f35b348015610699575f80fd5b506106a2611231565b005b3480156106af575f80fd5b506106b86112b8565b6040516106c591906139a8565b60405180910390f35b3480156106d9575f80fd5b506106f460048036038101906106ef9190613b89565b611355565b005b348015610701575f80fd5b5061070a611429565b6040516107179190613abc565b60405180910390f35b34801561072b575f80fd5b5061073461144e565b6040516107419190613a44565b60405180910390f35b348015610755575f80fd5b5061075e611454565b005b34801561076b575f80fd5b50610774611508565b6040516107819190613abc565b60405180910390f35b348015610795575f80fd5b5061079e611530565b6040516107ab9190613a44565b60405180910390f35b3480156107bf575f80fd5b506107da60048036038101906107d59190613bc7565b611536565b005b3480156107e7575f80fd5b506107f06115cf565b6040516107fd91906138d6565b60405180910390f35b348015610811575f80fd5b5061082c60048036038101906108279190613b89565b61165f565b005b348015610839575f80fd5b50610842611778565b60405161084f9190613a44565b60405180910390f35b348015610863575f80fd5b5061087e60048036038101906108799190613950565b61177e565b60405161088b91906139a8565b60405180910390f35b34801561089f575f80fd5b506108ba60048036038101906108b59190613950565b611864565b6040516108c791906139a8565b60405180910390f35b3480156108db575f80fd5b506108f660048036038101906108f19190613c4f565b611881565b005b348015610903575f80fd5b5061091e60048036038101906109199190613b34565b611b04565b005b34801561092b575f80fd5b5061094660048036038101906109419190613b34565b611c3e565b60405161095391906139a8565b60405180910390f35b348015610967575f80fd5b50610970611c5b565b60405161097d9190613a44565b60405180910390f35b348015610991575f80fd5b506109ac60048036038101906109a79190613b34565b611c61565b6040516109b991906139a8565b60405180910390f35b3480156109cd575f80fd5b506109e860048036038101906109e39190613b09565b611c7e565b005b3480156109f5575f80fd5b506109fe611d3f565b604051610a0b91906139a8565b60405180910390f35b348015610a1f575f80fd5b50610a3a6004803603810190610a359190613b89565b611d52565b005b348015610a47575f80fd5b50610a50611e74565b604051610a5d9190613abc565b60405180910390f35b348015610a71575f80fd5b50610a8c6004803603810190610a879190613b34565b611e99565b005b348015610a99575f80fd5b50610ab46004803603810190610aaf9190613b09565b611fd3565b604051610ac191906139a8565b60405180910390f35b348015610ad5575f80fd5b50610ade612127565b604051610aeb9190613a44565b60405180910390f35b348015610aff575f80fd5b50610b1a6004803603810190610b159190613c9f565b61212d565b604051610b279190613a44565b60405180910390f35b348015610b3b575f80fd5b50610b446121af565b604051610b519190613a44565b60405180910390f35b348015610b65575f80fd5b50610b6e6121b5565b604051610b7b9190613a44565b60405180910390f35b348015610b8f575f80fd5b50610baa6004803603810190610ba59190613b34565b6121bb565b005b348015610bb7575f80fd5b50610bd26004803603810190610bcd9190613b09565b6122b1565b005b610bdc6123c0565b73ffffffffffffffffffffffffffffffffffffffff16610bfa611508565b73ffffffffffffffffffffffffffffffffffffffff1614610c50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4790613d27565b60405180910390fd5b8160118190555080601281905550601254601154610c6e9190613d72565b601081905550603c6010541115610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190613def565b60405180910390fd5b5050565b606060038054610ccd90613e3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf990613e3a565b8015610d445780601f10610d1b57610100808354040283529160200191610d44565b820191905f5260205f20905b815481529060010190602001808311610d2757829003601f168201915b5050505050905090565b5f610d61610d5a6123c0565b84846123c7565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b60095481565b5f600254905090565b60125481565b60135481565b5f610db684848461258a565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610dfd6123c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7390613eda565b60405180910390fd5b610e9085610e886123c0565b8584036123c7565b60019150509392505050565b61dead81565b5f6012905090565b5f610f47610eb66123c0565b848460015f610ec36123c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f429190613d72565b6123c7565b6001905092915050565b610f596123c0565b73ffffffffffffffffffffffffffffffffffffffff16610f77611508565b73ffffffffffffffffffffffffffffffffffffffff1614610fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc490613d27565b60405180910390fd5b670de0b6b3a76400006103e86001610fe3610d95565b610fed9190613ef8565b610ff79190613f66565b6110019190613f66565b811015611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613fe0565b60405180910390fd5b670de0b6b3a7640000816110579190613ef8565b60098190555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6110f16123c0565b73ffffffffffffffffffffffffffffffffffffffff1661110f611508565b73ffffffffffffffffffffffffffffffffffffffff1614611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115c90613d27565b60405180910390fd5b81600e8190555080600f81905550600f54600e546111839190613d72565b600d81905550601e600d5411156111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c690614048565b60405180910390fd5b5050565b60105481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112396123c0565b73ffffffffffffffffffffffffffffffffffffffff16611257611508565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a490613d27565b60405180910390fd5b6112b65f612fb6565b565b5f6112c16123c0565b73ffffffffffffffffffffffffffffffffffffffff166112df611508565b73ffffffffffffffffffffffffffffffffffffffff1614611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c90613d27565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055506001905090565b61135d6123c0565b73ffffffffffffffffffffffffffffffffffffffff1661137b611508565b73ffffffffffffffffffffffffffffffffffffffff16146113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890613d27565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b61145c6123c0565b73ffffffffffffffffffffffffffffffffffffffff1661147a611508565b73ffffffffffffffffffffffffffffffffffffffff16146114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613d27565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b61153e6123c0565b73ffffffffffffffffffffffffffffffffffffffff1661155c611508565b73ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990613d27565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546115de90613e3a565b80601f016020809104026020016040519081016040528092919081815260200182805461160a90613e3a565b80156116555780601f1061162c57610100808354040283529160200191611655565b820191905f5260205f20905b81548152906001019060200180831161163857829003601f168201915b5050505050905090565b6116676123c0565b73ffffffffffffffffffffffffffffffffffffffff16611685611508565b73ffffffffffffffffffffffffffffffffffffffff16146116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290613d27565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361176a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611761906140d6565b60405180910390fd5b6117748282613079565b5050565b600b5481565b5f8060015f61178b6123c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183c90614164565b60405180910390fd5b6118596118506123c0565b858584036123c7565b600191505092915050565b5f6118776118706123c0565b848461258a565b6001905092915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611933959493929190614191565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f6040516020016119bd939291906141e2565b6040516020818303038152906040528051906020012090505f82826040516020016119e992919061428b565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611a2494939291906142c1565b6020604051602081039080840390855afa158015611a44573d5f803e3d5ffd5b505050602060405103519050611a58611508565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc9061434e565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555050505050505050565b611b0c6123c0565b73ffffffffffffffffffffffffffffffffffffffff16611b2a611508565b73ffffffffffffffffffffffffffffffffffffffff1614611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790613d27565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6016602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b6017602052805f5260405f205f915054906101000a900460ff1681565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611cbe6123c0565b73ffffffffffffffffffffffffffffffffffffffff1614611cdd575f80fd5b611ce6306111ec565b8111158015611cf457505f81115b611d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2a906143b6565b60405180910390fd5b611d3c81613117565b50565b600c60019054906101000a900460ff1681565b611d5a6123c0565b73ffffffffffffffffffffffffffffffffffffffff16611d78611508565b73ffffffffffffffffffffffffffffffffffffffff1614611dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc590613d27565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e6891906139a8565b60405180910390a25050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ea16123c0565b73ffffffffffffffffffffffffffffffffffffffff16611ebf611508565b73ffffffffffffffffffffffffffffffffffffffff1614611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c90613d27565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f611fdc6123c0565b73ffffffffffffffffffffffffffffffffffffffff16611ffa611508565b73ffffffffffffffffffffffffffffffffffffffff1614612050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204790613d27565b60405180910390fd5b620186a0600161205e610d95565b6120689190613ef8565b6120729190613f66565b8210156120b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ab90614444565b60405180910390fd5b6103e860056120c1610d95565b6120cb9190613ef8565b6120d59190613f66565b821115612117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210e906144d2565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b60145481565b6121c36123c0565b73ffffffffffffffffffffffffffffffffffffffff166121e1611508565b73ffffffffffffffffffffffffffffffffffffffff1614612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90613d27565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229c90614560565b60405180910390fd5b6122ae81612fb6565b50565b6122b96123c0565b73ffffffffffffffffffffffffffffffffffffffff166122d7611508565b73ffffffffffffffffffffffffffffffffffffffff161461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232490613d27565b60405180910390fd5b670de0b6b3a76400006103e86005612343610d95565b61234d9190613ef8565b6123579190613f66565b6123619190613f66565b8110156123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239a906145c8565b60405180910390fd5b670de0b6b3a7640000816123b79190613ef8565b600b8190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c90614656565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a906146e4565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161257d9190613a44565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef90614772565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d90614800565b60405180910390fd5b5f810361267d5761267883835f61334a565b612fb1565b600c5f9054906101000a900460ff1615612b6157612699611508565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561270757506126d7611508565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561273f57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612779575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127925750600660149054906101000a900460ff16155b15612b6057600c60019054906101000a900460ff166128865760155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612846575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c90614868565b60405180910390fd5b5b60175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612923575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156129ca5760095481111561296d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612964906148f6565b60405180910390fd5b600b54612979836111ec565b826129849190613d72565b11156129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc9061495e565b60405180910390fd5b612b5f565b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a67575060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ab657600954811115612ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa8906149ec565b60405180910390fd5b612b5e565b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b5d57600b54612b10836111ec565b82612b1b9190613d72565b1115612b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b539061495e565b60405180910390fd5b5b5b5b5b5b5f612b6b306111ec565b90505f600a548210159050808015612b8f5750600c60029054906101000a900460ff165b8015612ba85750600660149054906101000a900460ff16155b8015612bfb575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c4e575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612ca1575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ce4576001600660146101000a81548160ff021916908315150217905550612cc96135bf565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d93575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d9c575f90505b5f8115612fa15760175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612dfa57505f601054115b15612e9257612e276064612e196010548861378e90919063ffffffff16565b6137a390919063ffffffff16565b905060105460125482612e3a9190613ef8565b612e449190613f66565b60145f828254612e549190613d72565b9250508190555060105460115482612e6c9190613ef8565b612e769190613f66565b60135f828254612e869190613d72565b92505081905550612f7e565b60175f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612ee957505f600d54115b15612f7d57612f166064612f08600d548861378e90919063ffffffff16565b6137a390919063ffffffff16565b9050600d54600f5482612f299190613ef8565b612f339190613f66565b60145f828254612f439190613d72565b92505081905550600d54600e5482612f5b9190613ef8565b612f659190613f66565b60135f828254612f759190613d72565b925050819055505b5b5f811115612f9257612f9187308361334a565b5b8085612f9e9190614a0a565b94505b612fac87878761334a565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f600267ffffffffffffffff81111561313357613132614a3d565b5b6040519080825280602002602001820160405280156131615781602001602082028036833780820191505090505b50905030815f8151811061317857613177614a6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561321b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061323f9190614aab565b8160018151811061325357613252614a6a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132b8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123c7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613319959493929190614bc6565b5f604051808303815f87803b158015613330575f80fd5b505af1158015613342573d5f803e3d5ffd5b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133af90614772565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341d90614800565b60405180910390fd5b6134318383836137b8565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156134b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ab90614c8e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546135429190613d72565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135a69190613a44565b60405180910390a36135b98484846137bd565b50505050565b5f6135c9306111ec565b90505f6014546013546135dc9190613d72565b90505f8083036135ee5750505061378c565b6014600a546135fd9190613ef8565b831115613616576014600a546136139190613ef8565b92505b5f47905061362384613117565b5f61363782476137c290919063ffffffff16565b90505f613661856136536014548561378e90919063ffffffff16565b6137a390919063ffffffff16565b90505f6013819055505f60148190555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516136b690614cd9565b5f6040518083038185875af1925050503d805f81146136f0576040519150601f19603f3d011682016040523d82523d5f602084013e6136f5565b606091505b50508094505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161374090614cd9565b5f6040518083038185875af1925050503d805f811461377a576040519150601f19603f3d011682016040523d82523d5f602084013e61377f565b606091505b5050809450505050505050505b565b5f818361379b9190613ef8565b905092915050565b5f81836137b09190613f66565b905092915050565b505050565b505050565b5f81836137cf9190614a0a565b905092915050565b5f80fd5b5f819050919050565b6137ed816137db565b81146137f7575f80fd5b50565b5f81359050613808816137e4565b92915050565b5f8060408385031215613824576138236137d7565b5b5f613831858286016137fa565b9250506020613842858286016137fa565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613883578082015181840152602081019050613868565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6138a88261384c565b6138b28185613856565b93506138c2818560208601613866565b6138cb8161388e565b840191505092915050565b5f6020820190508181035f8301526138ee818461389e565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61391f826138f6565b9050919050565b61392f81613915565b8114613939575f80fd5b50565b5f8135905061394a81613926565b92915050565b5f8060408385031215613966576139656137d7565b5b5f6139738582860161393c565b9250506020613984858286016137fa565b9150509250929050565b5f8115159050919050565b6139a28161398e565b82525050565b5f6020820190506139bb5f830184613999565b92915050565b5f819050919050565b5f6139e46139df6139da846138f6565b6139c1565b6138f6565b9050919050565b5f6139f5826139ca565b9050919050565b5f613a06826139eb565b9050919050565b613a16816139fc565b82525050565b5f602082019050613a2f5f830184613a0d565b92915050565b613a3e816137db565b82525050565b5f602082019050613a575f830184613a35565b92915050565b5f805f60608486031215613a7457613a736137d7565b5b5f613a818682870161393c565b9350506020613a928682870161393c565b9250506040613aa3868287016137fa565b9150509250925092565b613ab681613915565b82525050565b5f602082019050613acf5f830184613aad565b92915050565b5f60ff82169050919050565b613aea81613ad5565b82525050565b5f602082019050613b035f830184613ae1565b92915050565b5f60208284031215613b1e57613b1d6137d7565b5b5f613b2b848285016137fa565b91505092915050565b5f60208284031215613b4957613b486137d7565b5b5f613b568482850161393c565b91505092915050565b613b688161398e565b8114613b72575f80fd5b50565b5f81359050613b8381613b5f565b92915050565b5f8060408385031215613b9f57613b9e6137d7565b5b5f613bac8582860161393c565b9250506020613bbd85828601613b75565b9150509250929050565b5f60208284031215613bdc57613bdb6137d7565b5b5f613be984828501613b75565b91505092915050565b613bfb81613ad5565b8114613c05575f80fd5b50565b5f81359050613c1681613bf2565b92915050565b5f819050919050565b613c2e81613c1c565b8114613c38575f80fd5b50565b5f81359050613c4981613c25565b92915050565b5f805f60608486031215613c6657613c656137d7565b5b5f613c7386828701613c08565b9350506020613c8486828701613c3b565b9250506040613c9586828701613c3b565b9150509250925092565b5f8060408385031215613cb557613cb46137d7565b5b5f613cc28582860161393c565b9250506020613cd38582860161393c565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613d11602083613856565b9150613d1c82613cdd565b602082019050919050565b5f6020820190508181035f830152613d3e81613d05565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d7c826137db565b9150613d87836137db565b9250828201905080821115613d9f57613d9e613d45565b5b92915050565b7f4d757374206b656570206665657320617420363025206f72206c6573730000005f82015250565b5f613dd9601d83613856565b9150613de482613da5565b602082019050919050565b5f6020820190508181035f830152613e0681613dcd565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e5157607f821691505b602082108103613e6457613e63613e0d565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613ec4602883613856565b9150613ecf82613e6a565b604082019050919050565b5f6020820190508181035f830152613ef181613eb8565b9050919050565b5f613f02826137db565b9150613f0d836137db565b9250828202613f1b816137db565b91508282048414831517613f3257613f31613d45565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f70826137db565b9150613f7b836137db565b925082613f8b57613f8a613f39565b5b828204905092915050565b7f43616e6e6f7420736574206d617854206c6f776572207468616e20302e3125005f82015250565b5f613fca601f83613856565b9150613fd582613f96565b602082019050919050565b5f6020820190508181035f830152613ff781613fbe565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c6573730000005f82015250565b5f614032601d83613856565b915061403d82613ffe565b602082019050919050565b5f6020820190508181035f83015261405f81614026565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6140c0603983613856565b91506140cb82614066565b604082019050919050565b5f6020820190508181035f8301526140ed816140b4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61414e602583613856565b9150614159826140f4565b604082019050919050565b5f6020820190508181035f83015261417b81614142565b9050919050565b61418b81613c1c565b82525050565b5f60a0820190506141a45f830188614182565b6141b16020830187614182565b6141be6040830186614182565b6141cb6060830185613a35565b6141d86080830184613aad565b9695505050505050565b5f6060820190506141f55f830186614182565b6142026020830185614182565b61420f6040830184613a35565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614255600283614217565b915061426082614221565b600282019050919050565b5f819050919050565b61428561428082613c1c565b61426b565b82525050565b5f61429582614249565b91506142a18285614274565b6020820191506142b18284614274565b6020820191508190509392505050565b5f6080820190506142d45f830187614182565b6142e16020830186613ae1565b6142ee6040830185614182565b6142fb6060830184614182565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f614338601183613856565b915061434382614304565b602082019050919050565b5f6020820190508181035f8301526143658161432c565b9050919050565b7f57726f6e6720616d6f756e7400000000000000000000000000000000000000005f82015250565b5f6143a0600c83613856565b91506143ab8261436c565b602082019050919050565b5f6020820190508181035f8301526143cd81614394565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61442e603583613856565b9150614439826143d4565b604082019050919050565b5f6020820190508181035f83015261445b81614422565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6144bc603483613856565b91506144c782614462565b604082019050919050565b5f6020820190508181035f8301526144e9816144b0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61454a602683613856565b9150614555826144f0565b604082019050919050565b5f6020820190508181035f8301526145778161453e565b9050919050565b7f43616e6e6f7420736574206d617857206c6f776572207468616e20302e3525005f82015250565b5f6145b2601f83613856565b91506145bd8261457e565b602082019050919050565b5f6020820190508181035f8301526145df816145a6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614640602483613856565b915061464b826145e6565b604082019050919050565b5f6020820190508181035f83015261466d81614634565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6146ce602283613856565b91506146d982614674565b604082019050919050565b5f6020820190508181035f8301526146fb816146c2565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61475c602583613856565b915061476782614702565b604082019050919050565b5f6020820190508181035f83015261478981614750565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6147ea602383613856565b91506147f582614790565b604082019050919050565b5f6020820190508181035f830152614817816147de565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614852601683613856565b915061485d8261481e565b602082019050919050565b5f6020820190508181035f83015261487f81614846565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178542e000000000000000000000000000000000000000000000000000000602082015250565b5f6148e0602583613856565b91506148eb82614886565b604082019050919050565b5f6020820190508181035f83015261490d816148d4565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614948601383613856565b915061495382614914565b602082019050919050565b5f6020820190508181035f8301526149758161493c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d6178542e0000000000000000000000000000000000000000000000000000602082015250565b5f6149d6602683613856565b91506149e18261497c565b604082019050919050565b5f6020820190508181035f830152614a03816149ca565b9050919050565b5f614a14826137db565b9150614a1f836137db565b9250828203905081811115614a3757614a36613d45565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614aa581613926565b92915050565b5f60208284031215614ac057614abf6137d7565b5b5f614acd84828501614a97565b91505092915050565b5f819050919050565b5f614af9614af4614aef84614ad6565b6139c1565b6137db565b9050919050565b614b0981614adf565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b4181613915565b82525050565b5f614b528383614b38565b60208301905092915050565b5f602082019050919050565b5f614b7482614b0f565b614b7e8185614b19565b9350614b8983614b29565b805f5b83811015614bb9578151614ba08882614b47565b9750614bab83614b5e565b925050600181019050614b8c565b5085935050505092915050565b5f60a082019050614bd95f830188613a35565b614be66020830187614b00565b8181036040830152614bf88186614b6a565b9050614c076060830185613aad565b614c146080830184613a35565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614c78602683613856565b9150614c8382614c1e565b604082019050919050565b5f6020820190508181035f830152614ca581614c6c565b9050919050565b5f81905092915050565b50565b5f614cc45f83614cac565b9150614ccf82614cb6565b5f82019050919050565b5f614ce382614cb9565b915081905091905056fea2646970667358221220b10db0fa2caf57347c42e0ff04b6e13c89aae83ed761c30fe9a80610fa54f61a64736f6c63430008170033

Deployed Bytecode Sourcemap

15094:13236:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21685:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2791:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3705:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15169:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15432:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3112:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15831:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15873;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3882:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15262:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3011:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4382:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20497:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15227:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15526:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23138:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21350:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15758:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15606:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3228:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;913:103;;;;;;;;;;;;;:::i;:::-;;19801:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20995:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15354:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15680;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18567:112;;;;;;;;;;;;;:::i;:::-;;690:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15793:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21242:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2899:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22217:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15498:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4605:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3363:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18687:1062;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22725:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16016:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15717:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16072:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26589:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15566:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22027:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15391:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22941:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19992:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15646:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3546:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15458:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15913:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1024:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20746:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21685:334;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21823:13:::1;21804:16;:32;;;;21868:7;21847:18;:28;;;;21921:18;;21902:16;;:37;;;;:::i;:::-;21886:13;:53;;;;21975:2;21958:13;;:19;;21950:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21685:334:::0;;:::o;2791:100::-;2845:13;2878:5;2871:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2791:100;:::o;3705:169::-;3788:4;3805:39;3814:12;:10;:12::i;:::-;3828:7;3837:6;3805:8;:39::i;:::-;3862:4;3855:11;;3705:169;;;;:::o;15169:51::-;;;:::o;15432:19::-;;;;:::o;3112:108::-;3173:7;3200:12;;3193:19;;3112:108;:::o;15831:33::-;;;;:::o;15873:::-;;;;:::o;3882:492::-;4022:4;4039:36;4049:6;4057:9;4068:6;4039:9;:36::i;:::-;4088:24;4115:11;:19;4127:6;4115:19;;;;;;;;;;;;;;;:33;4135:12;:10;:12::i;:::-;4115:33;;;;;;;;;;;;;;;;4088:60;;4187:6;4167:16;:26;;4159:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4274:57;4283:6;4291:12;:10;:12::i;:::-;4324:6;4305:16;:25;4274:8;:57::i;:::-;4362:4;4355:11;;;3882:492;;;;;:::o;15262:53::-;15308:6;15262:53;:::o;3011:93::-;3069:5;3094:2;3087:9;;3011:93;:::o;4382:215::-;4470:4;4487:80;4496:12;:10;:12::i;:::-;4510:7;4556:10;4519:11;:25;4531:12;:10;:12::i;:::-;4519:25;;;;;;;;;;;;;;;:34;4545:7;4519:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4487:8;:80::i;:::-;4585:4;4578:11;;4382:215;;;;:::o;20497:241::-;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20632:4:::1;20624;20619:1;20603:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20602:26;;;;:::i;:::-;20601:35;;;;:::i;:::-;20591:6;:45;;20569:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;20723:6;20713;:17;;;;:::i;:::-;20706:4;:24;;;;20497:241:::0;:::o;15227:28::-;;;;;;;;;;;;;:::o;15526:33::-;;;;;;;;;;;;;:::o;23138:126::-;23204:4;23228:19;:28;23248:7;23228:28;;;;;;;;;;;;;;;;;;;;;;;;;23221:35;;23138:126;;;:::o;21350:327::-;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21486:13:::1;21468:15;:31;;;;21530:7;21510:17;:27;;;;21581:17;;21563:15;;:35;;;;:::i;:::-;21548:12;:50;;;;21633:2;21617:12;;:18;;21609:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21350:327:::0;;:::o;15758:28::-;;;;:::o;15606:31::-;;;;;;;;;;;;;:::o;3228:127::-;3302:7;3329:9;:18;3339:7;3329:18;;;;;;;;;;;;;;;;3322:25;;3228:127;;;:::o;913:103::-;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;978:30:::1;1005:1;978:18;:30::i;:::-;913:103::o:0;19801:121::-;19853:4;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19887:5:::1;19870:14;;:22;;;;;;;;;;;;;;;;;;19910:4;19903:11;;19801:121:::0;:::o;20995:151::-;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21134:4:::1;21108:15;:23;21124:6;21108:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;20995:151:::0;;:::o;15354:30::-;;;;;;;;;;;;;:::o;15680:::-;;;;:::o;18567:112::-;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18638:4:::1;18622:13;;:20;;;;;;;;;;;;;;;;;;18667:4;18653:11;;:18;;;;;;;;;;;;;;;;;;18567:112::o:0;690:87::-;736:7;763:6;;;;;;;;;;;756:13;;690:87;:::o;15793:31::-;;;;:::o;21242:100::-;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21327:7:::1;21313:11;;:21;;;;;;;;;;;;;;;;;;21242:100:::0;:::o;2899:104::-;2955:13;2988:7;2981:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2899:104;:::o;22217:304::-;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22361:13:::1;;;;;;;;;;;22353:21;;:4;:21;;::::0;22331:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22472:41;22501:4;22507:5;22472:28;:41::i;:::-;22217:304:::0;;:::o;15498:19::-;;;;:::o;4605:413::-;4698:4;4715:24;4742:11;:25;4754:12;:10;:12::i;:::-;4742:25;;;;;;;;;;;;;;;:34;4768:7;4742:34;;;;;;;;;;;;;;;;4715:61;;4815:15;4795:16;:35;;4787:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4908:67;4917:12;:10;:12::i;:::-;4931:7;4959:15;4940:16;:34;4908:8;:67::i;:::-;5006:4;4999:11;;;4605:413;;;;:::o;3363:175::-;3449:4;3466:42;3476:12;:10;:12::i;:::-;3490:9;3501:6;3466:9;:42::i;:::-;3526:4;3519:11;;3363:175;;;;:::o;18687:1062::-;18771:18;18845:95;18969:22;;;;;;;;;;;;;;;;;18959:33;;;;;;19021:10;;;;;;;;;;;;;;;;;19011:21;;;;;;19051:13;19091:4;18816:295;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18792:330;;;;;;18771:351;;19135:18;19209:49;19287:23;;;;;;;;;;;;;;;;;19277:34;;;;;;19338:1;19180:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19156:210;;;;;;19135:231;;19379:14;19484:10;19513;19420:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19396:169;;;;;;19379:186;;19578:14;19595:26;19605:6;19613:1;19616;19619;19595:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19578:43;;19650:7;:5;:7::i;:::-;19640:17;;:6;:17;;;19632:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;19708:4;19692:13;;:20;;;;;;;;;;;;;;;;;;19737:4;19723:11;;:18;;;;;;;;;;;;;;;;;;18760:989;;;;18687:1062;;;:::o;22725:208::-;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22862:15:::1;;;;;;;;;;;22819:59;;22842:18;22819:59;;;;;;;;;;;;22907:18;22889:15;;:36;;;;;;;;;;;;;;;;;;22725:208:::0;:::o;16016:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;15717:32::-;;;;:::o;16072:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;26589:221::-;26667:15;;;;;;;;;;;26651:31;;:12;:10;:12::i;:::-;:31;;;26643:40;;;;;;26712:24;26730:4;26712:9;:24::i;:::-;26702:6;:34;;:48;;;;;26749:1;26740:6;:10;26702:48;26694:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26778:24;26795:6;26778:16;:24::i;:::-;26589:221;:::o;15566:33::-;;;;;;;;;;;;;:::o;22027:182::-;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22143:8:::1;22112:19;:28;22132:7;22112:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22183:7;22167:34;;;22192:8;22167:34;;;;;;:::i;:::-;;;;;;;;22027:182:::0;;:::o;15391:32::-;;;;;;;;;;;;;:::o;22941:189::-;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23064:17:::1;;;;;;;;;;;23028:54;;23053:9;23028:54;;;;;;;;;;;;23113:9;23093:17;;:29;;;;;;;;;;;;;;;;;;22941:189:::0;:::o;19992:497::-;20100:4;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20179:6:::1;20174:1;20158:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20157:28;;;;:::i;:::-;20144:9;:41;;20122:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;20334:4;20329:1;20313:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20312:26;;;;:::i;:::-;20299:9;:39;;20277:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;20450:9;20429:18;:30;;;;20477:4;20470:11;;19992:497:::0;;;:::o;15646:27::-;;;;:::o;3546:151::-;3635:7;3662:11;:18;3674:5;3662:18;;;;;;;;;;;;;;;:27;3681:7;3662:27;;;;;;;;;;;;;;;;3655:34;;3546:151;;;;:::o;15458:33::-;;;;:::o;15913:35::-;;;;:::o;1024:201::-;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1133:1:::1;1113:22;;:8;:22;;::::0;1105:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1189:28;1208:8;1189:18;:28::i;:::-;1024:201:::0;:::o;20746:241::-;836:12;:10;:12::i;:::-;825:23;;:7;:5;:7::i;:::-;:23;;;817:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20881:4:::1;20873;20868:1;20852:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20851:26;;;;:::i;:::-;20850:35;;;;:::i;:::-;20840:6;:45;;20818:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;20972:6;20962;:17;;;;:::i;:::-;20955:4;:24;;;;20746:241:::0;:::o;236:98::-;289:7;316:10;309:17;;236:98;:::o;6773:380::-;6926:1;6909:19;;:5;:19;;;6901:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7007:1;6988:21;;:7;:21;;;6980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7091:6;7061:11;:18;7073:5;7061:18;;;;;;;;;;;;;;;:27;7080:7;7061:27;;;;;;;;;;;;;;;:36;;;;7129:7;7113:32;;7122:5;7113:32;;;7138:6;7113:32;;;;;;:::i;:::-;;;;;;;;6773:380;;;:::o;23322:3144::-;23470:1;23454:18;;:4;:18;;;23446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23547:1;23533:16;;:2;:16;;;23525:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23616:1;23606:6;:11;23602:93;;23634:28;23650:4;23656:2;23660:1;23634:15;:28::i;:::-;23677:7;;23602:93;23711:14;;;;;;;;;;;23707:1070;;;23754:7;:5;:7::i;:::-;23746:15;;:4;:15;;;;:49;;;;;23788:7;:5;:7::i;:::-;23782:13;;:2;:13;;;;23746:49;:86;;;;;23830:1;23816:16;;:2;:16;;;;23746:86;:128;;;;;23867:6;23853:21;;:2;:21;;;;23746:128;:158;;;;;23896:8;;;;;;;;;;;23895:9;23746:158;23742:1024;;;23930:13;;;;;;;;;;;23925:150;;23976:19;:25;23996:4;23976:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24005:19;:23;24025:2;24005:23;;;;;;;;;;;;;;;;;;;;;;;;;23976:52;23968:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;23925:150;24127:25;:31;24153:4;24127:31;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;24163:15;:19;24179:2;24163:19;;;;;;;;;;;;;;;;;;;;;;;;;24162:20;24127:55;24123:628;;;24225:4;;24215:6;:14;;24207:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24328:4;;24311:13;24321:2;24311:9;:13::i;:::-;24302:6;:22;;;;:::i;:::-;:30;;24294:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24123:628;;;24432:25;:29;24458:2;24432:29;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;24466:15;:21;24482:4;24466:21;;;;;;;;;;;;;;;;;;;;;;;;;24465:22;24432:55;24428:323;;;24530:4;;24520:6;:14;;24512:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;24428:323;;;24625:15;:19;24641:2;24625:19;;;;;;;;;;;;;;;;;;;;;;;;;24620:131;;24703:4;;24686:13;24696:2;24686:9;:13::i;:::-;24677:6;:22;;;;:::i;:::-;:30;;24669:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24620:131;24428:323;24123:628;23742:1024;23707:1070;24789:28;24820:24;24838:4;24820:9;:24::i;:::-;24789:55;;24855:12;24894:18;;24870:20;:42;;24855:57;;24929:7;:35;;;;;24953:11;;;;;;;;;;;24929:35;:61;;;;;24982:8;;;;;;;;;;;24981:9;24929:61;:110;;;;;25008:25;:31;25034:4;25008:31;;;;;;;;;;;;;;;;;;;;;;;;;25007:32;24929:110;:153;;;;;25057:19;:25;25077:4;25057:25;;;;;;;;;;;;;;;;;;;;;;;;;25056:26;24929:153;:194;;;;;25100:19;:23;25120:2;25100:23;;;;;;;;;;;;;;;;;;;;;;;;;25099:24;24929:194;24925:302;;;25151:4;25140:8;;:15;;;;;;;;;;;;;;;;;;25172:10;:8;:10::i;:::-;25210:5;25199:8;;:16;;;;;;;;;;;;;;;;;;24925:302;25239:12;25255:8;;;;;;;;;;;25254:9;25239:24;;25365:19;:25;25385:4;25365:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25394:19;:23;25414:2;25394:23;;;;;;;;;;;;;;;;;;;;;;;;;25365:52;25361:100;;;25444:5;25434:15;;25361:100;25473:12;25578:7;25574:839;;;25630:25;:29;25656:2;25630:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;25679:1;25663:13;;:17;25630:50;25626:638;;;25708:34;25738:3;25708:25;25719:13;;25708:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25701:41;;25815:13;;25793:18;;25786:4;:25;;;;:::i;:::-;25785:43;;;;:::i;:::-;25761:20;;:67;;;;;;;:::i;:::-;;;;;;;;25897:13;;25877:16;;25870:4;:23;;;;:::i;:::-;25869:41;;;;:::i;:::-;25847:18;;:63;;;;;;;:::i;:::-;;;;;;;;25626:638;;;25972:25;:31;25998:4;25972:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;26022:1;26007:12;;:16;25972:51;25968:296;;;26051:33;26080:3;26051:24;26062:12;;26051:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26044:40;;26156:12;;26135:17;;26128:4;:24;;;;:::i;:::-;26127:41;;;;:::i;:::-;26103:20;;:65;;;;;;;:::i;:::-;;;;;;;;26236:12;;26217:15;;26210:4;:22;;;;:::i;:::-;26209:39;;;;:::i;:::-;26187:18;;:61;;;;;;;:::i;:::-;;;;;;;;25968:296;25626:638;26291:1;26284:4;:8;26280:91;;;26313:42;26329:4;26343;26350;26313:15;:42::i;:::-;26280:91;26397:4;26387:14;;;;;:::i;:::-;;;25574:839;26425:33;26441:4;26447:2;26451:6;26425:15;:33::i;:::-;23435:3031;;;;23322:3144;;;;:::o;1233:191::-;1307:16;1326:6;;;;;;;;;;;1307:25;;1352:8;1343:6;;:17;;;;;;;;;;;;;;;;;;1407:8;1376:40;;1397:8;1376:40;;;;;;;;;;;;1296:128;1233:191;:::o;22529:188::-;22646:5;22612:25;:31;22638:4;22612:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22703:5;22669:40;;22697:4;22669:40;;;;;;;;;;;;22529:188;;:::o;26818:589::-;26944:21;26982:1;26968:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26944:40;;27013:4;26995;27000:1;26995:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27039:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27029:4;27034:1;27029:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27074:62;27091:4;27106:15;27124:11;27074:8;:62::i;:::-;27175:15;:66;;;27256:11;27282:1;27326:4;27353;27373:15;27175:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26873:534;26818:589;:::o;5026:733::-;5184:1;5166:20;;:6;:20;;;5158:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5268:1;5247:23;;:9;:23;;;5239:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5323:47;5344:6;5352:9;5363:6;5323:20;:47::i;:::-;5383:21;5407:9;:17;5417:6;5407:17;;;;;;;;;;;;;;;;5383:41;;5460:6;5443:13;:23;;5435:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5581:6;5565:13;:22;5545:9;:17;5555:6;5545:17;;;;;;;;;;;;;;;:42;;;;5633:6;5609:9;:20;5619:9;5609:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5674:9;5657:35;;5666:6;5657:35;;;5685:6;5657:35;;;;;;:::i;:::-;;;;;;;;5705:46;5725:6;5733:9;5744:6;5705:19;:46::i;:::-;5147:612;5026:733;;;:::o;27415:912::-;27454:23;27480:24;27498:4;27480:9;:24::i;:::-;27454:50;;27515:25;27564:20;;27543:18;;:41;;;;:::i;:::-;27515:69;;27595:12;27643:1;27624:15;:20;27620:59;;27661:7;;;;;27620:59;27734:2;27713:18;;:23;;;;:::i;:::-;27695:15;:41;27691:115;;;27792:2;27771:18;;:23;;;;:::i;:::-;27753:41;;27691:115;27818:25;27846:21;27818:49;;27878:33;27895:15;27878:16;:33::i;:::-;27924:18;27945:44;27971:17;27945:21;:25;;:44;;;;:::i;:::-;27924:65;;28000:17;28020:59;28061:17;28020:36;28035:20;;28020:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;28000:79;;28113:1;28092:18;:22;;;;28148:1;28125:20;:24;;;;28184:17;;;;;;;;;;;28176:31;;28215:9;28176:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28162:67;;;;;28262:15;;;;;;;;;;;28254:29;;28292:21;28254:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28240:79;;;;;27443:884;;;;;;27415:912;:::o;8779:98::-;8837:7;8868:1;8864;:5;;;;:::i;:::-;8857:12;;8779:98;;;;:::o;8885:::-;8943:7;8974:1;8970;:5;;;;:::i;:::-;8963:12;;8885:98;;;;:::o;7161:125::-;;;;:::o;7294:124::-;;;;:::o;8673:98::-;8731:7;8762:1;8758;:5;;;;:::i;:::-;8751:12;;8673:98;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:153::-;4349:9;4382:37;4413:5;4382:37;:::i;:::-;4369:50;;4272:153;;;:::o;4431:185::-;4545:64;4603:5;4545:64;:::i;:::-;4540:3;4533:77;4431:185;;:::o;4622:276::-;4742:4;4780:2;4769:9;4765:18;4757:26;;4793:98;4888:1;4877:9;4873:17;4864:6;4793:98;:::i;:::-;4622:276;;;;:::o;4904:118::-;4991:24;5009:5;4991:24;:::i;:::-;4986:3;4979:37;4904:118;;:::o;5028:222::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:71;5240:1;5229:9;5225:17;5216:6;5172:71;:::i;:::-;5028:222;;;;:::o;5256:619::-;5333:6;5341;5349;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5779:2;5805:53;5850:7;5841:6;5830:9;5826:22;5805:53;:::i;:::-;5795:63;;5750:118;5256:619;;;;;:::o;5881:118::-;5968:24;5986:5;5968:24;:::i;:::-;5963:3;5956:37;5881:118;;:::o;6005:222::-;6098:4;6136:2;6125:9;6121:18;6113:26;;6149:71;6217:1;6206:9;6202:17;6193:6;6149:71;:::i;:::-;6005:222;;;;:::o;6233:86::-;6268:7;6308:4;6301:5;6297:16;6286:27;;6233:86;;;:::o;6325:112::-;6408:22;6424:5;6408:22;:::i;:::-;6403:3;6396:35;6325:112;;:::o;6443:214::-;6532:4;6570:2;6559:9;6555:18;6547:26;;6583:67;6647:1;6636:9;6632:17;6623:6;6583:67;:::i;:::-;6443:214;;;;:::o;6663:329::-;6722:6;6771:2;6759:9;6750:7;6746:23;6742:32;6739:119;;;6777:79;;:::i;:::-;6739:119;6897:1;6922:53;6967:7;6958:6;6947:9;6943:22;6922:53;:::i;:::-;6912:63;;6868:117;6663:329;;;;:::o;6998:::-;7057:6;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;6998:329;;;;:::o;7333:116::-;7403:21;7418:5;7403:21;:::i;:::-;7396:5;7393:32;7383:60;;7439:1;7436;7429:12;7383:60;7333:116;:::o;7455:133::-;7498:5;7536:6;7523:20;7514:29;;7552:30;7576:5;7552:30;:::i;:::-;7455:133;;;;:::o;7594:468::-;7659:6;7667;7716:2;7704:9;7695:7;7691:23;7687:32;7684:119;;;7722:79;;:::i;:::-;7684:119;7842:1;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7813:117;7969:2;7995:50;8037:7;8028:6;8017:9;8013:22;7995:50;:::i;:::-;7985:60;;7940:115;7594:468;;;;;:::o;8068:323::-;8124:6;8173:2;8161:9;8152:7;8148:23;8144:32;8141:119;;;8179:79;;:::i;:::-;8141:119;8299:1;8324:50;8366:7;8357:6;8346:9;8342:22;8324:50;:::i;:::-;8314:60;;8270:114;8068:323;;;;:::o;8397:118::-;8468:22;8484:5;8468:22;:::i;:::-;8461:5;8458:33;8448:61;;8505:1;8502;8495:12;8448:61;8397:118;:::o;8521:135::-;8565:5;8603:6;8590:20;8581:29;;8619:31;8644:5;8619:31;:::i;:::-;8521:135;;;;:::o;8662:77::-;8699:7;8728:5;8717:16;;8662:77;;;:::o;8745:122::-;8818:24;8836:5;8818:24;:::i;:::-;8811:5;8808:35;8798:63;;8857:1;8854;8847:12;8798:63;8745:122;:::o;8873:139::-;8919:5;8957:6;8944:20;8935:29;;8973:33;9000:5;8973:33;:::i;:::-;8873:139;;;;:::o;9018:615::-;9093:6;9101;9109;9158:2;9146:9;9137:7;9133:23;9129:32;9126:119;;;9164:79;;:::i;:::-;9126:119;9284:1;9309:51;9352:7;9343:6;9332:9;9328:22;9309:51;:::i;:::-;9299:61;;9255:115;9409:2;9435:53;9480:7;9471:6;9460:9;9456:22;9435:53;:::i;:::-;9425:63;;9380:118;9537:2;9563:53;9608:7;9599:6;9588:9;9584:22;9563:53;:::i;:::-;9553:63;;9508:118;9018:615;;;;;:::o;9639:474::-;9707:6;9715;9764:2;9752:9;9743:7;9739:23;9735:32;9732:119;;;9770:79;;:::i;:::-;9732:119;9890:1;9915:53;9960:7;9951:6;9940:9;9936:22;9915:53;:::i;:::-;9905:63;;9861:117;10017:2;10043:53;10088:7;10079:6;10068:9;10064:22;10043:53;:::i;:::-;10033:63;;9988:118;9639:474;;;;;:::o;10119:182::-;10259:34;10255:1;10247:6;10243:14;10236:58;10119:182;:::o;10307:366::-;10449:3;10470:67;10534:2;10529:3;10470:67;:::i;:::-;10463:74;;10546:93;10635:3;10546:93;:::i;:::-;10664:2;10659:3;10655:12;10648:19;;10307:366;;;:::o;10679:419::-;10845:4;10883:2;10872:9;10868:18;10860:26;;10932:9;10926:4;10922:20;10918:1;10907:9;10903:17;10896:47;10960:131;11086:4;10960:131;:::i;:::-;10952:139;;10679:419;;;:::o;11104:180::-;11152:77;11149:1;11142:88;11249:4;11246:1;11239:15;11273:4;11270:1;11263:15;11290:191;11330:3;11349:20;11367:1;11349:20;:::i;:::-;11344:25;;11383:20;11401:1;11383:20;:::i;:::-;11378:25;;11426:1;11423;11419:9;11412:16;;11447:3;11444:1;11441:10;11438:36;;;11454:18;;:::i;:::-;11438:36;11290:191;;;;:::o;11487:179::-;11627:31;11623:1;11615:6;11611:14;11604:55;11487:179;:::o;11672:366::-;11814:3;11835:67;11899:2;11894:3;11835:67;:::i;:::-;11828:74;;11911:93;12000:3;11911:93;:::i;:::-;12029:2;12024:3;12020:12;12013:19;;11672:366;;;:::o;12044:419::-;12210:4;12248:2;12237:9;12233:18;12225:26;;12297:9;12291:4;12287:20;12283:1;12272:9;12268:17;12261:47;12325:131;12451:4;12325:131;:::i;:::-;12317:139;;12044:419;;;:::o;12469:180::-;12517:77;12514:1;12507:88;12614:4;12611:1;12604:15;12638:4;12635:1;12628:15;12655:320;12699:6;12736:1;12730:4;12726:12;12716:22;;12783:1;12777:4;12773:12;12804:18;12794:81;;12860:4;12852:6;12848:17;12838:27;;12794:81;12922:2;12914:6;12911:14;12891:18;12888:38;12885:84;;12941:18;;:::i;:::-;12885:84;12706:269;12655:320;;;:::o;12981:227::-;13121:34;13117:1;13109:6;13105:14;13098:58;13190:10;13185:2;13177:6;13173:15;13166:35;12981:227;:::o;13214:366::-;13356:3;13377:67;13441:2;13436:3;13377:67;:::i;:::-;13370:74;;13453:93;13542:3;13453:93;:::i;:::-;13571:2;13566:3;13562:12;13555:19;;13214:366;;;:::o;13586:419::-;13752:4;13790:2;13779:9;13775:18;13767:26;;13839:9;13833:4;13829:20;13825:1;13814:9;13810:17;13803:47;13867:131;13993:4;13867:131;:::i;:::-;13859:139;;13586:419;;;:::o;14011:410::-;14051:7;14074:20;14092:1;14074:20;:::i;:::-;14069:25;;14108:20;14126:1;14108:20;:::i;:::-;14103:25;;14163:1;14160;14156:9;14185:30;14203:11;14185:30;:::i;:::-;14174:41;;14364:1;14355:7;14351:15;14348:1;14345:22;14325:1;14318:9;14298:83;14275:139;;14394:18;;:::i;:::-;14275:139;14059:362;14011:410;;;;:::o;14427:180::-;14475:77;14472:1;14465:88;14572:4;14569:1;14562:15;14596:4;14593:1;14586:15;14613:185;14653:1;14670:20;14688:1;14670:20;:::i;:::-;14665:25;;14704:20;14722:1;14704:20;:::i;:::-;14699:25;;14743:1;14733:35;;14748:18;;:::i;:::-;14733:35;14790:1;14787;14783:9;14778:14;;14613:185;;;;:::o;14804:181::-;14944:33;14940:1;14932:6;14928:14;14921:57;14804:181;:::o;14991:366::-;15133:3;15154:67;15218:2;15213:3;15154:67;:::i;:::-;15147:74;;15230:93;15319:3;15230:93;:::i;:::-;15348:2;15343:3;15339:12;15332:19;;14991:366;;;:::o;15363:419::-;15529:4;15567:2;15556:9;15552:18;15544:26;;15616:9;15610:4;15606:20;15602:1;15591:9;15587:17;15580:47;15644:131;15770:4;15644:131;:::i;:::-;15636:139;;15363:419;;;:::o;15788:179::-;15928:31;15924:1;15916:6;15912:14;15905:55;15788:179;:::o;15973:366::-;16115:3;16136:67;16200:2;16195:3;16136:67;:::i;:::-;16129:74;;16212:93;16301:3;16212:93;:::i;:::-;16330:2;16325:3;16321:12;16314:19;;15973:366;;;:::o;16345:419::-;16511:4;16549:2;16538:9;16534:18;16526:26;;16598:9;16592:4;16588:20;16584:1;16573:9;16569:17;16562:47;16626:131;16752:4;16626:131;:::i;:::-;16618:139;;16345:419;;;:::o;16770:244::-;16910:34;16906:1;16898:6;16894:14;16887:58;16979:27;16974:2;16966:6;16962:15;16955:52;16770:244;:::o;17020:366::-;17162:3;17183:67;17247:2;17242:3;17183:67;:::i;:::-;17176:74;;17259:93;17348:3;17259:93;:::i;:::-;17377:2;17372:3;17368:12;17361:19;;17020:366;;;:::o;17392:419::-;17558:4;17596:2;17585:9;17581:18;17573:26;;17645:9;17639:4;17635:20;17631:1;17620:9;17616:17;17609:47;17673:131;17799:4;17673:131;:::i;:::-;17665:139;;17392:419;;;:::o;17817:224::-;17957:34;17953:1;17945:6;17941:14;17934:58;18026:7;18021:2;18013:6;18009:15;18002:32;17817:224;:::o;18047:366::-;18189:3;18210:67;18274:2;18269:3;18210:67;:::i;:::-;18203:74;;18286:93;18375:3;18286:93;:::i;:::-;18404:2;18399:3;18395:12;18388:19;;18047:366;;;:::o;18419:419::-;18585:4;18623:2;18612:9;18608:18;18600:26;;18672:9;18666:4;18662:20;18658:1;18647:9;18643:17;18636:47;18700:131;18826:4;18700:131;:::i;:::-;18692:139;;18419:419;;;:::o;18844:118::-;18931:24;18949:5;18931:24;:::i;:::-;18926:3;18919:37;18844:118;;:::o;18968:664::-;19173:4;19211:3;19200:9;19196:19;19188:27;;19225:71;19293:1;19282:9;19278:17;19269:6;19225:71;:::i;:::-;19306:72;19374:2;19363:9;19359:18;19350:6;19306:72;:::i;:::-;19388;19456:2;19445:9;19441:18;19432:6;19388:72;:::i;:::-;19470;19538:2;19527:9;19523:18;19514:6;19470:72;:::i;:::-;19552:73;19620:3;19609:9;19605:19;19596:6;19552:73;:::i;:::-;18968:664;;;;;;;;:::o;19638:442::-;19787:4;19825:2;19814:9;19810:18;19802:26;;19838:71;19906:1;19895:9;19891:17;19882:6;19838:71;:::i;:::-;19919:72;19987:2;19976:9;19972:18;19963:6;19919:72;:::i;:::-;20001;20069:2;20058:9;20054:18;20045:6;20001:72;:::i;:::-;19638:442;;;;;;:::o;20086:148::-;20188:11;20225:3;20210:18;;20086:148;;;;:::o;20240:214::-;20380:66;20376:1;20368:6;20364:14;20357:90;20240:214;:::o;20460:400::-;20620:3;20641:84;20723:1;20718:3;20641:84;:::i;:::-;20634:91;;20734:93;20823:3;20734:93;:::i;:::-;20852:1;20847:3;20843:11;20836:18;;20460:400;;;:::o;20866:79::-;20905:7;20934:5;20923:16;;20866:79;;;:::o;20951:157::-;21056:45;21076:24;21094:5;21076:24;:::i;:::-;21056:45;:::i;:::-;21051:3;21044:58;20951:157;;:::o;21114:663::-;21355:3;21377:148;21521:3;21377:148;:::i;:::-;21370:155;;21535:75;21606:3;21597:6;21535:75;:::i;:::-;21635:2;21630:3;21626:12;21619:19;;21648:75;21719:3;21710:6;21648:75;:::i;:::-;21748:2;21743:3;21739:12;21732:19;;21768:3;21761:10;;21114:663;;;;;:::o;21783:545::-;21956:4;21994:3;21983:9;21979:19;21971:27;;22008:71;22076:1;22065:9;22061:17;22052:6;22008:71;:::i;:::-;22089:68;22153:2;22142:9;22138:18;22129:6;22089:68;:::i;:::-;22167:72;22235:2;22224:9;22220:18;22211:6;22167:72;:::i;:::-;22249;22317:2;22306:9;22302:18;22293:6;22249:72;:::i;:::-;21783:545;;;;;;;:::o;22334:167::-;22474:19;22470:1;22462:6;22458:14;22451:43;22334:167;:::o;22507:366::-;22649:3;22670:67;22734:2;22729:3;22670:67;:::i;:::-;22663:74;;22746:93;22835:3;22746:93;:::i;:::-;22864:2;22859:3;22855:12;22848:19;;22507:366;;;:::o;22879:419::-;23045:4;23083:2;23072:9;23068:18;23060:26;;23132:9;23126:4;23122:20;23118:1;23107:9;23103:17;23096:47;23160:131;23286:4;23160:131;:::i;:::-;23152:139;;22879:419;;;:::o;23304:162::-;23444:14;23440:1;23432:6;23428:14;23421:38;23304:162;:::o;23472:366::-;23614:3;23635:67;23699:2;23694:3;23635:67;:::i;:::-;23628:74;;23711:93;23800:3;23711:93;:::i;:::-;23829:2;23824:3;23820:12;23813:19;;23472:366;;;:::o;23844:419::-;24010:4;24048:2;24037:9;24033:18;24025:26;;24097:9;24091:4;24087:20;24083:1;24072:9;24068:17;24061:47;24125:131;24251:4;24125:131;:::i;:::-;24117:139;;23844:419;;;:::o;24269:240::-;24409:34;24405:1;24397:6;24393:14;24386:58;24478:23;24473:2;24465:6;24461:15;24454:48;24269:240;:::o;24515:366::-;24657:3;24678:67;24742:2;24737:3;24678:67;:::i;:::-;24671:74;;24754:93;24843:3;24754:93;:::i;:::-;24872:2;24867:3;24863:12;24856:19;;24515:366;;;:::o;24887:419::-;25053:4;25091:2;25080:9;25076:18;25068:26;;25140:9;25134:4;25130:20;25126:1;25115:9;25111:17;25104:47;25168:131;25294:4;25168:131;:::i;:::-;25160:139;;24887:419;;;:::o;25312:239::-;25452:34;25448:1;25440:6;25436:14;25429:58;25521:22;25516:2;25508:6;25504:15;25497:47;25312:239;:::o;25557:366::-;25699:3;25720:67;25784:2;25779:3;25720:67;:::i;:::-;25713:74;;25796:93;25885:3;25796:93;:::i;:::-;25914:2;25909:3;25905:12;25898:19;;25557:366;;;:::o;25929:419::-;26095:4;26133:2;26122:9;26118:18;26110:26;;26182:9;26176:4;26172:20;26168:1;26157:9;26153:17;26146:47;26210:131;26336:4;26210:131;:::i;:::-;26202:139;;25929:419;;;:::o;26354:225::-;26494:34;26490:1;26482:6;26478:14;26471:58;26563:8;26558:2;26550:6;26546:15;26539:33;26354:225;:::o;26585:366::-;26727:3;26748:67;26812:2;26807:3;26748:67;:::i;:::-;26741:74;;26824:93;26913:3;26824:93;:::i;:::-;26942:2;26937:3;26933:12;26926:19;;26585:366;;;:::o;26957:419::-;27123:4;27161:2;27150:9;27146:18;27138:26;;27210:9;27204:4;27200:20;27196:1;27185:9;27181:17;27174:47;27238:131;27364:4;27238:131;:::i;:::-;27230:139;;26957:419;;;:::o;27382:181::-;27522:33;27518:1;27510:6;27506:14;27499:57;27382:181;:::o;27569:366::-;27711:3;27732:67;27796:2;27791:3;27732:67;:::i;:::-;27725:74;;27808:93;27897:3;27808:93;:::i;:::-;27926:2;27921:3;27917:12;27910:19;;27569:366;;;:::o;27941:419::-;28107:4;28145:2;28134:9;28130:18;28122:26;;28194:9;28188:4;28184:20;28180:1;28169:9;28165:17;28158:47;28222:131;28348:4;28222:131;:::i;:::-;28214:139;;27941:419;;;:::o;28366:223::-;28506:34;28502:1;28494:6;28490:14;28483:58;28575:6;28570:2;28562:6;28558:15;28551:31;28366:223;:::o;28595:366::-;28737:3;28758:67;28822:2;28817:3;28758:67;:::i;:::-;28751:74;;28834:93;28923:3;28834:93;:::i;:::-;28952:2;28947:3;28943:12;28936:19;;28595:366;;;:::o;28967:419::-;29133:4;29171:2;29160:9;29156:18;29148:26;;29220:9;29214:4;29210:20;29206:1;29195:9;29191:17;29184:47;29248:131;29374:4;29248:131;:::i;:::-;29240:139;;28967:419;;;:::o;29392:221::-;29532:34;29528:1;29520:6;29516:14;29509:58;29601:4;29596:2;29588:6;29584:15;29577:29;29392:221;:::o;29619:366::-;29761:3;29782:67;29846:2;29841:3;29782:67;:::i;:::-;29775:74;;29858:93;29947:3;29858:93;:::i;:::-;29976:2;29971:3;29967:12;29960:19;;29619:366;;;:::o;29991:419::-;30157:4;30195:2;30184:9;30180:18;30172:26;;30244:9;30238:4;30234:20;30230:1;30219:9;30215:17;30208:47;30272:131;30398:4;30272:131;:::i;:::-;30264:139;;29991:419;;;:::o;30416:224::-;30556:34;30552:1;30544:6;30540:14;30533:58;30625:7;30620:2;30612:6;30608:15;30601:32;30416:224;:::o;30646:366::-;30788:3;30809:67;30873:2;30868:3;30809:67;:::i;:::-;30802:74;;30885:93;30974:3;30885:93;:::i;:::-;31003:2;30998:3;30994:12;30987:19;;30646:366;;;:::o;31018:419::-;31184:4;31222:2;31211:9;31207:18;31199:26;;31271:9;31265:4;31261:20;31257:1;31246:9;31242:17;31235:47;31299:131;31425:4;31299:131;:::i;:::-;31291:139;;31018:419;;;:::o;31443:222::-;31583:34;31579:1;31571:6;31567:14;31560:58;31652:5;31647:2;31639:6;31635:15;31628:30;31443:222;:::o;31671:366::-;31813:3;31834:67;31898:2;31893:3;31834:67;:::i;:::-;31827:74;;31910:93;31999:3;31910:93;:::i;:::-;32028:2;32023:3;32019:12;32012:19;;31671:366;;;:::o;32043:419::-;32209:4;32247:2;32236:9;32232:18;32224:26;;32296:9;32290:4;32286:20;32282:1;32271:9;32267:17;32260:47;32324:131;32450:4;32324:131;:::i;:::-;32316:139;;32043:419;;;:::o;32468:172::-;32608:24;32604:1;32596:6;32592:14;32585:48;32468:172;:::o;32646:366::-;32788:3;32809:67;32873:2;32868:3;32809:67;:::i;:::-;32802:74;;32885:93;32974:3;32885:93;:::i;:::-;33003:2;32998:3;32994:12;32987:19;;32646:366;;;:::o;33018:419::-;33184:4;33222:2;33211:9;33207:18;33199:26;;33271:9;33265:4;33261:20;33257:1;33246:9;33242:17;33235:47;33299:131;33425:4;33299:131;:::i;:::-;33291:139;;33018:419;;;:::o;33443:224::-;33583:34;33579:1;33571:6;33567:14;33560:58;33652:7;33647:2;33639:6;33635:15;33628:32;33443:224;:::o;33673:366::-;33815:3;33836:67;33900:2;33895:3;33836:67;:::i;:::-;33829:74;;33912:93;34001:3;33912:93;:::i;:::-;34030:2;34025:3;34021:12;34014:19;;33673:366;;;:::o;34045:419::-;34211:4;34249:2;34238:9;34234:18;34226:26;;34298:9;34292:4;34288:20;34284:1;34273:9;34269:17;34262:47;34326:131;34452:4;34326:131;:::i;:::-;34318:139;;34045:419;;;:::o;34470:169::-;34610:21;34606:1;34598:6;34594:14;34587:45;34470:169;:::o;34645:366::-;34787:3;34808:67;34872:2;34867:3;34808:67;:::i;:::-;34801:74;;34884:93;34973:3;34884:93;:::i;:::-;35002:2;34997:3;34993:12;34986:19;;34645:366;;;:::o;35017:419::-;35183:4;35221:2;35210:9;35206:18;35198:26;;35270:9;35264:4;35260:20;35256:1;35245:9;35241:17;35234:47;35298:131;35424:4;35298:131;:::i;:::-;35290:139;;35017:419;;;:::o;35442:225::-;35582:34;35578:1;35570:6;35566:14;35559:58;35651:8;35646:2;35638:6;35634:15;35627:33;35442:225;:::o;35673:366::-;35815:3;35836:67;35900:2;35895:3;35836:67;:::i;:::-;35829:74;;35912:93;36001:3;35912:93;:::i;:::-;36030:2;36025:3;36021:12;36014:19;;35673:366;;;:::o;36045:419::-;36211:4;36249:2;36238:9;36234:18;36226:26;;36298:9;36292:4;36288:20;36284:1;36273:9;36269:17;36262:47;36326:131;36452:4;36326:131;:::i;:::-;36318:139;;36045:419;;;:::o;36470:194::-;36510:4;36530:20;36548:1;36530:20;:::i;:::-;36525:25;;36564:20;36582:1;36564:20;:::i;:::-;36559:25;;36608:1;36605;36601:9;36593:17;;36632:1;36626:4;36623:11;36620:37;;;36637:18;;:::i;:::-;36620:37;36470:194;;;;:::o;36670:180::-;36718:77;36715:1;36708:88;36815:4;36812:1;36805:15;36839:4;36836:1;36829:15;36856:180;36904:77;36901:1;36894:88;37001:4;36998:1;36991:15;37025:4;37022:1;37015:15;37042:143;37099:5;37130:6;37124:13;37115:22;;37146:33;37173:5;37146:33;:::i;:::-;37042:143;;;;:::o;37191:351::-;37261:6;37310:2;37298:9;37289:7;37285:23;37281:32;37278:119;;;37316:79;;:::i;:::-;37278:119;37436:1;37461:64;37517:7;37508:6;37497:9;37493:22;37461:64;:::i;:::-;37451:74;;37407:128;37191:351;;;;:::o;37548:85::-;37593:7;37622:5;37611:16;;37548:85;;;:::o;37639:158::-;37697:9;37730:61;37748:42;37757:32;37783:5;37757:32;:::i;:::-;37748:42;:::i;:::-;37730:61;:::i;:::-;37717:74;;37639:158;;;:::o;37803:147::-;37898:45;37937:5;37898:45;:::i;:::-;37893:3;37886:58;37803:147;;:::o;37956:114::-;38023:6;38057:5;38051:12;38041:22;;37956:114;;;:::o;38076:184::-;38175:11;38209:6;38204:3;38197:19;38249:4;38244:3;38240:14;38225:29;;38076:184;;;;:::o;38266:132::-;38333:4;38356:3;38348:11;;38386:4;38381:3;38377:14;38369:22;;38266:132;;;:::o;38404:108::-;38481:24;38499:5;38481:24;:::i;:::-;38476:3;38469:37;38404:108;;:::o;38518:179::-;38587:10;38608:46;38650:3;38642:6;38608:46;:::i;:::-;38686:4;38681:3;38677:14;38663:28;;38518:179;;;;:::o;38703:113::-;38773:4;38805;38800:3;38796:14;38788:22;;38703:113;;;:::o;38852:732::-;38971:3;39000:54;39048:5;39000:54;:::i;:::-;39070:86;39149:6;39144:3;39070:86;:::i;:::-;39063:93;;39180:56;39230:5;39180:56;:::i;:::-;39259:7;39290:1;39275:284;39300:6;39297:1;39294:13;39275:284;;;39376:6;39370:13;39403:63;39462:3;39447:13;39403:63;:::i;:::-;39396:70;;39489:60;39542:6;39489:60;:::i;:::-;39479:70;;39335:224;39322:1;39319;39315:9;39310:14;;39275:284;;;39279:14;39575:3;39568:10;;38976:608;;;38852:732;;;;:::o;39590:831::-;39853:4;39891:3;39880:9;39876:19;39868:27;;39905:71;39973:1;39962:9;39958:17;39949:6;39905:71;:::i;:::-;39986:80;40062:2;40051:9;40047:18;40038:6;39986:80;:::i;:::-;40113:9;40107:4;40103:20;40098:2;40087:9;40083:18;40076:48;40141:108;40244:4;40235:6;40141:108;:::i;:::-;40133:116;;40259:72;40327:2;40316:9;40312:18;40303:6;40259:72;:::i;:::-;40341:73;40409:3;40398:9;40394:19;40385:6;40341:73;:::i;:::-;39590:831;;;;;;;;:::o;40427:225::-;40567:34;40563:1;40555:6;40551:14;40544:58;40636:8;40631:2;40623:6;40619:15;40612:33;40427:225;:::o;40658:366::-;40800:3;40821:67;40885:2;40880:3;40821:67;:::i;:::-;40814:74;;40897:93;40986:3;40897:93;:::i;:::-;41015:2;41010:3;41006:12;40999:19;;40658:366;;;:::o;41030:419::-;41196:4;41234:2;41223:9;41219:18;41211:26;;41283:9;41277:4;41273:20;41269:1;41258:9;41254:17;41247:47;41311:131;41437:4;41311:131;:::i;:::-;41303:139;;41030:419;;;:::o;41455:147::-;41556:11;41593:3;41578:18;;41455:147;;;;:::o;41608:114::-;;:::o;41728:398::-;41887:3;41908:83;41989:1;41984:3;41908:83;:::i;:::-;41901:90;;42000:93;42089:3;42000:93;:::i;:::-;42118:1;42113:3;42109:11;42102:18;;41728:398;;;:::o;42132:379::-;42316:3;42338:147;42481:3;42338:147;:::i;:::-;42331:154;;42502:3;42495:10;;42132:379;;;:::o

Swarm Source

ipfs://b10db0fa2caf57347c42e0ff04b6e13c89aae83ed761c30fe9a80610fa54f61a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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