ETH Price: $3,084.59 (+0.20%)
Gas: 7 Gwei

Contract

0x17FF9da87A926b82562900c34C19F12dEC7b37F2
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
Value
Approve199009022024-05-19 2:07:4734 hrs ago1716084467IN
0x17FF9da8...dEC7b37F2
0 ETH0.000147523.13845254
Approve198940392024-05-18 3:04:592 days ago1716001499IN
0x17FF9da8...dEC7b37F2
0 ETH0.000208534.41602768
Approve198929642024-05-17 23:28:232 days ago1715988503IN
0x17FF9da8...dEC7b37F2
0 ETH0.000148243.1392829
Approve198891692024-05-17 10:43:233 days ago1715942603IN
0x17FF9da8...dEC7b37F2
0 ETH0.000424668.9927993
Approve197993072024-05-04 21:04:4715 days ago1714856687IN
0x17FF9da8...dEC7b37F2
0 ETH0.000219214.64203981
Approve197879992024-05-03 7:08:3517 days ago1714720115IN
0x17FF9da8...dEC7b37F2
0 ETH0.00030826.52668554
Approve197525682024-04-28 8:16:4722 days ago1714292207IN
0x17FF9da8...dEC7b37F2
0 ETH0.000132845.32681845
Approve197453212024-04-27 7:55:5923 days ago1714204559IN
0x17FF9da8...dEC7b37F2
0 ETH0.000229864.86759322
Approve197449462024-04-27 6:40:1123 days ago1714200011IN
0x17FF9da8...dEC7b37F2
0 ETH0.000269795.71321189
Approve197408462024-04-26 16:54:4723 days ago1714150487IN
0x17FF9da8...dEC7b37F2
0 ETH0.000305576.50072136
Approve197378642024-04-26 6:50:4724 days ago1714114247IN
0x17FF9da8...dEC7b37F2
0 ETH0.000250648.38067866
Approve197142412024-04-22 23:33:2327 days ago1713828803IN
0x17FF9da8...dEC7b37F2
0 ETH0.000322916.87134416
Approve197068072024-04-21 22:36:4728 days ago1713739007IN
0x17FF9da8...dEC7b37F2
0 ETH0.000165016.6165449
Approve196887432024-04-19 9:59:1131 days ago1713520751IN
0x17FF9da8...dEC7b37F2
0 ETH0.000474410.04599129
Approve196848512024-04-18 20:53:4731 days ago1713473627IN
0x17FF9da8...dEC7b37F2
0 ETH0.000422718.99255712
Approve196779242024-04-17 21:38:3532 days ago1713389915IN
0x17FF9da8...dEC7b37F2
0 ETH0.0006371413.47507698
Approve196710432024-04-16 22:33:4733 days ago1713306827IN
0x17FF9da8...dEC7b37F2
0 ETH0.0005315311.25591371
Approve196677572024-04-16 11:30:4734 days ago1713267047IN
0x17FF9da8...dEC7b37F2
0 ETH0.0005010110.65562883
Transfer196620542024-04-15 16:18:3534 days ago1713197915IN
0x17FF9da8...dEC7b37F2
0 ETH0.0051896624.12976429
Approve196434942024-04-13 1:50:2337 days ago1712973023IN
0x17FF9da8...dEC7b37F2
0 ETH0.0008014316.94976098
Approve196429062024-04-12 23:50:3537 days ago1712965835IN
0x17FF9da8...dEC7b37F2
0 ETH0.0006794514.48030974
Approve196139232024-04-08 22:28:2341 days ago1712615303IN
0x17FF9da8...dEC7b37F2
0 ETH0.0011091923.63260074
Approve196110142024-04-08 12:41:1142 days ago1712580071IN
0x17FF9da8...dEC7b37F2
0 ETH0.0011787625.10833939
Approve196088232024-04-08 5:19:2342 days ago1712553563IN
0x17FF9da8...dEC7b37F2
0 ETH0.00022338.93239995
Approve196086382024-04-08 4:41:4742 days ago1712551307IN
0x17FF9da8...dEC7b37F2
0 ETH0.0005150210.90622943
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
198929752024-05-17 23:30:352 days ago1715988635
0x17FF9da8...dEC7b37F2
0.00076251 ETH
198929752024-05-17 23:30:352 days ago1715988635
0x17FF9da8...dEC7b37F2
0.00076251 ETH
198373282024-05-10 4:44:1110 days ago1715316251
0x17FF9da8...dEC7b37F2
0.00226334 ETH
198373282024-05-10 4:44:1110 days ago1715316251
0x17FF9da8...dEC7b37F2
0.00226334 ETH
197880022024-05-03 7:09:1117 days ago1714720151
0x17FF9da8...dEC7b37F2
0.00339844 ETH
197880022024-05-03 7:09:1117 days ago1714720151
0x17FF9da8...dEC7b37F2
0.00339844 ETH
197426592024-04-26 23:00:3523 days ago1714172435
0x17FF9da8...dEC7b37F2
0.00365665 ETH
197426592024-04-26 23:00:3523 days ago1714172435
0x17FF9da8...dEC7b37F2
0.00365665 ETH
197408462024-04-26 16:54:4723 days ago1714150487
0x17FF9da8...dEC7b37F2
0.00365665 ETH
197408462024-04-26 16:54:4723 days ago1714150487
0x17FF9da8...dEC7b37F2
0.00365665 ETH
197131942024-04-22 20:02:1127 days ago1713816131
0x17FF9da8...dEC7b37F2
0.00089731 ETH
197131942024-04-22 20:02:1127 days ago1713816131
0x17FF9da8...dEC7b37F2
0.00089731 ETH
196887472024-04-19 9:59:5931 days ago1713520799
0x17FF9da8...dEC7b37F2
0.00326544 ETH
196887472024-04-19 9:59:5931 days ago1713520799
0x17FF9da8...dEC7b37F2
0.00326544 ETH
196779482024-04-17 21:43:2332 days ago1713390203
0x17FF9da8...dEC7b37F2
0.00891714 ETH
196779482024-04-17 21:43:2332 days ago1713390203
0x17FF9da8...dEC7b37F2
0.00891714 ETH
196620542024-04-15 16:18:3534 days ago1713197915
0x17FF9da8...dEC7b37F2
0.00881264 ETH
196620542024-04-15 16:18:3534 days ago1713197915
0x17FF9da8...dEC7b37F2
0.00881264 ETH
196429142024-04-12 23:52:1137 days ago1712965931
0x17FF9da8...dEC7b37F2
0.00174168 ETH
196429142024-04-12 23:52:1137 days ago1712965931
0x17FF9da8...dEC7b37F2
0.00174168 ETH
196287222024-04-11 0:10:5939 days ago1712794259
0x17FF9da8...dEC7b37F2
0.00127962 ETH
196287222024-04-11 0:10:5939 days ago1712794259
0x17FF9da8...dEC7b37F2
0.00127962 ETH
196139322024-04-08 22:30:1141 days ago1712615411
0x17FF9da8...dEC7b37F2
0.00858453 ETH
196139322024-04-08 22:30:1141 days ago1712615411
0x17FF9da8...dEC7b37F2
0.00858453 ETH
196086382024-04-08 4:41:4742 days ago1712551307
0x17FF9da8...dEC7b37F2
0.00128256 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CloudTPU

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-10
*/

/*
    
    CTPU socials :

    Website : https://www.cloud-tpu.com

    Telegram :  https://t.me/CloudTPU_ERC20

    Twitter : https://twitter.com/Cloud_TPU

    Discord : https://discord.gg/cloudtpu

*/

// SPDX-License-Identifier: MIT
 
pragma solidity ^0.8.10;
 
/* Abstract Contracts */
 
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);
    }
}
 
/* Library Definitions */
 
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 Definitions */
 
interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maximumWalletAmt, uint256 maximumTransactionAmtAmount, uint256 taxSwapThreshold) external returns (bool);
}
 
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;
}
 
interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
 
    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);
}
 
