S Price: $0.579252 (-2.97%)

Token

FARMER (FARM)

Overview

Max Total Supply

1,000,000 FARM

Holders

5

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,532.624486575374700235 FARM

Value
$0.00
0x607d0ecc3c3645b32ec3e9f0a715e6ee58258bbd
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
FARMER

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2025-03-02
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

// OpenZeppelin Contracts v5.0.1

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from, address to, 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);
}

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 */
abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "R1");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism
 */
abstract contract Ownable {
    address private _owner;

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

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert("O1");
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "O2");
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "O1");
        _transferOwnership(newOwner);
    }

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

/**
 * @dev Implementation of the {IERC20} interface.
 */
abstract contract ERC20 is IERC20 {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        address owner = msg.sender;
        _transfer(owner, to, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        address owner = msg.sender;
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0) && to != address(0), "E1");
        _beforeTokenTransfer(from, to, amount);
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "E2");
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "E3");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0) && spender != address(0), "E4");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "E5");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

interface IMetropolisRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    // Mevcut fonksiyonlar
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

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

    // Yeni eklenen fonksiyonlar
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

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

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

interface IMetropolisFactory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

// Pair interface'ini de ekleyelim
interface IMetropolisPair {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}

// FARMER Token Contract
contract FARMER is ERC20, ReentrancyGuard, Ownable {
    // Constants
    uint256 private constant TOTAL_SUPPLY = 1_000_000 * 10**18;
    uint256 private constant TAX_RATE = 5; // 5%
    uint256 private constant LIQUIDITY_TAX = 25; // 2.5%
    uint256 private constant AIRDROP_TAX = 25; // 2.5%
    uint256 private constant MIN_HOLDER_AMOUNT = 10 * 10**18; // 10 tokens minimum for holder status
    uint256 private constant MIN_TOKENS_FOR_PROCESS = 100 * 10**18; // 100 tokens minimum for processing
    uint256 private constant SWAP_PERCENTAGE = 75; // 75% will be swapped
    uint256 private constant LIQUIDITY_PERCENTAGE = 25; // 25% will be used for liquidity
    uint256 private constant MAX_SLIPPAGE = 30; // 30% slippage tolerance

    // Metropolis DEX addresses
    IMetropolisRouter public metropolisRouter;
    IMetropolisFactory public metropolisFactory;
    address public sonicToken;
    address public liquidityPair;

    // Holder tracking
    mapping(address => bool) public isHolder;
    address[] public holders;

    // Events
    event LiquidityAdded(uint256 tokenAmount, uint256 sonicAmount);
    event AirdropDistributed(uint256 amount, uint256 holdersCount);
    event SwapFailed(string reason);
    event LiquidityAddFailed(string reason);
    event AirdropFailed(string reason);
    event ProcessStarted(uint256 tokensForLiquidity, uint256 tokensForAirdrop);
    event SwapSuccessful(uint256 tokensSwapped, uint256 wethReceived);
    event SwapAndLiquidityProcessed(
        uint256 tokensSwapped,
        uint256 wethReceived,
        uint256 tokensIntoLiquidity,
        uint256 wethIntoLiquidity
    );
    event PairReservesUpdated(uint256 farmReserve, uint256 wethReserve);
    event ApprovalRefreshed(address token, address spender, uint256 amount);
    event ContractInitialized(address router, address factory, address sonic, address pair);

    uint256 private _pendingLiquidityTokens;
    uint256 private _pendingAirdropTokens;
    bool private _initialized;

    constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) {
        address _metropolisRouter = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3;
        address _metropolisFactory = 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0;
        address _sonicToken = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38;

        require(_metropolisRouter != address(0) && _metropolisFactory != address(0) && _sonicToken != address(0), "F1");

        metropolisRouter = IMetropolisRouter(_metropolisRouter);
        metropolisFactory = IMetropolisFactory(_metropolisFactory);
        sonicToken = _sonicToken;

        _mint(address(this), TOTAL_SUPPLY);
    }

    function initialize() external onlyOwner {
        require(!_initialized, "F2");
        _initialized = true;

        // Try to get existing pair first
        liquidityPair = metropolisFactory.getPair(address(this), sonicToken);
        
        // If pair doesn't exist, create it
        if (liquidityPair == address(0)) {
            liquidityPair = metropolisFactory.createPair(address(this), sonicToken);
        }
        
        require(liquidityPair != address(0), "F3");

        _approve(address(this), address(metropolisRouter), type(uint256).max);
        
        require(IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max), "F4");
        IERC20(sonicToken).approve(liquidityPair, type(uint256).max);
        IERC20(address(this)).approve(liquidityPair, type(uint256).max);

        emit ContractInitialized(address(metropolisRouter), address(metropolisFactory), sonicToken, liquidityPair);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._afterTokenTransfer(from, to, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        require(from != address(0) && to != address(0), "Transfer to/from zero address");
        
        // Skip tax for owner and contract transfers
        if (from == owner() || to == owner() || from == address(this) || to == address(this) || !_initialized) {
            super._transfer(from, to, amount);
            _updateHolder(from);
            _updateHolder(to);
            return;
        }

        bool isSellOrBuy = to == liquidityPair || from == liquidityPair;
        if (isSellOrBuy) {
            // Calculate tax amount (5%)
            uint256 totalTax = (amount * TAX_RATE) / 100;
            uint256 transferAmount = amount - totalTax;
            
            // First transfer tax to contract
            super._transfer(from, address(this), totalTax);
            // Then transfer remaining amount to recipient
            super._transfer(from, to, transferAmount);

            // Split tax between liquidity and airdrop (2.5% each)
            _pendingLiquidityTokens += (totalTax * LIQUIDITY_TAX) / 100;  // 2.5% for liquidity
            _pendingAirdropTokens += (totalTax * AIRDROP_TAX) / 100;    // 2.5% for airdrop

            // Try to process if we have enough tokens
            if ((_pendingLiquidityTokens >= MIN_TOKENS_FOR_PROCESS || 
                _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) && 
                holders.length > 0) {
                try this.processLiquidityAndAirdrop() {
                    // Process successful
                } catch {
                    // If processing fails, continue with transfer
                    emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens);
                }
            }
        } else {
            // Normal transfer without tax
            super._transfer(from, to, amount);
        }
        
        // Update holder status for both addresses
        _updateHolder(from);
        _updateHolder(to);
    }

    function _updateHolder(address account) private {
        if (account != liquidityPair && account != address(this)) {
            uint256 balance = balanceOf(account);
            bool isCurrentlyHolder = isHolder[account];
            
            if (balance >= MIN_HOLDER_AMOUNT && !isCurrentlyHolder) {
                isHolder[account] = true;
                holders.push(account);
            } else if (balance < MIN_HOLDER_AMOUNT && isCurrentlyHolder) {
                isHolder[account] = false;
                _removeHolder(account);
            }
        }
    }

    function _removeHolder(address account) private {
        for (uint256 i = 0; i < holders.length; i++) {
            if (holders[i] == account) {
                holders[i] = holders[holders.length - 1];
                holders.pop();
                break;
            }
        }
    }

    function processLiquidityAndAirdrop() external nonReentrant {
        require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "No pending tokens");
        require(holders.length > 0, "No holders");
        
        uint256 totalTokens = _pendingLiquidityTokens + _pendingAirdropTokens;
        if (totalTokens < MIN_TOKENS_FOR_PROCESS || holders.length == 0) return;
        
        emit ProcessStarted(totalTokens, holders.length);

        // Reset pending amounts
        _pendingLiquidityTokens = 0;
        _pendingAirdropTokens = 0;

        // Keep 25% of tokens for liquidity
        uint256 tokensForLiquidity = (totalTokens * LIQUIDITY_PERCENTAGE) / 100;
        uint256 tokensToSwap = totalTokens - tokensForLiquidity;

        // First swap 75% of tokens to SONIC
        uint256 sonicReceived = _processSwap(tokensToSwap);
        if (sonicReceived == 0) {
            // If swap fails, restore pending amounts
            _pendingLiquidityTokens = totalTokens / 2;
            _pendingAirdropTokens = totalTokens / 2;
            return;
        }

        // Add liquidity with 25% of FARMER tokens and 25% of received SONIC
        uint256 sonicForLiquidity = (sonicReceived * LIQUIDITY_PERCENTAGE) / 100;
        if (sonicForLiquidity > 0) {
            _processLiquidity(tokensForLiquidity, sonicForLiquidity);
        }

        // Distribute remaining SONIC as airdrop (75% of received SONIC)
        uint256 sonicForAirdrop = sonicReceived - sonicForLiquidity;
        if (sonicForAirdrop > 0) {
            _processAirdrop(sonicForAirdrop);
        }
    }

    function _processSwap(uint256 totalTokens) private returns (uint256) {
        if (totalTokens == 0) return 0;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = sonicToken;

        // Check allowance
        uint256 currentAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter));
        if (currentAllowance < totalTokens) {
            _approve(address(this), address(metropolisRouter), type(uint256).max);
        }

        try metropolisRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            totalTokens,
            0, // Minimum output amount - accepting high slippage
            path,
            address(this),
            block.timestamp + 300
        ) {
            uint256 sonicBalance = IERC20(sonicToken).balanceOf(address(this));
            emit SwapSuccessful(totalTokens, sonicBalance);
            return sonicBalance;
        } catch Error(string memory reason) {
            emit SwapFailed(reason);
            return 0;
        } catch {
            emit SwapFailed("Unknown error in swap");
            return 0;
        }
    }

    function _processLiquidity(uint256 tokensForLiquidity, uint256 sonicForLiquidity) private {
        if (tokensForLiquidity == 0 || sonicForLiquidity == 0) return;

        // Check router approvals
        _approve(address(this), address(metropolisRouter), tokensForLiquidity);
        IERC20(sonicToken).approve(address(metropolisRouter), sonicForLiquidity);

        try metropolisRouter.addLiquidity(
            address(this),
            sonicToken,
            tokensForLiquidity,
            sonicForLiquidity,
            tokensForLiquidity * (100 - MAX_SLIPPAGE) / 100, // 30% slippage tolerance
            sonicForLiquidity * (100 - MAX_SLIPPAGE) / 100,  // 30% slippage tolerance
            address(this),
            block.timestamp + 300
        ) {
            emit LiquidityAdded(tokensForLiquidity, sonicForLiquidity);
        } catch Error(string memory reason) {
            emit LiquidityAddFailed(reason);
        } catch {
            emit LiquidityAddFailed("Unknown error in addLiquidity");
        }
    }

    function _processAirdrop(uint256 sonicAmount) private {
        if (sonicAmount == 0 || holders.length == 0) return;
        
        uint256 amountPerHolder = sonicAmount / holders.length;
        if (amountPerHolder == 0) return;

        for (uint256 i = 0; i < holders.length && i < 100; i++) {
            if (holders[i] != address(0)) {
                try IERC20(sonicToken).transfer(holders[i], amountPerHolder) {
                    // Transfer successful
                } catch {
                    continue;
                }
            }
        }
        
        emit AirdropDistributed(sonicAmount, holders.length);
    }

    // View functions
    function getHolderCount() external view returns (uint256) {
        return holders.length;
    }
    
    function getHolders() external view returns (address[] memory) {
        return holders;
    }

    // Initial liquidity function (must be called by owner with ETH)
    function addInitialLiquidity(uint256 tokenAmount) external payable onlyOwner {
        require(msg.value > 0, "Must provide ETH for initial liquidity");
        require(tokenAmount > 0, "Must provide token amount for initial liquidity");
        
        require(
            IERC20(address(this)).balanceOf(address(this)) >= tokenAmount,
            "Insufficient token balance in contract"
        );

        _approve(address(this), address(metropolisRouter), tokenAmount);

        try metropolisRouter.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0,
            0,
            msg.sender,
            block.timestamp
        ) {
            emit LiquidityAdded(tokenAmount, msg.value);
        } catch {
            _approve(address(this), address(metropolisRouter), 0);
            revert("Failed to add liquidity");
        }

        uint256 remainingETH = address(this).balance;
        if (remainingETH > 0) {
            payable(msg.sender).transfer(remainingETH);
        }
    }

    function setRouter(address _router) external onlyOwner {
        require(_router != address(0), "Invalid router address");
        metropolisRouter = IMetropolisRouter(_router);
    }

    function rescueTokens(address _token, uint256 _amount) external onlyOwner {
        require(_token != address(this), "Cannot rescue FARMER tokens");
        IERC20(_token).transfer(owner(), _amount);
    }

    // Transfer tokens to owner
    function withdrawTokensToOwner(uint256 amount) external onlyOwner {
        require(
            IERC20(address(this)).balanceOf(address(this)) >= amount,
            "Insufficient balance"
        );
        _transfer(address(this), msg.sender, amount);
    }

    // View functions for pending amounts
    function getPendingLiquidityTokens() external view returns (uint256) {
        return _pendingLiquidityTokens;
    }

    function getPendingAirdropTokens() external view returns (uint256) {
        return _pendingAirdropTokens;
    }

    // Manual trigger for processing (only owner)
    function triggerProcessing() external onlyOwner {
        require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "No pending tokens");
        require(holders.length > 0, "No holders");
        try this.processLiquidityAndAirdrop() {
            // Process successful
        } catch {
            emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens);
        }
    }

    function checkAndRefreshAllowances() external onlyOwner {
        uint256 farmAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter));
        if (farmAllowance < TOTAL_SUPPLY) {
            _approve(address(this), address(metropolisRouter), TOTAL_SUPPLY);
        }

        uint256 wethBalance = IERC20(sonicToken).balanceOf(address(this));
        if (wethBalance > 0) {
            uint256 wethAllowance = IERC20(sonicToken).allowance(address(this), address(metropolisRouter));
            if (wethAllowance < wethBalance) {
                IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);
            }
        }
    }

    // Debug function
    function getSwapInfo() external view returns (
        uint256 contractBalance,
        uint256 routerAllowance,
        bool pairExists,
        address pair,
        uint256 pendingLiq,
        uint256 pendingAirdrop
    ) {
        contractBalance = IERC20(address(this)).balanceOf(address(this));
        routerAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter));
        pair = IMetropolisFactory(metropolisRouter.factory()).getPair(address(this), sonicToken);
        pairExists = pair != address(0);
        pendingLiq = _pendingLiquidityTokens;
        pendingAirdrop = _pendingAirdropTokens;
    }

    // Pair rezervlerini kontrol et
    function getPairReserves() public view returns (uint256 farmReserve, uint256 wethReserve) {
        (uint112 reserve0, uint112 reserve1,) = IMetropolisPair(liquidityPair).getReserves();
        address token0 = IMetropolisPair(liquidityPair).token0();
        if (token0 == address(this)) {
            return (uint256(reserve0), uint256(reserve1));
        }
        return (uint256(reserve1), uint256(reserve0));
    }

    // Swap için minimum çıktı miktarını hesapla
    function getMinimumOutput(uint256 amountIn) public view returns (uint256) {
        (uint256 farmReserve, uint256 wethReserve) = getPairReserves();
        if (farmReserve == 0 || wethReserve == 0) return 0;
        
        uint256 amountInWithFee = amountIn * 997; // %0.3 işlem ücreti
        uint256 numerator = amountInWithFee * wethReserve;
        uint256 denominator = (farmReserve * 1000) + amountInWithFee;
        return numerator / denominator;
    }

    // Tüm onayları yenile
    function refreshAllApprovals() external onlyOwner {
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);
        
        try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) {} catch {}
        try IERC20(address(this)).approve(liquidityPair, type(uint256).max) {} catch {}
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"AirdropFailed","type":"event"},{"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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ApprovalRefreshed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"address","name":"sonic","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"}],"name":"ContractInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"LiquidityAddFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"farmReserve","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReserve","type":"uint256"}],"name":"PairReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquidityProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReceived","type":"uint256"}],"name":"SwapSuccessful","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":"uint256","name":"tokenAmount","type":"uint256"}],"name":"addInitialLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkAndRefreshAllowances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getMinimumOutput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPairReserves","outputs":[{"internalType":"uint256","name":"farmReserve","type":"uint256"},{"internalType":"uint256","name":"wethReserve","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingAirdropTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingLiquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwapInfo","outputs":[{"internalType":"uint256","name":"contractBalance","type":"uint256"},{"internalType":"uint256","name":"routerAllowance","type":"uint256"},{"internalType":"bool","name":"pairExists","type":"bool"},{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"pendingLiq","type":"uint256"},{"internalType":"uint256","name":"pendingAirdrop","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisFactory","outputs":[{"internalType":"contract IMetropolisFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisRouter","outputs":[{"internalType":"contract IMetropolisRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshAllApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokensToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d00000000000000000000000000000000000000000000000000000000815250816003908162000090919062000832565b508060049081620000a2919062000832565b5050506001600581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000116906200097a565b60405180910390fd5b62000130816200034b60201b60201c565b5060007395a7e403d7cf20f675ff9273d66e94d35ba49fa390506000731570300e9cfec66c9fb0c8bc14366c86eb170ad09050600073039e2fb66102314ce7b64ce5ce3e5183bc94ad389050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620001e75750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015620002215750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b62000263576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025a90620009ec565b60405180910390fd5b82600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003423069d3c21bcecceda10000006200041160201b60201c565b50505062000b18565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000483576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047a9062000a5e565b60405180910390fd5b62000497600083836200057e60201b60201c565b8060026000828254620004ab919062000aaf565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200055e919062000afb565b60405180910390a36200057a600083836200059660201b60201c565b5050565b62000591838383620005ae60201b60201c565b505050565b620005a9838383620005b360201b60201c565b505050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200063a57607f821691505b60208210810362000650576200064f620005f2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006ba7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200067b565b620006c686836200067b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007136200070d6200070784620006de565b620006e8565b620006de565b9050919050565b6000819050919050565b6200072f83620006f2565b620007476200073e826200071a565b84845462000688565b825550505050565b600090565b6200075e6200074f565b6200076b81848462000724565b505050565b5b8181101562000793576200078760008262000754565b60018101905062000771565b5050565b601f821115620007e257620007ac8162000656565b620007b7846200066b565b81016020851015620007c7578190505b620007df620007d6856200066b565b83018262000770565b50505b505050565b600082821c905092915050565b60006200080760001984600802620007e7565b1980831691505092915050565b6000620008228383620007f4565b9150826002028217905092915050565b6200083d82620005b8565b67ffffffffffffffff811115620008595762000858620005c3565b5b62000865825462000621565b6200087282828562000797565b600060209050601f831160018114620008aa576000841562000895578287015190505b620008a1858262000814565b86555062000911565b601f198416620008ba8662000656565b60005b82811015620008e457848901518255600182019150602085019450602081019050620008bd565b8683101562000904578489015162000900601f891682620007f4565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b60006200096260028362000919565b91506200096f826200092a565b602082019050919050565b60006020820190508181036000830152620009958162000953565b9050919050565b7f4631000000000000000000000000000000000000000000000000000000000000600082015250565b6000620009d460028362000919565b9150620009e1826200099c565b602082019050919050565b6000602082019050818103600083015262000a0781620009c5565b9050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b600062000a4660028362000919565b915062000a538262000a0e565b602082019050919050565b6000602082019050818103600083015262000a798162000a37565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000abc82620006de565b915062000ac983620006de565b925082820190508082111562000ae45762000ae362000a80565b5b92915050565b62000af581620006de565b82525050565b600060208201905062000b12600083018462000aea565b92915050565b6155b08062000b286000396000f3fe6080604052600436106101f25760003560e01c806370a082311161010d5780639df93f6c116100a0578063d4d7b19a1161006f578063d4d7b19a146106bf578063dd62ed3e146106fc578063ed9cacfe14610739578063f2fde38b14610750578063fd7c9fab14610779576101f9565b80639df93f6c14610616578063a9059cbb14610642578063c026d93a1461067f578063c0d7865514610696576101f9565b8063808a5457116100dc578063808a54571461057e5780638129fc1c146105a95780638da5cb5b146105c057806395d89b41146105eb576101f9565b806370a08231146104d65780637136982b1461051357806379304bec1461053e5780637ac84fc114610567576101f9565b8063313ce567116101855780635737619811610154578063573761981461042c5780635d76b04c146104555780635fe8e7cc1461048057806362b6327a146104ab576101f9565b8063313ce567146103a3578063397883d2146103ce57806341a22cc2146103e5578063461a3a9514610401576101f9565b80631b26c80d116101c15780631b26c80d146102bc57806323b872dd146102ec578063298926cb146103295780632a11ced014610366576101f9565b806306fdde03146101fe57806308dee2b414610229578063095ea7b31461025457806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107a4565b6040516102209190613f7f565b60405180910390f35b34801561023557600080fd5b5061023e610836565b60405161024b9190613fba565b60405180910390f35b34801561026057600080fd5b5061027b6004803603810190610276919061406e565b610840565b60405161028891906140c9565b60405180910390f35b34801561029d57600080fd5b506102a661085c565b6040516102b39190613fba565b60405180910390f35b3480156102c857600080fd5b506102d1610866565b6040516102e3969594939291906140f3565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190614154565b610b00565b60405161032091906140c9565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b91906141a7565b610b28565b60405161035d9190613fba565b60405180910390f35b34801561037257600080fd5b5061038d600480360381019061038891906141a7565b610bb0565b60405161039a91906141d4565b60405180910390f35b3480156103af57600080fd5b506103b8610bef565b6040516103c5919061420b565b60405180910390f35b3480156103da57600080fd5b506103e3610bf8565b005b6103ff60048036038101906103fa91906141a7565b610d3c565b005b34801561040d57600080fd5b50610416611059565b60405161042391906141d4565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e919061406e565b61107f565b005b34801561046157600080fd5b5061046a61117f565b6040516104779190613fba565b60405180910390f35b34801561048c57600080fd5b50610495611189565b6040516104a291906142e4565b60405180910390f35b3480156104b757600080fd5b506104c0611217565b6040516104cd9190614365565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190614380565b61123d565b60405161050a9190613fba565b60405180910390f35b34801561051f57600080fd5b50610528611285565b6040516105359190613fba565b60405180910390f35b34801561054a57600080fd5b50610565600480360381019061056091906141a7565b611292565b005b34801561057357600080fd5b5061057c611364565b005b34801561058a57600080fd5b506105936115aa565b6040516105a091906141d4565b60405180910390f35b3480156105b557600080fd5b506105be6115d0565b005b3480156105cc57600080fd5b506105d5611d06565b6040516105e291906141d4565b60405180910390f35b3480156105f757600080fd5b50610600611d30565b60405161060d9190613f7f565b60405180910390f35b34801561062257600080fd5b5061062b611dc2565b6040516106399291906143ad565b60405180910390f35b34801561064e57600080fd5b506106696004803603810190610664919061406e565b611f82565b60405161067691906140c9565b60405180910390f35b34801561068b57600080fd5b50610694611f9e565b005b3480156106a257600080fd5b506106bd60048036038101906106b89190614380565b6122f1565b005b3480156106cb57600080fd5b506106e660048036038101906106e19190614380565b6123ac565b6040516106f391906140c9565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e91906143d6565b6123cc565b6040516107309190613fba565b60405180910390f35b34801561074557600080fd5b5061074e612453565b005b34801561075c57600080fd5b5061077760048036038101906107729190614380565b61272f565b005b34801561078557600080fd5b5061078e6127b2565b60405161079b9190614437565b60405180910390f35b6060600380546107b390614481565b80601f01602080910402602001604051908101604052809291908181526020018280546107df90614481565b801561082c5780601f106108015761010080835404028352916020019161082c565b820191906000526020600020905b81548152906001019060200180831161080f57829003601f168201915b5050505050905090565b6000600d54905090565b6000803390506108518185856127d8565b600191505092915050565b6000600254905090565b6000806000806000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108a891906141d4565b602060405180830381865afa1580156108c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e991906144c7565b95503073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016109489291906144f4565b602060405180830381865afa158015610965573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098991906144c7565b9450600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1c9190614532565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610a789291906144f4565b602060405180830381865afa158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab99190614532565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614159350600d549150600e549050909192939495565b600080339050610b1185828561296c565b610b1c8585856129f8565b60019150509392505050565b6000806000610b35611dc2565b915091506000821480610b485750600081145b15610b5857600092505050610bab565b60006103e585610b68919061458e565b905060008282610b78919061458e565b90506000826103e886610b8b919061458e565b610b9591906145d0565b90508082610ba39190614633565b955050505050505b919050565b600c8181548110610bc057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610c00612e1f565b6000600d541180610c1357506000600e54115b610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c49906146b0565b60405180910390fd5b6000600c8054905011610c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c919061471c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ce257600080fd5b505af1925050508015610cf3575060015b610d39577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600d54600e54604051610d2c9291906143ad565b60405180910390a1610d3a565b5b565b610d44612e1f565b60003411610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e906147ae565b60405180910390fd5b60008111610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc190614840565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e0491906141d4565b602060405180830381865afa158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4591906144c7565b1015610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d906148d2565b60405180910390fd5b610eb330600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836127d8565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610f1a9695949392919061492d565b60606040518083038185885af193505050508015610f5657506040513d601f19601f82011682018060405250810190610f53919061498e565b60015b610fc357610f8830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006127d8565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba90614a2d565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8134604051610ff79291906143ad565b60405180910390a160004790506000811115611055573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611053573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611087612e1f565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ec90614a99565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611119611d06565b836040518363ffffffff1660e01b8152600401611137929190614ab9565b6020604051808303816000875af1158015611156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117a9190614b0e565b505050565b6000600e54905090565b6060600c80548060200260200160405190810160405280929190818152602001828054801561120d57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116111c3575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c80549050905090565b61129a612e1f565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112d491906141d4565b602060405180830381865afa1580156112f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131591906144c7565b1015611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d90614b87565b60405180910390fd5b6113613033836129f8565b50565b6002600554036113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a090614bf3565b60405180910390fd5b60026005819055506000600d5411806113c457506000600e54115b611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa906146b0565b60405180910390fd5b6000600c805490501161144b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114429061471c565b60405180910390fd5b6000600e54600d5461145d91906145d0565b905068056bc75e2d6310000081108061147b57506000600c80549050145b1561148657506115a0565b7f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd81600c805490506040516114bc9291906143ad565b60405180910390a16000600d819055506000600e81905550600060646019836114e5919061458e565b6114ef9190614633565b9050600081836114ff9190614c13565b9050600061150c82612e96565b905060008103611545576002846115239190614633565b600d819055506002846115369190614633565b600e81905550505050506115a0565b60006064601983611556919061458e565b6115609190614633565b905060008111156115765761157584826132df565b5b600081836115849190614c13565b9050600081111561159957611598816135e5565b5b5050505050505b6001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115d8612e1f565b600f60009054906101000a900460ff1615611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90614c93565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016116c29291906144f4565b602060405180830381865afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190614532565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361189c57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016118189291906144f4565b6020604051808303816000875af1158015611837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185b9190614532565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192490614cff565b60405180910390fd5b61197a30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127d8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611a19929190614ab9565b6020604051808303816000875af1158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614b0e565b611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290614d6b565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611b3a929190614ab9565b6020604051808303816000875af1158015611b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7d9190614b0e565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611bfb929190614ab9565b6020604051808303816000875af1158015611c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3e9190614b0e565b507f1aee311dae12417944704a8411a039c41e8ae395e0c0075565cb1c93934babc4600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611cfc9493929190614d8b565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611d3f90614481565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6b90614481565b8015611db85780601f10611d8d57610100808354040283529160200191611db8565b820191906000526020600020905b815481529060010190602001808311611d9b57829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190614e52565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef19190614532565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f5457826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611f7e565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611f938185856129f8565b600191505092915050565b611fa6612e1f565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016120059291906144f4565b602060405180830381865afa158015612022573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204691906144c7565b905069d3c21bcecceda10000008110156120925761209130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda10000006127d8565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120ef91906141d4565b602060405180830381865afa15801561210c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213091906144c7565b905060008111156122ed576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016121bc9291906144f4565b602060405180830381865afa1580156121d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fd91906144c7565b9050818110156122eb57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016122a6929190614ab9565b6020604051808303816000875af11580156122c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e99190614b0e565b505b505b5050565b6122f9612e1f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90614ef1565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61245b612e1f565b6124a830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127d8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612547929190614ab9565b6020604051808303816000875af1158015612566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258a9190614b0e565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161262a929190614ab9565b6020604051808303816000875af192505050801561266657506040513d601f19601f820116820180604052508101906126639190614b0e565b60015b1561266d57505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016126ea929190614ab9565b6020604051808303816000875af192505050801561272657506040513d601f19601f820116820180604052508101906127239190614b0e565b60015b1561272d57505b565b612737612e1f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279d90614f5d565b60405180910390fd5b6127af816137e4565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128425750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287890614fc9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161295f9190613fba565b60405180910390a3505050565b600061297884846123cc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146129f257818110156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db90615035565b60405180910390fd5b6129f184848484036127d8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a625750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a98906150a1565b60405180910390fd5b612aa9611d06565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b145750612ae5611d06565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612b4a57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612b8057503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612b985750600f60009054906101000a900460ff16155b15612bbf57612ba88383836138aa565b612bb183613aeb565b612bba82613aeb565b612e1a565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612c6a5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90508015612dfa5760006064600584612c83919061458e565b612c8d9190614633565b905060008184612c9d9190614c13565b9050612caa8630846138aa565b612cb58686836138aa565b6064601983612cc4919061458e565b612cce9190614633565b600d6000828254612cdf91906145d0565b925050819055506064601983612cf5919061458e565b612cff9190614633565b600e6000828254612d1091906145d0565b9250508190555068056bc75e2d63100000600d54101580612d3c575068056bc75e2d63100000600e5410155b8015612d4d57506000600c80549050115b15612df3573073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d9a57600080fd5b505af1925050508015612dab575060015b612df1577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600d54600e54604051612de49291906143ad565b60405180910390a1612df2565b5b5b5050612e06565b612e058484846138aa565b5b612e0f84613aeb565b612e1883613aeb565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16612e3e611d06565b73ffffffffffffffffffffffffffffffffffffffff1614612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b9061510d565b60405180910390fd5b565b6000808203612ea857600090506132da565b6000600267ffffffffffffffff811115612ec557612ec461512d565b5b604051908082528060200260200182016040528015612ef35781602001602082028036833780820191505090505b5090503081600081518110612f0b57612f0a61515c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612f7c57612f7b61515c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016130159291906144f4565b602060405180830381865afa158015613032573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305691906144c7565b9050838110156130ae576130ad30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127d8565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795856000853061012c426130ff91906145d0565b6040518663ffffffff1660e01b815260040161311f95949392919061518b565b600060405180830381600087803b15801561313957600080fd5b505af192505050801561314a575060015b6131fa576131566151f2565b806308c379a0036131b8575061316a615245565b8061317557506131ba565b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723816040516131a49190613f7f565b60405180910390a1600093505050506132da565b505b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec07236040516131e790615321565b60405180910390a16000925050506132da565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161325791906141d4565b602060405180830381865afa158015613274573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329891906144c7565b90507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0185826040516132cb9291906143ad565b60405180910390a18093505050505b919050565b60008214806132ee5750600081145b6135e15761331f30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846127d8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161339e929190614ab9565b6020604051808303816000875af11580156133bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e19190614b0e565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856064601e60646134569190614c13565b89613461919061458e565b61346b9190614633565b6064601e606461347b9190614c13565b89613486919061458e565b6134909190614633565b3061012c4261349f91906145d0565b6040518963ffffffff1660e01b81526004016134c2989796959493929190615341565b6060604051808303816000875af19250505080156134fe57506040513d601f19601f820116820180604052508101906134fb919061498e565b60015b6135a35761350a6151f2565b806308c379a003613566575061351e615245565b806135295750613568565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad816040516135589190613f7f565b60405180910390a15061359e565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad6040516135959061540b565b60405180910390a15b6135e0565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b82826040516135d79291906143ad565b60405180910390a15b5b5050565b60008114806135f957506000600c80549050145b6137e1576000600c80549050826136109190614633565b90506000810361362057506137e1565b60005b600c80549050811080156136375750606481105b156137a057600073ffffffffffffffffffffffffffffffffffffffff16600c82815481106136685761366761515c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461378c57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c8381548110613700576136ff61515c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613749929190614ab9565b6020604051808303816000875af192505050801561378557506040513d601f19601f820116820180604052508101906137829190614b0e565b60015b1561378d57505b5b80806137989061542b565b915050613623565b507f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21782600c805490506040516137d79291906143ad565b60405180910390a1505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156139145750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394a906154bf565b60405180910390fd5b61395e838383613d35565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139db9061552b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ad29190613fba565b60405180910390a3613ae5848484613d45565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613b7557503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15613d32576000613b858261123d565b90506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e800008210158015613bee575080155b15613cb3576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613d2f565b678ac7230489e8000082108015613cc75750805b15613d2e576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613d2d83613d55565b5b5b50505b50565b613d40838383613ee5565b505050565b613d50838383613eea565b505050565b60005b600c80549050811015613ee1578173ffffffffffffffffffffffffffffffffffffffff16600c8281548110613d9057613d8f61515c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613ece57600c6001600c80549050613dea9190614c13565b81548110613dfb57613dfa61515c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c8281548110613e3a57613e3961515c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c805480613e9457613e9361554b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055613ee1565b8080613ed99061542b565b915050613d58565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f29578082015181840152602081019050613f0e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f5182613eef565b613f5b8185613efa565b9350613f6b818560208601613f0b565b613f7481613f35565b840191505092915050565b60006020820190508181036000830152613f998184613f46565b905092915050565b6000819050919050565b613fb481613fa1565b82525050565b6000602082019050613fcf6000830184613fab565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061400f82613fe4565b9050919050565b61401f81614004565b811461402a57600080fd5b50565b60008135905061403c81614016565b92915050565b61404b81613fa1565b811461405657600080fd5b50565b60008135905061406881614042565b92915050565b6000806040838503121561408557614084613fdf565b5b60006140938582860161402d565b92505060206140a485828601614059565b9150509250929050565b60008115159050919050565b6140c3816140ae565b82525050565b60006020820190506140de60008301846140ba565b92915050565b6140ed81614004565b82525050565b600060c0820190506141086000830189613fab565b6141156020830188613fab565b61412260408301876140ba565b61412f60608301866140e4565b61413c6080830185613fab565b61414960a0830184613fab565b979650505050505050565b60008060006060848603121561416d5761416c613fdf565b5b600061417b8682870161402d565b935050602061418c8682870161402d565b925050604061419d86828701614059565b9150509250925092565b6000602082840312156141bd576141bc613fdf565b5b60006141cb84828501614059565b91505092915050565b60006020820190506141e960008301846140e4565b92915050565b600060ff82169050919050565b614205816141ef565b82525050565b600060208201905061422060008301846141fc565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61425b81614004565b82525050565b600061426d8383614252565b60208301905092915050565b6000602082019050919050565b600061429182614226565b61429b8185614231565b93506142a683614242565b8060005b838110156142d75781516142be8882614261565b97506142c983614279565b9250506001810190506142aa565b5085935050505092915050565b600060208201905081810360008301526142fe8184614286565b905092915050565b6000819050919050565b600061432b61432661432184613fe4565b614306565b613fe4565b9050919050565b600061433d82614310565b9050919050565b600061434f82614332565b9050919050565b61435f81614344565b82525050565b600060208201905061437a6000830184614356565b92915050565b60006020828403121561439657614395613fdf565b5b60006143a48482850161402d565b91505092915050565b60006040820190506143c26000830185613fab565b6143cf6020830184613fab565b9392505050565b600080604083850312156143ed576143ec613fdf565b5b60006143fb8582860161402d565b925050602061440c8582860161402d565b9150509250929050565b600061442182614332565b9050919050565b61443181614416565b82525050565b600060208201905061444c6000830184614428565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061449957607f821691505b6020821081036144ac576144ab614452565b5b50919050565b6000815190506144c181614042565b92915050565b6000602082840312156144dd576144dc613fdf565b5b60006144eb848285016144b2565b91505092915050565b600060408201905061450960008301856140e4565b61451660208301846140e4565b9392505050565b60008151905061452c81614016565b92915050565b60006020828403121561454857614547613fdf565b5b60006145568482850161451d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061459982613fa1565b91506145a483613fa1565b92508282026145b281613fa1565b915082820484148315176145c9576145c861455f565b5b5092915050565b60006145db82613fa1565b91506145e683613fa1565b92508282019050808211156145fe576145fd61455f565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061463e82613fa1565b915061464983613fa1565b92508261465957614658614604565b5b828204905092915050565b7f4e6f2070656e64696e6720746f6b656e73000000000000000000000000000000600082015250565b600061469a601183613efa565b91506146a582614664565b602082019050919050565b600060208201905081810360008301526146c98161468d565b9050919050565b7f4e6f20686f6c6465727300000000000000000000000000000000000000000000600082015250565b6000614706600a83613efa565b9150614711826146d0565b602082019050919050565b60006020820190508181036000830152614735816146f9565b9050919050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c697160008201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b6000614798602683613efa565b91506147a38261473c565b604082019050919050565b600060208201905081810360008301526147c78161478b565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e60008201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b600061482a602f83613efa565b9150614835826147ce565b604082019050919050565b600060208201905081810360008301526148598161481d565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006148bc602683613efa565b91506148c782614860565b604082019050919050565b600060208201905081810360008301526148eb816148af565b9050919050565b6000819050919050565b600061491761491261490d846148f2565b614306565b613fa1565b9050919050565b614927816148fc565b82525050565b600060c08201905061494260008301896140e4565b61494f6020830188613fab565b61495c604083018761491e565b614969606083018661491e565b61497660808301856140e4565b61498360a0830184613fab565b979650505050505050565b6000806000606084860312156149a7576149a6613fdf565b5b60006149b5868287016144b2565b93505060206149c6868287016144b2565b92505060406149d7868287016144b2565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614a17601783613efa565b9150614a22826149e1565b602082019050919050565b60006020820190508181036000830152614a4681614a0a565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614a83601b83613efa565b9150614a8e82614a4d565b602082019050919050565b60006020820190508181036000830152614ab281614a76565b9050919050565b6000604082019050614ace60008301856140e4565b614adb6020830184613fab565b9392505050565b614aeb816140ae565b8114614af657600080fd5b50565b600081519050614b0881614ae2565b92915050565b600060208284031215614b2457614b23613fdf565b5b6000614b3284828501614af9565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614b71601483613efa565b9150614b7c82614b3b565b602082019050919050565b60006020820190508181036000830152614ba081614b64565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b6000614bdd600283613efa565b9150614be882614ba7565b602082019050919050565b60006020820190508181036000830152614c0c81614bd0565b9050919050565b6000614c1e82613fa1565b9150614c2983613fa1565b9250828203905081811115614c4157614c4061455f565b5b92915050565b7f4632000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c7d600283613efa565b9150614c8882614c47565b602082019050919050565b60006020820190508181036000830152614cac81614c70565b9050919050565b7f4633000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ce9600283613efa565b9150614cf482614cb3565b602082019050919050565b60006020820190508181036000830152614d1881614cdc565b9050919050565b7f4634000000000000000000000000000000000000000000000000000000000000600082015250565b6000614d55600283613efa565b9150614d6082614d1f565b602082019050919050565b60006020820190508181036000830152614d8481614d48565b9050919050565b6000608082019050614da060008301876140e4565b614dad60208301866140e4565b614dba60408301856140e4565b614dc760608301846140e4565b95945050505050565b60006dffffffffffffffffffffffffffff82169050919050565b614df381614dd0565b8114614dfe57600080fd5b50565b600081519050614e1081614dea565b92915050565b600063ffffffff82169050919050565b614e2f81614e16565b8114614e3a57600080fd5b50565b600081519050614e4c81614e26565b92915050565b600080600060608486031215614e6b57614e6a613fdf565b5b6000614e7986828701614e01565b9350506020614e8a86828701614e01565b9250506040614e9b86828701614e3d565b9150509250925092565b7f496e76616c696420726f75746572206164647265737300000000000000000000600082015250565b6000614edb601683613efa565b9150614ee682614ea5565b602082019050919050565b60006020820190508181036000830152614f0a81614ece565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f47600283613efa565b9150614f5282614f11565b602082019050919050565b60006020820190508181036000830152614f7681614f3a565b9050919050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b6000614fb3600283613efa565b9150614fbe82614f7d565b602082019050919050565b60006020820190508181036000830152614fe281614fa6565b9050919050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b600061501f600283613efa565b915061502a82614fe9565b602082019050919050565b6000602082019050818103600083015261504e81615012565b9050919050565b7f5472616e7366657220746f2f66726f6d207a65726f2061646472657373000000600082015250565b600061508b601d83613efa565b915061509682615055565b602082019050919050565b600060208201905081810360008301526150ba8161507e565b9050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006150f7600283613efa565b9150615102826150c1565b602082019050919050565b60006020820190508181036000830152615126816150ea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a0820190506151a06000830188613fab565b6151ad602083018761491e565b81810360408301526151bf8186614286565b90506151ce60608301856140e4565b6151db6080830184613fab565b9695505050505050565b60008160e01c9050919050565b600060033d11156152115760046000803e61520e6000516151e5565b90505b90565b61521d82613f35565b810181811067ffffffffffffffff8211171561523c5761523b61512d565b5b80604052505050565b600060443d106152d257615257613fd5565b60043d036004823e80513d602482011167ffffffffffffffff8211171561527f5750506152d2565b808201805167ffffffffffffffff81111561529d57505050506152d2565b80602083010160043d0385018111156152ba5750505050506152d2565b6152c982602001850186615214565b82955050505050505b90565b7f556e6b6e6f776e206572726f7220696e20737761700000000000000000000000600082015250565b600061530b601583613efa565b9150615316826152d5565b602082019050919050565b6000602082019050818103600083015261533a816152fe565b9050919050565b600061010082019050615357600083018b6140e4565b615364602083018a6140e4565b6153716040830189613fab565b61537e6060830188613fab565b61538b6080830187613fab565b61539860a0830186613fab565b6153a560c08301856140e4565b6153b260e0830184613fab565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b60006153f5601d83613efa565b9150615400826153bf565b602082019050919050565b60006020820190508181036000830152615424816153e8565b9050919050565b600061543682613fa1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036154685761546761455f565b5b600182019050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b60006154a9600283613efa565b91506154b482615473565b602082019050919050565b600060208201905081810360008301526154d88161549c565b9050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b6000615515600283613efa565b9150615520826154df565b602082019050919050565b6000602082019050818103600083015261554481615508565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220a08d00caacab9897d571162a6629662e721327fde774c664eba0947eb880397f64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c806370a082311161010d5780639df93f6c116100a0578063d4d7b19a1161006f578063d4d7b19a146106bf578063dd62ed3e146106fc578063ed9cacfe14610739578063f2fde38b14610750578063fd7c9fab14610779576101f9565b80639df93f6c14610616578063a9059cbb14610642578063c026d93a1461067f578063c0d7865514610696576101f9565b8063808a5457116100dc578063808a54571461057e5780638129fc1c146105a95780638da5cb5b146105c057806395d89b41146105eb576101f9565b806370a08231146104d65780637136982b1461051357806379304bec1461053e5780637ac84fc114610567576101f9565b8063313ce567116101855780635737619811610154578063573761981461042c5780635d76b04c146104555780635fe8e7cc1461048057806362b6327a146104ab576101f9565b8063313ce567146103a3578063397883d2146103ce57806341a22cc2146103e5578063461a3a9514610401576101f9565b80631b26c80d116101c15780631b26c80d146102bc57806323b872dd146102ec578063298926cb146103295780632a11ced014610366576101f9565b806306fdde03146101fe57806308dee2b414610229578063095ea7b31461025457806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107a4565b6040516102209190613f7f565b60405180910390f35b34801561023557600080fd5b5061023e610836565b60405161024b9190613fba565b60405180910390f35b34801561026057600080fd5b5061027b6004803603810190610276919061406e565b610840565b60405161028891906140c9565b60405180910390f35b34801561029d57600080fd5b506102a661085c565b6040516102b39190613fba565b60405180910390f35b3480156102c857600080fd5b506102d1610866565b6040516102e3969594939291906140f3565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190614154565b610b00565b60405161032091906140c9565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b91906141a7565b610b28565b60405161035d9190613fba565b60405180910390f35b34801561037257600080fd5b5061038d600480360381019061038891906141a7565b610bb0565b60405161039a91906141d4565b60405180910390f35b3480156103af57600080fd5b506103b8610bef565b6040516103c5919061420b565b60405180910390f35b3480156103da57600080fd5b506103e3610bf8565b005b6103ff60048036038101906103fa91906141a7565b610d3c565b005b34801561040d57600080fd5b50610416611059565b60405161042391906141d4565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e919061406e565b61107f565b005b34801561046157600080fd5b5061046a61117f565b6040516104779190613fba565b60405180910390f35b34801561048c57600080fd5b50610495611189565b6040516104a291906142e4565b60405180910390f35b3480156104b757600080fd5b506104c0611217565b6040516104cd9190614365565b60405180910390f35b3480156104e257600080fd5b506104fd60048036038101906104f89190614380565b61123d565b60405161050a9190613fba565b60405180910390f35b34801561051f57600080fd5b50610528611285565b6040516105359190613fba565b60405180910390f35b34801561054a57600080fd5b50610565600480360381019061056091906141a7565b611292565b005b34801561057357600080fd5b5061057c611364565b005b34801561058a57600080fd5b506105936115aa565b6040516105a091906141d4565b60405180910390f35b3480156105b557600080fd5b506105be6115d0565b005b3480156105cc57600080fd5b506105d5611d06565b6040516105e291906141d4565b60405180910390f35b3480156105f757600080fd5b50610600611d30565b60405161060d9190613f7f565b60405180910390f35b34801561062257600080fd5b5061062b611dc2565b6040516106399291906143ad565b60405180910390f35b34801561064e57600080fd5b506106696004803603810190610664919061406e565b611f82565b60405161067691906140c9565b60405180910390f35b34801561068b57600080fd5b50610694611f9e565b005b3480156106a257600080fd5b506106bd60048036038101906106b89190614380565b6122f1565b005b3480156106cb57600080fd5b506106e660048036038101906106e19190614380565b6123ac565b6040516106f391906140c9565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e91906143d6565b6123cc565b6040516107309190613fba565b60405180910390f35b34801561074557600080fd5b5061074e612453565b005b34801561075c57600080fd5b5061077760048036038101906107729190614380565b61272f565b005b34801561078557600080fd5b5061078e6127b2565b60405161079b9190614437565b60405180910390f35b6060600380546107b390614481565b80601f01602080910402602001604051908101604052809291908181526020018280546107df90614481565b801561082c5780601f106108015761010080835404028352916020019161082c565b820191906000526020600020905b81548152906001019060200180831161080f57829003601f168201915b5050505050905090565b6000600d54905090565b6000803390506108518185856127d8565b600191505092915050565b6000600254905090565b6000806000806000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108a891906141d4565b602060405180830381865afa1580156108c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e991906144c7565b95503073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016109489291906144f4565b602060405180830381865afa158015610965573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098991906144c7565b9450600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1c9190614532565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610a789291906144f4565b602060405180830381865afa158015610a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab99190614532565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614159350600d549150600e549050909192939495565b600080339050610b1185828561296c565b610b1c8585856129f8565b60019150509392505050565b6000806000610b35611dc2565b915091506000821480610b485750600081145b15610b5857600092505050610bab565b60006103e585610b68919061458e565b905060008282610b78919061458e565b90506000826103e886610b8b919061458e565b610b9591906145d0565b90508082610ba39190614633565b955050505050505b919050565b600c8181548110610bc057600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610c00612e1f565b6000600d541180610c1357506000600e54115b610c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c49906146b0565b60405180910390fd5b6000600c8054905011610c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c919061471c565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ce257600080fd5b505af1925050508015610cf3575060015b610d39577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600d54600e54604051610d2c9291906143ad565b60405180910390a1610d3a565b5b565b610d44612e1f565b60003411610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e906147ae565b60405180910390fd5b60008111610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc190614840565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e0491906141d4565b602060405180830381865afa158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4591906144c7565b1015610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d906148d2565b60405180910390fd5b610eb330600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836127d8565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610f1a9695949392919061492d565b60606040518083038185885af193505050508015610f5657506040513d601f19601f82011682018060405250810190610f53919061498e565b60015b610fc357610f8830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006127d8565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fba90614a2d565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8134604051610ff79291906143ad565b60405180910390a160004790506000811115611055573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611053573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611087612e1f565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ec90614a99565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611119611d06565b836040518363ffffffff1660e01b8152600401611137929190614ab9565b6020604051808303816000875af1158015611156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117a9190614b0e565b505050565b6000600e54905090565b6060600c80548060200260200160405190810160405280929190818152602001828054801561120d57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116111c3575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c80549050905090565b61129a612e1f565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112d491906141d4565b602060405180830381865afa1580156112f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131591906144c7565b1015611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134d90614b87565b60405180910390fd5b6113613033836129f8565b50565b6002600554036113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a090614bf3565b60405180910390fd5b60026005819055506000600d5411806113c457506000600e54115b611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa906146b0565b60405180910390fd5b6000600c805490501161144b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114429061471c565b60405180910390fd5b6000600e54600d5461145d91906145d0565b905068056bc75e2d6310000081108061147b57506000600c80549050145b1561148657506115a0565b7f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd81600c805490506040516114bc9291906143ad565b60405180910390a16000600d819055506000600e81905550600060646019836114e5919061458e565b6114ef9190614633565b9050600081836114ff9190614c13565b9050600061150c82612e96565b905060008103611545576002846115239190614633565b600d819055506002846115369190614633565b600e81905550505050506115a0565b60006064601983611556919061458e565b6115609190614633565b905060008111156115765761157584826132df565b5b600081836115849190614c13565b9050600081111561159957611598816135e5565b5b5050505050505b6001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115d8612e1f565b600f60009054906101000a900460ff1615611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90614c93565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016116c29291906144f4565b602060405180830381865afa1580156116df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117039190614532565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361189c57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016118189291906144f4565b6020604051808303816000875af1158015611837573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185b9190614532565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361192d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192490614cff565b60405180910390fd5b61197a30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127d8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611a19929190614ab9565b6020604051808303816000875af1158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614b0e565b611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290614d6b565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611b3a929190614ab9565b6020604051808303816000875af1158015611b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7d9190614b0e565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611bfb929190614ab9565b6020604051808303816000875af1158015611c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3e9190614b0e565b507f1aee311dae12417944704a8411a039c41e8ae395e0c0075565cb1c93934babc4600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051611cfc9493929190614d8b565b60405180910390a1565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611d3f90614481565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6b90614481565b8015611db85780601f10611d8d57610100808354040283529160200191611db8565b820191906000526020600020905b815481529060010190602001808311611d9b57829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190614e52565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef19190614532565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f5457826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611f7e565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611f938185856129f8565b600191505092915050565b611fa6612e1f565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016120059291906144f4565b602060405180830381865afa158015612022573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204691906144c7565b905069d3c21bcecceda10000008110156120925761209130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda10000006127d8565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120ef91906141d4565b602060405180830381865afa15801561210c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213091906144c7565b905060008111156122ed576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016121bc9291906144f4565b602060405180830381865afa1580156121d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fd91906144c7565b9050818110156122eb57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016122a6929190614ab9565b6020604051808303816000875af11580156122c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e99190614b0e565b505b505b5050565b6122f9612e1f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90614ef1565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61245b612e1f565b6124a830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127d8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612547929190614ab9565b6020604051808303816000875af1158015612566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061258a9190614b0e565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161262a929190614ab9565b6020604051808303816000875af192505050801561266657506040513d601f19601f820116820180604052508101906126639190614b0e565b60015b1561266d57505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016126ea929190614ab9565b6020604051808303816000875af192505050801561272657506040513d601f19601f820116820180604052508101906127239190614b0e565b60015b1561272d57505b565b612737612e1f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279d90614f5d565b60405180910390fd5b6127af816137e4565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128425750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287890614fc9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161295f9190613fba565b60405180910390a3505050565b600061297884846123cc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146129f257818110156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db90615035565b60405180910390fd5b6129f184848484036127d8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a625750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b612aa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a98906150a1565b60405180910390fd5b612aa9611d06565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b145750612ae5611d06565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612b4a57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612b8057503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612b985750600f60009054906101000a900460ff16155b15612bbf57612ba88383836138aa565b612bb183613aeb565b612bba82613aeb565b612e1a565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612c6a5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90508015612dfa5760006064600584612c83919061458e565b612c8d9190614633565b905060008184612c9d9190614c13565b9050612caa8630846138aa565b612cb58686836138aa565b6064601983612cc4919061458e565b612cce9190614633565b600d6000828254612cdf91906145d0565b925050819055506064601983612cf5919061458e565b612cff9190614633565b600e6000828254612d1091906145d0565b9250508190555068056bc75e2d63100000600d54101580612d3c575068056bc75e2d63100000600e5410155b8015612d4d57506000600c80549050115b15612df3573073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d9a57600080fd5b505af1925050508015612dab575060015b612df1577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600d54600e54604051612de49291906143ad565b60405180910390a1612df2565b5b5b5050612e06565b612e058484846138aa565b5b612e0f84613aeb565b612e1883613aeb565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16612e3e611d06565b73ffffffffffffffffffffffffffffffffffffffff1614612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b9061510d565b60405180910390fd5b565b6000808203612ea857600090506132da565b6000600267ffffffffffffffff811115612ec557612ec461512d565b5b604051908082528060200260200182016040528015612ef35781602001602082028036833780820191505090505b5090503081600081518110612f0b57612f0a61515c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612f7c57612f7b61515c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016130159291906144f4565b602060405180830381865afa158015613032573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305691906144c7565b9050838110156130ae576130ad30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6127d8565b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795856000853061012c426130ff91906145d0565b6040518663ffffffff1660e01b815260040161311f95949392919061518b565b600060405180830381600087803b15801561313957600080fd5b505af192505050801561314a575060015b6131fa576131566151f2565b806308c379a0036131b8575061316a615245565b8061317557506131ba565b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec0723816040516131a49190613f7f565b60405180910390a1600093505050506132da565b505b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec07236040516131e790615321565b60405180910390a16000925050506132da565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161325791906141d4565b602060405180830381865afa158015613274573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329891906144c7565b90507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0185826040516132cb9291906143ad565b60405180910390a18093505050505b919050565b60008214806132ee5750600081145b6135e15761331f30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846127d8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161339e929190614ab9565b6020604051808303816000875af11580156133bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133e19190614b0e565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856064601e60646134569190614c13565b89613461919061458e565b61346b9190614633565b6064601e606461347b9190614c13565b89613486919061458e565b6134909190614633565b3061012c4261349f91906145d0565b6040518963ffffffff1660e01b81526004016134c2989796959493929190615341565b6060604051808303816000875af19250505080156134fe57506040513d601f19601f820116820180604052508101906134fb919061498e565b60015b6135a35761350a6151f2565b806308c379a003613566575061351e615245565b806135295750613568565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad816040516135589190613f7f565b60405180910390a15061359e565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad6040516135959061540b565b60405180910390a15b6135e0565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b82826040516135d79291906143ad565b60405180910390a15b5b5050565b60008114806135f957506000600c80549050145b6137e1576000600c80549050826136109190614633565b90506000810361362057506137e1565b60005b600c80549050811080156136375750606481105b156137a057600073ffffffffffffffffffffffffffffffffffffffff16600c82815481106136685761366761515c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461378c57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c8381548110613700576136ff61515c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613749929190614ab9565b6020604051808303816000875af192505050801561378557506040513d601f19601f820116820180604052508101906137829190614b0e565b60015b1561378d57505b5b80806137989061542b565b915050613623565b507f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21782600c805490506040516137d79291906143ad565b60405180910390a1505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156139145750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394a906154bf565b60405180910390fd5b61395e838383613d35565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139db9061552b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ad29190613fba565b60405180910390a3613ae5848484613d45565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613b7557503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15613d32576000613b858261123d565b90506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e800008210158015613bee575080155b15613cb3576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613d2f565b678ac7230489e8000082108015613cc75750805b15613d2e576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613d2d83613d55565b5b5b50505b50565b613d40838383613ee5565b505050565b613d50838383613eea565b505050565b60005b600c80549050811015613ee1578173ffffffffffffffffffffffffffffffffffffffff16600c8281548110613d9057613d8f61515c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613ece57600c6001600c80549050613dea9190614c13565b81548110613dfb57613dfa61515c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c8281548110613e3a57613e3961515c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c805480613e9457613e9361554b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055613ee1565b8080613ed99061542b565b915050613d58565b5050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f29578082015181840152602081019050613f0e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f5182613eef565b613f5b8185613efa565b9350613f6b818560208601613f0b565b613f7481613f35565b840191505092915050565b60006020820190508181036000830152613f998184613f46565b905092915050565b6000819050919050565b613fb481613fa1565b82525050565b6000602082019050613fcf6000830184613fab565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061400f82613fe4565b9050919050565b61401f81614004565b811461402a57600080fd5b50565b60008135905061403c81614016565b92915050565b61404b81613fa1565b811461405657600080fd5b50565b60008135905061406881614042565b92915050565b6000806040838503121561408557614084613fdf565b5b60006140938582860161402d565b92505060206140a485828601614059565b9150509250929050565b60008115159050919050565b6140c3816140ae565b82525050565b60006020820190506140de60008301846140ba565b92915050565b6140ed81614004565b82525050565b600060c0820190506141086000830189613fab565b6141156020830188613fab565b61412260408301876140ba565b61412f60608301866140e4565b61413c6080830185613fab565b61414960a0830184613fab565b979650505050505050565b60008060006060848603121561416d5761416c613fdf565b5b600061417b8682870161402d565b935050602061418c8682870161402d565b925050604061419d86828701614059565b9150509250925092565b6000602082840312156141bd576141bc613fdf565b5b60006141cb84828501614059565b91505092915050565b60006020820190506141e960008301846140e4565b92915050565b600060ff82169050919050565b614205816141ef565b82525050565b600060208201905061422060008301846141fc565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61425b81614004565b82525050565b600061426d8383614252565b60208301905092915050565b6000602082019050919050565b600061429182614226565b61429b8185614231565b93506142a683614242565b8060005b838110156142d75781516142be8882614261565b97506142c983614279565b9250506001810190506142aa565b5085935050505092915050565b600060208201905081810360008301526142fe8184614286565b905092915050565b6000819050919050565b600061432b61432661432184613fe4565b614306565b613fe4565b9050919050565b600061433d82614310565b9050919050565b600061434f82614332565b9050919050565b61435f81614344565b82525050565b600060208201905061437a6000830184614356565b92915050565b60006020828403121561439657614395613fdf565b5b60006143a48482850161402d565b91505092915050565b60006040820190506143c26000830185613fab565b6143cf6020830184613fab565b9392505050565b600080604083850312156143ed576143ec613fdf565b5b60006143fb8582860161402d565b925050602061440c8582860161402d565b9150509250929050565b600061442182614332565b9050919050565b61443181614416565b82525050565b600060208201905061444c6000830184614428565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061449957607f821691505b6020821081036144ac576144ab614452565b5b50919050565b6000815190506144c181614042565b92915050565b6000602082840312156144dd576144dc613fdf565b5b60006144eb848285016144b2565b91505092915050565b600060408201905061450960008301856140e4565b61451660208301846140e4565b9392505050565b60008151905061452c81614016565b92915050565b60006020828403121561454857614547613fdf565b5b60006145568482850161451d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061459982613fa1565b91506145a483613fa1565b92508282026145b281613fa1565b915082820484148315176145c9576145c861455f565b5b5092915050565b60006145db82613fa1565b91506145e683613fa1565b92508282019050808211156145fe576145fd61455f565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061463e82613fa1565b915061464983613fa1565b92508261465957614658614604565b5b828204905092915050565b7f4e6f2070656e64696e6720746f6b656e73000000000000000000000000000000600082015250565b600061469a601183613efa565b91506146a582614664565b602082019050919050565b600060208201905081810360008301526146c98161468d565b9050919050565b7f4e6f20686f6c6465727300000000000000000000000000000000000000000000600082015250565b6000614706600a83613efa565b9150614711826146d0565b602082019050919050565b60006020820190508181036000830152614735816146f9565b9050919050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c697160008201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b6000614798602683613efa565b91506147a38261473c565b604082019050919050565b600060208201905081810360008301526147c78161478b565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e60008201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b600061482a602f83613efa565b9150614835826147ce565b604082019050919050565b600060208201905081810360008301526148598161481d565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006148bc602683613efa565b91506148c782614860565b604082019050919050565b600060208201905081810360008301526148eb816148af565b9050919050565b6000819050919050565b600061491761491261490d846148f2565b614306565b613fa1565b9050919050565b614927816148fc565b82525050565b600060c08201905061494260008301896140e4565b61494f6020830188613fab565b61495c604083018761491e565b614969606083018661491e565b61497660808301856140e4565b61498360a0830184613fab565b979650505050505050565b6000806000606084860312156149a7576149a6613fdf565b5b60006149b5868287016144b2565b93505060206149c6868287016144b2565b92505060406149d7868287016144b2565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614a17601783613efa565b9150614a22826149e1565b602082019050919050565b60006020820190508181036000830152614a4681614a0a565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614a83601b83613efa565b9150614a8e82614a4d565b602082019050919050565b60006020820190508181036000830152614ab281614a76565b9050919050565b6000604082019050614ace60008301856140e4565b614adb6020830184613fab565b9392505050565b614aeb816140ae565b8114614af657600080fd5b50565b600081519050614b0881614ae2565b92915050565b600060208284031215614b2457614b23613fdf565b5b6000614b3284828501614af9565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614b71601483613efa565b9150614b7c82614b3b565b602082019050919050565b60006020820190508181036000830152614ba081614b64565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b6000614bdd600283613efa565b9150614be882614ba7565b602082019050919050565b60006020820190508181036000830152614c0c81614bd0565b9050919050565b6000614c1e82613fa1565b9150614c2983613fa1565b9250828203905081811115614c4157614c4061455f565b5b92915050565b7f4632000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c7d600283613efa565b9150614c8882614c47565b602082019050919050565b60006020820190508181036000830152614cac81614c70565b9050919050565b7f4633000000000000000000000000000000000000000000000000000000000000600082015250565b6000614ce9600283613efa565b9150614cf482614cb3565b602082019050919050565b60006020820190508181036000830152614d1881614cdc565b9050919050565b7f4634000000000000000000000000000000000000000000000000000000000000600082015250565b6000614d55600283613efa565b9150614d6082614d1f565b602082019050919050565b60006020820190508181036000830152614d8481614d48565b9050919050565b6000608082019050614da060008301876140e4565b614dad60208301866140e4565b614dba60408301856140e4565b614dc760608301846140e4565b95945050505050565b60006dffffffffffffffffffffffffffff82169050919050565b614df381614dd0565b8114614dfe57600080fd5b50565b600081519050614e1081614dea565b92915050565b600063ffffffff82169050919050565b614e2f81614e16565b8114614e3a57600080fd5b50565b600081519050614e4c81614e26565b92915050565b600080600060608486031215614e6b57614e6a613fdf565b5b6000614e7986828701614e01565b9350506020614e8a86828701614e01565b9250506040614e9b86828701614e3d565b9150509250925092565b7f496e76616c696420726f75746572206164647265737300000000000000000000600082015250565b6000614edb601683613efa565b9150614ee682614ea5565b602082019050919050565b60006020820190508181036000830152614f0a81614ece565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f47600283613efa565b9150614f5282614f11565b602082019050919050565b60006020820190508181036000830152614f7681614f3a565b9050919050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b6000614fb3600283613efa565b9150614fbe82614f7d565b602082019050919050565b60006020820190508181036000830152614fe281614fa6565b9050919050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b600061501f600283613efa565b915061502a82614fe9565b602082019050919050565b6000602082019050818103600083015261504e81615012565b9050919050565b7f5472616e7366657220746f2f66726f6d207a65726f2061646472657373000000600082015250565b600061508b601d83613efa565b915061509682615055565b602082019050919050565b600060208201905081810360008301526150ba8161507e565b9050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006150f7600283613efa565b9150615102826150c1565b602082019050919050565b60006020820190508181036000830152615126816150ea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a0820190506151a06000830188613fab565b6151ad602083018761491e565b81810360408301526151bf8186614286565b90506151ce60608301856140e4565b6151db6080830184613fab565b9695505050505050565b60008160e01c9050919050565b600060033d11156152115760046000803e61520e6000516151e5565b90505b90565b61521d82613f35565b810181811067ffffffffffffffff8211171561523c5761523b61512d565b5b80604052505050565b600060443d106152d257615257613fd5565b60043d036004823e80513d602482011167ffffffffffffffff8211171561527f5750506152d2565b808201805167ffffffffffffffff81111561529d57505050506152d2565b80602083010160043d0385018111156152ba5750505050506152d2565b6152c982602001850186615214565b82955050505050505b90565b7f556e6b6e6f776e206572726f7220696e20737761700000000000000000000000600082015250565b600061530b601583613efa565b9150615316826152d5565b602082019050919050565b6000602082019050818103600083015261533a816152fe565b9050919050565b600061010082019050615357600083018b6140e4565b615364602083018a6140e4565b6153716040830189613fab565b61537e6060830188613fab565b61538b6080830187613fab565b61539860a0830186613fab565b6153a560c08301856140e4565b6153b260e0830184613fab565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b60006153f5601d83613efa565b9150615400826153bf565b602082019050919050565b60006020820190508181036000830152615424816153e8565b9050919050565b600061543682613fa1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036154685761546761455f565b5b600182019050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b60006154a9600283613efa565b91506154b482615473565b602082019050919050565b600060208201905081810360008301526154d88161549c565b9050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b6000615515600283613efa565b9150615520826154df565b602082019050919050565b6000602082019050818103600083015261554481615508565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220a08d00caacab9897d571162a6629662e721327fde774c664eba0947eb880397f64736f6c63430008130033

Deployed Bytecode Sourcemap

8351:17357:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22132:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3677:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3104:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23562:654;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;3875:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24752:472;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9378:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3012:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22431:401;;;;;;;;;;;;;:::i;:::-;;20290:1074;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9238:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21566:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22258:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20116:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9140:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3211:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20006:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21815:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15428:1627;;;;;;;;;;;;;:::i;:::-;;9270:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11051:955;;;;;;;;;;;;;:::i;:::-;;1789:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2909:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24261:427;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3337:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22840:691;;;;;;;;;;;;;:::i;:::-;;21372:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9331:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3527:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25262:406;;;;;;;;;;;;;:::i;:::-;;1992:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9188:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2810:91;2855:13;2888:5;2881:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:91;:::o;22132:118::-;22192:7;22219:23;;22212:30;;22132:118;:::o;3677:190::-;3751:4;3768:13;3784:10;3768:26;;3805:32;3814:5;3821:7;3830:6;3805:8;:32::i;:::-;3855:4;3848:11;;;3677:190;;;;:::o;3104:99::-;3156:7;3183:12;;3176:19;;3104:99;:::o;23562:654::-;23618:23;23652;23686:15;23712:12;23735:18;23764:22;23838:4;23823:31;;;23863:4;23823:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23805:64;;23913:4;23898:31;;;23938:4;23953:16;;;;;;;;;;;23898:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23880:91;;24008:16;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23989:54;;;24052:4;24059:10;;;;;;;;;;;23989:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23982:88;;24110:1;24094:18;;:4;:18;;;;24081:31;;24136:23;;24123:36;;24187:21;;24170:38;;23562:654;;;;;;:::o;3875:250::-;3963:4;3980:15;3998:10;3980:28;;4019:38;4035:4;4041:7;4050:6;4019:15;:38::i;:::-;4068:27;4078:4;4084:2;4088:6;4068:9;:27::i;:::-;4113:4;4106:11;;;3875:250;;;;;:::o;24752:472::-;24817:7;24838:19;24859;24882:17;:15;:17::i;:::-;24837:62;;;;24929:1;24914:11;:16;:36;;;;24949:1;24934:11;:16;24914:36;24910:50;;;24959:1;24952:8;;;;;;24910:50;24981:23;25018:3;25007:8;:14;;;;:::i;:::-;24981:40;;25055:17;25093:11;25075:15;:29;;;;:::i;:::-;25055:49;;25115:19;25160:15;25152:4;25138:11;:18;;;;:::i;:::-;25137:38;;;;:::i;:::-;25115:60;;25205:11;25193:9;:23;;;;:::i;:::-;25186:30;;;;;;;24752:472;;;;:::o;9378:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3012:84::-;3061:5;3086:2;3079:9;;3012:84;:::o;22431:401::-;1748:13;:11;:13::i;:::-;22524:1:::1;22498:23;;:27;:56;;;;22553:1;22529:21;;:25;22498:56;22490:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;22612:1;22595:7;:14;;;;:18;22587:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;22643:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;22639:186;;22751:62;22766:23;;22791:21;;22751:62;;;;;;;:::i;:::-;;;;;;;;22639:186;;;;22431:401::o:0;20290:1074::-;1748:13;:11;:13::i;:::-;20398:1:::1;20386:9;:13;20378:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20475:1;20461:11;:15;20453:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;20621:11;20586:4;20571:31;;;20611:4;20571:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;20549:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;20711:63;20728:4;20743:16;;;;;;;;;;;20762:11;20711:8;:63::i;:::-;20791:16;;;;;;;;;;;:32;;;20831:9;20864:4;20884:11;20910:1;20926::::0;20942:10:::1;20967:15;20791:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20787:412;;21086:53;21103:4;21118:16;;;;;;;;;;;21137:1;21086:8;:53::i;:::-;21154:33;;;;;;;;;;:::i;:::-;;;;;;;;20787:412;;;;21014:38;21029:11;21042:9;21014:38;;;;;;;:::i;:::-;;;;;;;;21211:20;21234:21;21211:44;;21285:1;21270:12;:16;21266:91;;;21311:10;21303:28;;:42;21332:12;21303:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21266:91;20367:997;20290:1074:::0;:::o;9238:25::-;;;;;;;;;;;;;:::o;21566:208::-;1748:13;:11;:13::i;:::-;21677:4:::1;21659:23;;:6;:23;;::::0;21651:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21732:6;21725:23;;;21749:7;:5;:7::i;:::-;21758;21725:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21566:208:::0;;:::o;22258:114::-;22316:7;22343:21;;22336:28;;22258:114;:::o;20116:96::-;20161:16;20197:7;20190:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20116:96;:::o;9140:41::-;;;;;;;;;;;;;:::o;3211:118::-;3276:7;3303:9;:18;3313:7;3303:18;;;;;;;;;;;;;;;;3296:25;;3211:118;;;:::o;20006:98::-;20055:7;20082;:14;;;;20075:21;;20006:98;:::o;21815:266::-;1748:13;:11;:13::i;:::-;21964:6:::1;21929:4;21914:31;;;21954:4;21914:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;21892:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;22029:44;22047:4;22054:10;22066:6;22029:9;:44::i;:::-;21815:266:::0;:::o;15428:1627::-;1042:1;1188:7;;:19;1180:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;1042:1;1225:7;:18;;;;15533:1:::1;15507:23;;:27;:56;;;;15562:1;15538:21;;:25;15507:56;15499:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;15621:1;15604:7;:14;;;;:18;15596:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;15658:19;15706:21;;15680:23;;:47;;;;:::i;:::-;15658:69;;8808:12;15742:11;:36;:59;;;;15800:1;15782:7;:14;;;;:19;15742:59;15738:72;;;15803:7;;;15738:72;15835:43;15850:11;15863:7;:14;;;;15835:43;;;;;;;:::i;:::-;;;;;;;;15951:1;15925:23;:27;;;;15987:1;15963:21;:25;;;;16046:26;16114:3;8987:2;16076:11;:34;;;;:::i;:::-;16075:42;;;;:::i;:::-;16046:71;;16128:20;16165:18;16151:11;:32;;;;:::i;:::-;16128:55;;16242:21;16266:26;16279:12;16266;:26::i;:::-;16242:50;;16324:1;16307:13;:18:::0;16303:222:::1;;16437:1;16423:11;:15;;;;:::i;:::-;16397:23;:41;;;;16491:1;16477:11;:15;;;;:::i;:::-;16453:21;:39;;;;16507:7;;;;;;16303:222;16615:25;16684:3;8987:2;16644:13;:36;;;;:::i;:::-;16643:44;;;;:::i;:::-;16615:72;;16722:1;16702:17;:21;16698:110;;;16740:56;16758:18;16778:17;16740;:56::i;:::-;16698:110;16894:23;16936:17;16920:13;:33;;;;:::i;:::-;16894:59;;16986:1;16968:15;:19;16964:84;;;17004:32;17020:15;17004;:32::i;:::-;16964:84;15488:1567;;;;;;1254:1;998::::0;1266:7;:22;;;;15428:1627::o;9270:28::-;;;;;;;;;;;;;:::o;11051:955::-;1748:13;:11;:13::i;:::-;11112:12:::1;;;;;;;;;;;11111:13;11103:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;11157:4;11142:12;;:19;;;;;;;;;;;;;;;;;;11233:17;;;;;;;;;;;:25;;;11267:4;11274:10;;;;;;;;;;;11233:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11217:13;;:68;;;;;;;;;;;;;;;;;;11380:1;11355:27;;:13;;;;;;;;;;;:27;;::::0;11351:131:::1;;11415:17;;;;;;;;;;;:28;;;11452:4;11459:10;;;;;;;;;;;11415:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11399:13;;:71;;;;;;;;;;;;;;;;;;11351:131;11535:1;11510:27;;:13;;;;;;;;;;;:27;;::::0;11502:42:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11557:69;11574:4;11589:16;;;;;;;;;;;11608:17;11557:8;:69::i;:::-;11662:10;;;;;;;;;;;11655:26;;;11690:16;;;;;;;;;;;11709:17;11655:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11647:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;11752:10;;;;;;;;;;;11745:26;;;11772:13;;;;;;;;;;;11787:17;11745:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11831:4;11816:29;;;11846:13;;;;;;;;;;;11861:17;11816:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11897:101;11925:16;;;;;;;;;;;11952:17;;;;;;;;;;;11972:10;;;;;;;;;;;11984:13;;;;;;;;;;;11897:101;;;;;;;;;:::i;:::-;;;;;;;;11051:955::o:0;1789:87::-;1835:7;1862:6;;;;;;;;;;;1855:13;;1789:87;:::o;2909:95::-;2956:13;2989:7;2982:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2909:95;:::o;24261:427::-;24309:19;24330;24363:16;24381;24418:13;;;;;;;;;;;24402:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24362:84;;;;;24457:14;24490:13;;;;;;;;;;;24474:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24457:56;;24546:4;24528:23;;:6;:23;;;24524:101;;24584:8;24576:17;;24603:8;24595:17;;24568:45;;;;;;;;;24524:101;24651:8;24643:17;;24670:8;24662:17;;24635:45;;;;;;;24261:427;;;:::o;3337:182::-;3407:4;3424:13;3440:10;3424:26;;3461:28;3471:5;3478:2;3482:6;3461:9;:28::i;:::-;3507:4;3500:11;;;3337:182;;;;:::o;22840:691::-;1748:13;:11;:13::i;:::-;22907:21:::1;22946:4;22931:31;;;22971:4;22986:16;;;;;;;;;;;22931:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22907:97;;8467:18;23019:13;:28;23015:125;;;23064:64;23081:4;23096:16;;;;;;;;;;;8467:18;23064:8;:64::i;:::-;23015:125;23152:19;23181:10;;;;;;;;;;;23174:28;;;23211:4;23174:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23152:65;;23246:1;23232:11;:15;23228:296;;;23264:21;23295:10;;;;;;;;;;;23288:28;;;23325:4;23340:16;;;;;;;;;;;23288:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23264:94;;23393:11;23377:13;:27;23373:140;;;23432:10;;;;;;;;;;;23425:26;;;23460:16;;;;;;;;;;;23479:17;23425:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23373:140;23249:275;23228:296;22896:635;;22840:691::o:0;21372:186::-;1748:13;:11;:13::i;:::-;21465:1:::1;21446:21;;:7;:21;;::::0;21438:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21542:7;21505:16;;:45;;;;;;;;;;;;;;;;;;21372:186:::0;:::o;9331:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;3527:142::-;3607:7;3634:11;:18;3646:5;3634:18;;;;;;;;;;;;;;;:27;3653:7;3634:27;;;;;;;;;;;;;;;;3627:34;;3527:142;;;;:::o;25262:406::-;1748:13;:11;:13::i;:::-;25323:69:::1;25340:4;25355:16;;;;;;;;;;;25374:17;25323:8;:69::i;:::-;25410:10;;;;;;;;;;;25403:26;;;25438:16;;;;;;;;;;;25457:17;25403:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25507:10;;;;;;;;;;;25500:26;;;25527:13;;;;;;;;;;;25542:17;25500:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25496:76:::0;::::1;;;;25601:4;25586:29;;;25616:13;;;;;;;;;;;25631:17;25586:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25582:79:::0;::::1;;;;25262:406::o:0;1992:165::-;1748:13;:11;:13::i;:::-;2101:1:::1;2081:22;;:8;:22;;::::0;2073:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2121:28;2140:8;2121:18;:28::i;:::-;1992:165:::0;:::o;9188:43::-;;;;;;;;;;;;;:::o;5056:256::-;5175:1;5158:19;;:5;:19;;;;:44;;;;;5200:1;5181:21;;:7;:21;;;;5158:44;5150:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;5250:6;5220:11;:18;5232:5;5220:18;;;;;;;;;;;;;;;:27;5239:7;5220:27;;;;;;;;;;;;;;;:36;;;;5288:7;5272:32;;5281:5;5272:32;;;5297:6;5272:32;;;;;;:::i;:::-;;;;;;;;5056:256;;;:::o;5320:392::-;5421:24;5448:25;5458:5;5465:7;5448:9;:25::i;:::-;5421:52;;5508:17;5488:16;:37;5484:221;;5570:6;5550:16;:26;;5542:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5627:51;5636:5;5643:7;5671:6;5652:16;:25;5627:8;:51::i;:::-;5484:221;5410:302;5320:392;;;:::o;12418:2103::-;12574:1;12558:18;;:4;:18;;;;:38;;;;;12594:1;12580:16;;:2;:16;;;;12558:38;12550:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;12717:7;:5;:7::i;:::-;12709:15;;:4;:15;;;:32;;;;12734:7;:5;:7::i;:::-;12728:13;;:2;:13;;;12709:32;:57;;;;12761:4;12745:21;;:4;:21;;;12709:57;:80;;;;12784:4;12770:19;;:2;:19;;;12709:80;:97;;;;12794:12;;;;;;;;;;;12793:13;12709:97;12705:250;;;12823:33;12839:4;12845:2;12849:6;12823:15;:33::i;:::-;12871:19;12885:4;12871:13;:19::i;:::-;12905:17;12919:2;12905:13;:17::i;:::-;12937:7;;12705:250;12967:16;12992:13;;;;;;;;;;;12986:19;;:2;:19;;;:44;;;;13017:13;;;;;;;;;;;13009:21;;:4;:21;;;12986:44;12967:63;;13045:11;13041:1353;;;13115:16;13156:3;8528:1;13135:6;:17;;;;:::i;:::-;13134:25;;;;:::i;:::-;13115:44;;13174:22;13208:8;13199:6;:17;;;;:::i;:::-;13174:42;;13292:46;13308:4;13322;13329:8;13292:15;:46::i;:::-;13413:41;13429:4;13435:2;13439:14;13413:15;:41::i;:::-;13595:3;8583:2;13567:8;:24;;;;:::i;:::-;13566:32;;;;:::i;:::-;13539:23;;:59;;;;;;;:::i;:::-;;;;;;;;13688:3;8639:2;13662:8;:22;;;;:::i;:::-;13661:30;;;;:::i;:::-;13636:21;;:55;;;;;;;:::i;:::-;;;;;;;;8808:12;13792:23;;:49;;:118;;;;8808:12;13863:21;;:47;;13792:118;13791:160;;;;;13950:1;13933:7;:14;;;;:18;13791:160;13787:486;;;13976:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13972:286;;14176:62;14191:23;;14216:21;;14176:62;;;;;;;:::i;:::-;;;;;;;;13972:286;;;;13787:486;13058:1226;;13041:1353;;;14349:33;14365:4;14371:2;14375:6;14349:15;:33::i;:::-;13041:1353;14466:19;14480:4;14466:13;:19::i;:::-;14496:17;14510:2;14496:13;:17::i;:::-;12539:1982;12418:2103;;;;:::o;1884:100::-;1959:10;1948:21;;:7;:5;:7::i;:::-;:21;;;1940:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1884:100::o;17063:1186::-;17123:7;17162:1;17147:11;:16;17143:30;;17172:1;17165:8;;;;17143:30;17186:21;17224:1;17210:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17186:40;;17255:4;17237;17242:1;17237:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;17281:10;;;;;;;;;;;17271:4;17276:1;17271:7;;;;;;;;:::i;:::-;;;;;;;:20;;;;;;;;;;;17332:24;17374:4;17359:31;;;17399:4;17414:16;;;;;;;;;;;17359:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17332:100;;17466:11;17447:16;:30;17443:132;;;17494:69;17511:4;17526:16;;;;;;;;;;;17545:17;17494:8;:69::i;:::-;17443:132;17591:16;;;;;;;;;;;:70;;;17676:11;17702:1;17769:4;17796;17834:3;17816:15;:21;;;;:::i;:::-;17591:257;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17587:655;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;18092:18;18103:6;18092:18;;;;;;:::i;:::-;;;;;;;;18132:1;18125:8;;;;;;;17587:655;;;18172:35;;;;;;:::i;:::-;;;;;;;;18229:1;18222:8;;;;;;17587:655;17864:20;17894:10;;;;;;;;;;;17887:28;;;17924:4;17887:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17864:66;;17950:41;17965:11;17978:12;17950:41;;;;;;;:::i;:::-;;;;;;;;18013:12;18006:19;;;;;17063:1186;;;;:::o;18257:1054::-;18384:1;18362:18;:23;:49;;;;18410:1;18389:17;:22;18362:49;18413:7;18358:62;18467:70;18484:4;18499:16;;;;;;;;;;;18518:18;18467:8;:70::i;:::-;18555:10;;;;;;;;;;;18548:26;;;18583:16;;;;;;;;;;;18602:17;18548:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18637:16;;;;;;;;;;;:29;;;18689:4;18709:10;;;;;;;;;;;18734:18;18767:17;18843:3;9070:2;18821:3;:18;;;;:::i;:::-;18799;:41;;;;:::i;:::-;:47;;;;:::i;:::-;18930:3;9070:2;18908:3;:18;;;;:::i;:::-;18887:17;:40;;;;:::i;:::-;:46;;;;:::i;:::-;18983:4;19021:3;19003:15;:21;;;;:::i;:::-;18637:398;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;18633:671;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;19176:26;19195:6;19176:26;;;;;;:::i;:::-;;;;;;;;19122:92;18633:671;;;;;19241:51;;;;;;:::i;:::-;;;;;;;;18633:671;;;;;;;19056:53;19071:18;19091:17;19056:53;;;;;;;:::i;:::-;;;;;;;;18633:671;18257:1054;;;:::o;19319:656::-;19403:1;19388:11;:16;:39;;;;19426:1;19408:7;:14;;;;:19;19388:39;19429:7;19384:52;19456:23;19496:7;:14;;;;19482:11;:28;;;;:::i;:::-;19456:54;;19544:1;19525:15;:20;19521:33;;19547:7;;;19521:33;19571:9;19566:329;19590:7;:14;;;;19586:1;:18;:29;;;;;19612:3;19608:1;:7;19586:29;19566:329;;;19663:1;19641:24;;:7;19649:1;19641:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;19637:247;;19697:10;;;;;;;;;;;19690:27;;;19718:7;19726:1;19718:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19730:15;19690:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19686:183;19841:8;19686:183;;19637:247;19566:329;19617:3;;;;;:::i;:::-;;;;19566:329;;;;19920:47;19939:11;19952:7;:14;;;;19920:47;;;;;;;:::i;:::-;;;;;;;;19373:602;19319:656;;:::o;2165:191::-;2239:16;2258:6;;;;;;;;;;;2239:25;;2284:8;2275:6;;:17;;;;;;;;;;;;;;;;;;2339:8;2308:40;;2329:8;2308:40;;;;;;;;;;;;2228:128;2165:191;:::o;4133:507::-;4246:1;4230:18;;:4;:18;;;;:38;;;;;4266:1;4252:16;;:2;:16;;;;4230:38;4222:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;4286:38;4307:4;4313:2;4317:6;4286:20;:38::i;:::-;4335:19;4357:9;:15;4367:4;4357:15;;;;;;;;;;;;;;;;4335:37;;4406:6;4391:11;:21;;4383:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;4487:6;4473:11;:20;4455:9;:15;4465:4;4455:15;;;;;;;;;;;;;;;:38;;;;4525:6;4508:9;:13;4518:2;4508:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;4573:2;4558:26;;4567:4;4558:26;;;4577:6;4558:26;;;;;;:::i;:::-;;;;;;;;4595:37;4615:4;4621:2;4625:6;4595:19;:37::i;:::-;4211:429;4133:507;;;:::o;14529:588::-;14603:13;;;;;;;;;;;14592:24;;:7;:24;;;;:52;;;;;14639:4;14620:24;;:7;:24;;;;14592:52;14588:522;;;14661:15;14679:18;14689:7;14679:9;:18::i;:::-;14661:36;;14712:22;14737:8;:17;14746:7;14737:17;;;;;;;;;;;;;;;;;;;;;;;;;14712:42;;8701:11;14787:7;:28;;:50;;;;;14820:17;14819:18;14787:50;14783:316;;;14878:4;14858:8;:17;14867:7;14858:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;14901:7;14914;14901:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14783:316;;;8701:11;14948:7;:27;:48;;;;;14979:17;14948:48;14944:155;;;15037:5;15017:8;:17;15026:7;15017:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;15061:22;15075:7;15061:13;:22::i;:::-;14944:155;14783:316;14646:464;;14588:522;14529:588;:::o;12014:195::-;12157:44;12184:4;12190:2;12194:6;12157:26;:44::i;:::-;12014:195;;;:::o;12217:193::-;12359:43;12385:4;12391:2;12395:6;12359:25;:43::i;:::-;12217:193;;;:::o;15125:295::-;15189:9;15184:229;15208:7;:14;;;;15204:1;:18;15184:229;;;15262:7;15248:21;;:7;15256:1;15248:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;15244:158;;15303:7;15328:1;15311:7;:14;;;;:18;;;;:::i;:::-;15303:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15290:7;15298:1;15290:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;15349:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;15381:5;;15244:158;15224:3;;;;;:::i;:::-;;;;15184:229;;;;15125:295;:::o;5720:91::-;;;;:::o;5819:90::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:77::-;1386:7;1415:5;1404:16;;1349:77;;;:::o;1432:118::-;1519:24;1537:5;1519:24;:::i;:::-;1514:3;1507:37;1432:118;;:::o;1556:222::-;1649:4;1687:2;1676:9;1672:18;1664:26;;1700:71;1768:1;1757:9;1753:17;1744:6;1700:71;:::i;:::-;1556:222;;;;:::o;1784:75::-;1817:6;1850:2;1844:9;1834:19;;1784:75;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:763::-;4149:4;4187:3;4176:9;4172:19;4164:27;;4201:71;4269:1;4258:9;4254:17;4245:6;4201:71;:::i;:::-;4282:72;4350:2;4339:9;4335:18;4326:6;4282:72;:::i;:::-;4364:66;4426:2;4415:9;4411:18;4402:6;4364:66;:::i;:::-;4440:72;4508:2;4497:9;4493:18;4484:6;4440:72;:::i;:::-;4522:73;4590:3;4579:9;4575:19;4566:6;4522:73;:::i;:::-;4605;4673:3;4662:9;4658:19;4649:6;4605:73;:::i;:::-;3922:763;;;;;;;;;:::o;4691:619::-;4768:6;4776;4784;4833:2;4821:9;4812:7;4808:23;4804:32;4801:119;;;4839:79;;:::i;:::-;4801:119;4959:1;4984:53;5029:7;5020:6;5009:9;5005:22;4984:53;:::i;:::-;4974:63;;4930:117;5086:2;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5057:118;5214:2;5240:53;5285:7;5276:6;5265:9;5261:22;5240:53;:::i;:::-;5230:63;;5185:118;4691:619;;;;;:::o;5316:329::-;5375:6;5424:2;5412:9;5403:7;5399:23;5395:32;5392:119;;;5430:79;;:::i;:::-;5392:119;5550:1;5575:53;5620:7;5611:6;5600:9;5596:22;5575:53;:::i;:::-;5565:63;;5521:117;5316:329;;;;:::o;5651:222::-;5744:4;5782:2;5771:9;5767:18;5759:26;;5795:71;5863:1;5852:9;5848:17;5839:6;5795:71;:::i;:::-;5651:222;;;;:::o;5879:86::-;5914:7;5954:4;5947:5;5943:16;5932:27;;5879:86;;;:::o;5971:112::-;6054:22;6070:5;6054:22;:::i;:::-;6049:3;6042:35;5971:112;;:::o;6089:214::-;6178:4;6216:2;6205:9;6201:18;6193:26;;6229:67;6293:1;6282:9;6278:17;6269:6;6229:67;:::i;:::-;6089:214;;;;:::o;6309:114::-;6376:6;6410:5;6404:12;6394:22;;6309:114;;;:::o;6429:184::-;6528:11;6562:6;6557:3;6550:19;6602:4;6597:3;6593:14;6578:29;;6429:184;;;;:::o;6619:132::-;6686:4;6709:3;6701:11;;6739:4;6734:3;6730:14;6722:22;;6619:132;;;:::o;6757:108::-;6834:24;6852:5;6834:24;:::i;:::-;6829:3;6822:37;6757:108;;:::o;6871:179::-;6940:10;6961:46;7003:3;6995:6;6961:46;:::i;:::-;7039:4;7034:3;7030:14;7016:28;;6871:179;;;;:::o;7056:113::-;7126:4;7158;7153:3;7149:14;7141:22;;7056:113;;;:::o;7205:732::-;7324:3;7353:54;7401:5;7353:54;:::i;:::-;7423:86;7502:6;7497:3;7423:86;:::i;:::-;7416:93;;7533:56;7583:5;7533:56;:::i;:::-;7612:7;7643:1;7628:284;7653:6;7650:1;7647:13;7628:284;;;7729:6;7723:13;7756:63;7815:3;7800:13;7756:63;:::i;:::-;7749:70;;7842:60;7895:6;7842:60;:::i;:::-;7832:70;;7688:224;7675:1;7672;7668:9;7663:14;;7628:284;;;7632:14;7928:3;7921:10;;7329:608;;;7205:732;;;;:::o;7943:373::-;8086:4;8124:2;8113:9;8109:18;8101:26;;8173:9;8167:4;8163:20;8159:1;8148:9;8144:17;8137:47;8201:108;8304:4;8295:6;8201:108;:::i;:::-;8193:116;;7943:373;;;;:::o;8322:60::-;8350:3;8371:5;8364:12;;8322:60;;;:::o;8388:142::-;8438:9;8471:53;8489:34;8498:24;8516:5;8498:24;:::i;:::-;8489:34;:::i;:::-;8471:53;:::i;:::-;8458:66;;8388:142;;;:::o;8536:126::-;8586:9;8619:37;8650:5;8619:37;:::i;:::-;8606:50;;8536:126;;;:::o;8668:151::-;8743:9;8776:37;8807:5;8776:37;:::i;:::-;8763:50;;8668:151;;;:::o;8825:181::-;8937:62;8993:5;8937:62;:::i;:::-;8932:3;8925:75;8825:181;;:::o;9012:272::-;9130:4;9168:2;9157:9;9153:18;9145:26;;9181:96;9274:1;9263:9;9259:17;9250:6;9181:96;:::i;:::-;9012:272;;;;:::o;9290:329::-;9349:6;9398:2;9386:9;9377:7;9373:23;9369:32;9366:119;;;9404:79;;:::i;:::-;9366:119;9524:1;9549:53;9594:7;9585:6;9574:9;9570:22;9549:53;:::i;:::-;9539:63;;9495:117;9290:329;;;;:::o;9625:332::-;9746:4;9784:2;9773:9;9769:18;9761:26;;9797:71;9865:1;9854:9;9850:17;9841:6;9797:71;:::i;:::-;9878:72;9946:2;9935:9;9931:18;9922:6;9878:72;:::i;:::-;9625:332;;;;;:::o;9963:474::-;10031:6;10039;10088:2;10076:9;10067:7;10063:23;10059:32;10056:119;;;10094:79;;:::i;:::-;10056:119;10214:1;10239:53;10284:7;10275:6;10264:9;10260:22;10239:53;:::i;:::-;10229:63;;10185:117;10341:2;10367:53;10412:7;10403:6;10392:9;10388:22;10367:53;:::i;:::-;10357:63;;10312:118;9963:474;;;;;:::o;10443:152::-;10519:9;10552:37;10583:5;10552:37;:::i;:::-;10539:50;;10443:152;;;:::o;10601:183::-;10714:63;10771:5;10714:63;:::i;:::-;10709:3;10702:76;10601:183;;:::o;10790:274::-;10909:4;10947:2;10936:9;10932:18;10924:26;;10960:97;11054:1;11043:9;11039:17;11030:6;10960:97;:::i;:::-;10790:274;;;;:::o;11070:180::-;11118:77;11115:1;11108:88;11215:4;11212:1;11205:15;11239:4;11236:1;11229:15;11256:320;11300:6;11337:1;11331:4;11327:12;11317:22;;11384:1;11378:4;11374:12;11405:18;11395:81;;11461:4;11453:6;11449:17;11439:27;;11395:81;11523:2;11515:6;11512:14;11492:18;11489:38;11486:84;;11542:18;;:::i;:::-;11486:84;11307:269;11256:320;;;:::o;11582:143::-;11639:5;11670:6;11664:13;11655:22;;11686:33;11713:5;11686:33;:::i;:::-;11582:143;;;;:::o;11731:351::-;11801:6;11850:2;11838:9;11829:7;11825:23;11821:32;11818:119;;;11856:79;;:::i;:::-;11818:119;11976:1;12001:64;12057:7;12048:6;12037:9;12033:22;12001:64;:::i;:::-;11991:74;;11947:128;11731:351;;;;:::o;12088:332::-;12209:4;12247:2;12236:9;12232:18;12224:26;;12260:71;12328:1;12317:9;12313:17;12304:6;12260:71;:::i;:::-;12341:72;12409:2;12398:9;12394:18;12385:6;12341:72;:::i;:::-;12088:332;;;;;:::o;12426:143::-;12483:5;12514:6;12508:13;12499:22;;12530:33;12557:5;12530:33;:::i;:::-;12426:143;;;;:::o;12575:351::-;12645:6;12694:2;12682:9;12673:7;12669:23;12665:32;12662:119;;;12700:79;;:::i;:::-;12662:119;12820:1;12845:64;12901:7;12892:6;12881:9;12877:22;12845:64;:::i;:::-;12835:74;;12791:128;12575:351;;;;:::o;12932:180::-;12980:77;12977:1;12970:88;13077:4;13074:1;13067:15;13101:4;13098:1;13091:15;13118:410;13158:7;13181:20;13199:1;13181:20;:::i;:::-;13176:25;;13215:20;13233:1;13215:20;:::i;:::-;13210:25;;13270:1;13267;13263:9;13292:30;13310:11;13292:30;:::i;:::-;13281:41;;13471:1;13462:7;13458:15;13455:1;13452:22;13432:1;13425:9;13405:83;13382:139;;13501:18;;:::i;:::-;13382:139;13166:362;13118:410;;;;:::o;13534:191::-;13574:3;13593:20;13611:1;13593:20;:::i;:::-;13588:25;;13627:20;13645:1;13627:20;:::i;:::-;13622:25;;13670:1;13667;13663:9;13656:16;;13691:3;13688:1;13685:10;13682:36;;;13698:18;;:::i;:::-;13682:36;13534:191;;;;:::o;13731:180::-;13779:77;13776:1;13769:88;13876:4;13873:1;13866:15;13900:4;13897:1;13890:15;13917:185;13957:1;13974:20;13992:1;13974:20;:::i;:::-;13969:25;;14008:20;14026:1;14008:20;:::i;:::-;14003:25;;14047:1;14037:35;;14052:18;;:::i;:::-;14037:35;14094:1;14091;14087:9;14082:14;;13917:185;;;;:::o;14108:167::-;14248:19;14244:1;14236:6;14232:14;14225:43;14108:167;:::o;14281:366::-;14423:3;14444:67;14508:2;14503:3;14444:67;:::i;:::-;14437:74;;14520:93;14609:3;14520:93;:::i;:::-;14638:2;14633:3;14629:12;14622:19;;14281:366;;;:::o;14653:419::-;14819:4;14857:2;14846:9;14842:18;14834:26;;14906:9;14900:4;14896:20;14892:1;14881:9;14877:17;14870:47;14934:131;15060:4;14934:131;:::i;:::-;14926:139;;14653:419;;;:::o;15078:160::-;15218:12;15214:1;15206:6;15202:14;15195:36;15078:160;:::o;15244:366::-;15386:3;15407:67;15471:2;15466:3;15407:67;:::i;:::-;15400:74;;15483:93;15572:3;15483:93;:::i;:::-;15601:2;15596:3;15592:12;15585:19;;15244:366;;;:::o;15616:419::-;15782:4;15820:2;15809:9;15805:18;15797:26;;15869:9;15863:4;15859:20;15855:1;15844:9;15840:17;15833:47;15897:131;16023:4;15897:131;:::i;:::-;15889:139;;15616:419;;;:::o;16041:225::-;16181:34;16177:1;16169:6;16165:14;16158:58;16250:8;16245:2;16237:6;16233:15;16226:33;16041:225;:::o;16272:366::-;16414:3;16435:67;16499:2;16494:3;16435:67;:::i;:::-;16428:74;;16511:93;16600:3;16511:93;:::i;:::-;16629:2;16624:3;16620:12;16613:19;;16272:366;;;:::o;16644:419::-;16810:4;16848:2;16837:9;16833:18;16825:26;;16897:9;16891:4;16887:20;16883:1;16872:9;16868:17;16861:47;16925:131;17051:4;16925:131;:::i;:::-;16917:139;;16644:419;;;:::o;17069:234::-;17209:34;17205:1;17197:6;17193:14;17186:58;17278:17;17273:2;17265:6;17261:15;17254:42;17069:234;:::o;17309:366::-;17451:3;17472:67;17536:2;17531:3;17472:67;:::i;:::-;17465:74;;17548:93;17637:3;17548:93;:::i;:::-;17666:2;17661:3;17657:12;17650:19;;17309:366;;;:::o;17681:419::-;17847:4;17885:2;17874:9;17870:18;17862:26;;17934:9;17928:4;17924:20;17920:1;17909:9;17905:17;17898:47;17962:131;18088:4;17962:131;:::i;:::-;17954:139;;17681:419;;;:::o;18106:225::-;18246:34;18242:1;18234:6;18230:14;18223:58;18315:8;18310:2;18302:6;18298:15;18291:33;18106:225;:::o;18337:366::-;18479:3;18500:67;18564:2;18559:3;18500:67;:::i;:::-;18493:74;;18576:93;18665:3;18576:93;:::i;:::-;18694:2;18689:3;18685:12;18678:19;;18337:366;;;:::o;18709:419::-;18875:4;18913:2;18902:9;18898:18;18890:26;;18962:9;18956:4;18952:20;18948:1;18937:9;18933:17;18926:47;18990:131;19116:4;18990:131;:::i;:::-;18982:139;;18709:419;;;:::o;19134:85::-;19179:7;19208:5;19197:16;;19134:85;;;:::o;19225:158::-;19283:9;19316:61;19334:42;19343:32;19369:5;19343:32;:::i;:::-;19334:42;:::i;:::-;19316:61;:::i;:::-;19303:74;;19225:158;;;:::o;19389:147::-;19484:45;19523:5;19484:45;:::i;:::-;19479:3;19472:58;19389:147;;:::o;19542:807::-;19791:4;19829:3;19818:9;19814:19;19806:27;;19843:71;19911:1;19900:9;19896:17;19887:6;19843:71;:::i;:::-;19924:72;19992:2;19981:9;19977:18;19968:6;19924:72;:::i;:::-;20006:80;20082:2;20071:9;20067:18;20058:6;20006:80;:::i;:::-;20096;20172:2;20161:9;20157:18;20148:6;20096:80;:::i;:::-;20186:73;20254:3;20243:9;20239:19;20230:6;20186:73;:::i;:::-;20269;20337:3;20326:9;20322:19;20313:6;20269:73;:::i;:::-;19542:807;;;;;;;;;:::o;20355:663::-;20443:6;20451;20459;20508:2;20496:9;20487:7;20483:23;20479:32;20476:119;;;20514:79;;:::i;:::-;20476:119;20634:1;20659:64;20715:7;20706:6;20695:9;20691:22;20659:64;:::i;:::-;20649:74;;20605:128;20772:2;20798:64;20854:7;20845:6;20834:9;20830:22;20798:64;:::i;:::-;20788:74;;20743:129;20911:2;20937:64;20993:7;20984:6;20973:9;20969:22;20937:64;:::i;:::-;20927:74;;20882:129;20355:663;;;;;:::o;21024:173::-;21164:25;21160:1;21152:6;21148:14;21141:49;21024:173;:::o;21203:366::-;21345:3;21366:67;21430:2;21425:3;21366:67;:::i;:::-;21359:74;;21442:93;21531:3;21442:93;:::i;:::-;21560:2;21555:3;21551:12;21544:19;;21203:366;;;:::o;21575:419::-;21741:4;21779:2;21768:9;21764:18;21756:26;;21828:9;21822:4;21818:20;21814:1;21803:9;21799:17;21792:47;21856:131;21982:4;21856:131;:::i;:::-;21848:139;;21575:419;;;:::o;22000:177::-;22140:29;22136:1;22128:6;22124:14;22117:53;22000:177;:::o;22183:366::-;22325:3;22346:67;22410:2;22405:3;22346:67;:::i;:::-;22339:74;;22422:93;22511:3;22422:93;:::i;:::-;22540:2;22535:3;22531:12;22524:19;;22183:366;;;:::o;22555:419::-;22721:4;22759:2;22748:9;22744:18;22736:26;;22808:9;22802:4;22798:20;22794:1;22783:9;22779:17;22772:47;22836:131;22962:4;22836:131;:::i;:::-;22828:139;;22555:419;;;:::o;22980:332::-;23101:4;23139:2;23128:9;23124:18;23116:26;;23152:71;23220:1;23209:9;23205:17;23196:6;23152:71;:::i;:::-;23233:72;23301:2;23290:9;23286:18;23277:6;23233:72;:::i;:::-;22980:332;;;;;:::o;23318:116::-;23388:21;23403:5;23388:21;:::i;:::-;23381:5;23378:32;23368:60;;23424:1;23421;23414:12;23368:60;23318:116;:::o;23440:137::-;23494:5;23525:6;23519:13;23510:22;;23541:30;23565:5;23541:30;:::i;:::-;23440:137;;;;:::o;23583:345::-;23650:6;23699:2;23687:9;23678:7;23674:23;23670:32;23667:119;;;23705:79;;:::i;:::-;23667:119;23825:1;23850:61;23903:7;23894:6;23883:9;23879:22;23850:61;:::i;:::-;23840:71;;23796:125;23583:345;;;;:::o;23934:170::-;24074:22;24070:1;24062:6;24058:14;24051:46;23934:170;:::o;24110:366::-;24252:3;24273:67;24337:2;24332:3;24273:67;:::i;:::-;24266:74;;24349:93;24438:3;24349:93;:::i;:::-;24467:2;24462:3;24458:12;24451:19;;24110:366;;;:::o;24482:419::-;24648:4;24686:2;24675:9;24671:18;24663:26;;24735:9;24729:4;24725:20;24721:1;24710:9;24706:17;24699:47;24763:131;24889:4;24763:131;:::i;:::-;24755:139;;24482:419;;;:::o;24907:152::-;25047:4;25043:1;25035:6;25031:14;25024:28;24907:152;:::o;25065:365::-;25207:3;25228:66;25292:1;25287:3;25228:66;:::i;:::-;25221:73;;25303:93;25392:3;25303:93;:::i;:::-;25421:2;25416:3;25412:12;25405:19;;25065:365;;;:::o;25436:419::-;25602:4;25640:2;25629:9;25625:18;25617:26;;25689:9;25683:4;25679:20;25675:1;25664:9;25660:17;25653:47;25717:131;25843:4;25717:131;:::i;:::-;25709:139;;25436:419;;;:::o;25861:194::-;25901:4;25921:20;25939:1;25921:20;:::i;:::-;25916:25;;25955:20;25973:1;25955:20;:::i;:::-;25950:25;;25999:1;25996;25992:9;25984:17;;26023:1;26017:4;26014:11;26011:37;;;26028:18;;:::i;:::-;26011:37;25861:194;;;;:::o;26061:152::-;26201:4;26197:1;26189:6;26185:14;26178:28;26061:152;:::o;26219:365::-;26361:3;26382:66;26446:1;26441:3;26382:66;:::i;:::-;26375:73;;26457:93;26546:3;26457:93;:::i;:::-;26575:2;26570:3;26566:12;26559:19;;26219:365;;;:::o;26590:419::-;26756:4;26794:2;26783:9;26779:18;26771:26;;26843:9;26837:4;26833:20;26829:1;26818:9;26814:17;26807:47;26871:131;26997:4;26871:131;:::i;:::-;26863:139;;26590:419;;;:::o;27015:152::-;27155:4;27151:1;27143:6;27139:14;27132:28;27015:152;:::o;27173:365::-;27315:3;27336:66;27400:1;27395:3;27336:66;:::i;:::-;27329:73;;27411:93;27500:3;27411:93;:::i;:::-;27529:2;27524:3;27520:12;27513:19;;27173:365;;;:::o;27544:419::-;27710:4;27748:2;27737:9;27733:18;27725:26;;27797:9;27791:4;27787:20;27783:1;27772:9;27768:17;27761:47;27825:131;27951:4;27825:131;:::i;:::-;27817:139;;27544:419;;;:::o;27969:152::-;28109:4;28105:1;28097:6;28093:14;28086:28;27969:152;:::o;28127:365::-;28269:3;28290:66;28354:1;28349:3;28290:66;:::i;:::-;28283:73;;28365:93;28454:3;28365:93;:::i;:::-;28483:2;28478:3;28474:12;28467:19;;28127:365;;;:::o;28498:419::-;28664:4;28702:2;28691:9;28687:18;28679:26;;28751:9;28745:4;28741:20;28737:1;28726:9;28722:17;28715:47;28779:131;28905:4;28779:131;:::i;:::-;28771:139;;28498:419;;;:::o;28923:553::-;29100:4;29138:3;29127:9;29123:19;29115:27;;29152:71;29220:1;29209:9;29205:17;29196:6;29152:71;:::i;:::-;29233:72;29301:2;29290:9;29286:18;29277:6;29233:72;:::i;:::-;29315;29383:2;29372:9;29368:18;29359:6;29315:72;:::i;:::-;29397;29465:2;29454:9;29450:18;29441:6;29397:72;:::i;:::-;28923:553;;;;;;;:::o;29482:114::-;29519:7;29559:30;29552:5;29548:42;29537:53;;29482:114;;;:::o;29602:122::-;29675:24;29693:5;29675:24;:::i;:::-;29668:5;29665:35;29655:63;;29714:1;29711;29704:12;29655:63;29602:122;:::o;29730:143::-;29787:5;29818:6;29812:13;29803:22;;29834:33;29861:5;29834:33;:::i;:::-;29730:143;;;;:::o;29879:93::-;29915:7;29955:10;29948:5;29944:22;29933:33;;29879:93;;;:::o;29978:120::-;30050:23;30067:5;30050:23;:::i;:::-;30043:5;30040:34;30030:62;;30088:1;30085;30078:12;30030:62;29978:120;:::o;30104:141::-;30160:5;30191:6;30185:13;30176:22;;30207:32;30233:5;30207:32;:::i;:::-;30104:141;;;;:::o;30251:661::-;30338:6;30346;30354;30403:2;30391:9;30382:7;30378:23;30374:32;30371:119;;;30409:79;;:::i;:::-;30371:119;30529:1;30554:64;30610:7;30601:6;30590:9;30586:22;30554:64;:::i;:::-;30544:74;;30500:128;30667:2;30693:64;30749:7;30740:6;30729:9;30725:22;30693:64;:::i;:::-;30683:74;;30638:129;30806:2;30832:63;30887:7;30878:6;30867:9;30863:22;30832:63;:::i;:::-;30822:73;;30777:128;30251:661;;;;;:::o;30918:172::-;31058:24;31054:1;31046:6;31042:14;31035:48;30918:172;:::o;31096:366::-;31238:3;31259:67;31323:2;31318:3;31259:67;:::i;:::-;31252:74;;31335:93;31424:3;31335:93;:::i;:::-;31453:2;31448:3;31444:12;31437:19;;31096:366;;;:::o;31468:419::-;31634:4;31672:2;31661:9;31657:18;31649:26;;31721:9;31715:4;31711:20;31707:1;31696:9;31692:17;31685:47;31749:131;31875:4;31749:131;:::i;:::-;31741:139;;31468:419;;;:::o;31893:152::-;32033:4;32029:1;32021:6;32017:14;32010:28;31893:152;:::o;32051:365::-;32193:3;32214:66;32278:1;32273:3;32214:66;:::i;:::-;32207:73;;32289:93;32378:3;32289:93;:::i;:::-;32407:2;32402:3;32398:12;32391:19;;32051:365;;;:::o;32422:419::-;32588:4;32626:2;32615:9;32611:18;32603:26;;32675:9;32669:4;32665:20;32661:1;32650:9;32646:17;32639:47;32703:131;32829:4;32703:131;:::i;:::-;32695:139;;32422:419;;;:::o;32847:152::-;32987:4;32983:1;32975:6;32971:14;32964:28;32847:152;:::o;33005:365::-;33147:3;33168:66;33232:1;33227:3;33168:66;:::i;:::-;33161:73;;33243:93;33332:3;33243:93;:::i;:::-;33361:2;33356:3;33352:12;33345:19;;33005:365;;;:::o;33376:419::-;33542:4;33580:2;33569:9;33565:18;33557:26;;33629:9;33623:4;33619:20;33615:1;33604:9;33600:17;33593:47;33657:131;33783:4;33657:131;:::i;:::-;33649:139;;33376:419;;;:::o;33801:152::-;33941:4;33937:1;33929:6;33925:14;33918:28;33801:152;:::o;33959:365::-;34101:3;34122:66;34186:1;34181:3;34122:66;:::i;:::-;34115:73;;34197:93;34286:3;34197:93;:::i;:::-;34315:2;34310:3;34306:12;34299:19;;33959:365;;;:::o;34330:419::-;34496:4;34534:2;34523:9;34519:18;34511:26;;34583:9;34577:4;34573:20;34569:1;34558:9;34554:17;34547:47;34611:131;34737:4;34611:131;:::i;:::-;34603:139;;34330:419;;;:::o;34755:179::-;34895:31;34891:1;34883:6;34879:14;34872:55;34755:179;:::o;34940:366::-;35082:3;35103:67;35167:2;35162:3;35103:67;:::i;:::-;35096:74;;35179:93;35268:3;35179:93;:::i;:::-;35297:2;35292:3;35288:12;35281:19;;34940:366;;;:::o;35312:419::-;35478:4;35516:2;35505:9;35501:18;35493:26;;35565:9;35559:4;35555:20;35551:1;35540:9;35536:17;35529:47;35593:131;35719:4;35593:131;:::i;:::-;35585:139;;35312:419;;;:::o;35737:152::-;35877:4;35873:1;35865:6;35861:14;35854:28;35737:152;:::o;35895:365::-;36037:3;36058:66;36122:1;36117:3;36058:66;:::i;:::-;36051:73;;36133:93;36222:3;36133:93;:::i;:::-;36251:2;36246:3;36242:12;36235:19;;35895:365;;;:::o;36266:419::-;36432:4;36470:2;36459:9;36455:18;36447:26;;36519:9;36513:4;36509:20;36505:1;36494:9;36490:17;36483:47;36547:131;36673:4;36547:131;:::i;:::-;36539:139;;36266:419;;;:::o;36691:180::-;36739:77;36736:1;36729:88;36836:4;36833:1;36826:15;36860:4;36857:1;36850:15;36877:180;36925:77;36922:1;36915:88;37022:4;37019:1;37012:15;37046:4;37043:1;37036:15;37063:831;37326:4;37364:3;37353:9;37349:19;37341:27;;37378:71;37446:1;37435:9;37431:17;37422:6;37378:71;:::i;:::-;37459:80;37535:2;37524:9;37520:18;37511:6;37459:80;:::i;:::-;37586:9;37580:4;37576:20;37571:2;37560:9;37556:18;37549:48;37614:108;37717:4;37708:6;37614:108;:::i;:::-;37606:116;;37732:72;37800:2;37789:9;37785:18;37776:6;37732:72;:::i;:::-;37814:73;37882:3;37871:9;37867:19;37858:6;37814:73;:::i;:::-;37063:831;;;;;;;;:::o;37900:106::-;37944:8;37993:5;37988:3;37984:15;37963:36;;37900:106;;;:::o;38012:183::-;38047:3;38085:1;38067:16;38064:23;38061:128;;;38123:1;38120;38117;38102:23;38145:34;38176:1;38170:8;38145:34;:::i;:::-;38138:41;;38061:128;38012:183;:::o;38201:281::-;38284:27;38306:4;38284:27;:::i;:::-;38276:6;38272:40;38414:6;38402:10;38399:22;38378:18;38366:10;38363:34;38360:62;38357:88;;;38425:18;;:::i;:::-;38357:88;38465:10;38461:2;38454:22;38244:238;38201:281;;:::o;38488:711::-;38527:3;38565:4;38547:16;38544:26;38573:5;38541:39;38602:20;;:::i;:::-;38677:1;38659:16;38655:24;38652:1;38646:4;38631:49;38710:4;38704:11;38809:16;38802:4;38794:6;38790:17;38787:39;38754:18;38746:6;38743:30;38727:113;38724:146;;;38855:5;;;;38724:146;38901:6;38895:4;38891:17;38937:3;38931:10;38964:18;38956:6;38953:30;38950:43;;;38986:5;;;;;;38950:43;39034:6;39027:4;39022:3;39018:14;39014:27;39093:1;39075:16;39071:24;39065:4;39061:35;39056:3;39053:44;39050:57;;;39100:5;;;;;;;39050:57;39117;39165:6;39159:4;39155:17;39147:6;39143:30;39137:4;39117:57;:::i;:::-;39190:3;39183:10;;38531:668;;;;;38488:711;;:::o;39205:171::-;39345:23;39341:1;39333:6;39329:14;39322:47;39205:171;:::o;39382:366::-;39524:3;39545:67;39609:2;39604:3;39545:67;:::i;:::-;39538:74;;39621:93;39710:3;39621:93;:::i;:::-;39739:2;39734:3;39730:12;39723:19;;39382:366;;;:::o;39754:419::-;39920:4;39958:2;39947:9;39943:18;39935:26;;40007:9;40001:4;39997:20;39993:1;39982:9;39978:17;39971:47;40035:131;40161:4;40035:131;:::i;:::-;40027:139;;39754:419;;;:::o;40179:997::-;40468:4;40506:3;40495:9;40491:19;40483:27;;40520:71;40588:1;40577:9;40573:17;40564:6;40520:71;:::i;:::-;40601:72;40669:2;40658:9;40654:18;40645:6;40601:72;:::i;:::-;40683;40751:2;40740:9;40736:18;40727:6;40683:72;:::i;:::-;40765;40833:2;40822:9;40818:18;40809:6;40765:72;:::i;:::-;40847:73;40915:3;40904:9;40900:19;40891:6;40847:73;:::i;:::-;40930;40998:3;40987:9;40983:19;40974:6;40930:73;:::i;:::-;41013;41081:3;41070:9;41066:19;41057:6;41013:73;:::i;:::-;41096;41164:3;41153:9;41149:19;41140:6;41096:73;:::i;:::-;40179:997;;;;;;;;;;;:::o;41182:179::-;41322:31;41318:1;41310:6;41306:14;41299:55;41182:179;:::o;41367:366::-;41509:3;41530:67;41594:2;41589:3;41530:67;:::i;:::-;41523:74;;41606:93;41695:3;41606:93;:::i;:::-;41724:2;41719:3;41715:12;41708:19;;41367:366;;;:::o;41739:419::-;41905:4;41943:2;41932:9;41928:18;41920:26;;41992:9;41986:4;41982:20;41978:1;41967:9;41963:17;41956:47;42020:131;42146:4;42020:131;:::i;:::-;42012:139;;41739:419;;;:::o;42164:233::-;42203:3;42226:24;42244:5;42226:24;:::i;:::-;42217:33;;42272:66;42265:5;42262:77;42259:103;;42342:18;;:::i;:::-;42259:103;42389:1;42382:5;42378:13;42371:20;;42164:233;;;:::o;42403:152::-;42543:4;42539:1;42531:6;42527:14;42520:28;42403:152;:::o;42561:365::-;42703:3;42724:66;42788:1;42783:3;42724:66;:::i;:::-;42717:73;;42799:93;42888:3;42799:93;:::i;:::-;42917:2;42912:3;42908:12;42901:19;;42561:365;;;:::o;42932:419::-;43098:4;43136:2;43125:9;43121:18;43113:26;;43185:9;43179:4;43175:20;43171:1;43160:9;43156:17;43149:47;43213:131;43339:4;43213:131;:::i;:::-;43205:139;;42932:419;;;:::o;43357:152::-;43497:4;43493:1;43485:6;43481:14;43474:28;43357:152;:::o;43515:365::-;43657:3;43678:66;43742:1;43737:3;43678:66;:::i;:::-;43671:73;;43753:93;43842:3;43753:93;:::i;:::-;43871:2;43866:3;43862:12;43855:19;;43515:365;;;:::o;43886:419::-;44052:4;44090:2;44079:9;44075:18;44067:26;;44139:9;44133:4;44129:20;44125:1;44114:9;44110:17;44103:47;44167:131;44293:4;44167:131;:::i;:::-;44159:139;;43886:419;;;:::o;44311:180::-;44359:77;44356:1;44349:88;44456:4;44453:1;44446:15;44480:4;44477:1;44470:15

Swarm Source

ipfs://a08d00caacab9897d571162a6629662e721327fde774c664eba0947eb880397f
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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