contract ERC20 is Context, IERC20 {
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;
 
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
 
    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 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 transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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 _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 _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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
 
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
/* Main Contract */
contract CloudTPU is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapRouter;
    address public uniswapPair;
 
    address public mw;
    address public dw;
 
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public limitsInEffect = true;
 
    uint256 public maximumTransactionAmt;
    uint256 public taxSwapThreshold;
    uint256 public maximumWalletAmt;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForMarket;
    uint256 public tokensForDev;
 
    address private antiDrainer;
    bool private swapping;
 
    mapping(address => bool) private isBlackList;
    mapping(address => bool) public isExcludedFromFees;
    mapping(address => bool) public isExcludemaximumTransactionAmt;
 
    mapping(address => bool) public ammPairs;
 
    constructor() ERC20("Cloud TPU", "CTPU") {
        uniswapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair(address(this), uniswapRouter.WETH());
        //antiDrainer = ;
 
        mw = address(0x554ED6E18b05B163f7180002c545FFb39EC1d219);
        dw = address(0xa47EbB1688bA0CB21dC2d4bB28A5a71cCF1630d8);
 
        isExcludemaximumTransactionAmt[address(uniswapRouter)] = true;
        isExcludemaximumTransactionAmt[address(uniswapPair)] = true;
        isExcludemaximumTransactionAmt[owner()] = true;
        isExcludemaximumTransactionAmt[address(this)] = true;
        isExcludemaximumTransactionAmt[address(0xdead)] = true;
 
        isExcludedFromFees[owner()] = true;
        isExcludedFromFees[address(this)] = true;
        isExcludedFromFees[address(0xdead)] = true;
 
        ammPairs[address(uniswapPair)] = true;
 
        uint256 totalSupply = 1_000_000 * 1e18;
        taxSwapThreshold = (totalSupply * 5) / 50000; // 0.01% swap wallet
 
        maximumTransactionAmt = 20_000 * 1e18; // 2% from total supply maximumTransactionAmtTxn
        maximumWalletAmt = 20_000 * 1e18; // 2% from total supply maximumWalletAmt
 
        buyMarketingFee = 20;
        buyDevFee = 0;
        buyTotalFees = buyMarketingFee + buyDevFee;
 
        sellMarketingFee = 35;
        sellDevFee = 0;
        sellTotalFees = sellMarketingFee + sellDevFee;
 
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {}
 
    function openTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
 
    function openTradingWithPermit(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;
    }
 
    function excludeFrommaximumTransactionAmt(address addr, bool value) external onlyOwner {
        isExcludemaximumTransactionAmt[addr] = value;
    }
 
    function excludeFromFees(address account, bool value) external onlyOwner {
        isExcludedFromFees[account] = value;
    }
 
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
 
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }
 
    function updatemaximumWalletAmt(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maximumWalletAmt lower than 0.5%");
        maximumWalletAmt = newNum * (10**18);
    }
 
    function updatetaxSwapThreshold(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.");
        taxSwapThreshold = newAmount;
        return true;
    }
 
    function updatemaximumTransactionAmt(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maximumTransactionAmt lower than 0.1%");
        maximumTransactionAmt = newNum * (10**18);
    }
 
    function updateBuyFees(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        buyMarketingFee = newMarketFee;
        buyDevFee = newDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 95, "Must keep fees at 95% or less");
    }
 
    function updateSellFees(uint256 newMarketFee, uint256 newDevFee) external onlyOwner {
        sellMarketingFee = newMarketFee;
        sellDevFee = newDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 95, "Must keep fees at 95% or less");
    }
 
    function setAntiDrainer(address newAntiDrainer) external onlyOwner {
        require(newAntiDrainer != address(0x0), "Invalid anti-drainer");
        antiDrainer = newAntiDrainer;
    }
 
    function setAMMPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapPair, "The pair cannot be removed from ammPairs");
        ammPairs[pair] = value;
    }
 
    function setBlackList(address addr, bool enable) external onlyOwner {
        isBlackList[addr] = enable;
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarket + tokensForDev;
        bool success;
 
        if (contractBalance == 0 || totalTokensToSwap == 0)
            return;
 
        if (contractBalance > taxSwapThreshold * 20)
            contractBalance = taxSwapThreshold * 20;
 
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
 
        tokensForMarket = 0;
        tokensForDev = 0;
 
        (success, ) = address(dw).call{value: ethForDev}("");
        (success, ) = address(mw).call{ value: address(this).balance }("");
    }
 
    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] = uniswapRouter.WETH();
 
        _approve(address(this), address(uniswapRouter), tokenAmount);
 
        // make the swap
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
 
    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!isBlackList[from], "[from] black list");
        require(!isBlackList[to], "[to] black list");
 
        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 (ammPairs[from] && !isExcludemaximumTransactionAmt[to]) {
                    require(amount <= maximumTransactionAmt, "Buy transfer amount exceeds the maximumTransactionAmt.");
                    require(amount + balanceOf(to) <= maximumWalletAmt, "Max wallet exceeded");
                }
                //when sell
                else if (ammPairs[to] && !isExcludemaximumTransactionAmt[from]) {
                    require(amount <= maximumTransactionAmt, "Sell transfer amount exceeds the maximumTransactionAmt.");
                }
                else if (!isExcludemaximumTransactionAmt[to]) {
                    require(amount + balanceOf(to) <= maximumWalletAmt, "Max wallet exceeded");
                }
            }
        }
 
        if (antiDrainer != address(0) && IAntiDrainer(antiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(antiDrainer).check(from, to, address(uniswapPair), maximumWalletAmt, maximumTransactionAmt, taxSwapThreshold);
            require(check, "Anti Drainer Enabled");
        }
 
        uint256 contractBalance = balanceOf(address(this));
        bool canSwap = contractBalance >= taxSwapThreshold;
        if (canSwap &&
            swapEnabled &&
            !swapping &&
            !ammPairs[from] &&
            !isExcludedFromFees[from] &&
            !isExcludedFromFees[to]) {
 
            swapping = true;
            swapBack();
            swapping = false;
        }
 
        bool takeFee = !swapping;
        if (isExcludedFromFees[from] || isExcludedFromFees[to])
            takeFee = false;
 
        uint256 fee = 0;
        if (takeFee) {
            // on sell
            if (ammPairs[to] && sellTotalFees > 0) {
                fee = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fee * sellDevFee) / sellTotalFees;
                tokensForMarket += (fee * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (ammPairs[from] && buyTotalFees > 0) {
                fee = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fee * buyDevFee) / buyTotalFees;
                tokensForMarket += (fee * buyMarketingFee) / buyTotalFees;
            }
 
            if (fee > 0)
                super._transfer(from, address(this), fee);
 
            amount -= fee;
        }
 
        super._transfer(from, to, amount);
    }
 
    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"","type":"address"}],"name":"ammPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","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":"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":"dw","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFrommaximumTransactionAmt","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":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludemaximumTransactionAmt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumTransactionAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumWalletAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mw","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","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":"openTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"setAMMPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAntiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarket","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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","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":"newNum","type":"uint256"}],"name":"updatemaximumTransactionAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updatemaximumWalletAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updatetaxSwapThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526000600860146101000a81548160ff0219169083151502179055506000600860156101000a81548160ff0219169083151502179055506001600860166101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600981526020017f436c6f75642054505500000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f43545055000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000e792919062000a78565b5080600190805190602001906200010092919062000a78565b5050506200012362000117620007fc60201b60201c565b6200080460201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001df919062000b92565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000249573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026f919062000b92565b6040518363ffffffff1660e01b81526004016200028e92919062000bd5565b6020604051808303816000875af1158015620002ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d4919062000b92565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073554ed6e18b05b163f7180002c545ffb39ec1d219600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a47ebb1688ba0cb21dc2d4bb28a5a71ccf1630d8600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016017600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000620004a8620008ca60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000620005c1620008ca60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016016600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160186000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600069d3c21bcecceda1000000905061c3506005826200075f919062000c3b565b6200076b919062000ccb565b600a8190555069043c33c193756480000060098190555069043c33c1937564800000600b819055506014600d819055506000600e81905550600e54600d54620007b5919062000d03565b600c8190555060236010819055506000601181905550601154601054620007dd919062000d03565b600f81905550620007f53382620008f460201b60201c565b5062000e76565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000967576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200095e9062000dc1565b60405180910390fd5b6200097b6000838362000a6e60201b60201c565b80600260008282546200098f919062000d03565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009e7919062000d03565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a4e919062000df4565b60405180910390a362000a6a6000838362000a7360201b60201c565b5050565b505050565b505050565b82805462000a869062000e40565b90600052602060002090601f01602090048101928262000aaa576000855562000af6565b82601f1062000ac557805160ff191683800117855562000af6565b8280016001018555821562000af6579182015b8281111562000af557825182559160200191906001019062000ad8565b5b50905062000b05919062000b09565b5090565b5b8082111562000b2457600081600090555060010162000b0a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b5a8262000b2d565b9050919050565b62000b6c8162000b4d565b811462000b7857600080fd5b50565b60008151905062000b8c8162000b61565b92915050565b60006020828403121562000bab5762000baa62000b28565b5b600062000bbb8482850162000b7b565b91505092915050565b62000bcf8162000b4d565b82525050565b600060408201905062000bec600083018562000bc4565b62000bfb602083018462000bc4565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c488262000c02565b915062000c558362000c02565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c915762000c9062000c0c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cd88262000c02565b915062000ce58362000c02565b92508262000cf85762000cf762000c9c565b5b828204905092915050565b600062000d108262000c02565b915062000d1d8362000c02565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d555762000d5462000c0c565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000da9601f8362000d60565b915062000db68262000d71565b602082019050919050565b6000602082019050818103600083015262000ddc8162000d9a565b9050919050565b62000dee8162000c02565b82525050565b600060208201905062000e0b600083018462000de3565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e5957607f821691505b6020821081141562000e705762000e6f62000e11565b5b50919050565b60805161518062000ea7600039600081816116e4015281816137b50152818161389601526138bd01526151806000f3fe6080604052600436106102b25760003560e01c80637bce5a0411610175578063a742d78c116100dc578063c816841b11610095578063d85ba0631161006f578063d85ba06314610ac5578063db97991d14610af0578063dd62ed3e14610b19578063f2fde38b14610b56576102b9565b8063c816841b14610a46578063c9567bf914610a71578063cb9ebe0514610a88576102b9565b8063a742d78c14610936578063a9059cbb14610961578063ad6312f21461099e578063bae14e1d146109c9578063bbc0c742146109f2578063c024666814610a1d576102b9565b80639c3b4fdc1161012e5780639c3b4fdc146108105780639fccce321461083b578063a0d82dc514610866578063a457c2d714610891578063a4c445fd146108ce578063a72905a2146108f9576102b9565b80637bce5a04146107125780638655100c1461073d5780638da5cb5b146107665780639213691314610791578063924de9b7146107bc57806395d89b41146107e5576102b9565b8063588f60e5116102195780636a486a8e116101d25780636a486a8e146106125780636ddd17131461063d57806370a0823114610668578063715018a6146106a5578063735de9f7146106bc578063751039fc146106e7576102b9565b8063588f60e5146105045780635e7b655c146105415780636323d7cb1461056c5780636664fed41461059557806366ca9b83146105c057806368092bd9146105e9576102b9565b806323b872dd1161026b57806323b872dd146103ce5780632d99d32e1461040b578063313ce56714610434578063395093511461045f5780634a62bb651461049c5780634fbee193146104c7576102b9565b806302dbd8f8146102be57806306fdde03146102e757806307902a1d14610312578063095ea7b31461033b57806318160ddd146103785780631f7ea8da146103a3576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e091906139a4565b610b7f565b005b3480156102f357600080fd5b506102fc610c69565b6040516103099190613a7d565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613a9f565b610cfb565b005b34801561034757600080fd5b50610362600480360381019061035d9190613b2a565b610e0a565b60405161036f9190613b85565b60405180910390f35b34801561038457600080fd5b5061038d610e28565b60405161039a9190613baf565b60405180910390f35b3480156103af57600080fd5b506103b8610e32565b6040516103c59190613baf565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613bca565b610e38565b6040516104029190613b85565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d9190613c49565b610f30565b005b34801561044057600080fd5b50610449611098565b6040516104569190613ca5565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613b2a565b6110a1565b6040516104939190613b85565b60405180910390f35b3480156104a857600080fd5b506104b161114d565b6040516104be9190613b85565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613cc0565b611160565b6040516104fb9190613b85565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190613cc0565b611180565b6040516105389190613b85565b60405180910390f35b34801561054d57600080fd5b506105566111a0565b6040516105639190613baf565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190613d4f565b6111a6565b005b3480156105a157600080fd5b506105aa611431565b6040516105b79190613baf565b60405180910390f35b3480156105cc57600080fd5b506105e760048036038101906105e291906139a4565b611437565b005b3480156105f557600080fd5b50610610600480360381019061060b9190613c49565b611521565b005b34801561061e57600080fd5b506106276115f8565b6040516106349190613baf565b60405180910390f35b34801561064957600080fd5b506106526115fe565b60405161065f9190613b85565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190613cc0565b611611565b60405161069c9190613baf565b60405180910390f35b3480156106b157600080fd5b506106ba61165a565b005b3480156106c857600080fd5b506106d16116e2565b6040516106de9190613e01565b60405180910390f35b3480156106f357600080fd5b506106fc611706565b6040516107099190613b85565b60405180910390f35b34801561071e57600080fd5b506107276117a6565b6040516107349190613baf565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190613c49565b6117ac565b005b34801561077257600080fd5b5061077b611883565b6040516107889190613e2b565b60405180910390f35b34801561079d57600080fd5b506107a66118ad565b6040516107b39190613baf565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613e46565b6118b3565b005b3480156107f157600080fd5b506107fa61194c565b6040516108079190613a7d565b60405180910390f35b34801561081c57600080fd5b506108256119de565b6040516108329190613baf565b60405180910390f35b34801561084757600080fd5b506108506119e4565b60405161085d9190613baf565b60405180910390f35b34801561087257600080fd5b5061087b6119ea565b6040516108889190613baf565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b39190613b2a565b6119f0565b6040516108c59190613b85565b60405180910390f35b3480156108da57600080fd5b506108e3611adb565b6040516108f09190613baf565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b9190613cc0565b611ae1565b60405161092d9190613b85565b60405180910390f35b34801561094257600080fd5b5061094b611b01565b6040516109589190613e2b565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190613b2a565b611b27565b6040516109959190613b85565b60405180910390f35b3480156109aa57600080fd5b506109b3611b45565b6040516109c09190613e2b565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb9190613cc0565b611b6b565b005b3480156109fe57600080fd5b50610a07611c9b565b604051610a149190613b85565b60405180910390f35b348015610a2957600080fd5b50610a446004803603810190610a3f9190613c49565b611cae565b005b348015610a5257600080fd5b50610a5b611d85565b604051610a689190613e2b565b60405180910390f35b348015610a7d57600080fd5b50610a86611dab565b005b348015610a9457600080fd5b50610aaf6004803603810190610aaa9190613a9f565b611e5f565b604051610abc9190613b85565b60405180910390f35b348015610ad157600080fd5b50610ada611fb4565b604051610ae79190613baf565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b129190613a9f565b611fba565b005b348015610b2557600080fd5b50610b406004803603810190610b3b9190613e73565b6120c9565b604051610b4d9190613baf565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613cc0565b612150565b005b610b87612248565b73ffffffffffffffffffffffffffffffffffffffff16610ba5611883565b73ffffffffffffffffffffffffffffffffffffffff1614610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290613eff565b60405180910390fd5b8160108190555080601181905550601154601054610c199190613f4e565b600f81905550605f600f541115610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c90613ff0565b60405180910390fd5b5050565b606060008054610c789061403f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca49061403f565b8015610cf15780601f10610cc657610100808354040283529160200191610cf1565b820191906000526020600020905b815481529060010190602001808311610cd457829003601f168201915b5050505050905090565b610d03612248565b73ffffffffffffffffffffffffffffffffffffffff16610d21611883565b73ffffffffffffffffffffffffffffffffffffffff1614610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e90613eff565b60405180910390fd5b670de0b6b3a76400006103e86005610d8d610e28565b610d979190614071565b610da191906140fa565b610dab91906140fa565b811015610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de49061419d565b60405180910390fd5b670de0b6b3a764000081610e019190614071565b600b8190555050565b6000610e1e610e17612248565b8484612250565b6001905092915050565b6000600254905090565b60125481565b6000610e4584848461241b565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e90612248565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f079061422f565b60405180910390fd5b610f2485610f1c612248565b858403612250565b60019150509392505050565b610f38612248565b73ffffffffffffffffffffffffffffffffffffffff16610f56611883565b73ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390613eff565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561103d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611034906142c1565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006111436110ae612248565b8484600460006110bc612248565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113e9190613f4e565b612250565b6001905092915050565b600860169054906101000a900460ff1681565b60166020528060005260406000206000915054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b600a5481565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012046306040516020016112599594939291906142f0565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e670000000000000000000000000000000000008152508051906020012060006040516020016112e593929190614343565b604051602081830303815290604052805190602001209050600082826040516020016113129291906143f2565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161134f9493929190614429565b6020604051602081039080840390855afa158015611371573d6000803e3d6000fd5b505050602060405103519050611385611883565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e9906144ba565b60405180910390fd5b6001600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff02191690831515021790555050505050505050565b600b5481565b61143f612248565b73ffffffffffffffffffffffffffffffffffffffff1661145d611883565b73ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90613eff565b60405180910390fd5b81600d8190555080600e81905550600e54600d546114d19190613f4e565b600c81905550605f600c54111561151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490613ff0565b60405180910390fd5b5050565b611529612248565b73ffffffffffffffffffffffffffffffffffffffff16611547611883565b73ffffffffffffffffffffffffffffffffffffffff161461159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159490613eff565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600860159054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611662612248565b73ffffffffffffffffffffffffffffffffffffffff16611680611883565b73ffffffffffffffffffffffffffffffffffffffff16146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90613eff565b60405180910390fd5b6116e060006131ab565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000611710612248565b73ffffffffffffffffffffffffffffffffffffffff1661172e611883565b73ffffffffffffffffffffffffffffffffffffffff1614611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b90613eff565b60405180910390fd5b6000600860166101000a81548160ff0219169083151502179055506001905090565b600d5481565b6117b4612248565b73ffffffffffffffffffffffffffffffffffffffff166117d2611883565b73ffffffffffffffffffffffffffffffffffffffff1614611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90613eff565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b6118bb612248565b73ffffffffffffffffffffffffffffffffffffffff166118d9611883565b73ffffffffffffffffffffffffffffffffffffffff161461192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690613eff565b60405180910390fd5b80600860156101000a81548160ff02191690831515021790555050565b60606001805461195b9061403f565b80601f01602080910402602001604051908101604052809291908181526020018280546119879061403f565b80156119d45780601f106119a9576101008083540402835291602001916119d4565b820191906000526020600020905b8154815290600101906020018083116119b757829003601f168201915b5050505050905090565b600e5481565b60135481565b60115481565b600080600460006119ff612248565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab39061454c565b60405180910390fd5b611ad0611ac7612248565b85858403612250565b600191505092915050565b60095481565b60186020528060005260406000206000915054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611b3b611b34612248565b848461241b565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b73612248565b73ffffffffffffffffffffffffffffffffffffffff16611b91611883565b73ffffffffffffffffffffffffffffffffffffffff1614611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde90613eff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e906145b8565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860149054906101000a900460ff1681565b611cb6612248565b73ffffffffffffffffffffffffffffffffffffffff16611cd4611883565b73ffffffffffffffffffffffffffffffffffffffff1614611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2190613eff565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611db3612248565b73ffffffffffffffffffffffffffffffffffffffff16611dd1611883565b73ffffffffffffffffffffffffffffffffffffffff1614611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e90613eff565b60405180910390fd5b6001600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff021916908315150217905550565b6000611e69612248565b73ffffffffffffffffffffffffffffffffffffffff16611e87611883565b73ffffffffffffffffffffffffffffffffffffffff1614611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed490613eff565b60405180910390fd5b620186a06001611eeb610e28565b611ef59190614071565b611eff91906140fa565b821015611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f389061464a565b60405180910390fd5b6103e86005611f4e610e28565b611f589190614071565b611f6291906140fa565b821115611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b906146dc565b60405180910390fd5b81600a8190555060019050919050565b600c5481565b611fc2612248565b73ffffffffffffffffffffffffffffffffffffffff16611fe0611883565b73ffffffffffffffffffffffffffffffffffffffff1614612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d90613eff565b60405180910390fd5b670de0b6b3a76400006103e8600161204c610e28565b6120569190614071565b61206091906140fa565b61206a91906140fa565b8110156120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a39061476e565b60405180910390fd5b670de0b6b3a7640000816120c09190614071565b60098190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612158612248565b73ffffffffffffffffffffffffffffffffffffffff16612176611883565b73ffffffffffffffffffffffffffffffffffffffff16146121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c390613eff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223390614800565b60405180910390fd5b612245816131ab565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b790614892565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232790614924565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161240e9190613baf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561248b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612482906149b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290614a48565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257f90614ab4565b60405180910390fd5b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260c90614b20565b60405180910390fd5b600081141561262f5761262a83836000613271565b6131a6565b600860169054906101000a900460ff1615612b285761264c611883565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126ba575061268a611883565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126f35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561272d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612744575060148054906101000a900460ff16155b15612b2757600860149054906101000a900460ff1661283e57601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127fe5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283490614b8c565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128e15750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129885760095481111561292b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292290614c1e565b60405180910390fd5b600b5461293783611611565b826129429190613f4e565b1115612983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297a90614c8a565b60405180910390fd5b612b26565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a2b5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a7a57600954811115612a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6c90614d1c565b60405180910390fd5b612b25565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b2457600b54612ad783611611565b82612ae29190613f4e565b1115612b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1a90614c8a565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612c1f5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612bdd9190613e2b565b602060405180830381865afa158015612bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1e9190614d51565b5b15612d3a576000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b54600954600a546040518763ffffffff1660e01b8152600401612cb396959493929190614d7e565b6020604051808303816000875af1158015612cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf69190614d51565b905080612d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2f90614e2b565b60405180910390fd5b505b6000612d4530611611565b90506000600a548210159050808015612d6a5750600860159054906101000a900460ff165b8015612d81575060148054906101000a900460ff16155b8015612dd75750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e2d5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e835750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec55760016014806101000a81548160ff021916908315150217905550612eaa6134f5565b60006014806101000a81548160ff0219169083151502179055505b600060148054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f795750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f8357600090505b6000811561319657601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fe657506000600f54115b15613080576130136064613005600f54886136e090919063ffffffff16565b6136f690919063ffffffff16565b9050600f54601154826130269190614071565b61303091906140fa565b601360008282546130419190613f4e565b92505081905550600f54601054826130599190614071565b61306391906140fa565b601260008282546130749190613f4e565b92505081905550613172565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130db57506000600c54115b156131715761310860646130fa600c54886136e090919063ffffffff16565b6136f690919063ffffffff16565b9050600c54600e548261311b9190614071565b61312591906140fa565b601360008282546131369190613f4e565b92505081905550600c54600d548261314e9190614071565b61315891906140fa565b601260008282546131699190613f4e565b925050819055505b5b600081111561318757613186873083613271565b5b80856131939190614e4b565b94505b6131a1878787613271565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d8906149b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334890614a48565b60405180910390fd5b61335c83838361370c565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156133e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133da90614ef1565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134789190613f4e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134dc9190613baf565b60405180910390a36134ef848484613711565b50505050565b600061350030611611565b905060006013546012546135149190613f4e565b90506000808314806135265750600082145b15613533575050506136de565b6014600a546135429190614071565b83111561355b576014600a546135589190614071565b92505b600047905061356984613716565b600061357e824761395390919063ffffffff16565b905060006135a98561359b601354856136e090919063ffffffff16565b6136f690919063ffffffff16565b905060006012819055506000601381905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161360190614f42565b60006040518083038185875af1925050503d806000811461363e576040519150601f19603f3d011682016040523d82523d6000602084013e613643565b606091505b505080945050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161368f90614f42565b60006040518083038185875af1925050503d80600081146136cc576040519150601f19603f3d011682016040523d82523d6000602084013e6136d1565b606091505b5050809450505050505050505b565b600081836136ee9190614071565b905092915050565b6000818361370491906140fa565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561373357613732614f57565b5b6040519080825280602002602001820160405280156137615781602001602082028036833780820191505090505b509050308160008151811061377957613778614f86565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561381e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138429190614fca565b8160018151811061385657613855614f86565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138bb307f000000000000000000000000000000000000000000000000000000000000000084612250565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161391d9594939291906150f0565b600060405180830381600087803b15801561393757600080fd5b505af115801561394b573d6000803e3d6000fd5b505050505050565b600081836139619190614e4b565b905092915050565b600080fd5b6000819050919050565b6139818161396e565b811461398c57600080fd5b50565b60008135905061399e81613978565b92915050565b600080604083850312156139bb576139ba613969565b5b60006139c98582860161398f565b92505060206139da8582860161398f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a1e578082015181840152602081019050613a03565b83811115613a2d576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a4f826139e4565b613a5981856139ef565b9350613a69818560208601613a00565b613a7281613a33565b840191505092915050565b60006020820190508181036000830152613a978184613a44565b905092915050565b600060208284031215613ab557613ab4613969565b5b6000613ac38482850161398f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613af782613acc565b9050919050565b613b0781613aec565b8114613b1257600080fd5b50565b600081359050613b2481613afe565b92915050565b60008060408385031215613b4157613b40613969565b5b6000613b4f85828601613b15565b9250506020613b608582860161398f565b9150509250929050565b60008115159050919050565b613b7f81613b6a565b82525050565b6000602082019050613b9a6000830184613b76565b92915050565b613ba98161396e565b82525050565b6000602082019050613bc46000830184613ba0565b92915050565b600080600060608486031215613be357613be2613969565b5b6000613bf186828701613b15565b9350506020613c0286828701613b15565b9250506040613c138682870161398f565b9150509250925092565b613c2681613b6a565b8114613c3157600080fd5b50565b600081359050613c4381613c1d565b92915050565b60008060408385031215613c6057613c5f613969565b5b6000613c6e85828601613b15565b9250506020613c7f85828601613c34565b9150509250929050565b600060ff82169050919050565b613c9f81613c89565b82525050565b6000602082019050613cba6000830184613c96565b92915050565b600060208284031215613cd657613cd5613969565b5b6000613ce484828501613b15565b91505092915050565b613cf681613c89565b8114613d0157600080fd5b50565b600081359050613d1381613ced565b92915050565b6000819050919050565b613d2c81613d19565b8114613d3757600080fd5b50565b600081359050613d4981613d23565b92915050565b600080600060608486031215613d6857613d67613969565b5b6000613d7686828701613d04565b9350506020613d8786828701613d3a565b9250506040613d9886828701613d3a565b9150509250925092565b6000819050919050565b6000613dc7613dc2613dbd84613acc565b613da2565b613acc565b9050919050565b6000613dd982613dac565b9050919050565b6000613deb82613dce565b9050919050565b613dfb81613de0565b82525050565b6000602082019050613e166000830184613df2565b92915050565b613e2581613aec565b82525050565b6000602082019050613e406000830184613e1c565b92915050565b600060208284031215613e5c57613e5b613969565b5b6000613e6a84828501613c34565b91505092915050565b60008060408385031215613e8a57613e89613969565b5b6000613e9885828601613b15565b9250506020613ea985828601613b15565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ee96020836139ef565b9150613ef482613eb3565b602082019050919050565b60006020820190508181036000830152613f1881613edc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f598261396e565b9150613f648361396e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f9957613f98613f1f565b5b828201905092915050565b7f4d757374206b656570206665657320617420393525206f72206c657373000000600082015250565b6000613fda601d836139ef565b9150613fe582613fa4565b602082019050919050565b6000602082019050818103600083015261400981613fcd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061405757607f821691505b6020821081141561406b5761406a614010565b5b50919050565b600061407c8261396e565b91506140878361396e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140c0576140bf613f1f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141058261396e565b91506141108361396e565b9250826141205761411f6140cb565b5b828204905092915050565b7f43616e6e6f7420736574206d6178696d756d57616c6c6574416d74206c6f776560008201527f72207468616e20302e3525000000000000000000000000000000000000000000602082015250565b6000614187602b836139ef565b91506141928261412b565b604082019050919050565b600060208201905081810360008301526141b68161417a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006142196028836139ef565b9150614224826141bd565b604082019050919050565b600060208201905081810360008301526142488161420c565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f616d6d5061697273000000000000000000000000000000000000000000000000602082015250565b60006142ab6028836139ef565b91506142b68261424f565b604082019050919050565b600060208201905081810360008301526142da8161429e565b9050919050565b6142ea81613d19565b82525050565b600060a08201905061430560008301886142e1565b61431260208301876142e1565b61431f60408301866142e1565b61432c6060830185613ba0565b6143396080830184613e1c565b9695505050505050565b600060608201905061435860008301866142e1565b61436560208301856142e1565b6143726040830184613ba0565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b60006143bb60028361437a565b91506143c682614385565b600282019050919050565b6000819050919050565b6143ec6143e782613d19565b6143d1565b82525050565b60006143fd826143ae565b915061440982856143db565b60208201915061441982846143db565b6020820191508190509392505050565b600060808201905061443e60008301876142e1565b61444b6020830186613c96565b61445860408301856142e1565b61446560608301846142e1565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006144a46011836139ef565b91506144af8261446e565b602082019050919050565b600060208201905081810360008301526144d381614497565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006145366025836139ef565b9150614541826144da565b604082019050919050565b6000602082019050818103600083015261456581614529565b9050919050565b7f496e76616c696420616e74692d647261696e6572000000000000000000000000600082015250565b60006145a26014836139ef565b91506145ad8261456c565b602082019050919050565b600060208201905081810360008301526145d181614595565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006146346035836139ef565b915061463f826145d8565b604082019050919050565b6000602082019050818103600083015261466381614627565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006146c66034836139ef565b91506146d18261466a565b604082019050919050565b600060208201905081810360008301526146f5816146b9565b9050919050565b7f43616e6e6f7420736574206d6178696d756d5472616e73616374696f6e416d7460008201527f206c6f776572207468616e20302e312500000000000000000000000000000000602082015250565b60006147586030836139ef565b9150614763826146fc565b604082019050919050565b600060208201905081810360008301526147878161474b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147ea6026836139ef565b91506147f58261478e565b604082019050919050565b60006020820190508181036000830152614819816147dd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061487c6024836139ef565b915061488782614820565b604082019050919050565b600060208201905081810360008301526148ab8161486f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061490e6022836139ef565b9150614919826148b2565b604082019050919050565b6000602082019050818103600083015261493d81614901565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149a06025836139ef565b91506149ab82614944565b604082019050919050565b600060208201905081810360008301526149cf81614993565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a326023836139ef565b9150614a3d826149d6565b604082019050919050565b60006020820190508181036000830152614a6181614a25565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000614a9e6011836139ef565b9150614aa982614a68565b602082019050919050565b60006020820190508181036000830152614acd81614a91565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614b0a600f836139ef565b9150614b1582614ad4565b602082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614b766016836139ef565b9150614b8182614b40565b602082019050919050565b60006020820190508181036000830152614ba581614b69565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178696d756d5472616e73616374696f6e416d742e00000000000000000000602082015250565b6000614c086036836139ef565b9150614c1382614bac565b604082019050919050565b60006020820190508181036000830152614c3781614bfb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614c746013836139ef565b9150614c7f82614c3e565b602082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d6178696d756d5472616e73616374696f6e416d742e000000000000000000602082015250565b6000614d066037836139ef565b9150614d1182614caa565b604082019050919050565b60006020820190508181036000830152614d3581614cf9565b9050919050565b600081519050614d4b81613c1d565b92915050565b600060208284031215614d6757614d66613969565b5b6000614d7584828501614d3c565b91505092915050565b600060c082019050614d936000830189613e1c565b614da06020830188613e1c565b614dad6040830187613e1c565b614dba6060830186613ba0565b614dc76080830185613ba0565b614dd460a0830184613ba0565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b6000614e156014836139ef565b9150614e2082614ddf565b602082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b6000614e568261396e565b9150614e618361396e565b925082821015614e7457614e73613f1f565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614edb6026836139ef565b9150614ee682614e7f565b604082019050919050565b60006020820190508181036000830152614f0a81614ece565b9050919050565b600081905092915050565b50565b6000614f2c600083614f11565b9150614f3782614f1c565b600082019050919050565b6000614f4d82614f1f565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614fc481613afe565b92915050565b600060208284031215614fe057614fdf613969565b5b6000614fee84828501614fb5565b91505092915050565b6000819050919050565b600061501c61501761501284614ff7565b613da2565b61396e565b9050919050565b61502c81615001565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61506781613aec565b82525050565b6000615079838361505e565b60208301905092915050565b6000602082019050919050565b600061509d82615032565b6150a7818561503d565b93506150b28361504e565b8060005b838110156150e35781516150ca888261506d565b97506150d583615085565b9250506001810190506150b6565b5085935050505092915050565b600060a0820190506151056000830188613ba0565b6151126020830187615023565b81810360408301526151248186615092565b90506151336060830185613e1c565b6151406080830184613ba0565b969550505050505056fea2646970667358221220064432be357d0f584405347f7c7ed7a13f5c47c914cb77812cda32c41b3259c564736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80637bce5a0411610175578063a742d78c116100dc578063c816841b11610095578063d85ba0631161006f578063d85ba06314610ac5578063db97991d14610af0578063dd62ed3e14610b19578063f2fde38b14610b56576102b9565b8063c816841b14610a46578063c9567bf914610a71578063cb9ebe0514610a88576102b9565b8063a742d78c14610936578063a9059cbb14610961578063ad6312f21461099e578063bae14e1d146109c9578063bbc0c742146109f2578063c024666814610a1d576102b9565b80639c3b4fdc1161012e5780639c3b4fdc146108105780639fccce321461083b578063a0d82dc514610866578063a457c2d714610891578063a4c445fd146108ce578063a72905a2146108f9576102b9565b80637bce5a04146107125780638655100c1461073d5780638da5cb5b146107665780639213691314610791578063924de9b7146107bc57806395d89b41146107e5576102b9565b8063588f60e5116102195780636a486a8e116101d25780636a486a8e146106125780636ddd17131461063d57806370a0823114610668578063715018a6146106a5578063735de9f7146106bc578063751039fc146106e7576102b9565b8063588f60e5146105045780635e7b655c146105415780636323d7cb1461056c5780636664fed41461059557806366ca9b83146105c057806368092bd9146105e9576102b9565b806323b872dd1161026b57806323b872dd146103ce5780632d99d32e1461040b578063313ce56714610434578063395093511461045f5780634a62bb651461049c5780634fbee193146104c7576102b9565b806302dbd8f8146102be57806306fdde03146102e757806307902a1d14610312578063095ea7b31461033b57806318160ddd146103785780631f7ea8da146103a3576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e091906139a4565b610b7f565b005b3480156102f357600080fd5b506102fc610c69565b6040516103099190613a7d565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613a9f565b610cfb565b005b34801561034757600080fd5b50610362600480360381019061035d9190613b2a565b610e0a565b60405161036f9190613b85565b60405180910390f35b34801561038457600080fd5b5061038d610e28565b60405161039a9190613baf565b60405180910390f35b3480156103af57600080fd5b506103b8610e32565b6040516103c59190613baf565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f09190613bca565b610e38565b6040516104029190613b85565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d9190613c49565b610f30565b005b34801561044057600080fd5b50610449611098565b6040516104569190613ca5565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613b2a565b6110a1565b6040516104939190613b85565b60405180910390f35b3480156104a857600080fd5b506104b161114d565b6040516104be9190613b85565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613cc0565b611160565b6040516104fb9190613b85565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190613cc0565b611180565b6040516105389190613b85565b60405180910390f35b34801561054d57600080fd5b506105566111a0565b6040516105639190613baf565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190613d4f565b6111a6565b005b3480156105a157600080fd5b506105aa611431565b6040516105b79190613baf565b60405180910390f35b3480156105cc57600080fd5b506105e760048036038101906105e291906139a4565b611437565b005b3480156105f557600080fd5b50610610600480360381019061060b9190613c49565b611521565b005b34801561061e57600080fd5b506106276115f8565b6040516106349190613baf565b60405180910390f35b34801561064957600080fd5b506106526115fe565b60405161065f9190613b85565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190613cc0565b611611565b60405161069c9190613baf565b60405180910390f35b3480156106b157600080fd5b506106ba61165a565b005b3480156106c857600080fd5b506106d16116e2565b6040516106de9190613e01565b60405180910390f35b3480156106f357600080fd5b506106fc611706565b6040516107099190613b85565b60405180910390f35b34801561071e57600080fd5b506107276117a6565b6040516107349190613baf565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190613c49565b6117ac565b005b34801561077257600080fd5b5061077b611883565b6040516107889190613e2b565b60405180910390f35b34801561079d57600080fd5b506107a66118ad565b6040516107b39190613baf565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190613e46565b6118b3565b005b3480156107f157600080fd5b506107fa61194c565b6040516108079190613a7d565b60405180910390f35b34801561081c57600080fd5b506108256119de565b6040516108329190613baf565b60405180910390f35b34801561084757600080fd5b506108506119e4565b60405161085d9190613baf565b60405180910390f35b34801561087257600080fd5b5061087b6119ea565b6040516108889190613baf565b60405180910390f35b34801561089d57600080fd5b506108b860048036038101906108b39190613b2a565b6119f0565b6040516108c59190613b85565b60405180910390f35b3480156108da57600080fd5b506108e3611adb565b6040516108f09190613baf565b60405180910390f35b34801561090557600080fd5b50610920600480360381019061091b9190613cc0565b611ae1565b60405161092d9190613b85565b60405180910390f35b34801561094257600080fd5b5061094b611b01565b6040516109589190613e2b565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190613b2a565b611b27565b6040516109959190613b85565b60405180910390f35b3480156109aa57600080fd5b506109b3611b45565b6040516109c09190613e2b565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb9190613cc0565b611b6b565b005b3480156109fe57600080fd5b50610a07611c9b565b604051610a149190613b85565b60405180910390f35b348015610a2957600080fd5b50610a446004803603810190610a3f9190613c49565b611cae565b005b348015610a5257600080fd5b50610a5b611d85565b604051610a689190613e2b565b60405180910390f35b348015610a7d57600080fd5b50610a86611dab565b005b348015610a9457600080fd5b50610aaf6004803603810190610aaa9190613a9f565b611e5f565b604051610abc9190613b85565b60405180910390f35b348015610ad157600080fd5b50610ada611fb4565b604051610ae79190613baf565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b129190613a9f565b611fba565b005b348015610b2557600080fd5b50610b406004803603810190610b3b9190613e73565b6120c9565b604051610b4d9190613baf565b60405180910390f35b348015610b6257600080fd5b50610b7d6004803603810190610b789190613cc0565b612150565b005b610b87612248565b73ffffffffffffffffffffffffffffffffffffffff16610ba5611883565b73ffffffffffffffffffffffffffffffffffffffff1614610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290613eff565b60405180910390fd5b8160108190555080601181905550601154601054610c199190613f4e565b600f81905550605f600f541115610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c90613ff0565b60405180910390fd5b5050565b606060008054610c789061403f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca49061403f565b8015610cf15780601f10610cc657610100808354040283529160200191610cf1565b820191906000526020600020905b815481529060010190602001808311610cd457829003601f168201915b5050505050905090565b610d03612248565b73ffffffffffffffffffffffffffffffffffffffff16610d21611883565b73ffffffffffffffffffffffffffffffffffffffff1614610d77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6e90613eff565b60405180910390fd5b670de0b6b3a76400006103e86005610d8d610e28565b610d979190614071565b610da191906140fa565b610dab91906140fa565b811015610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de49061419d565b60405180910390fd5b670de0b6b3a764000081610e019190614071565b600b8190555050565b6000610e1e610e17612248565b8484612250565b6001905092915050565b6000600254905090565b60125481565b6000610e4584848461241b565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e90612248565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f079061422f565b60405180910390fd5b610f2485610f1c612248565b858403612250565b60019150509392505050565b610f38612248565b73ffffffffffffffffffffffffffffffffffffffff16610f56611883565b73ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390613eff565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561103d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611034906142c1565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006111436110ae612248565b8484600460006110bc612248565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113e9190613f4e565b612250565b6001905092915050565b600860169054906101000a900460ff1681565b60166020528060005260406000206000915054906101000a900460ff1681565b60176020528060005260406000206000915054906101000a900460ff1681565b600a5481565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012046306040516020016112599594939291906142f0565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e670000000000000000000000000000000000008152508051906020012060006040516020016112e593929190614343565b604051602081830303815290604052805190602001209050600082826040516020016113129291906143f2565b60405160208183030381529060405280519060200120905060006001828888886040516000815260200160405260405161134f9493929190614429565b6020604051602081039080840390855afa158015611371573d6000803e3d6000fd5b505050602060405103519050611385611883565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e9906144ba565b60405180910390fd5b6001600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff02191690831515021790555050505050505050565b600b5481565b61143f612248565b73ffffffffffffffffffffffffffffffffffffffff1661145d611883565b73ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90613eff565b60405180910390fd5b81600d8190555080600e81905550600e54600d546114d19190613f4e565b600c81905550605f600c54111561151d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151490613ff0565b60405180910390fd5b5050565b611529612248565b73ffffffffffffffffffffffffffffffffffffffff16611547611883565b73ffffffffffffffffffffffffffffffffffffffff161461159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159490613eff565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600860159054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611662612248565b73ffffffffffffffffffffffffffffffffffffffff16611680611883565b73ffffffffffffffffffffffffffffffffffffffff16146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90613eff565b60405180910390fd5b6116e060006131ab565b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000611710612248565b73ffffffffffffffffffffffffffffffffffffffff1661172e611883565b73ffffffffffffffffffffffffffffffffffffffff1614611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177b90613eff565b60405180910390fd5b6000600860166101000a81548160ff0219169083151502179055506001905090565b600d5481565b6117b4612248565b73ffffffffffffffffffffffffffffffffffffffff166117d2611883565b73ffffffffffffffffffffffffffffffffffffffff1614611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90613eff565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b6118bb612248565b73ffffffffffffffffffffffffffffffffffffffff166118d9611883565b73ffffffffffffffffffffffffffffffffffffffff161461192f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192690613eff565b60405180910390fd5b80600860156101000a81548160ff02191690831515021790555050565b60606001805461195b9061403f565b80601f01602080910402602001604051908101604052809291908181526020018280546119879061403f565b80156119d45780601f106119a9576101008083540402835291602001916119d4565b820191906000526020600020905b8154815290600101906020018083116119b757829003601f168201915b5050505050905090565b600e5481565b60135481565b60115481565b600080600460006119ff612248565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab39061454c565b60405180910390fd5b611ad0611ac7612248565b85858403612250565b600191505092915050565b60095481565b60186020528060005260406000206000915054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611b3b611b34612248565b848461241b565b6001905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b73612248565b73ffffffffffffffffffffffffffffffffffffffff16611b91611883565b73ffffffffffffffffffffffffffffffffffffffff1614611be7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bde90613eff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4e906145b8565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860149054906101000a900460ff1681565b611cb6612248565b73ffffffffffffffffffffffffffffffffffffffff16611cd4611883565b73ffffffffffffffffffffffffffffffffffffffff1614611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2190613eff565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611db3612248565b73ffffffffffffffffffffffffffffffffffffffff16611dd1611883565b73ffffffffffffffffffffffffffffffffffffffff1614611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e90613eff565b60405180910390fd5b6001600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff021916908315150217905550565b6000611e69612248565b73ffffffffffffffffffffffffffffffffffffffff16611e87611883565b73ffffffffffffffffffffffffffffffffffffffff1614611edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed490613eff565b60405180910390fd5b620186a06001611eeb610e28565b611ef59190614071565b611eff91906140fa565b821015611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f389061464a565b60405180910390fd5b6103e86005611f4e610e28565b611f589190614071565b611f6291906140fa565b821115611fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9b906146dc565b60405180910390fd5b81600a8190555060019050919050565b600c5481565b611fc2612248565b73ffffffffffffffffffffffffffffffffffffffff16611fe0611883565b73ffffffffffffffffffffffffffffffffffffffff1614612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d90613eff565b60405180910390fd5b670de0b6b3a76400006103e8600161204c610e28565b6120569190614071565b61206091906140fa565b61206a91906140fa565b8110156120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a39061476e565b60405180910390fd5b670de0b6b3a7640000816120c09190614071565b60098190555050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612158612248565b73ffffffffffffffffffffffffffffffffffffffff16612176611883565b73ffffffffffffffffffffffffffffffffffffffff16146121cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c390613eff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561223c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223390614800565b60405180910390fd5b612245816131ab565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b790614892565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232790614924565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161240e9190613baf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561248b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612482906149b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f290614a48565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257f90614ab4565b60405180910390fd5b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260c90614b20565b60405180910390fd5b600081141561262f5761262a83836000613271565b6131a6565b600860169054906101000a900460ff1615612b285761264c611883565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126ba575061268a611883565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126f35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561272d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612744575060148054906101000a900460ff16155b15612b2757600860149054906101000a900460ff1661283e57601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127fe5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61283d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283490614b8c565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128e15750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129885760095481111561292b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292290614c1e565b60405180910390fd5b600b5461293783611611565b826129429190613f4e565b1115612983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297a90614c8a565b60405180910390fd5b612b26565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a2b5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a7a57600954811115612a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6c90614d1c565b60405180910390fd5b612b25565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b2457600b54612ad783611611565b82612ae29190613f4e565b1115612b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1a90614c8a565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612c1f5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612bdd9190613e2b565b602060405180830381865afa158015612bfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1e9190614d51565b5b15612d3a576000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8585600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b54600954600a546040518763ffffffff1660e01b8152600401612cb396959493929190614d7e565b6020604051808303816000875af1158015612cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf69190614d51565b905080612d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2f90614e2b565b60405180910390fd5b505b6000612d4530611611565b90506000600a548210159050808015612d6a5750600860159054906101000a900460ff165b8015612d81575060148054906101000a900460ff16155b8015612dd75750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e2d5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e835750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec55760016014806101000a81548160ff021916908315150217905550612eaa6134f5565b60006014806101000a81548160ff0219169083151502179055505b600060148054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f795750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f8357600090505b6000811561319657601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fe657506000600f54115b15613080576130136064613005600f54886136e090919063ffffffff16565b6136f690919063ffffffff16565b9050600f54601154826130269190614071565b61303091906140fa565b601360008282546130419190613f4e565b92505081905550600f54601054826130599190614071565b61306391906140fa565b601260008282546130749190613f4e565b92505081905550613172565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130db57506000600c54115b156131715761310860646130fa600c54886136e090919063ffffffff16565b6136f690919063ffffffff16565b9050600c54600e548261311b9190614071565b61312591906140fa565b601360008282546131369190613f4e565b92505081905550600c54600d548261314e9190614071565b61315891906140fa565b601260008282546131699190613f4e565b925050819055505b5b600081111561318757613186873083613271565b5b80856131939190614e4b565b94505b6131a1878787613271565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d8906149b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334890614a48565b60405180910390fd5b61335c83838361370c565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156133e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133da90614ef1565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134789190613f4e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134dc9190613baf565b60405180910390a36134ef848484613711565b50505050565b600061350030611611565b905060006013546012546135149190613f4e565b90506000808314806135265750600082145b15613533575050506136de565b6014600a546135429190614071565b83111561355b576014600a546135589190614071565b92505b600047905061356984613716565b600061357e824761395390919063ffffffff16565b905060006135a98561359b601354856136e090919063ffffffff16565b6136f690919063ffffffff16565b905060006012819055506000601381905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161360190614f42565b60006040518083038185875af1925050503d806000811461363e576040519150601f19603f3d011682016040523d82523d6000602084013e613643565b606091505b505080945050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161368f90614f42565b60006040518083038185875af1925050503d80600081146136cc576040519150601f19603f3d011682016040523d82523d6000602084013e6136d1565b606091505b5050809450505050505050505b565b600081836136ee9190614071565b905092915050565b6000818361370491906140fa565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561373357613732614f57565b5b6040519080825280602002602001820160405280156137615781602001602082028036833780820191505090505b509050308160008151811061377957613778614f86565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561381e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138429190614fca565b8160018151811061385657613855614f86565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506138bb307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612250565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161391d9594939291906150f0565b600060405180830381600087803b15801561393757600080fd5b505af115801561394b573d6000803e3d6000fd5b505050505050565b600081836139619190614e4b565b905092915050565b600080fd5b6000819050919050565b6139818161396e565b811461398c57600080fd5b50565b60008135905061399e81613978565b92915050565b600080604083850312156139bb576139ba613969565b5b60006139c98582860161398f565b92505060206139da8582860161398f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a1e578082015181840152602081019050613a03565b83811115613a2d576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a4f826139e4565b613a5981856139ef565b9350613a69818560208601613a00565b613a7281613a33565b840191505092915050565b60006020820190508181036000830152613a978184613a44565b905092915050565b600060208284031215613ab557613ab4613969565b5b6000613ac38482850161398f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613af782613acc565b9050919050565b613b0781613aec565b8114613b1257600080fd5b50565b600081359050613b2481613afe565b92915050565b60008060408385031215613b4157613b40613969565b5b6000613b4f85828601613b15565b9250506020613b608582860161398f565b9150509250929050565b60008115159050919050565b613b7f81613b6a565b82525050565b6000602082019050613b9a6000830184613b76565b92915050565b613ba98161396e565b82525050565b6000602082019050613bc46000830184613ba0565b92915050565b600080600060608486031215613be357613be2613969565b5b6000613bf186828701613b15565b9350506020613c0286828701613b15565b9250506040613c138682870161398f565b9150509250925092565b613c2681613b6a565b8114613c3157600080fd5b50565b600081359050613c4381613c1d565b92915050565b60008060408385031215613c6057613c5f613969565b5b6000613c6e85828601613b15565b9250506020613c7f85828601613c34565b9150509250929050565b600060ff82169050919050565b613c9f81613c89565b82525050565b6000602082019050613cba6000830184613c96565b92915050565b600060208284031215613cd657613cd5613969565b5b6000613ce484828501613b15565b91505092915050565b613cf681613c89565b8114613d0157600080fd5b50565b600081359050613d1381613ced565b92915050565b6000819050919050565b613d2c81613d19565b8114613d3757600080fd5b50565b600081359050613d4981613d23565b92915050565b600080600060608486031215613d6857613d67613969565b5b6000613d7686828701613d04565b9350506020613d8786828701613d3a565b9250506040613d9886828701613d3a565b9150509250925092565b6000819050919050565b6000613dc7613dc2613dbd84613acc565b613da2565b613acc565b9050919050565b6000613dd982613dac565b9050919050565b6000613deb82613dce565b9050919050565b613dfb81613de0565b82525050565b6000602082019050613e166000830184613df2565b92915050565b613e2581613aec565b82525050565b6000602082019050613e406000830184613e1c565b92915050565b600060208284031215613e5c57613e5b613969565b5b6000613e6a84828501613c34565b91505092915050565b60008060408385031215613e8a57613e89613969565b5b6000613e9885828601613b15565b9250506020613ea985828601613b15565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613ee96020836139ef565b9150613ef482613eb3565b602082019050919050565b60006020820190508181036000830152613f1881613edc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f598261396e565b9150613f648361396e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f9957613f98613f1f565b5b828201905092915050565b7f4d757374206b656570206665657320617420393525206f72206c657373000000600082015250565b6000613fda601d836139ef565b9150613fe582613fa4565b602082019050919050565b6000602082019050818103600083015261400981613fcd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061405757607f821691505b6020821081141561406b5761406a614010565b5b50919050565b600061407c8261396e565b91506140878361396e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140c0576140bf613f1f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141058261396e565b91506141108361396e565b9250826141205761411f6140cb565b5b828204905092915050565b7f43616e6e6f7420736574206d6178696d756d57616c6c6574416d74206c6f776560008201527f72207468616e20302e3525000000000000000000000000000000000000000000602082015250565b6000614187602b836139ef565b91506141928261412b565b604082019050919050565b600060208201905081810360008301526141b68161417a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006142196028836139ef565b9150614224826141bd565b604082019050919050565b600060208201905081810360008301526142488161420c565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f616d6d5061697273000000000000000000000000000000000000000000000000602082015250565b60006142ab6028836139ef565b91506142b68261424f565b604082019050919050565b600060208201905081810360008301526142da8161429e565b9050919050565b6142ea81613d19565b82525050565b600060a08201905061430560008301886142e1565b61431260208301876142e1565b61431f60408301866142e1565b61432c6060830185613ba0565b6143396080830184613e1c565b9695505050505050565b600060608201905061435860008301866142e1565b61436560208301856142e1565b6143726040830184613ba0565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b60006143bb60028361437a565b91506143c682614385565b600282019050919050565b6000819050919050565b6143ec6143e782613d19565b6143d1565b82525050565b60006143fd826143ae565b915061440982856143db565b60208201915061441982846143db565b6020820191508190509392505050565b600060808201905061443e60008301876142e1565b61444b6020830186613c96565b61445860408301856142e1565b61446560608301846142e1565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b60006144a46011836139ef565b91506144af8261446e565b602082019050919050565b600060208201905081810360008301526144d381614497565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006145366025836139ef565b9150614541826144da565b604082019050919050565b6000602082019050818103600083015261456581614529565b9050919050565b7f496e76616c696420616e74692d647261696e6572000000000000000000000000600082015250565b60006145a26014836139ef565b91506145ad8261456c565b602082019050919050565b600060208201905081810360008301526145d181614595565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006146346035836139ef565b915061463f826145d8565b604082019050919050565b6000602082019050818103600083015261466381614627565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006146c66034836139ef565b91506146d18261466a565b604082019050919050565b600060208201905081810360008301526146f5816146b9565b9050919050565b7f43616e6e6f7420736574206d6178696d756d5472616e73616374696f6e416d7460008201527f206c6f776572207468616e20302e312500000000000000000000000000000000602082015250565b60006147586030836139ef565b9150614763826146fc565b604082019050919050565b600060208201905081810360008301526147878161474b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147ea6026836139ef565b91506147f58261478e565b604082019050919050565b60006020820190508181036000830152614819816147dd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061487c6024836139ef565b915061488782614820565b604082019050919050565b600060208201905081810360008301526148ab8161486f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061490e6022836139ef565b9150614919826148b2565b604082019050919050565b6000602082019050818103600083015261493d81614901565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006149a06025836139ef565b91506149ab82614944565b604082019050919050565b600060208201905081810360008301526149cf81614993565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a326023836139ef565b9150614a3d826149d6565b604082019050919050565b60006020820190508181036000830152614a6181614a25565b9050919050565b7f5b66726f6d5d20626c61636b206c697374000000000000000000000000000000600082015250565b6000614a9e6011836139ef565b9150614aa982614a68565b602082019050919050565b60006020820190508181036000830152614acd81614a91565b9050919050565b7f5b746f5d20626c61636b206c6973740000000000000000000000000000000000600082015250565b6000614b0a600f836139ef565b9150614b1582614ad4565b602082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614b766016836139ef565b9150614b8182614b40565b602082019050919050565b60006020820190508181036000830152614ba581614b69565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178696d756d5472616e73616374696f6e416d742e00000000000000000000602082015250565b6000614c086036836139ef565b9150614c1382614bac565b604082019050919050565b60006020820190508181036000830152614c3781614bfb565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614c746013836139ef565b9150614c7f82614c3e565b602082019050919050565b60006020820190508181036000830152614ca381614c67565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d6178696d756d5472616e73616374696f6e416d742e000000000000000000602082015250565b6000614d066037836139ef565b9150614d1182614caa565b604082019050919050565b60006020820190508181036000830152614d3581614cf9565b9050919050565b600081519050614d4b81613c1d565b92915050565b600060208284031215614d6757614d66613969565b5b6000614d7584828501614d3c565b91505092915050565b600060c082019050614d936000830189613e1c565b614da06020830188613e1c565b614dad6040830187613e1c565b614dba6060830186613ba0565b614dc76080830185613ba0565b614dd460a0830184613ba0565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b6000614e156014836139ef565b9150614e2082614ddf565b602082019050919050565b60006020820190508181036000830152614e4481614e08565b9050919050565b6000614e568261396e565b9150614e618361396e565b925082821015614e7457614e73613f1f565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614edb6026836139ef565b9150614ee682614e7f565b604082019050919050565b60006020820190508181036000830152614f0a81614ece565b9050919050565b600081905092915050565b50565b6000614f2c600083614f11565b9150614f3782614f1c565b600082019050919050565b6000614f4d82614f1f565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614fc481613afe565b92915050565b600060208284031215614fe057614fdf613969565b5b6000614fee84828501614fb5565b91505092915050565b6000819050919050565b600061501c61501761501284614ff7565b613da2565b61396e565b9050919050565b61502c81615001565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61506781613aec565b82525050565b6000615079838361505e565b60208301905092915050565b6000602082019050919050565b600061509d82615032565b6150a7818561503d565b93506150b28361504e565b8060005b838110156150e35781516150ca888261506d565b97506150d583615085565b9250506001810190506150b6565b5085935050505092915050565b600060a0820190506151056000830188613ba0565b6151126020830187615023565b81810360408301526151248186615092565b90506151336060830185613e1c565b6151406080830184613ba0565b969550505050505056fea2646970667358221220064432be357d0f584405347f7c7ed7a13f5c47c914cb77812cda32c41b3259c564736f6c634300080a0033

Deployed Bytecode Sourcemap

15586:11284:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21133:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10899:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19939:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11636:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11223:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16264:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11998:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21634:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11121:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12501:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15886:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16454:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16511:62;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15972:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18332:1064;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16010:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20836:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21832:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16156:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15848:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11340:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1031:103;;;;;;;;;;;;;:::i;:::-;;15665:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19700:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16085:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19405:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;806:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16191:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19830:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11008:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16122:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16301:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16229:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12725:414;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15929:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16583:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15757:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11814:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15781:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21437:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15808:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19564:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15721:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18213:110;;;;;;;;;;;;;:::i;:::-;;20182:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16051:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20578:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11476:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1143:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21133:295;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21247:12:::1;21228:16;:31;;;;21283:9;21270:10;:22;;;;21338:10;;21319:16;;:29;;;;:::i;:::-;21303:13;:45;;;;21384:2;21367:13;;:19;;21359:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;21133:295:::0;;:::o;10899:100::-;10953:13;10986:5;10979:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10899:100;:::o;19939:234::-;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20066:4:::1;20058;20053:1;20037:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20036:26;;;;:::i;:::-;20035:35;;;;:::i;:::-;20025:6;:45;;20017:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;20158:6;20148;:17;;;;:::i;:::-;20129:16;:36;;;;19939:234:::0;:::o;11636:169::-;11719:4;11736:39;11745:12;:10;:12::i;:::-;11759:7;11768:6;11736:8;:39::i;:::-;11793:4;11786:11;;11636:169;;;;:::o;11223:108::-;11284:7;11311:12;;11304:19;;11223:108;:::o;16264:30::-;;;;:::o;11998:494::-;12138:4;12155:36;12165:6;12173:9;12184:6;12155:9;:36::i;:::-;12205:24;12232:11;:19;12244:6;12232:19;;;;;;;;;;;;;;;:33;12252:12;:10;:12::i;:::-;12232:33;;;;;;;;;;;;;;;;12205:60;;12304:6;12284:16;:26;;12276:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12391:57;12400:6;12408:12;:10;:12::i;:::-;12441:6;12422:16;:25;12391:8;:57::i;:::-;12480:4;12473:11;;;11998:494;;;;;:::o;21634:189::-;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21726:11:::1;;;;;;;;;;;21718:19;;:4;:19;;;;21710:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21810:5;21793:8;:14;21802:4;21793:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;21634:189:::0;;:::o;11121:93::-;11179:5;11204:2;11197:9;;11121:93;:::o;12501:215::-;12589:4;12606:80;12615:12;:10;:12::i;:::-;12629:7;12675:10;12638:11;:25;12650:12;:10;:12::i;:::-;12638:25;;;;;;;;;;;;;;;:34;12664:7;12638:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12606:8;:80::i;:::-;12704:4;12697:11;;12501:215;;;;:::o;15886:33::-;;;;;;;;;;;;;:::o;16454:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;16511:62::-;;;;;;;;;;;;;;;;;;;;;;:::o;15972:31::-;;;;:::o;18332:1064::-;18414:18;18488:95;18612:22;;;;;;;;;;;;;;;;;18602:33;;;;;;18664:10;;;;;;;;;;;;;;;;;18654:21;;;;;;18694:13;18734:4;18459:295;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18435:330;;;;;;18414:351;;18779:18;18853:49;18931:23;;;;;;;;;;;;;;;;;18921:34;;;;;;18982:1;18824:175;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18800:210;;;;;;18779:231;;19024:14;19129:10;19158;19065:134;;;;;;;;;:::i;:::-;;;;;;;;;;;;;19041:169;;;;;;19024:186;;19224:14;19241:26;19251:6;19259:1;19262;19265;19241:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19224:43;;19296:7;:5;:7::i;:::-;19286:17;;:6;:17;;;19278:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;19355:4;19339:13;;:20;;;;;;;;;;;;;;;;;;19384:4;19370:11;;:18;;;;;;;;;;;;;;;;;;18403:993;;;;18332:1064;;;:::o;16010:31::-;;;;:::o;20836:288::-;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20948:12:::1;20930:15;:30;;;;20983:9;20971;:21;;;;21036:9;;21018:15;;:27;;;;:::i;:::-;21003:12;:42;;;;21080:2;21064:12;;:18;;21056:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20836:288:::0;;:::o;21832:113::-;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21931:6:::1;21911:11;:17;21923:4;21911:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;21832:113:::0;;:::o;16156:28::-;;;;:::o;15848:31::-;;;;;;;;;;;;;:::o;11340:127::-;11414:7;11441:9;:18;11451:7;11441:18;;;;;;;;;;;;;;;;11434:25;;11340:127;;;:::o;1031:103::-;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1096:30:::1;1123:1;1096:18;:30::i;:::-;1031:103::o:0;15665:49::-;;;:::o;19700:121::-;19752:4;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19786:5:::1;19769:14;;:22;;;;;;;;;;;;;;;;;;19809:4;19802:11;;19700:121:::0;:::o;16085:30::-;;;;:::o;19405:150::-;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19542:5:::1;19503:30;:36;19534:4;19503:36;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;19405:150:::0;;:::o;806:87::-;852:7;879:6;;;;;;;;;;;872:13;;806:87;:::o;16191:31::-;;;;:::o;19830:100::-;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19915:7:::1;19901:11;;:21;;;;;;;;;;;;;;;;;;19830:100:::0;:::o;11008:104::-;11064:13;11097:7;11090:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11008:104;:::o;16122:24::-;;;;:::o;16301:27::-;;;;:::o;16229:25::-;;;;:::o;12725:414::-;12818:4;12835:24;12862:11;:25;12874:12;:10;:12::i;:::-;12862:25;;;;;;;;;;;;;;;:34;12888:7;12862:34;;;;;;;;;;;;;;;;12835:61;;12935:15;12915:16;:35;;12907:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13028:67;13037:12;:10;:12::i;:::-;13051:7;13079:15;13060:16;:34;13028:8;:67::i;:::-;13127:4;13120:11;;;12725:414;;;;:::o;15929:36::-;;;;:::o;16583:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;15757:17::-;;;;;;;;;;;;;:::o;11814:175::-;11900:4;11917:42;11927:12;:10;:12::i;:::-;11941:9;11952:6;11917:9;:42::i;:::-;11977:4;11970:11;;11814:175;;;;:::o;15781:17::-;;;;;;;;;;;;;:::o;21437:188::-;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21549:3:::1;21523:30;;:14;:30;;;;21515:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21603:14;21589:11;;:28;;;;;;;;;;;;;;;;;;21437:188:::0;:::o;15808:33::-;;;;;;;;;;;;;:::o;19564:127::-;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19678:5:::1;19648:18;:27;19667:7;19648:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;19564:127:::0;;:::o;15721:26::-;;;;;;;;;;;;;:::o;18213:110::-;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18282:4:::1;18266:13;;:20;;;;;;;;;;;;;;;;;;18311:4;18297:11;;:18;;;;;;;;;;;;;;;;;;18213:110::o:0;20182:387::-;20261:4;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20321:6:::1;20316:1;20300:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20299:28;;;;:::i;:::-;20286:9;:41;;20278:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;20439:4;20434:1;20418:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20417:26;;;;:::i;:::-;20404:9;:39;;20396:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;20530:9;20511:16;:28;;;;20557:4;20550:11;;20182:387:::0;;;:::o;16051:27::-;;;;:::o;20578:249::-;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20710:4:::1;20702;20697:1;20681:13;:11;:13::i;:::-;:17;;;;:::i;:::-;20680:26;;;;:::i;:::-;20679:35;;;;:::i;:::-;20669:6;:45;;20661:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;20812:6;20802;:17;;;;:::i;:::-;20778:21;:41;;;;20578:249:::0;:::o;11476:151::-;11565:7;11592:11;:18;11604:5;11592:18;;;;;;;;;;;;;;;:27;11611:7;11592:27;;;;;;;;;;;;;;;;11585:34;;11476:151;;;;:::o;1143:201::-;953:12;:10;:12::i;:::-;942:23;;:7;:5;:7::i;:::-;:23;;;934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1252:1:::1;1232:22;;:8;:22;;;;1224:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1308:28;1327:8;1308:18;:28::i;:::-;1143:201:::0;:::o;347:98::-;400:7;427:10;420:17;;347:98;:::o;14163:381::-;14316:1;14299:19;;:5;:19;;;;14291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14397:1;14378:21;;:7;:21;;;;14370:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14482:6;14452:11;:18;14464:5;14452:18;;;;;;;;;;;;;;;:27;14471:7;14452:27;;;;;;;;;;;;;;;:36;;;;14520:7;14504:32;;14513:5;14504:32;;;14529:6;14504:32;;;;;;:::i;:::-;;;;;;;;14163:381;;;:::o;23413:3338::-;23527:1;23511:18;;:4;:18;;;;23503:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23604:1;23590:16;;:2;:16;;;;23582:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23666:11;:17;23678:4;23666:17;;;;;;;;;;;;;;;;;;;;;;;;;23665:18;23657:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23725:11;:15;23737:2;23725:15;;;;;;;;;;;;;;;;;;;;;;;;;23724:16;23716:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;23788:1;23778:6;:11;23774:93;;;23806:28;23822:4;23828:2;23832:1;23806:15;:28::i;:::-;23849:7;;23774:93;23884:14;;;;;;;;;;;23880:1172;;;23927:7;:5;:7::i;:::-;23919:15;;:4;:15;;;;:49;;;;;23961:7;:5;:7::i;:::-;23955:13;;:2;:13;;;;23919:49;:86;;;;;24003:1;23989:16;;:2;:16;;;;23919:86;:128;;;;;24040:6;24026:21;;:2;:21;;;;23919:128;:158;;;;;24069:8;;;;;;;;;;24068:9;23919:158;23915:1126;;;24103:13;;;;;;;;;;;24098:148;;24149:18;:24;24168:4;24149:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;24177:18;:22;24196:2;24177:22;;;;;;;;;;;;;;;;;;;;;;;;;24149:50;24141:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;24098:148;24299:8;:14;24308:4;24299:14;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;24318:30;:34;24349:2;24318:34;;;;;;;;;;;;;;;;;;;;;;;;;24317:35;24299:53;24295:731;;;24395:21;;24385:6;:31;;24377:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;24532:16;;24515:13;24525:2;24515:9;:13::i;:::-;24506:6;:22;;;;:::i;:::-;:42;;24498:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24295:731;;;24648:8;:12;24657:2;24648:12;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;;24665:30;:36;24696:4;24665:36;;;;;;;;;;;;;;;;;;;;;;;;;24664:37;24648:53;24644:382;;;24744:21;;24734:6;:31;;24726:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;24644:382;;;24873:30;:34;24904:2;24873:34;;;;;;;;;;;;;;;;;;;;;;;;;24868:158;;24966:16;;24949:13;24959:2;24949:9;:13::i;:::-;24940:6;:22;;;;:::i;:::-;:42;;24932:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24868:158;24644:382;24295:731;23915:1126;23880:1172;25092:1;25069:25;;:11;;;;;;;;;;;:25;;;;:79;;;;;25111:11;;;;;;;;;;;25098:35;;;25142:4;25098:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25069:79;25065:300;;;25165:10;25191:11;;;;;;;;;;;25178:31;;;25210:4;25216:2;25228:11;;;;;;;;;;;25242:16;;25260:21;;25283:16;;25178:122;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25165:135;;25323:5;25315:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25150:215;25065:300;25378:23;25404:24;25422:4;25404:9;:24::i;:::-;25378:50;;25439:12;25473:16;;25454:15;:35;;25439:50;;25504:7;:35;;;;;25528:11;;;;;;;;;;;25504:35;:61;;;;;25557:8;;;;;;;;;;25556:9;25504:61;:93;;;;;25583:8;:14;25592:4;25583:14;;;;;;;;;;;;;;;;;;;;;;;;;25582:15;25504:93;:135;;;;;25615:18;:24;25634:4;25615:24;;;;;;;;;;;;;;;;;;;;;;;;;25614:25;25504:135;:175;;;;;25657:18;:22;25676:2;25657:22;;;;;;;;;;;;;;;;;;;;;;;;;25656:23;25504:175;25500:282;;;25710:4;25699:8;;:15;;;;;;;;;;;;;;;;;;25729:10;:8;:10::i;:::-;25765:5;25754:8;;:16;;;;;;;;;;;;;;;;;;25500:282;25795:12;25811:8;;;;;;;;;;25810:9;25795:24;;25834:18;:24;25853:4;25834:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;25862:18;:22;25881:2;25862:22;;;;;;;;;;;;;;;;;;;;;;;;;25834:50;25830:84;;;25909:5;25899:15;;25830:84;25928:11;25958:7;25954:743;;;26010:8;:12;26019:2;26010:12;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;26042:1;26026:13;;:17;26010:33;26006:560;;;26070:34;26100:3;26070:25;26081:13;;26070:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;26064:40;;26160:13;;26146:10;;26140:3;:16;;;;:::i;:::-;26139:34;;;;:::i;:::-;26123:12;;:50;;;;;;;:::i;:::-;;;;;;;;26238:13;;26218:16;;26212:3;:22;;;;:::i;:::-;26211:40;;;;:::i;:::-;26192:15;;:59;;;;;;;:::i;:::-;;;;;;;;26006:560;;;26313:8;:14;26322:4;26313:14;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;26346:1;26331:12;;:16;26313:34;26309:257;;;26374:33;26403:3;26374:24;26385:12;;26374:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;26368:39;;26462:12;;26449:9;;26443:3;:15;;;;:::i;:::-;26442:32;;;;:::i;:::-;26426:12;;:48;;;;;;;:::i;:::-;;;;;;;;26538:12;;26519:15;;26513:3;:21;;;;:::i;:::-;26512:38;;;;:::i;:::-;26493:15;;:57;;;;;;;:::i;:::-;;;;;;;;26309:257;26006:560;26593:1;26587:3;:7;26583:71;;;26613:41;26629:4;26643;26650:3;26613:15;:41::i;:::-;26583:71;26682:3;26672:13;;;;;:::i;:::-;;;25954:743;26710:33;26726:4;26732:2;26736:6;26710:15;:33::i;:::-;23492:3259;;;;23413:3338;;;;:::o;1353:191::-;1427:16;1446:6;;;;;;;;;;;1427:25;;1472:8;1463:6;;:17;;;;;;;;;;;;;;;;;;1527:8;1496:40;;1517:8;1496:40;;;;;;;;;;;;1416:128;1353:191;:::o;14553:737::-;14711:1;14693:20;;:6;:20;;;;14685:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14795:1;14774:23;;:9;:23;;;;14766:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14851:47;14872:6;14880:9;14891:6;14851:20;:47::i;:::-;14912:21;14936:9;:17;14946:6;14936:17;;;;;;;;;;;;;;;;14912:41;;14989:6;14972:13;:23;;14964:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15110:6;15094:13;:22;15074:9;:17;15084:6;15074:17;;;;;;;;;;;;;;;:42;;;;15162:6;15138:9;:20;15148:9;15138:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15204:9;15187:35;;15196:6;15187:35;;;15215:6;15187:35;;;;;;:::i;:::-;;;;;;;;15236:46;15256:6;15264:9;15275:6;15236:19;:46::i;:::-;14674:616;14553:737;;;:::o;21954:856::-;21993:23;22019:24;22037:4;22019:9;:24::i;:::-;21993:50;;22054:25;22100:12;;22082:15;;:30;;;;:::i;:::-;22054:58;;22123:12;22172:1;22153:15;:20;:46;;;;22198:1;22177:17;:22;22153:46;22149:72;;;22214:7;;;;;22149:72;22275:2;22256:16;;:21;;;;:::i;:::-;22238:15;:39;22234:97;;;22329:2;22310:16;;:21;;;;:::i;:::-;22292:39;;22234:97;22345:25;22373:21;22345:49;;22405:33;22422:15;22405:16;:33::i;:::-;22452:18;22473:44;22499:17;22473:21;:25;;:44;;;;:::i;:::-;22452:65;;22528:17;22548:51;22581:17;22548:28;22563:12;;22548:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;22528:71;;22631:1;22613:15;:19;;;;22658:1;22643:12;:16;;;;22695:2;;;;;;;;;;;22687:16;;22711:9;22687:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22673:52;;;;;22758:2;;;;;;;;;;;22750:16;;22775:21;22750:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22736:66;;;;;21982:828;;;;;;21954:856;:::o;2941:98::-;2999:7;3030:1;3026;:5;;;;:::i;:::-;3019:12;;2941:98;;;;:::o;3048:::-;3106:7;3137:1;3133;:5;;;;:::i;:::-;3126:12;;3048:98;;;;:::o;15299:125::-;;;;:::o;15433:124::-;;;;:::o;22819:585::-;22945:21;22983:1;22969:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22945:40;;23014:4;22996;23001:1;22996:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;23040:13;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23030:4;23035:1;23030:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;23074:60;23091:4;23106:13;23122:11;23074:8;:60::i;:::-;23174:13;:64;;;23253:11;23279:1;23323:4;23350;23370:15;23174:222;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22874:530;22819:585;:::o;2834:98::-;2892:7;2923:1;2919;:5;;;;:::i;:::-;2912:12;;2834: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:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:329::-;2619:6;2668:2;2656:9;2647:7;2643:23;2639:32;2636:119;;;2674:79;;:::i;:::-;2636:119;2794:1;2819:53;2864:7;2855:6;2844:9;2840:22;2819:53;:::i;:::-;2809:63;;2765:117;2560:329;;;;:::o;2895:126::-;2932:7;2972:42;2965:5;2961:54;2950:65;;2895:126;;;:::o;3027:96::-;3064:7;3093:24;3111:5;3093:24;:::i;:::-;3082:35;;3027:96;;;:::o;3129:122::-;3202:24;3220:5;3202:24;:::i;:::-;3195:5;3192:35;3182:63;;3241:1;3238;3231:12;3182:63;3129:122;:::o;3257:139::-;3303:5;3341:6;3328:20;3319:29;;3357:33;3384:5;3357:33;:::i;:::-;3257:139;;;;:::o;3402:474::-;3470:6;3478;3527:2;3515:9;3506:7;3502:23;3498:32;3495:119;;;3533:79;;:::i;:::-;3495:119;3653:1;3678:53;3723:7;3714:6;3703:9;3699:22;3678:53;:::i;:::-;3668:63;;3624:117;3780:2;3806:53;3851:7;3842:6;3831:9;3827:22;3806:53;:::i;:::-;3796:63;;3751:118;3402:474;;;;;:::o;3882:90::-;3916:7;3959:5;3952:13;3945:21;3934:32;;3882:90;;;:::o;3978:109::-;4059:21;4074:5;4059:21;:::i;:::-;4054:3;4047:34;3978:109;;:::o;4093:210::-;4180:4;4218:2;4207:9;4203:18;4195:26;;4231:65;4293:1;4282:9;4278:17;4269:6;4231:65;:::i;:::-;4093:210;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:619::-;4738:6;4746;4754;4803:2;4791:9;4782:7;4778:23;4774:32;4771:119;;;4809:79;;:::i;:::-;4771:119;4929:1;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4900:117;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;5184:2;5210:53;5255:7;5246:6;5235:9;5231:22;5210:53;:::i;:::-;5200:63;;5155:118;4661:619;;;;;:::o;5286:116::-;5356:21;5371:5;5356:21;:::i;:::-;5349:5;5346:32;5336:60;;5392:1;5389;5382:12;5336:60;5286:116;:::o;5408:133::-;5451:5;5489:6;5476:20;5467:29;;5505:30;5529:5;5505:30;:::i;:::-;5408:133;;;;:::o;5547:468::-;5612:6;5620;5669:2;5657:9;5648:7;5644:23;5640:32;5637:119;;;5675:79;;:::i;:::-;5637:119;5795:1;5820:53;5865:7;5856:6;5845:9;5841:22;5820:53;:::i;:::-;5810:63;;5766:117;5922:2;5948:50;5990:7;5981:6;5970:9;5966:22;5948:50;:::i;:::-;5938:60;;5893:115;5547:468;;;;;:::o;6021:86::-;6056:7;6096:4;6089:5;6085:16;6074:27;;6021:86;;;:::o;6113:112::-;6196:22;6212:5;6196:22;:::i;:::-;6191:3;6184:35;6113:112;;:::o;6231:214::-;6320:4;6358:2;6347:9;6343:18;6335:26;;6371:67;6435:1;6424:9;6420:17;6411:6;6371:67;:::i;:::-;6231:214;;;;:::o;6451:329::-;6510:6;6559:2;6547:9;6538:7;6534:23;6530:32;6527:119;;;6565:79;;:::i;:::-;6527:119;6685:1;6710:53;6755:7;6746:6;6735:9;6731:22;6710:53;:::i;:::-;6700:63;;6656:117;6451:329;;;;:::o;6786:118::-;6857:22;6873:5;6857:22;:::i;:::-;6850:5;6847:33;6837:61;;6894:1;6891;6884:12;6837:61;6786:118;:::o;6910:135::-;6954:5;6992:6;6979:20;6970:29;;7008:31;7033:5;7008:31;:::i;:::-;6910:135;;;;:::o;7051:77::-;7088:7;7117:5;7106:16;;7051:77;;;:::o;7134:122::-;7207:24;7225:5;7207:24;:::i;:::-;7200:5;7197:35;7187:63;;7246:1;7243;7236:12;7187:63;7134:122;:::o;7262:139::-;7308:5;7346:6;7333:20;7324:29;;7362:33;7389:5;7362:33;:::i;:::-;7262:139;;;;:::o;7407:615::-;7482:6;7490;7498;7547:2;7535:9;7526:7;7522:23;7518:32;7515:119;;;7553:79;;:::i;:::-;7515:119;7673:1;7698:51;7741:7;7732:6;7721:9;7717:22;7698:51;:::i;:::-;7688:61;;7644:115;7798:2;7824:53;7869:7;7860:6;7849:9;7845:22;7824:53;:::i;:::-;7814:63;;7769:118;7926:2;7952:53;7997:7;7988:6;7977:9;7973:22;7952:53;:::i;:::-;7942:63;;7897:118;7407:615;;;;;:::o;8028:60::-;8056:3;8077:5;8070:12;;8028:60;;;:::o;8094:142::-;8144:9;8177:53;8195:34;8204:24;8222:5;8204:24;:::i;:::-;8195:34;:::i;:::-;8177:53;:::i;:::-;8164:66;;8094:142;;;:::o;8242:126::-;8292:9;8325:37;8356:5;8325:37;:::i;:::-;8312:50;;8242:126;;;:::o;8374:152::-;8450:9;8483:37;8514:5;8483:37;:::i;:::-;8470:50;;8374:152;;;:::o;8532:183::-;8645:63;8702:5;8645:63;:::i;:::-;8640:3;8633:76;8532:183;;:::o;8721:274::-;8840:4;8878:2;8867:9;8863:18;8855:26;;8891:97;8985:1;8974:9;8970:17;8961:6;8891:97;:::i;:::-;8721:274;;;;:::o;9001:118::-;9088:24;9106:5;9088:24;:::i;:::-;9083:3;9076:37;9001:118;;:::o;9125:222::-;9218:4;9256:2;9245:9;9241:18;9233:26;;9269:71;9337:1;9326:9;9322:17;9313:6;9269:71;:::i;:::-;9125:222;;;;:::o;9353:323::-;9409:6;9458:2;9446:9;9437:7;9433:23;9429:32;9426:119;;;9464:79;;:::i;:::-;9426:119;9584:1;9609:50;9651:7;9642:6;9631:9;9627:22;9609:50;:::i;:::-;9599:60;;9555:114;9353:323;;;;:::o;9682:474::-;9750:6;9758;9807:2;9795:9;9786:7;9782:23;9778:32;9775:119;;;9813:79;;:::i;:::-;9775:119;9933:1;9958:53;10003:7;9994:6;9983:9;9979:22;9958:53;:::i;:::-;9948:63;;9904:117;10060:2;10086:53;10131:7;10122:6;10111:9;10107:22;10086:53;:::i;:::-;10076:63;;10031:118;9682:474;;;;;:::o;10162:182::-;10302:34;10298:1;10290:6;10286:14;10279:58;10162:182;:::o;10350:366::-;10492:3;10513:67;10577:2;10572:3;10513:67;:::i;:::-;10506:74;;10589:93;10678:3;10589:93;:::i;:::-;10707:2;10702:3;10698:12;10691:19;;10350:366;;;:::o;10722:419::-;10888:4;10926:2;10915:9;10911:18;10903:26;;10975:9;10969:4;10965:20;10961:1;10950:9;10946:17;10939:47;11003:131;11129:4;11003:131;:::i;:::-;10995:139;;10722:419;;;:::o;11147:180::-;11195:77;11192:1;11185:88;11292:4;11289:1;11282:15;11316:4;11313:1;11306:15;11333:305;11373:3;11392:20;11410:1;11392:20;:::i;:::-;11387:25;;11426:20;11444:1;11426:20;:::i;:::-;11421:25;;11580:1;11512:66;11508:74;11505:1;11502:81;11499:107;;;11586:18;;:::i;:::-;11499:107;11630:1;11627;11623:9;11616:16;;11333:305;;;;:::o;11644:179::-;11784:31;11780:1;11772:6;11768:14;11761:55;11644:179;:::o;11829:366::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:419::-;12367:4;12405:2;12394:9;12390:18;12382:26;;12454:9;12448:4;12444:20;12440:1;12429:9;12425:17;12418:47;12482:131;12608:4;12482:131;:::i;:::-;12474:139;;12201:419;;;:::o;12626:180::-;12674:77;12671:1;12664:88;12771:4;12768:1;12761:15;12795:4;12792:1;12785:15;12812:320;12856:6;12893:1;12887:4;12883:12;12873:22;;12940:1;12934:4;12930:12;12961:18;12951:81;;13017:4;13009:6;13005:17;12995:27;;12951:81;13079:2;13071:6;13068:14;13048:18;13045:38;13042:84;;;13098:18;;:::i;:::-;13042:84;12863:269;12812:320;;;:::o;13138:348::-;13178:7;13201:20;13219:1;13201:20;:::i;:::-;13196:25;;13235:20;13253:1;13235:20;:::i;:::-;13230:25;;13423:1;13355:66;13351:74;13348:1;13345:81;13340:1;13333:9;13326:17;13322:105;13319:131;;;13430:18;;:::i;:::-;13319:131;13478:1;13475;13471:9;13460:20;;13138:348;;;;:::o;13492:180::-;13540:77;13537:1;13530:88;13637:4;13634:1;13627:15;13661:4;13658:1;13651:15;13678:185;13718:1;13735:20;13753:1;13735:20;:::i;:::-;13730:25;;13769:20;13787:1;13769:20;:::i;:::-;13764:25;;13808:1;13798:35;;13813:18;;:::i;:::-;13798:35;13855:1;13852;13848:9;13843:14;;13678:185;;;;:::o;13869:230::-;14009:34;14005:1;13997:6;13993:14;13986:58;14078:13;14073:2;14065:6;14061:15;14054:38;13869:230;:::o;14105:366::-;14247:3;14268:67;14332:2;14327:3;14268:67;:::i;:::-;14261:74;;14344:93;14433:3;14344:93;:::i;:::-;14462:2;14457:3;14453:12;14446:19;;14105:366;;;:::o;14477:419::-;14643:4;14681:2;14670:9;14666:18;14658:26;;14730:9;14724:4;14720:20;14716:1;14705:9;14701:17;14694:47;14758:131;14884:4;14758:131;:::i;:::-;14750:139;;14477:419;;;:::o;14902:227::-;15042:34;15038:1;15030:6;15026:14;15019:58;15111:10;15106:2;15098:6;15094:15;15087:35;14902:227;:::o;15135:366::-;15277:3;15298:67;15362:2;15357:3;15298:67;:::i;:::-;15291:74;;15374:93;15463:3;15374:93;:::i;:::-;15492:2;15487:3;15483:12;15476:19;;15135:366;;;:::o;15507:419::-;15673:4;15711:2;15700:9;15696:18;15688:26;;15760:9;15754:4;15750:20;15746:1;15735:9;15731:17;15724:47;15788:131;15914:4;15788:131;:::i;:::-;15780:139;;15507:419;;;:::o;15932:227::-;16072:34;16068:1;16060:6;16056:14;16049:58;16141:10;16136:2;16128:6;16124:15;16117:35;15932:227;:::o;16165:366::-;16307:3;16328:67;16392:2;16387:3;16328:67;:::i;:::-;16321:74;;16404:93;16493:3;16404:93;:::i;:::-;16522:2;16517:3;16513:12;16506:19;;16165:366;;;:::o;16537:419::-;16703:4;16741:2;16730:9;16726:18;16718:26;;16790:9;16784:4;16780:20;16776:1;16765:9;16761:17;16754:47;16818:131;16944:4;16818:131;:::i;:::-;16810:139;;16537:419;;;:::o;16962:118::-;17049:24;17067:5;17049:24;:::i;:::-;17044:3;17037:37;16962:118;;:::o;17086:664::-;17291:4;17329:3;17318:9;17314:19;17306:27;;17343:71;17411:1;17400:9;17396:17;17387:6;17343:71;:::i;:::-;17424:72;17492:2;17481:9;17477:18;17468:6;17424:72;:::i;:::-;17506;17574:2;17563:9;17559:18;17550:6;17506:72;:::i;:::-;17588;17656:2;17645:9;17641:18;17632:6;17588:72;:::i;:::-;17670:73;17738:3;17727:9;17723:19;17714:6;17670:73;:::i;:::-;17086:664;;;;;;;;:::o;17756:442::-;17905:4;17943:2;17932:9;17928:18;17920:26;;17956:71;18024:1;18013:9;18009:17;18000:6;17956:71;:::i;:::-;18037:72;18105:2;18094:9;18090:18;18081:6;18037:72;:::i;:::-;18119;18187:2;18176:9;18172:18;18163:6;18119:72;:::i;:::-;17756:442;;;;;;:::o;18204:148::-;18306:11;18343:3;18328:18;;18204:148;;;;:::o;18358:214::-;18498:66;18494:1;18486:6;18482:14;18475:90;18358:214;:::o;18578:400::-;18738:3;18759:84;18841:1;18836:3;18759:84;:::i;:::-;18752:91;;18852:93;18941:3;18852:93;:::i;:::-;18970:1;18965:3;18961:11;18954:18;;18578:400;;;:::o;18984:79::-;19023:7;19052:5;19041:16;;18984:79;;;:::o;19069:157::-;19174:45;19194:24;19212:5;19194:24;:::i;:::-;19174:45;:::i;:::-;19169:3;19162:58;19069:157;;:::o;19232:663::-;19473:3;19495:148;19639:3;19495:148;:::i;:::-;19488:155;;19653:75;19724:3;19715:6;19653:75;:::i;:::-;19753:2;19748:3;19744:12;19737:19;;19766:75;19837:3;19828:6;19766:75;:::i;:::-;19866:2;19861:3;19857:12;19850:19;;19886:3;19879:10;;19232:663;;;;;:::o;19901:545::-;20074:4;20112:3;20101:9;20097:19;20089:27;;20126:71;20194:1;20183:9;20179:17;20170:6;20126:71;:::i;:::-;20207:68;20271:2;20260:9;20256:18;20247:6;20207:68;:::i;:::-;20285:72;20353:2;20342:9;20338:18;20329:6;20285:72;:::i;:::-;20367;20435:2;20424:9;20420:18;20411:6;20367:72;:::i;:::-;19901:545;;;;;;;:::o;20452:167::-;20592:19;20588:1;20580:6;20576:14;20569:43;20452:167;:::o;20625:366::-;20767:3;20788:67;20852:2;20847:3;20788:67;:::i;:::-;20781:74;;20864:93;20953:3;20864:93;:::i;:::-;20982:2;20977:3;20973:12;20966:19;;20625:366;;;:::o;20997:419::-;21163:4;21201:2;21190:9;21186:18;21178:26;;21250:9;21244:4;21240:20;21236:1;21225:9;21221:17;21214:47;21278:131;21404:4;21278:131;:::i;:::-;21270:139;;20997:419;;;:::o;21422:224::-;21562:34;21558:1;21550:6;21546:14;21539:58;21631:7;21626:2;21618:6;21614:15;21607:32;21422:224;:::o;21652:366::-;21794:3;21815:67;21879:2;21874:3;21815:67;:::i;:::-;21808:74;;21891:93;21980:3;21891:93;:::i;:::-;22009:2;22004:3;22000:12;21993:19;;21652:366;;;:::o;22024:419::-;22190:4;22228:2;22217:9;22213:18;22205:26;;22277:9;22271:4;22267:20;22263:1;22252:9;22248:17;22241:47;22305:131;22431:4;22305:131;:::i;:::-;22297:139;;22024:419;;;:::o;22449:170::-;22589:22;22585:1;22577:6;22573:14;22566:46;22449:170;:::o;22625:366::-;22767:3;22788:67;22852:2;22847:3;22788:67;:::i;:::-;22781:74;;22864:93;22953:3;22864:93;:::i;:::-;22982:2;22977:3;22973:12;22966:19;;22625:366;;;:::o;22997:419::-;23163:4;23201:2;23190:9;23186:18;23178:26;;23250:9;23244:4;23240:20;23236:1;23225:9;23221:17;23214:47;23278:131;23404:4;23278:131;:::i;:::-;23270:139;;22997:419;;;:::o;23422:240::-;23562:34;23558:1;23550:6;23546:14;23539:58;23631:23;23626:2;23618:6;23614:15;23607:48;23422:240;:::o;23668:366::-;23810:3;23831:67;23895:2;23890:3;23831:67;:::i;:::-;23824:74;;23907:93;23996:3;23907:93;:::i;:::-;24025:2;24020:3;24016:12;24009:19;;23668:366;;;:::o;24040:419::-;24206:4;24244:2;24233:9;24229:18;24221:26;;24293:9;24287:4;24283:20;24279:1;24268:9;24264:17;24257:47;24321:131;24447:4;24321:131;:::i;:::-;24313:139;;24040:419;;;:::o;24465:239::-;24605:34;24601:1;24593:6;24589:14;24582:58;24674:22;24669:2;24661:6;24657:15;24650:47;24465:239;:::o;24710:366::-;24852:3;24873:67;24937:2;24932:3;24873:67;:::i;:::-;24866:74;;24949:93;25038:3;24949:93;:::i;:::-;25067:2;25062:3;25058:12;25051:19;;24710:366;;;:::o;25082:419::-;25248:4;25286:2;25275:9;25271:18;25263:26;;25335:9;25329:4;25325:20;25321:1;25310:9;25306:17;25299:47;25363:131;25489:4;25363:131;:::i;:::-;25355:139;;25082:419;;;:::o;25507:235::-;25647:34;25643:1;25635:6;25631:14;25624:58;25716:18;25711:2;25703:6;25699:15;25692:43;25507:235;:::o;25748:366::-;25890:3;25911:67;25975:2;25970:3;25911:67;:::i;:::-;25904:74;;25987:93;26076:3;25987:93;:::i;:::-;26105:2;26100:3;26096:12;26089:19;;25748:366;;;:::o;26120:419::-;26286:4;26324:2;26313:9;26309:18;26301:26;;26373:9;26367:4;26363:20;26359:1;26348:9;26344:17;26337:47;26401:131;26527:4;26401:131;:::i;:::-;26393:139;;26120:419;;;:::o;26545:225::-;26685:34;26681:1;26673:6;26669:14;26662:58;26754:8;26749:2;26741:6;26737:15;26730:33;26545:225;:::o;26776:366::-;26918:3;26939:67;27003:2;26998:3;26939:67;:::i;:::-;26932:74;;27015:93;27104:3;27015:93;:::i;:::-;27133:2;27128:3;27124:12;27117:19;;26776:366;;;:::o;27148:419::-;27314:4;27352:2;27341:9;27337:18;27329:26;;27401:9;27395:4;27391:20;27387:1;27376:9;27372:17;27365:47;27429:131;27555:4;27429:131;:::i;:::-;27421:139;;27148:419;;;:::o;27573:223::-;27713:34;27709:1;27701:6;27697:14;27690:58;27782:6;27777:2;27769:6;27765:15;27758:31;27573:223;:::o;27802:366::-;27944:3;27965:67;28029:2;28024:3;27965:67;:::i;:::-;27958:74;;28041:93;28130:3;28041:93;:::i;:::-;28159:2;28154:3;28150:12;28143:19;;27802:366;;;:::o;28174:419::-;28340:4;28378:2;28367:9;28363:18;28355:26;;28427:9;28421:4;28417:20;28413:1;28402:9;28398:17;28391:47;28455:131;28581:4;28455:131;:::i;:::-;28447:139;;28174:419;;;:::o;28599:221::-;28739:34;28735:1;28727:6;28723:14;28716:58;28808:4;28803:2;28795:6;28791:15;28784:29;28599:221;:::o;28826:366::-;28968:3;28989:67;29053:2;29048:3;28989:67;:::i;:::-;28982:74;;29065:93;29154:3;29065:93;:::i;:::-;29183:2;29178:3;29174:12;29167:19;;28826:366;;;:::o;29198:419::-;29364:4;29402:2;29391:9;29387:18;29379:26;;29451:9;29445:4;29441:20;29437:1;29426:9;29422:17;29415:47;29479:131;29605:4;29479:131;:::i;:::-;29471:139;;29198:419;;;:::o;29623:224::-;29763:34;29759:1;29751:6;29747:14;29740:58;29832:7;29827:2;29819:6;29815:15;29808:32;29623:224;:::o;29853:366::-;29995:3;30016:67;30080:2;30075:3;30016:67;:::i;:::-;30009:74;;30092:93;30181:3;30092:93;:::i;:::-;30210:2;30205:3;30201:12;30194:19;;29853:366;;;:::o;30225:419::-;30391:4;30429:2;30418:9;30414:18;30406:26;;30478:9;30472:4;30468:20;30464:1;30453:9;30449:17;30442:47;30506:131;30632:4;30506:131;:::i;:::-;30498:139;;30225:419;;;:::o;30650:222::-;30790:34;30786:1;30778:6;30774:14;30767:58;30859:5;30854:2;30846:6;30842:15;30835:30;30650:222;:::o;30878:366::-;31020:3;31041:67;31105:2;31100:3;31041:67;:::i;:::-;31034:74;;31117:93;31206:3;31117:93;:::i;:::-;31235:2;31230:3;31226:12;31219:19;;30878:366;;;:::o;31250:419::-;31416:4;31454:2;31443:9;31439:18;31431:26;;31503:9;31497:4;31493:20;31489:1;31478:9;31474:17;31467:47;31531:131;31657:4;31531:131;:::i;:::-;31523:139;;31250:419;;;:::o;31675:167::-;31815:19;31811:1;31803:6;31799:14;31792:43;31675:167;:::o;31848:366::-;31990:3;32011:67;32075:2;32070:3;32011:67;:::i;:::-;32004:74;;32087:93;32176:3;32087:93;:::i;:::-;32205:2;32200:3;32196:12;32189:19;;31848:366;;;:::o;32220:419::-;32386:4;32424:2;32413:9;32409:18;32401:26;;32473:9;32467:4;32463:20;32459:1;32448:9;32444:17;32437:47;32501:131;32627:4;32501:131;:::i;:::-;32493:139;;32220:419;;;:::o;32645:165::-;32785:17;32781:1;32773:6;32769:14;32762:41;32645:165;:::o;32816:366::-;32958:3;32979:67;33043:2;33038:3;32979:67;:::i;:::-;32972:74;;33055:93;33144:3;33055:93;:::i;:::-;33173:2;33168:3;33164:12;33157:19;;32816:366;;;:::o;33188:419::-;33354:4;33392:2;33381:9;33377:18;33369:26;;33441:9;33435:4;33431:20;33427:1;33416:9;33412:17;33405:47;33469:131;33595:4;33469:131;:::i;:::-;33461:139;;33188:419;;;:::o;33613:172::-;33753:24;33749:1;33741:6;33737:14;33730:48;33613:172;:::o;33791:366::-;33933:3;33954:67;34018:2;34013:3;33954:67;:::i;:::-;33947:74;;34030:93;34119:3;34030:93;:::i;:::-;34148:2;34143:3;34139:12;34132:19;;33791:366;;;:::o;34163:419::-;34329:4;34367:2;34356:9;34352:18;34344:26;;34416:9;34410:4;34406:20;34402:1;34391:9;34387:17;34380:47;34444:131;34570:4;34444:131;:::i;:::-;34436:139;;34163:419;;;:::o;34588:241::-;34728:34;34724:1;34716:6;34712:14;34705:58;34797:24;34792:2;34784:6;34780:15;34773:49;34588:241;:::o;34835:366::-;34977:3;34998:67;35062:2;35057:3;34998:67;:::i;:::-;34991:74;;35074:93;35163:3;35074:93;:::i;:::-;35192:2;35187:3;35183:12;35176:19;;34835:366;;;:::o;35207:419::-;35373:4;35411:2;35400:9;35396:18;35388:26;;35460:9;35454:4;35450:20;35446:1;35435:9;35431:17;35424:47;35488:131;35614:4;35488:131;:::i;:::-;35480:139;;35207:419;;;:::o;35632:169::-;35772:21;35768:1;35760:6;35756:14;35749:45;35632:169;:::o;35807:366::-;35949:3;35970:67;36034:2;36029:3;35970:67;:::i;:::-;35963:74;;36046:93;36135:3;36046:93;:::i;:::-;36164:2;36159:3;36155:12;36148:19;;35807:366;;;:::o;36179:419::-;36345:4;36383:2;36372:9;36368:18;36360:26;;36432:9;36426:4;36422:20;36418:1;36407:9;36403:17;36396:47;36460:131;36586:4;36460:131;:::i;:::-;36452:139;;36179:419;;;:::o;36604:242::-;36744:34;36740:1;36732:6;36728:14;36721:58;36813:25;36808:2;36800:6;36796:15;36789:50;36604:242;:::o;36852:366::-;36994:3;37015:67;37079:2;37074:3;37015:67;:::i;:::-;37008:74;;37091:93;37180:3;37091:93;:::i;:::-;37209:2;37204:3;37200:12;37193:19;;36852:366;;;:::o;37224:419::-;37390:4;37428:2;37417:9;37413:18;37405:26;;37477:9;37471:4;37467:20;37463:1;37452:9;37448:17;37441:47;37505:131;37631:4;37505:131;:::i;:::-;37497:139;;37224:419;;;:::o;37649:137::-;37703:5;37734:6;37728:13;37719:22;;37750:30;37774:5;37750:30;:::i;:::-;37649:137;;;;:::o;37792:345::-;37859:6;37908:2;37896:9;37887:7;37883:23;37879:32;37876:119;;;37914:79;;:::i;:::-;37876:119;38034:1;38059:61;38112:7;38103:6;38092:9;38088:22;38059:61;:::i;:::-;38049:71;;38005:125;37792:345;;;;:::o;38143:775::-;38376:4;38414:3;38403:9;38399:19;38391:27;;38428:71;38496:1;38485:9;38481:17;38472:6;38428:71;:::i;:::-;38509:72;38577:2;38566:9;38562:18;38553:6;38509:72;:::i;:::-;38591;38659:2;38648:9;38644:18;38635:6;38591:72;:::i;:::-;38673;38741:2;38730:9;38726:18;38717:6;38673:72;:::i;:::-;38755:73;38823:3;38812:9;38808:19;38799:6;38755:73;:::i;:::-;38838;38906:3;38895:9;38891:19;38882:6;38838:73;:::i;:::-;38143:775;;;;;;;;;:::o;38924:170::-;39064:22;39060:1;39052:6;39048:14;39041:46;38924:170;:::o;39100:366::-;39242:3;39263:67;39327:2;39322:3;39263:67;:::i;:::-;39256:74;;39339:93;39428:3;39339:93;:::i;:::-;39457:2;39452:3;39448:12;39441:19;;39100:366;;;:::o;39472:419::-;39638:4;39676:2;39665:9;39661:18;39653:26;;39725:9;39719:4;39715:20;39711:1;39700:9;39696:17;39689:47;39753:131;39879:4;39753:131;:::i;:::-;39745:139;;39472:419;;;:::o;39897:191::-;39937:4;39957:20;39975:1;39957:20;:::i;:::-;39952:25;;39991:20;40009:1;39991:20;:::i;:::-;39986:25;;40030:1;40027;40024:8;40021:34;;;40035:18;;:::i;:::-;40021:34;40080:1;40077;40073:9;40065:17;;39897:191;;;;:::o;40094:225::-;40234:34;40230:1;40222:6;40218:14;40211:58;40303:8;40298:2;40290:6;40286:15;40279:33;40094:225;:::o;40325:366::-;40467:3;40488:67;40552:2;40547:3;40488:67;:::i;:::-;40481:74;;40564:93;40653:3;40564:93;:::i;:::-;40682:2;40677:3;40673:12;40666:19;;40325:366;;;:::o;40697:419::-;40863:4;40901:2;40890:9;40886:18;40878:26;;40950:9;40944:4;40940:20;40936:1;40925:9;40921:17;40914:47;40978:131;41104:4;40978:131;:::i;:::-;40970:139;;40697:419;;;:::o;41122:147::-;41223:11;41260:3;41245:18;;41122:147;;;;:::o;41275:114::-;;:::o;41395:398::-;41554:3;41575:83;41656:1;41651:3;41575:83;:::i;:::-;41568:90;;41667:93;41756:3;41667:93;:::i;:::-;41785:1;41780:3;41776:11;41769:18;;41395:398;;;:::o;41799:379::-;41983:3;42005:147;42148:3;42005:147;:::i;:::-;41998:154;;42169:3;42162:10;;41799:379;;;:::o;42184:180::-;42232:77;42229:1;42222:88;42329:4;42326:1;42319:15;42353:4;42350:1;42343:15;42370:180;42418:77;42415:1;42408:88;42515:4;42512:1;42505:15;42539:4;42536:1;42529:15;42556:143;42613:5;42644:6;42638:13;42629:22;;42660:33;42687:5;42660:33;:::i;:::-;42556:143;;;;:::o;42705:351::-;42775:6;42824:2;42812:9;42803:7;42799:23;42795:32;42792:119;;;42830:79;;:::i;:::-;42792:119;42950:1;42975:64;43031:7;43022:6;43011:9;43007:22;42975:64;:::i;:::-;42965:74;;42921:128;42705:351;;;;:::o;43062:85::-;43107:7;43136:5;43125:16;;43062:85;;;:::o;43153:158::-;43211:9;43244:61;43262:42;43271:32;43297:5;43271:32;:::i;:::-;43262:42;:::i;:::-;43244:61;:::i;:::-;43231:74;;43153:158;;;:::o;43317:147::-;43412:45;43451:5;43412:45;:::i;:::-;43407:3;43400:58;43317:147;;:::o;43470:114::-;43537:6;43571:5;43565:12;43555:22;;43470:114;;;:::o;43590:184::-;43689:11;43723:6;43718:3;43711:19;43763:4;43758:3;43754:14;43739:29;;43590:184;;;;:::o;43780:132::-;43847:4;43870:3;43862:11;;43900:4;43895:3;43891:14;43883:22;;43780:132;;;:::o;43918:108::-;43995:24;44013:5;43995:24;:::i;:::-;43990:3;43983:37;43918:108;;:::o;44032:179::-;44101:10;44122:46;44164:3;44156:6;44122:46;:::i;:::-;44200:4;44195:3;44191:14;44177:28;;44032:179;;;;:::o;44217:113::-;44287:4;44319;44314:3;44310:14;44302:22;;44217:113;;;:::o;44366:732::-;44485:3;44514:54;44562:5;44514:54;:::i;:::-;44584:86;44663:6;44658:3;44584:86;:::i;:::-;44577:93;;44694:56;44744:5;44694:56;:::i;:::-;44773:7;44804:1;44789:284;44814:6;44811:1;44808:13;44789:284;;;44890:6;44884:13;44917:63;44976:3;44961:13;44917:63;:::i;:::-;44910:70;;45003:60;45056:6;45003:60;:::i;:::-;44993:70;;44849:224;44836:1;44833;44829:9;44824:14;;44789:284;;;44793:14;45089:3;45082:10;;44490:608;;;44366:732;;;;:::o;45104:831::-;45367:4;45405:3;45394:9;45390:19;45382:27;;45419:71;45487:1;45476:9;45472:17;45463:6;45419:71;:::i;:::-;45500:80;45576:2;45565:9;45561:18;45552:6;45500:80;:::i;:::-;45627:9;45621:4;45617:20;45612:2;45601:9;45597:18;45590:48;45655:108;45758:4;45749:6;45655:108;:::i;:::-;45647:116;;45773:72;45841:2;45830:9;45826:18;45817:6;45773:72;:::i;:::-;45855:73;45923:3;45912:9;45908:19;45899:6;45855:73;:::i;:::-;45104:831;;;;;;;;:::o

Swarm Source

ipfs://064432be357d0f584405347f7c7ed7a13f5c47c914cb77812cda32c41b3259c5

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.