S Price: $0.523321 (-12.33%)

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
5,209.645154816556972697 FARM

Value
$0.00
0x7ac41261e7f9467a4a541f4b912fb16b561094b2
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.20+commit.a1b79de6

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.20;

// 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, "ReentrancyGuard: reentrant call");
        _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("Ownable: new owner is the zero address");
        }
        _transferOwnership(initialOwner);
    }

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

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

    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
    }

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

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

/**
 * @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), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(from, to, amount);
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        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), "ERC20: mint to the zero address");
        _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), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            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);
    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);
}

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

// FARMER Token Contract
contract FARMER is ERC20, ReentrancyGuard, Ownable {
    // Constants
    uint256 public constant TOTAL_SUPPLY = 1_000_000 * 10**18;
    uint256 public constant TAX_RATE = 5; // 5%
    uint256 public constant LIQUIDITY_TAX = 25; // 2.5%
    uint256 public constant AIRDROP_TAX = 25; // 2.5%
    uint256 public constant MIN_HOLDER_AMOUNT = 10 * 10**18; // 10 tokens
    uint256 public constant MIN_TOKENS_FOR_PROCESS = 1000 * 10**18; // 1000 token minimum for both operations

    // Metropolis DEX addresses
    IMetropolisRouter public metropolisRouter;
    IMetropolisFactory public immutable metropolisFactory;
    address public immutable 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);

    uint256 private _pendingLiquidityTokens;
    uint256 private _pendingAirdropTokens;

    constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) {
        metropolisRouter = IMetropolisRouter(0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3);
        metropolisFactory = IMetropolisFactory(0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0);
        sonicToken = metropolisRouter.WETH();

        // Mint all tokens to contract first
        _mint(address(this), TOTAL_SUPPLY);
        
        // Create pair
        liquidityPair = metropolisFactory.createPair(address(this), sonicToken);
        
        // Approve router for full supply
        _approve(address(this), address(metropolisRouter), TOTAL_SUPPLY);
    }

    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 {
        if (from == owner() || to == owner() || from == address(this) || to == address(this)) {
            super._transfer(from, to, amount);
            _updateHolder(from);
            _updateHolder(to);
        } else {
            bool isSellOrBuy = to == liquidityPair || from == liquidityPair;
            
            if (isSellOrBuy) {
                uint256 totalTax = (amount * TAX_RATE) / 100;
                uint256 liquidityTax = (totalTax * LIQUIDITY_TAX) / 100;
                uint256 airdropTax = (totalTax * AIRDROP_TAX) / 100;
                uint256 transferAmount = amount - totalTax;
                
                // Transfer the tax to contract
                super._transfer(from, address(this), totalTax);
                // Transfer the remaining amount
                super._transfer(from, to, transferAmount);

                // Accumulate tokens for liquidity and airdrop
                _pendingLiquidityTokens += liquidityTax;
                _pendingAirdropTokens += airdropTax;

                // Process both when total accumulated tokens reach 1000
                if ((_pendingLiquidityTokens + _pendingAirdropTokens) >= MIN_TOKENS_FOR_PROCESS && 
                    holders.length > 0) {
                    _processLiquidityAndAirdrop();
                }
            } else {
                super._transfer(from, to, amount);
            }
            
            _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() private {
        uint256 tokensForLiquidity = _pendingLiquidityTokens;
        uint256 tokensForAirdrop = _pendingAirdropTokens;
        _pendingLiquidityTokens = 0;
        _pendingAirdropTokens = 0;

        uint256 totalTokens = tokensForLiquidity + tokensForAirdrop;
        
        // Convert all tokens to WETH first
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = metropolisRouter.WETH();
        
        // Check if we need to approve more tokens
        uint256 currentAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter));
        if (currentAllowance < totalTokens) {
            _approve(address(this), address(metropolisRouter), TOTAL_SUPPLY);
        }
        
        try metropolisRouter.swapExactTokensForTokens(
            totalTokens,
            0, // minimum output amount
            path,
            address(this),
            block.timestamp
        ) {
            uint256 wethBalance = IERC20(metropolisRouter.WETH()).balanceOf(address(this));
            if (wethBalance > 0) {
                // Calculate proportions
                uint256 wethForLiquidity = (wethBalance * tokensForLiquidity) / totalTokens;
                uint256 wethForAirdrop = wethBalance - wethForLiquidity;

                // Process liquidity first
                if (wethForLiquidity > 0) {
                    // Check WETH approval
                    uint256 wethAllowance = IERC20(metropolisRouter.WETH()).allowance(address(this), address(metropolisRouter));
                    if (wethAllowance < wethForLiquidity) {
                        IERC20(metropolisRouter.WETH()).approve(address(metropolisRouter), type(uint256).max);
                    }
                    
                    try metropolisRouter.addLiquidity(
                        address(this),
                        metropolisRouter.WETH(),
                        tokensForLiquidity / 2,
                        wethForLiquidity,
                        0,
                        0,
                        address(this),
                        block.timestamp
                    ) {
                        emit LiquidityAdded(tokensForLiquidity / 2, wethForLiquidity);
                    } catch {
                        // If liquidity add fails, just continue with airdrop
                        _pendingLiquidityTokens = tokensForLiquidity;
                    }
                }

                // Then process airdrop
                if (wethForAirdrop > 0 && holders.length > 0) {
                    uint256 amountPerHolder = wethForAirdrop / holders.length;
                    
                    if (amountPerHolder > 0) {
                        for (uint256 i = 0; i < holders.length && i < 100; i++) {
                            try IERC20(metropolisRouter.WETH()).transfer(holders[i], amountPerHolder) {
                                // Transfer successful
                            } catch {
                                continue;
                            }
                        }
                        
                        emit AirdropDistributed(wethForAirdrop, holders.length);
                    }
                }
            }
        } catch {
            // If the swap fails, restore both pending amounts
            _pendingLiquidityTokens = tokensForLiquidity;
            _pendingAirdropTokens = tokensForAirdrop;
        }
    }

    // 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");
        
        // Check contract balance
        require(
            IERC20(address(this)).balanceOf(address(this)) >= tokenAmount,
            "Insufficient token balance in contract"
        );

        // Approve router to spend tokens directly from contract
        _approve(address(this), address(metropolisRouter), tokenAmount);

        // Add liquidity with minimal checks
        try metropolisRouter.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0,              // No minimum token amount
            0,              // No minimum ETH amount
            msg.sender,     // LP tokens will go to owner directly
            block.timestamp // Immediate execution
        ) {
            emit LiquidityAdded(tokenAmount, msg.value);
        } catch {
            // If failed, revert the approval
            _approve(address(this), address(metropolisRouter), 0);
            revert("Failed to add liquidity");
        }

        // Return any unused ETH
        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;
    }

    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":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":"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":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":[],"name":"AIRDROP_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITY_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_HOLDER_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_TOKENS_FOR_PROCESS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TAX_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"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":[],"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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokensToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801562000010575f80fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d0000000000000000000000000000000000000000000000000000000081525081600390816200008f919062000a43565b508060049081620000a1919062000a43565b50505060016005819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001149062000bab565b60405180910390fd5b6200012e81620003b260201b60201c565b507395a7e403d7cf20f675ff9273d66e94d35ba49fa360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000236573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025c919062000c30565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620002ab3069d3c21bcecceda10000006200047560201b60201c565b60805173ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a0516040518363ffffffff1660e01b8152600401620002ec92919062000c71565b6020604051808303815f875af115801562000309573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200032f919062000c30565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ac3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000620005da60201b60201c565b62000ec5565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004dd9062000cea565b60405180910390fd5b620004f95f8383620007a560201b60201c565b8060025f8282546200050c919062000d37565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005bb919062000d82565b60405180910390a3620005d65f8383620007bd60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200064b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006429062000e11565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b39062000ea5565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000798919062000d82565b60405180910390a3505050565b620007b8838383620007d560201b60201c565b505050565b620007d0838383620007da60201b60201c565b505050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200085b57607f821691505b60208210810362000871576200087062000816565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620008d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000898565b620008e1868362000898565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200092b620009256200091f84620008f9565b62000902565b620008f9565b9050919050565b5f819050919050565b62000946836200090b565b6200095e620009558262000932565b848454620008a4565b825550505050565b5f90565b6200097462000966565b620009818184846200093b565b505050565b5b81811015620009a8576200099c5f826200096a565b60018101905062000987565b5050565b601f821115620009f757620009c18162000877565b620009cc8462000889565b81016020851015620009dc578190505b620009f4620009eb8562000889565b83018262000986565b50505b505050565b5f82821c905092915050565b5f62000a195f1984600802620009fc565b1980831691505092915050565b5f62000a33838362000a08565b9150826002028217905092915050565b62000a4e82620007df565b67ffffffffffffffff81111562000a6a5762000a69620007e9565b5b62000a76825462000843565b62000a83828285620009ac565b5f60209050601f83116001811462000ab9575f841562000aa4578287015190505b62000ab0858262000a26565b86555062000b1f565b601f19841662000ac98662000877565b5f5b8281101562000af25784890151825560018201915060208501945060208101905062000acb565b8683101562000b12578489015162000b0e601f89168262000a08565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f62000b9360268362000b27565b915062000ba08262000b37565b604082019050919050565b5f6020820190508181035f83015262000bc48162000b85565b9050919050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000bfa8262000bcf565b9050919050565b62000c0c8162000bee565b811462000c17575f80fd5b50565b5f8151905062000c2a8162000c01565b92915050565b5f6020828403121562000c485762000c4762000bcb565b5b5f62000c578482850162000c1a565b91505092915050565b62000c6b8162000bee565b82525050565b5f60408201905062000c865f83018562000c60565b62000c95602083018462000c60565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000cd2601f8362000b27565b915062000cdf8262000c9c565b602082019050919050565b5f6020820190508181035f83015262000d038162000cc4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000d4382620008f9565b915062000d5083620008f9565b925082820190508082111562000d6b5762000d6a62000d0a565b5b92915050565b62000d7c81620008f9565b82525050565b5f60208201905062000d975f83018462000d71565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f62000df960248362000b27565b915062000e068262000d9d565b604082019050919050565b5f6020820190508181035f83015262000e2a8162000deb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f62000e8d60228362000b27565b915062000e9a8262000e31565b604082019050919050565b5f6020820190508181035f83015262000ebe8162000e7f565b9050919050565b60805160a051613be662000ee75f395f610b9c01525f61119f0152613be65ff3fe6080604052600436106101db575f3560e01c806379304bec11610101578063a9059cbb11610094578063d4e123a611610063578063d4e123a6146106ac578063dd62ed3e146106d6578063f2fde38b14610712578063fd7c9fab1461073a576101e2565b8063a9059cbb146105e2578063bc531dae1461061e578063c0d7865514610648578063d4d7b19a14610670576101e2565b80638da5cb5b116100d05780638da5cb5b1461053a578063902d55a51461056457806395a6e2541461058e57806395d89b41146105b8576101e2565b806379304bec14610494578063808a5457146104bc57806381f0549f146104e657806383f170be14610510576101e2565b806341a22cc2116101795780635fe8e7cc116101485780635fe8e7cc146103da57806362b6327a1461040457806370a082311461042e5780637136982b1461046a576101e2565b806341a22cc214610342578063461a3a951461035e57806357376198146103885780635d76b04c146103b0576101e2565b806318160ddd116101b557806318160ddd1461027657806323b872dd146102a05780632a11ced0146102dc578063313ce56714610318576101e2565b806306fdde03146101e657806308dee2b414610210578063095ea7b31461023a576101e2565b366101e257005b5f80fd5b3480156101f1575f80fd5b506101fa610764565b604051610207919061296d565b60405180910390f35b34801561021b575f80fd5b506102246107f4565b60405161023191906129a5565b60405180910390f35b348015610245575f80fd5b50610260600480360381019061025b9190612a53565b6107fd565b60405161026d9190612aab565b60405180910390f35b348015610281575f80fd5b5061028a610818565b60405161029791906129a5565b60405180910390f35b3480156102ab575f80fd5b506102c660048036038101906102c19190612ac4565b610821565b6040516102d39190612aab565b60405180910390f35b3480156102e7575f80fd5b5061030260048036038101906102fd9190612b14565b610848565b60405161030f9190612b4e565b60405180910390f35b348015610323575f80fd5b5061032c610883565b6040516103399190612b82565b60405180910390f35b61035c60048036038101906103579190612b14565b61088b565b005b348015610369575f80fd5b50610372610b9a565b60405161037f9190612b4e565b60405180910390f35b348015610393575f80fd5b506103ae60048036038101906103a99190612a53565b610bbe565b005b3480156103bb575f80fd5b506103c4610cbb565b6040516103d191906129a5565b60405180910390f35b3480156103e5575f80fd5b506103ee610cc4565b6040516103fb9190612c52565b60405180910390f35b34801561040f575f80fd5b50610418610d4f565b6040516104259190612ccd565b60405180910390f35b348015610439575f80fd5b50610454600480360381019061044f9190612ce6565b610d74565b60405161046191906129a5565b60405180910390f35b348015610475575f80fd5b5061047e610db9565b60405161048b91906129a5565b60405180910390f35b34801561049f575f80fd5b506104ba60048036038101906104b59190612b14565b610dc5565b005b3480156104c7575f80fd5b506104d0610e95565b6040516104dd9190612b4e565b60405180910390f35b3480156104f1575f80fd5b506104fa610eba565b60405161050791906129a5565b60405180910390f35b34801561051b575f80fd5b50610524610ebf565b60405161053191906129a5565b60405180910390f35b348015610545575f80fd5b5061054e610ec4565b60405161055b9190612b4e565b60405180910390f35b34801561056f575f80fd5b50610578610eec565b60405161058591906129a5565b60405180910390f35b348015610599575f80fd5b506105a2610efa565b6040516105af91906129a5565b60405180910390f35b3480156105c3575f80fd5b506105cc610f07565b6040516105d9919061296d565b60405180910390f35b3480156105ed575f80fd5b5061060860048036038101906106039190612a53565b610f97565b6040516106159190612aab565b60405180910390f35b348015610629575f80fd5b50610632610fb2565b60405161063f91906129a5565b60405180910390f35b348015610653575f80fd5b5061066e60048036038101906106699190612ce6565b610fb7565b005b34801561067b575f80fd5b5061069660048036038101906106919190612ce6565b611070565b6040516106a39190612aab565b60405180910390f35b3480156106b7575f80fd5b506106c061108d565b6040516106cd91906129a5565b60405180910390f35b3480156106e1575f80fd5b506106fc60048036038101906106f79190612d11565b611099565b60405161070991906129a5565b60405180910390f35b34801561071d575f80fd5b5061073860048036038101906107339190612ce6565b61111b565b005b348015610745575f80fd5b5061074e61119d565b60405161075b9190612d6f565b60405180910390f35b60606003805461077390612db5565b80601f016020809104026020016040519081016040528092919081815260200182805461079f90612db5565b80156107ea5780601f106107c1576101008083540402835291602001916107ea565b820191905f5260205f20905b8154815290600101906020018083116107cd57829003601f168201915b5050505050905090565b5f600b54905090565b5f8033905061080d8185856111c1565b600191505092915050565b5f600254905090565b5f80339050610831858285611384565b61083c85858561140f565b60019150509392505050565b600a8181548110610857575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b6108936116d6565b5f34116108d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cc90612e55565b60405180910390fd5b5f8111610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e90612ee3565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109519190612b4e565b602060405180830381865afa15801561096c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109909190612f15565b10156109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c890612fb0565b60405180910390fd5b6109fd3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836111c1565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430845f8033426040518863ffffffff1660e01b8152600401610a6296959493929190613007565b60606040518083038185885af193505050508015610a9e57506040513d601f19601f82011682018060405250810190610a9b9190613066565b60015b610b0957610ace3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f6111c1565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0090613100565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8134604051610b3d92919061311e565b60405180910390a15f4790505f811115610b96573373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610b94573d5f803e3d5ffd5b505b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610bc66116d6565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b9061318f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610c58610ec4565b836040518363ffffffff1660e01b8152600401610c769291906131ad565b6020604051808303815f875af1158015610c92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb691906131fe565b505050565b5f600c54905090565b6060600a805480602002602001604051908101604052809291908181526020018280548015610d4557602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610cfc575b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f600a80549050905090565b610dcd6116d6565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e079190612b4e565b602060405180830381865afa158015610e22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e469190612f15565b1015610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90613273565b60405180910390fd5b610e9230338361140f565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601981565b600581565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b69d3c21bcecceda100000081565b683635c9adc5dea0000081565b606060048054610f1690612db5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4290612db5565b8015610f8d5780601f10610f6457610100808354040283529160200191610f8d565b820191905f5260205f20905b815481529060010190602001808311610f7057829003601f168201915b5050505050905090565b5f80339050610fa781858561140f565b600191505092915050565b601981565b610fbf6116d6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361102d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611024906132db565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6009602052805f5260405f205f915054906101000a900460ff1681565b678ac7230489e8000081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6111236116d6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613369565b60405180910390fd5b61119a8161174d565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361122f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611226906133f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490613485565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161137791906129a5565b60405180910390a3505050565b5f61138f8484611099565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461140957818110156113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f2906134ed565b60405180910390fd5b61140884848484036111c1565b5b50505050565b611417610ec4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114825750611453610ec4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806114b857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806114ee57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15611515576114fe838383611810565b61150783611a7c565b61151082611a7c565b6116d1565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806115bd575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b905080156116b1575f60646005846115d59190613538565b6115df91906135a6565b90505f60646019836115f19190613538565b6115fb91906135a6565b90505f606460198461160d9190613538565b61161791906135a6565b90505f838661162691906135d6565b9050611633883086611810565b61163e888883611810565b82600b5f82825461164f9190613609565b9250508190555081600c5f8282546116679190613609565b92505081905550683635c9adc5dea00000600c54600b546116889190613609565b1015801561169a57505f600a80549050115b156116a8576116a7611cb6565b5b505050506116bd565b6116bc848484611810565b5b6116c684611a7c565b6116cf83611a7c565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff166116f5610ec4565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290613686565b60405180910390fd5b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613714565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906137a2565b60405180910390fd5b6118f7838383612736565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561197a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197190613830565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a6391906129a5565b60405180910390a3611a76848484612746565b50505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611b0557503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611cb3575f611b1482610d74565b90505f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050678ac7230489e800008210158015611b79575080155b15611c3857600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600a83908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611cb0565b678ac7230489e8000082108015611c4c5750805b15611caf575f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611cae83612756565b5b5b50505b50565b5f600b5490505f600c5490505f600b819055505f600c819055505f8183611cdd9190613609565b90505f600267ffffffffffffffff811115611cfb57611cfa61384e565b5b604051908082528060200260200182016040528015611d295781602001602082028036833780820191505090505b50905030815f81518110611d4057611d3f61387b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611de4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0891906138bc565b81600181518110611e1c57611e1b61387b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f3073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611eb39291906138e7565b602060405180830381865afa158015611ece573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef29190612f15565b905082811015611f3357611f323060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda10000006111c1565b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed1739845f8530426040518663ffffffff1660e01b8152600401611f9595949392919061390e565b5f604051808303815f875af1925050508015611fd357506040513d5f823e3d601f19601f82011682018060405250810190611fd09190613a79565b60015b611fea5784600b8190555083600c8190555061272f565b505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612056573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207a91906138bc565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120b29190612b4e565b602060405180830381865afa1580156120cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f19190612f15565b90505f81111561272d575f8487836121099190613538565b61211391906135a6565b90505f818361212291906135d6565b90505f821115612541575f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612197573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121bb91906138bc565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016122169291906138e7565b602060405180830381865afa158015612231573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122559190612f15565b9050828110156123aa5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ed91906138bc565b73ffffffffffffffffffffffffffffffffffffffff1663095ea7b360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016123689291906131ad565b6020604051808303815f875af1158015612384573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a891906131fe565b505b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e337003060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612452573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247691906138bc565b60028d61248391906135a6565b875f8030426040518963ffffffff1660e01b81526004016124ab989796959493929190613ac0565b6060604051808303815f875af19250505080156124e657506040513d601f19601f820116820180604052508101906124e39190613066565b60015b6124f65788600b8190555061253f565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60028a61252791906135a6565b8460405161253692919061311e565b60405180910390a15b505b5f8111801561255457505f600a80549050115b1561272a575f600a805490508261256b91906135a6565b90505f811115612728575f5b600a805490508110801561258b5750606481105b156126e85760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061261e91906138bc565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a838154811061264d5761264c61387b565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016126939291906131ad565b6020604051808303815f875af19250505080156126ce57506040513d601f19601f820116820180604052508101906126cb91906131fe565b60015b156126d557505b80806126e090613b3c565b915050612577565b507f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21782600a8054905060405161271f92919061311e565b60405180910390a15b505b50505b505b5050505050565b6127418383836128d9565b505050565b6127518383836128de565b505050565b5f5b600a805490508110156128d5578173ffffffffffffffffffffffffffffffffffffffff16600a82815481106127905761278f61387b565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036128c257600a6001600a805490506127e791906135d6565b815481106127f8576127f761387b565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a82815481106128345761283361387b565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a80548061288b5761288a613b83565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556128d5565b80806128cd90613b3c565b915050612758565b5050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561291a5780820151818401526020810190506128ff565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61293f826128e3565b61294981856128ed565b93506129598185602086016128fd565b61296281612925565b840191505092915050565b5f6020820190508181035f8301526129858184612935565b905092915050565b5f819050919050565b61299f8161298d565b82525050565b5f6020820190506129b85f830184612996565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6129f8826129cf565b9050919050565b612a08816129ee565b8114612a12575f80fd5b50565b5f81359050612a23816129ff565b92915050565b612a328161298d565b8114612a3c575f80fd5b50565b5f81359050612a4d81612a29565b92915050565b5f8060408385031215612a6957612a686129c7565b5b5f612a7685828601612a15565b9250506020612a8785828601612a3f565b9150509250929050565b5f8115159050919050565b612aa581612a91565b82525050565b5f602082019050612abe5f830184612a9c565b92915050565b5f805f60608486031215612adb57612ada6129c7565b5b5f612ae886828701612a15565b9350506020612af986828701612a15565b9250506040612b0a86828701612a3f565b9150509250925092565b5f60208284031215612b2957612b286129c7565b5b5f612b3684828501612a3f565b91505092915050565b612b48816129ee565b82525050565b5f602082019050612b615f830184612b3f565b92915050565b5f60ff82169050919050565b612b7c81612b67565b82525050565b5f602082019050612b955f830184612b73565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612bcd816129ee565b82525050565b5f612bde8383612bc4565b60208301905092915050565b5f602082019050919050565b5f612c0082612b9b565b612c0a8185612ba5565b9350612c1583612bb5565b805f5b83811015612c45578151612c2c8882612bd3565b9750612c3783612bea565b925050600181019050612c18565b5085935050505092915050565b5f6020820190508181035f830152612c6a8184612bf6565b905092915050565b5f819050919050565b5f612c95612c90612c8b846129cf565b612c72565b6129cf565b9050919050565b5f612ca682612c7b565b9050919050565b5f612cb782612c9c565b9050919050565b612cc781612cad565b82525050565b5f602082019050612ce05f830184612cbe565b92915050565b5f60208284031215612cfb57612cfa6129c7565b5b5f612d0884828501612a15565b91505092915050565b5f8060408385031215612d2757612d266129c7565b5b5f612d3485828601612a15565b9250506020612d4585828601612a15565b9150509250929050565b5f612d5982612c9c565b9050919050565b612d6981612d4f565b82525050565b5f602082019050612d825f830184612d60565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612dcc57607f821691505b602082108103612ddf57612dde612d88565b5b50919050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c69715f8201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b5f612e3f6026836128ed565b9150612e4a82612de5565b604082019050919050565b5f6020820190508181035f830152612e6c81612e33565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e5f8201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b5f612ecd602f836128ed565b9150612ed882612e73565b604082019050919050565b5f6020820190508181035f830152612efa81612ec1565b9050919050565b5f81519050612f0f81612a29565b92915050565b5f60208284031215612f2a57612f296129c7565b5b5f612f3784828501612f01565b91505092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f5f8201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b5f612f9a6026836128ed565b9150612fa582612f40565b604082019050919050565b5f6020820190508181035f830152612fc781612f8e565b9050919050565b5f819050919050565b5f612ff1612fec612fe784612fce565b612c72565b61298d565b9050919050565b61300181612fd7565b82525050565b5f60c08201905061301a5f830189612b3f565b6130276020830188612996565b6130346040830187612ff8565b6130416060830186612ff8565b61304e6080830185612b3f565b61305b60a0830184612996565b979650505050505050565b5f805f6060848603121561307d5761307c6129c7565b5b5f61308a86828701612f01565b935050602061309b86828701612f01565b92505060406130ac86828701612f01565b9150509250925092565b7f4661696c656420746f20616464206c69717569646974790000000000000000005f82015250565b5f6130ea6017836128ed565b91506130f5826130b6565b602082019050919050565b5f6020820190508181035f830152613117816130de565b9050919050565b5f6040820190506131315f830185612996565b61313e6020830184612996565b9392505050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e7300000000005f82015250565b5f613179601b836128ed565b915061318482613145565b602082019050919050565b5f6020820190508181035f8301526131a68161316d565b9050919050565b5f6040820190506131c05f830185612b3f565b6131cd6020830184612996565b9392505050565b6131dd81612a91565b81146131e7575f80fd5b50565b5f815190506131f8816131d4565b92915050565b5f60208284031215613213576132126129c7565b5b5f613220848285016131ea565b91505092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61325d6014836128ed565b915061326882613229565b602082019050919050565b5f6020820190508181035f83015261328a81613251565b9050919050565b7f496e76616c696420726f757465722061646472657373000000000000000000005f82015250565b5f6132c56016836128ed565b91506132d082613291565b602082019050919050565b5f6020820190508181035f8301526132f2816132b9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6133536026836128ed565b915061335e826132f9565b604082019050919050565b5f6020820190508181035f83015261338081613347565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6133e16024836128ed565b91506133ec82613387565b604082019050919050565b5f6020820190508181035f83015261340e816133d5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61346f6022836128ed565b915061347a82613415565b604082019050919050565b5f6020820190508181035f83015261349c81613463565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6134d7601d836128ed565b91506134e2826134a3565b602082019050919050565b5f6020820190508181035f830152613504816134cb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6135428261298d565b915061354d8361298d565b925082820261355b8161298d565b915082820484148315176135725761357161350b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6135b08261298d565b91506135bb8361298d565b9250826135cb576135ca613579565b5b828204905092915050565b5f6135e08261298d565b91506135eb8361298d565b92508282039050818111156136035761360261350b565b5b92915050565b5f6136138261298d565b915061361e8361298d565b92508282019050808211156136365761363561350b565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136706020836128ed565b915061367b8261363c565b602082019050919050565b5f6020820190508181035f83015261369d81613664565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6136fe6025836128ed565b9150613709826136a4565b604082019050919050565b5f6020820190508181035f83015261372b816136f2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61378c6023836128ed565b915061379782613732565b604082019050919050565b5f6020820190508181035f8301526137b981613780565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61381a6026836128ed565b9150613825826137c0565b604082019050919050565b5f6020820190508181035f8301526138478161380e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506138b6816129ff565b92915050565b5f602082840312156138d1576138d06129c7565b5b5f6138de848285016138a8565b91505092915050565b5f6040820190506138fa5f830185612b3f565b6139076020830184612b3f565b9392505050565b5f60a0820190506139215f830188612996565b61392e6020830187612ff8565b81810360408301526139408186612bf6565b905061394f6060830185612b3f565b61395c6080830184612996565b9695505050505050565b5f80fd5b61397382612925565b810181811067ffffffffffffffff821117156139925761399161384e565b5b80604052505050565b5f6139a46129be565b90506139b0828261396a565b919050565b5f67ffffffffffffffff8211156139cf576139ce61384e565b5b602082029050602081019050919050565b5f80fd5b5f6139f66139f1846139b5565b61399b565b90508083825260208201905060208402830185811115613a1957613a186139e0565b5b835b81811015613a425780613a2e8882612f01565b845260208401935050602081019050613a1b565b5050509392505050565b5f82601f830112613a6057613a5f613966565b5b8151613a708482602086016139e4565b91505092915050565b5f60208284031215613a8e57613a8d6129c7565b5b5f82015167ffffffffffffffff811115613aab57613aaa6129cb565b5b613ab784828501613a4c565b91505092915050565b5f61010082019050613ad45f83018b612b3f565b613ae1602083018a612b3f565b613aee6040830189612996565b613afb6060830188612996565b613b086080830187612ff8565b613b1560a0830186612ff8565b613b2260c0830185612b3f565b613b2f60e0830184612996565b9998505050505050505050565b5f613b468261298d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b7857613b7761350b565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea264697066735822122059b880ddcc127446371cd43978d2e2e92f4a0c29090bbde0c58be912baf614b864736f6c63430008140033

Deployed Bytecode

0x6080604052600436106101db575f3560e01c806379304bec11610101578063a9059cbb11610094578063d4e123a611610063578063d4e123a6146106ac578063dd62ed3e146106d6578063f2fde38b14610712578063fd7c9fab1461073a576101e2565b8063a9059cbb146105e2578063bc531dae1461061e578063c0d7865514610648578063d4d7b19a14610670576101e2565b80638da5cb5b116100d05780638da5cb5b1461053a578063902d55a51461056457806395a6e2541461058e57806395d89b41146105b8576101e2565b806379304bec14610494578063808a5457146104bc57806381f0549f146104e657806383f170be14610510576101e2565b806341a22cc2116101795780635fe8e7cc116101485780635fe8e7cc146103da57806362b6327a1461040457806370a082311461042e5780637136982b1461046a576101e2565b806341a22cc214610342578063461a3a951461035e57806357376198146103885780635d76b04c146103b0576101e2565b806318160ddd116101b557806318160ddd1461027657806323b872dd146102a05780632a11ced0146102dc578063313ce56714610318576101e2565b806306fdde03146101e657806308dee2b414610210578063095ea7b31461023a576101e2565b366101e257005b5f80fd5b3480156101f1575f80fd5b506101fa610764565b604051610207919061296d565b60405180910390f35b34801561021b575f80fd5b506102246107f4565b60405161023191906129a5565b60405180910390f35b348015610245575f80fd5b50610260600480360381019061025b9190612a53565b6107fd565b60405161026d9190612aab565b60405180910390f35b348015610281575f80fd5b5061028a610818565b60405161029791906129a5565b60405180910390f35b3480156102ab575f80fd5b506102c660048036038101906102c19190612ac4565b610821565b6040516102d39190612aab565b60405180910390f35b3480156102e7575f80fd5b5061030260048036038101906102fd9190612b14565b610848565b60405161030f9190612b4e565b60405180910390f35b348015610323575f80fd5b5061032c610883565b6040516103399190612b82565b60405180910390f35b61035c60048036038101906103579190612b14565b61088b565b005b348015610369575f80fd5b50610372610b9a565b60405161037f9190612b4e565b60405180910390f35b348015610393575f80fd5b506103ae60048036038101906103a99190612a53565b610bbe565b005b3480156103bb575f80fd5b506103c4610cbb565b6040516103d191906129a5565b60405180910390f35b3480156103e5575f80fd5b506103ee610cc4565b6040516103fb9190612c52565b60405180910390f35b34801561040f575f80fd5b50610418610d4f565b6040516104259190612ccd565b60405180910390f35b348015610439575f80fd5b50610454600480360381019061044f9190612ce6565b610d74565b60405161046191906129a5565b60405180910390f35b348015610475575f80fd5b5061047e610db9565b60405161048b91906129a5565b60405180910390f35b34801561049f575f80fd5b506104ba60048036038101906104b59190612b14565b610dc5565b005b3480156104c7575f80fd5b506104d0610e95565b6040516104dd9190612b4e565b60405180910390f35b3480156104f1575f80fd5b506104fa610eba565b60405161050791906129a5565b60405180910390f35b34801561051b575f80fd5b50610524610ebf565b60405161053191906129a5565b60405180910390f35b348015610545575f80fd5b5061054e610ec4565b60405161055b9190612b4e565b60405180910390f35b34801561056f575f80fd5b50610578610eec565b60405161058591906129a5565b60405180910390f35b348015610599575f80fd5b506105a2610efa565b6040516105af91906129a5565b60405180910390f35b3480156105c3575f80fd5b506105cc610f07565b6040516105d9919061296d565b60405180910390f35b3480156105ed575f80fd5b5061060860048036038101906106039190612a53565b610f97565b6040516106159190612aab565b60405180910390f35b348015610629575f80fd5b50610632610fb2565b60405161063f91906129a5565b60405180910390f35b348015610653575f80fd5b5061066e60048036038101906106699190612ce6565b610fb7565b005b34801561067b575f80fd5b5061069660048036038101906106919190612ce6565b611070565b6040516106a39190612aab565b60405180910390f35b3480156106b7575f80fd5b506106c061108d565b6040516106cd91906129a5565b60405180910390f35b3480156106e1575f80fd5b506106fc60048036038101906106f79190612d11565b611099565b60405161070991906129a5565b60405180910390f35b34801561071d575f80fd5b5061073860048036038101906107339190612ce6565b61111b565b005b348015610745575f80fd5b5061074e61119d565b60405161075b9190612d6f565b60405180910390f35b60606003805461077390612db5565b80601f016020809104026020016040519081016040528092919081815260200182805461079f90612db5565b80156107ea5780601f106107c1576101008083540402835291602001916107ea565b820191905f5260205f20905b8154815290600101906020018083116107cd57829003601f168201915b5050505050905090565b5f600b54905090565b5f8033905061080d8185856111c1565b600191505092915050565b5f600254905090565b5f80339050610831858285611384565b61083c85858561140f565b60019150509392505050565b600a8181548110610857575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b6108936116d6565b5f34116108d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cc90612e55565b60405180910390fd5b5f8111610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090e90612ee3565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109519190612b4e565b602060405180830381865afa15801561096c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109909190612f15565b10156109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c890612fb0565b60405180910390fd5b6109fd3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836111c1565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430845f8033426040518863ffffffff1660e01b8152600401610a6296959493929190613007565b60606040518083038185885af193505050508015610a9e57506040513d601f19601f82011682018060405250810190610a9b9190613066565b60015b610b0957610ace3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f6111c1565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0090613100565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8134604051610b3d92919061311e565b60405180910390a15f4790505f811115610b96573373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610b94573d5f803e3d5ffd5b505b5050565b7f000000000000000000000000039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b610bc66116d6565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b9061318f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610c58610ec4565b836040518363ffffffff1660e01b8152600401610c769291906131ad565b6020604051808303815f875af1158015610c92573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb691906131fe565b505050565b5f600c54905090565b6060600a805480602002602001604051908101604052809291908181526020018280548015610d4557602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610cfc575b5050505050905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f600a80549050905090565b610dcd6116d6565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e079190612b4e565b602060405180830381865afa158015610e22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e469190612f15565b1015610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90613273565b60405180910390fd5b610e9230338361140f565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601981565b600581565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b69d3c21bcecceda100000081565b683635c9adc5dea0000081565b606060048054610f1690612db5565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4290612db5565b8015610f8d5780601f10610f6457610100808354040283529160200191610f8d565b820191905f5260205f20905b815481529060010190602001808311610f7057829003601f168201915b5050505050905090565b5f80339050610fa781858561140f565b600191505092915050565b601981565b610fbf6116d6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361102d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611024906132db565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6009602052805f5260405f205f915054906101000a900460ff1681565b678ac7230489e8000081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6111236116d6565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613369565b60405180910390fd5b61119a8161174d565b50565b7f0000000000000000000000001570300e9cfec66c9fb0c8bc14366c86eb170ad081565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361122f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611226906133f7565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361129d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129490613485565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161137791906129a5565b60405180910390a3505050565b5f61138f8484611099565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461140957818110156113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f2906134ed565b60405180910390fd5b61140884848484036111c1565b5b50505050565b611417610ec4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806114825750611453610ec4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806114b857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806114ee57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15611515576114fe838383611810565b61150783611a7c565b61151082611a7c565b6116d1565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806115bd575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b905080156116b1575f60646005846115d59190613538565b6115df91906135a6565b90505f60646019836115f19190613538565b6115fb91906135a6565b90505f606460198461160d9190613538565b61161791906135a6565b90505f838661162691906135d6565b9050611633883086611810565b61163e888883611810565b82600b5f82825461164f9190613609565b9250508190555081600c5f8282546116679190613609565b92505081905550683635c9adc5dea00000600c54600b546116889190613609565b1015801561169a57505f600a80549050115b156116a8576116a7611cb6565b5b505050506116bd565b6116bc848484611810565b5b6116c684611a7c565b6116cf83611a7c565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff166116f5610ec4565b73ffffffffffffffffffffffffffffffffffffffff161461174b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174290613686565b60405180910390fd5b565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361187e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187590613714565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e3906137a2565b60405180910390fd5b6118f7838383612736565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561197a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197190613830565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a6391906129a5565b60405180910390a3611a76848484612746565b50505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015611b0557503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611cb3575f611b1482610d74565b90505f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050678ac7230489e800008210158015611b79575080155b15611c3857600160095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600a83908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611cb0565b678ac7230489e8000082108015611c4c5750805b15611caf575f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611cae83612756565b5b5b50505b50565b5f600b5490505f600c5490505f600b819055505f600c819055505f8183611cdd9190613609565b90505f600267ffffffffffffffff811115611cfb57611cfa61384e565b5b604051908082528060200260200182016040528015611d295781602001602082028036833780820191505090505b50905030815f81518110611d4057611d3f61387b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611de4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e0891906138bc565b81600181518110611e1c57611e1b61387b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f3073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611eb39291906138e7565b602060405180830381865afa158015611ece573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef29190612f15565b905082811015611f3357611f323060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda10000006111c1565b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed1739845f8530426040518663ffffffff1660e01b8152600401611f9595949392919061390e565b5f604051808303815f875af1925050508015611fd357506040513d5f823e3d601f19601f82011682018060405250810190611fd09190613a79565b60015b611fea5784600b8190555083600c8190555061272f565b505f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612056573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207a91906138bc565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120b29190612b4e565b602060405180830381865afa1580156120cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f19190612f15565b90505f81111561272d575f8487836121099190613538565b61211391906135a6565b90505f818361212291906135d6565b90505f821115612541575f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612197573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121bb91906138bc565b73ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e3060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016122169291906138e7565b602060405180830381865afa158015612231573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122559190612f15565b9050828110156123aa5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ed91906138bc565b73ffffffffffffffffffffffffffffffffffffffff1663095ea7b360075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016123689291906131ad565b6020604051808303815f875af1158015612384573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123a891906131fe565b505b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e337003060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612452573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247691906138bc565b60028d61248391906135a6565b875f8030426040518963ffffffff1660e01b81526004016124ab989796959493929190613ac0565b6060604051808303815f875af19250505080156124e657506040513d601f19601f820116820180604052508101906124e39190613066565b60015b6124f65788600b8190555061253f565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60028a61252791906135a6565b8460405161253692919061311e565b60405180910390a15b505b5f8111801561255457505f600a80549050115b1561272a575f600a805490508261256b91906135a6565b90505f811115612728575f5b600a805490508110801561258b5750606481105b156126e85760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061261e91906138bc565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a838154811061264d5761264c61387b565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016126939291906131ad565b6020604051808303815f875af19250505080156126ce57506040513d601f19601f820116820180604052508101906126cb91906131fe565b60015b156126d557505b80806126e090613b3c565b915050612577565b507f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21782600a8054905060405161271f92919061311e565b60405180910390a15b505b50505b505b5050505050565b6127418383836128d9565b505050565b6127518383836128de565b505050565b5f5b600a805490508110156128d5578173ffffffffffffffffffffffffffffffffffffffff16600a82815481106127905761278f61387b565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036128c257600a6001600a805490506127e791906135d6565b815481106127f8576127f761387b565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a82815481106128345761283361387b565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a80548061288b5761288a613b83565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556128d5565b80806128cd90613b3c565b915050612758565b5050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561291a5780820151818401526020810190506128ff565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61293f826128e3565b61294981856128ed565b93506129598185602086016128fd565b61296281612925565b840191505092915050565b5f6020820190508181035f8301526129858184612935565b905092915050565b5f819050919050565b61299f8161298d565b82525050565b5f6020820190506129b85f830184612996565b92915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6129f8826129cf565b9050919050565b612a08816129ee565b8114612a12575f80fd5b50565b5f81359050612a23816129ff565b92915050565b612a328161298d565b8114612a3c575f80fd5b50565b5f81359050612a4d81612a29565b92915050565b5f8060408385031215612a6957612a686129c7565b5b5f612a7685828601612a15565b9250506020612a8785828601612a3f565b9150509250929050565b5f8115159050919050565b612aa581612a91565b82525050565b5f602082019050612abe5f830184612a9c565b92915050565b5f805f60608486031215612adb57612ada6129c7565b5b5f612ae886828701612a15565b9350506020612af986828701612a15565b9250506040612b0a86828701612a3f565b9150509250925092565b5f60208284031215612b2957612b286129c7565b5b5f612b3684828501612a3f565b91505092915050565b612b48816129ee565b82525050565b5f602082019050612b615f830184612b3f565b92915050565b5f60ff82169050919050565b612b7c81612b67565b82525050565b5f602082019050612b955f830184612b73565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612bcd816129ee565b82525050565b5f612bde8383612bc4565b60208301905092915050565b5f602082019050919050565b5f612c0082612b9b565b612c0a8185612ba5565b9350612c1583612bb5565b805f5b83811015612c45578151612c2c8882612bd3565b9750612c3783612bea565b925050600181019050612c18565b5085935050505092915050565b5f6020820190508181035f830152612c6a8184612bf6565b905092915050565b5f819050919050565b5f612c95612c90612c8b846129cf565b612c72565b6129cf565b9050919050565b5f612ca682612c7b565b9050919050565b5f612cb782612c9c565b9050919050565b612cc781612cad565b82525050565b5f602082019050612ce05f830184612cbe565b92915050565b5f60208284031215612cfb57612cfa6129c7565b5b5f612d0884828501612a15565b91505092915050565b5f8060408385031215612d2757612d266129c7565b5b5f612d3485828601612a15565b9250506020612d4585828601612a15565b9150509250929050565b5f612d5982612c9c565b9050919050565b612d6981612d4f565b82525050565b5f602082019050612d825f830184612d60565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612dcc57607f821691505b602082108103612ddf57612dde612d88565b5b50919050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c69715f8201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b5f612e3f6026836128ed565b9150612e4a82612de5565b604082019050919050565b5f6020820190508181035f830152612e6c81612e33565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e5f8201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b5f612ecd602f836128ed565b9150612ed882612e73565b604082019050919050565b5f6020820190508181035f830152612efa81612ec1565b9050919050565b5f81519050612f0f81612a29565b92915050565b5f60208284031215612f2a57612f296129c7565b5b5f612f3784828501612f01565b91505092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f5f8201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b5f612f9a6026836128ed565b9150612fa582612f40565b604082019050919050565b5f6020820190508181035f830152612fc781612f8e565b9050919050565b5f819050919050565b5f612ff1612fec612fe784612fce565b612c72565b61298d565b9050919050565b61300181612fd7565b82525050565b5f60c08201905061301a5f830189612b3f565b6130276020830188612996565b6130346040830187612ff8565b6130416060830186612ff8565b61304e6080830185612b3f565b61305b60a0830184612996565b979650505050505050565b5f805f6060848603121561307d5761307c6129c7565b5b5f61308a86828701612f01565b935050602061309b86828701612f01565b92505060406130ac86828701612f01565b9150509250925092565b7f4661696c656420746f20616464206c69717569646974790000000000000000005f82015250565b5f6130ea6017836128ed565b91506130f5826130b6565b602082019050919050565b5f6020820190508181035f830152613117816130de565b9050919050565b5f6040820190506131315f830185612996565b61313e6020830184612996565b9392505050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e7300000000005f82015250565b5f613179601b836128ed565b915061318482613145565b602082019050919050565b5f6020820190508181035f8301526131a68161316d565b9050919050565b5f6040820190506131c05f830185612b3f565b6131cd6020830184612996565b9392505050565b6131dd81612a91565b81146131e7575f80fd5b50565b5f815190506131f8816131d4565b92915050565b5f60208284031215613213576132126129c7565b5b5f613220848285016131ea565b91505092915050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f61325d6014836128ed565b915061326882613229565b602082019050919050565b5f6020820190508181035f83015261328a81613251565b9050919050565b7f496e76616c696420726f757465722061646472657373000000000000000000005f82015250565b5f6132c56016836128ed565b91506132d082613291565b602082019050919050565b5f6020820190508181035f8301526132f2816132b9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6133536026836128ed565b915061335e826132f9565b604082019050919050565b5f6020820190508181035f83015261338081613347565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6133e16024836128ed565b91506133ec82613387565b604082019050919050565b5f6020820190508181035f83015261340e816133d5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61346f6022836128ed565b915061347a82613415565b604082019050919050565b5f6020820190508181035f83015261349c81613463565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6134d7601d836128ed565b91506134e2826134a3565b602082019050919050565b5f6020820190508181035f830152613504816134cb565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6135428261298d565b915061354d8361298d565b925082820261355b8161298d565b915082820484148315176135725761357161350b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6135b08261298d565b91506135bb8361298d565b9250826135cb576135ca613579565b5b828204905092915050565b5f6135e08261298d565b91506135eb8361298d565b92508282039050818111156136035761360261350b565b5b92915050565b5f6136138261298d565b915061361e8361298d565b92508282019050808211156136365761363561350b565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6136706020836128ed565b915061367b8261363c565b602082019050919050565b5f6020820190508181035f83015261369d81613664565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6136fe6025836128ed565b9150613709826136a4565b604082019050919050565b5f6020820190508181035f83015261372b816136f2565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61378c6023836128ed565b915061379782613732565b604082019050919050565b5f6020820190508181035f8301526137b981613780565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61381a6026836128ed565b9150613825826137c0565b604082019050919050565b5f6020820190508181035f8301526138478161380e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506138b6816129ff565b92915050565b5f602082840312156138d1576138d06129c7565b5b5f6138de848285016138a8565b91505092915050565b5f6040820190506138fa5f830185612b3f565b6139076020830184612b3f565b9392505050565b5f60a0820190506139215f830188612996565b61392e6020830187612ff8565b81810360408301526139408186612bf6565b905061394f6060830185612b3f565b61395c6080830184612996565b9695505050505050565b5f80fd5b61397382612925565b810181811067ffffffffffffffff821117156139925761399161384e565b5b80604052505050565b5f6139a46129be565b90506139b0828261396a565b919050565b5f67ffffffffffffffff8211156139cf576139ce61384e565b5b602082029050602081019050919050565b5f80fd5b5f6139f66139f1846139b5565b61399b565b90508083825260208201905060208402830185811115613a1957613a186139e0565b5b835b81811015613a425780613a2e8882612f01565b845260208401935050602081019050613a1b565b5050509392505050565b5f82601f830112613a6057613a5f613966565b5b8151613a708482602086016139e4565b91505092915050565b5f60208284031215613a8e57613a8d6129c7565b5b5f82015167ffffffffffffffff811115613aab57613aaa6129cb565b5b613ab784828501613a4c565b91505092915050565b5f61010082019050613ad45f83018b612b3f565b613ae1602083018a612b3f565b613aee6040830189612996565b613afb6060830188612996565b613b086080830187612ff8565b613b1560a0830186612ff8565b613b2260c0830185612b3f565b613b2f60e0830184612996565b9998505050505050505050565b5f613b468261298d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613b7857613b7761350b565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea264697066735822122059b880ddcc127446371cd43978d2e2e92f4a0c29090bbde0c58be912baf614b864736f6c63430008140033

Deployed Bytecode Sourcemap

7514:11050:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2940:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18284:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3807:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3234:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4005:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8294:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3142:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16070:1446;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8144:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17718:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18410:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15896:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8036:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3341:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15786:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17967:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8186:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7703:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7654:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1853:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7590:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7890:62;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3039:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3467:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7760:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17524:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8247:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7815:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3657:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2086:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8084:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2940:91;2985:13;3018:5;3011:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2940:91;:::o;18284:118::-;18344:7;18371:23;;18364:30;;18284:118;:::o;3807:190::-;3881:4;3898:13;3914:10;3898:26;;3935:32;3944:5;3951:7;3960:6;3935:8;:32::i;:::-;3985:4;3978:11;;;3807:190;;;;:::o;3234:99::-;3286:7;3313:12;;3306:19;;3234:99;:::o;4005:250::-;4093:4;4110:15;4128:10;4110:28;;4149:38;4165:4;4171:7;4180:6;4149:15;:38::i;:::-;4198:27;4208:4;4214:2;4218:6;4198:9;:27::i;:::-;4243:4;4236:11;;;4005:250;;;;;:::o;8294:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3142:84::-;3191:5;3216:2;3209:9;;3142:84;:::o;16070:1446::-;1812:13;:11;:13::i;:::-;16178:1:::1;16166:9;:13;16158:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16255:1;16241:11;:15;16233:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;16436:11;16401:4;16386:31;;;16426:4;16386:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;16364:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;16592:63;16609:4;16624:16;;;;;;;;;;;16643:11;16592:8;:63::i;:::-;16718:16;;;;;;;;;;;:32;;;16758:9;16791:4;16811:11;16837:1;16893::::0;16947:10:::1;17015:15;16718:346;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16714:603;;17204:53;17221:4;17236:16;;;;;;;;;;;17255:1;17204:8;:53::i;:::-;17272:33;;;;;;;;;;:::i;:::-;;;;;;;;16714:603;;;;17085:38;17100:11;17113:9;17085:38;;;;;;;:::i;:::-;;;;;;;;17363:20;17386:21;17363:44;;17437:1;17422:12;:16;17418:91;;;17463:10;17455:28;;:42;17484:12;17455:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;17418:91;16147:1369;16070:1446:::0;:::o;8144:35::-;;;:::o;17718:208::-;1812:13;:11;:13::i;:::-;17829:4:::1;17811:23;;:6;:23;;::::0;17803:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17884:6;17877:23;;;17901:7;:5;:7::i;:::-;17910;17877:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17718:208:::0;;:::o;18410:114::-;18468:7;18495:21;;18488:28;;18410:114;:::o;15896:96::-;15941:16;15977:7;15970:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15896:96;:::o;8036:41::-;;;;;;;;;;;;;:::o;3341:118::-;3406:7;3433:9;:18;3443:7;3433:18;;;;;;;;;;;;;;;;3426:25;;3341:118;;;:::o;15786:98::-;15835:7;15862;:14;;;;15855:21;;15786:98;:::o;17967:266::-;1812:13;:11;:13::i;:::-;18116:6:::1;18081:4;18066:31;;;18106:4;18066:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;18044:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;18181:44;18199:4;18206:10;18218:6;18181:9;:44::i;:::-;17967:266:::0;:::o;8186:28::-;;;;;;;;;;;;;:::o;7703:42::-;7743:2;7703:42;:::o;7654:36::-;7689:1;7654:36;:::o;1853:87::-;1899:7;1926:6;;;;;;;;;;;1919:13;;1853:87;:::o;7590:57::-;7629:18;7590:57;:::o;7890:62::-;7939:13;7890:62;:::o;3039:95::-;3086:13;3119:7;3112:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3039:95;:::o;3467:182::-;3537:4;3554:13;3570:10;3554:26;;3591:28;3601:5;3608:2;3612:6;3591:9;:28::i;:::-;3637:4;3630:11;;;3467:182;;;;:::o;7760:40::-;7798:2;7760:40;:::o;17524:186::-;1812:13;:11;:13::i;:::-;17617:1:::1;17598:21;;:7;:21;;::::0;17590:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17694:7;17657:16;;:45;;;;;;;;;;;;;;;;;;17524:186:::0;:::o;8247:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;7815:55::-;7859:11;7815:55;:::o;3657:142::-;3737:7;3764:11;:18;3776:5;3764:18;;;;;;;;;;;;;;;:27;3783:7;3764:27;;;;;;;;;;;;;;;;3757:34;;3657:142;;;;:::o;2086:201::-;1812:13;:11;:13::i;:::-;2195:1:::1;2175:22;;:8;:22;;::::0;2167:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2251:28;2270:8;2251:18;:28::i;:::-;2086:201:::0;:::o;8084:53::-;;;:::o;5341:344::-;5460:1;5443:19;;:5;:19;;;5435:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5541:1;5522:21;;:7;:21;;;5514:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5623:6;5593:11;:18;5605:5;5593:18;;;;;;;;;;;;;;;:27;5612:7;5593:27;;;;;;;;;;;;;;;:36;;;;5661:7;5645:32;;5654:5;5645:32;;;5670:6;5645:32;;;;;;:::i;:::-;;;;;;;;5341:344;;;:::o;5693:419::-;5794:24;5821:25;5831:5;5838:7;5821:9;:25::i;:::-;5794:52;;5881:17;5861:16;:37;5857:248;;5943:6;5923:16;:26;;5915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6027:51;6036:5;6043:7;6071:6;6052:16;:25;6027:8;:51::i;:::-;5857:248;5783:329;5693:419;;;:::o;9620:1641::-;9764:7;:5;:7::i;:::-;9756:15;;:4;:15;;;:32;;;;9781:7;:5;:7::i;:::-;9775:13;;:2;:13;;;9756:32;:57;;;;9808:4;9792:21;;:4;:21;;;9756:57;:80;;;;9831:4;9817:19;;:2;:19;;;9756:80;9752:1502;;;9853:33;9869:4;9875:2;9879:6;9853:15;:33::i;:::-;9901:19;9915:4;9901:13;:19::i;:::-;9935:17;9949:2;9935:13;:17::i;:::-;9752:1502;;;9985:16;10010:13;;;;;;;;;;;10004:19;;:2;:19;;;:44;;;;10035:13;;;;;;;;;;;10027:21;;:4;:21;;;10004:44;9985:63;;10081:11;10077:1086;;;10113:16;10154:3;7689:1;10133:6;:17;;;;:::i;:::-;10132:25;;;;:::i;:::-;10113:44;;10176:20;10228:3;7743:2;10200:8;:24;;;;:::i;:::-;10199:32;;;;:::i;:::-;10176:55;;10250:18;10298:3;7798:2;10272:8;:22;;;;:::i;:::-;10271:30;;;;:::i;:::-;10250:51;;10320:22;10354:8;10345:6;:17;;;;:::i;:::-;10320:42;;10448:46;10464:4;10478;10485:8;10448:15;:46::i;:::-;10563:41;10579:4;10585:2;10589:14;10563:15;:41::i;:::-;10716:12;10689:23;;:39;;;;;;;:::i;:::-;;;;;;;;10772:10;10747:21;;:35;;;;;;;:::i;:::-;;;;;;;;7939:13;10908:21;;10882:23;;:47;;;;:::i;:::-;10881:75;;:119;;;;;10999:1;10982:7;:14;;;;:18;10881:119;10877:197;;;11025:29;:27;:29::i;:::-;10877:197;10094:995;;;;10077:1086;;;11114:33;11130:4;11136:2;11140:6;11114:15;:33::i;:::-;10077:1086;11191:19;11205:4;11191:13;:19::i;:::-;11225:17;11239:2;11225:13;:17::i;:::-;9970:1284;9752:1502;9620:1641;;;:::o;1948:130::-;2023:10;2012:21;;:7;:5;:7::i;:::-;:21;;;2004:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1948:130::o;2295:191::-;2369:16;2388:6;;;;;;;;;;;2369:25;;2414:8;2405:6;;:17;;;;;;;;;;;;;;;;;;2469:8;2438:40;;2459:8;2438:40;;;;;;;;;;;;2358:128;2295:191;:::o;4263:633::-;4376:1;4360:18;;:4;:18;;;4352:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4453:1;4439:16;;:2;:16;;;4431:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4506:38;4527:4;4533:2;4537:6;4506:20;:38::i;:::-;4555:19;4577:9;:15;4587:4;4577:15;;;;;;;;;;;;;;;;4555:37;;4626:6;4611:11;:21;;4603:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4743:6;4729:11;:20;4711:9;:15;4721:4;4711:15;;;;;;;;;;;;;;;:38;;;;4781:6;4764:9;:13;4774:2;4764:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;4829:2;4814:26;;4823:4;4814:26;;;4833:6;4814:26;;;;;;:::i;:::-;;;;;;;;4851:37;4871:4;4877:2;4881:6;4851:19;:37::i;:::-;4341:555;4263:633;;;:::o;11269:588::-;11343:13;;;;;;;;;;;11332:24;;:7;:24;;;;:52;;;;;11379:4;11360:24;;:7;:24;;;;11332:52;11328:522;;;11401:15;11419:18;11429:7;11419:9;:18::i;:::-;11401:36;;11452:22;11477:8;:17;11486:7;11477:17;;;;;;;;;;;;;;;;;;;;;;;;;11452:42;;7859:11;11527:7;:28;;:50;;;;;11560:17;11559:18;11527:50;11523:316;;;11618:4;11598:8;:17;11607:7;11598:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;11641:7;11654;11641:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11523:316;;;7859:11;11688:7;:27;:48;;;;;11719:17;11688:48;11684:155;;;11777:5;11757:8;:17;11766:7;11757:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;11801:22;11815:7;11801:13;:22::i;:::-;11684:155;11523:316;11386:464;;11328:522;11269:588;:::o;12168:3587::-;12226:26;12255:23;;12226:52;;12289:24;12316:21;;12289:48;;12374:1;12348:23;:27;;;;12410:1;12386:21;:25;;;;12424:19;12467:16;12446:18;:37;;;;:::i;:::-;12424:59;;12549:21;12587:1;12573:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12549:40;;12618:4;12600;12605:1;12600:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;12644:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12634:4;12639:1;12634:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;12740:24;12782:4;12767:31;;;12807:4;12822:16;;;;;;;;;;;12767:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12740:100;;12874:11;12855:16;:30;12851:127;;;12902:64;12919:4;12934:16;;;;;;;;;;;7629:18;12902:8;:64::i;:::-;12851:127;13002:16;;;;;;;;;;;:41;;;13058:11;13084:1;13125:4;13152;13172:15;13002:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12998:2750;;15663:18;15637:23;:44;;;;15720:16;15696:21;:40;;;;12998:2750;;;;13214:19;13243:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13236:41;;;13286:4;13236:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13214:78;;13325:1;13311:11;:15;13307:2233;;;13389:24;13453:11;13431:18;13417:11;:32;;;;:::i;:::-;13416:48;;;;:::i;:::-;13389:75;;13483:22;13522:16;13508:11;:30;;;;:::i;:::-;13483:55;;13626:1;13607:16;:20;13603:1130;;;13696:21;13727:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13720:41;;;13770:4;13785:16;;;;;;;;;;;13720:83;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13696:107;;13846:16;13830:13;:32;13826:174;;;13898:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13891:39;;;13939:16;;;;;;;;;;;13958:17;13891:85;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13826:174;14048:16;;;;;;;;;;;:29;;;14112:4;14144:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14215:1;14194:18;:22;;;;:::i;:::-;14243:16;14286:1;14314;14350:4;14382:15;14048:372;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14044:670;;14672:18;14646:23;:44;;;;14044:670;;;;;;14453:56;14489:1;14468:18;:22;;;;:::i;:::-;14492:16;14453:56;;;;;;;:::i;:::-;;;;;;;;14044:670;13629:1104;13603:1130;14815:1;14798:14;:18;:40;;;;;14837:1;14820:7;:14;;;;:18;14798:40;14794:731;;;14863:23;14906:7;:14;;;;14889;:31;;;;:::i;:::-;14863:57;;14987:1;14969:15;:19;14965:541;;;15022:9;15017:358;15041:7;:14;;;;15037:1;:18;:29;;;;;15063:3;15059:1;:7;15037:29;15017:358;;;15115:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15108:40;;;15149:7;15157:1;15149:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15161:15;15108:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15104:244;15308:8;15104:244;;15017:358;15068:3;;;;;:::i;:::-;;;;15017:358;;;;15432:50;15451:14;15467:7;:14;;;;15432:50;;;;;;;:::i;:::-;;;;;;;;14965:541;14840:685;14794:731;13328:2212;;13307:2233;13199:2352;12998:2750;12215:3540;;;;;12168:3587::o;9216:195::-;9359:44;9386:4;9392:2;9396:6;9359:26;:44::i;:::-;9216:195;;;:::o;9419:193::-;9561:43;9587:4;9593:2;9597:6;9561:25;:43::i;:::-;9419:193;;;:::o;11865:295::-;11929:9;11924:229;11948:7;:14;;;;11944:1;:18;11924:229;;;12002:7;11988:21;;:7;11996:1;11988:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;11984:158;;12043:7;12068:1;12051:7;:14;;;;:18;;;;:::i;:::-;12043:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12030:7;12038:1;12030:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;12089:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;12121:5;;11984:158;11964:3;;;;;:::i;:::-;;;;11924:229;;;;11865:295;:::o;6120:91::-;;;;:::o;6219: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;1988:117;2097:1;2094;2087: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:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:329::-;4482:6;4531:2;4519:9;4510:7;4506:23;4502:32;4499:119;;;4537:79;;:::i;:::-;4499:119;4657:1;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4628:117;4423:329;;;;:::o;4758:118::-;4845:24;4863:5;4845:24;:::i;:::-;4840:3;4833:37;4758:118;;:::o;4882:222::-;4975:4;5013:2;5002:9;4998:18;4990:26;;5026:71;5094:1;5083:9;5079:17;5070:6;5026:71;:::i;:::-;4882:222;;;;:::o;5110:86::-;5145:7;5185:4;5178:5;5174:16;5163:27;;5110:86;;;:::o;5202:112::-;5285:22;5301:5;5285:22;:::i;:::-;5280:3;5273:35;5202:112;;:::o;5320:214::-;5409:4;5447:2;5436:9;5432:18;5424:26;;5460:67;5524:1;5513:9;5509:17;5500:6;5460:67;:::i;:::-;5320:214;;;;:::o;5540:114::-;5607:6;5641:5;5635:12;5625:22;;5540:114;;;:::o;5660:184::-;5759:11;5793:6;5788:3;5781:19;5833:4;5828:3;5824:14;5809:29;;5660:184;;;;:::o;5850:132::-;5917:4;5940:3;5932:11;;5970:4;5965:3;5961:14;5953:22;;5850:132;;;:::o;5988:108::-;6065:24;6083:5;6065:24;:::i;:::-;6060:3;6053:37;5988:108;;:::o;6102:179::-;6171:10;6192:46;6234:3;6226:6;6192:46;:::i;:::-;6270:4;6265:3;6261:14;6247:28;;6102:179;;;;:::o;6287:113::-;6357:4;6389;6384:3;6380:14;6372:22;;6287:113;;;:::o;6436:732::-;6555:3;6584:54;6632:5;6584:54;:::i;:::-;6654:86;6733:6;6728:3;6654:86;:::i;:::-;6647:93;;6764:56;6814:5;6764:56;:::i;:::-;6843:7;6874:1;6859:284;6884:6;6881:1;6878:13;6859:284;;;6960:6;6954:13;6987:63;7046:3;7031:13;6987:63;:::i;:::-;6980:70;;7073:60;7126:6;7073:60;:::i;:::-;7063:70;;6919:224;6906:1;6903;6899:9;6894:14;;6859:284;;;6863:14;7159:3;7152:10;;6560:608;;;6436:732;;;;:::o;7174:373::-;7317:4;7355:2;7344:9;7340:18;7332:26;;7404:9;7398:4;7394:20;7390:1;7379:9;7375:17;7368:47;7432:108;7535:4;7526:6;7432:108;:::i;:::-;7424:116;;7174:373;;;;:::o;7553:60::-;7581:3;7602:5;7595:12;;7553:60;;;:::o;7619:142::-;7669:9;7702:53;7720:34;7729:24;7747:5;7729:24;:::i;:::-;7720:34;:::i;:::-;7702:53;:::i;:::-;7689:66;;7619:142;;;:::o;7767:126::-;7817:9;7850:37;7881:5;7850:37;:::i;:::-;7837:50;;7767:126;;;:::o;7899:151::-;7974:9;8007:37;8038:5;8007:37;:::i;:::-;7994:50;;7899:151;;;:::o;8056:181::-;8168:62;8224:5;8168:62;:::i;:::-;8163:3;8156:75;8056:181;;:::o;8243:272::-;8361:4;8399:2;8388:9;8384:18;8376:26;;8412:96;8505:1;8494:9;8490:17;8481:6;8412:96;:::i;:::-;8243:272;;;;:::o;8521:329::-;8580:6;8629:2;8617:9;8608:7;8604:23;8600:32;8597:119;;;8635:79;;:::i;:::-;8597:119;8755:1;8780:53;8825:7;8816:6;8805:9;8801:22;8780:53;:::i;:::-;8770:63;;8726:117;8521:329;;;;:::o;8856:474::-;8924:6;8932;8981:2;8969:9;8960:7;8956:23;8952:32;8949:119;;;8987:79;;:::i;:::-;8949:119;9107:1;9132:53;9177:7;9168:6;9157:9;9153:22;9132:53;:::i;:::-;9122:63;;9078:117;9234:2;9260:53;9305:7;9296:6;9285:9;9281:22;9260:53;:::i;:::-;9250:63;;9205:118;8856:474;;;;;:::o;9336:152::-;9412:9;9445:37;9476:5;9445:37;:::i;:::-;9432:50;;9336:152;;;:::o;9494:183::-;9607:63;9664:5;9607:63;:::i;:::-;9602:3;9595:76;9494:183;;:::o;9683:274::-;9802:4;9840:2;9829:9;9825:18;9817:26;;9853:97;9947:1;9936:9;9932:17;9923:6;9853:97;:::i;:::-;9683:274;;;;:::o;9963:180::-;10011:77;10008:1;10001:88;10108:4;10105:1;10098:15;10132:4;10129:1;10122:15;10149:320;10193:6;10230:1;10224:4;10220:12;10210:22;;10277:1;10271:4;10267:12;10298:18;10288:81;;10354:4;10346:6;10342:17;10332:27;;10288:81;10416:2;10408:6;10405:14;10385:18;10382:38;10379:84;;10435:18;;:::i;:::-;10379:84;10200:269;10149:320;;;:::o;10475:225::-;10615:34;10611:1;10603:6;10599:14;10592:58;10684:8;10679:2;10671:6;10667:15;10660:33;10475:225;:::o;10706:366::-;10848:3;10869:67;10933:2;10928:3;10869:67;:::i;:::-;10862:74;;10945:93;11034:3;10945:93;:::i;:::-;11063:2;11058:3;11054:12;11047:19;;10706:366;;;:::o;11078:419::-;11244:4;11282:2;11271:9;11267:18;11259:26;;11331:9;11325:4;11321:20;11317:1;11306:9;11302:17;11295:47;11359:131;11485:4;11359:131;:::i;:::-;11351:139;;11078:419;;;:::o;11503:234::-;11643:34;11639:1;11631:6;11627:14;11620:58;11712:17;11707:2;11699:6;11695:15;11688:42;11503:234;:::o;11743:366::-;11885:3;11906:67;11970:2;11965:3;11906:67;:::i;:::-;11899:74;;11982:93;12071:3;11982:93;:::i;:::-;12100:2;12095:3;12091:12;12084:19;;11743:366;;;:::o;12115:419::-;12281:4;12319:2;12308:9;12304:18;12296:26;;12368:9;12362:4;12358:20;12354:1;12343:9;12339:17;12332:47;12396:131;12522:4;12396:131;:::i;:::-;12388:139;;12115:419;;;:::o;12540:143::-;12597:5;12628:6;12622:13;12613:22;;12644:33;12671:5;12644:33;:::i;:::-;12540:143;;;;:::o;12689:351::-;12759:6;12808:2;12796:9;12787:7;12783:23;12779:32;12776:119;;;12814:79;;:::i;:::-;12776:119;12934:1;12959:64;13015:7;13006:6;12995:9;12991:22;12959:64;:::i;:::-;12949:74;;12905:128;12689:351;;;;:::o;13046:225::-;13186:34;13182:1;13174:6;13170:14;13163:58;13255:8;13250:2;13242:6;13238:15;13231:33;13046:225;:::o;13277:366::-;13419:3;13440:67;13504:2;13499:3;13440:67;:::i;:::-;13433:74;;13516:93;13605:3;13516:93;:::i;:::-;13634:2;13629:3;13625:12;13618:19;;13277:366;;;:::o;13649:419::-;13815:4;13853:2;13842:9;13838:18;13830:26;;13902:9;13896:4;13892:20;13888:1;13877:9;13873:17;13866:47;13930:131;14056:4;13930:131;:::i;:::-;13922:139;;13649:419;;;:::o;14074:85::-;14119:7;14148:5;14137:16;;14074:85;;;:::o;14165:158::-;14223:9;14256:61;14274:42;14283:32;14309:5;14283:32;:::i;:::-;14274:42;:::i;:::-;14256:61;:::i;:::-;14243:74;;14165:158;;;:::o;14329:147::-;14424:45;14463:5;14424:45;:::i;:::-;14419:3;14412:58;14329:147;;:::o;14482:807::-;14731:4;14769:3;14758:9;14754:19;14746:27;;14783:71;14851:1;14840:9;14836:17;14827:6;14783:71;:::i;:::-;14864:72;14932:2;14921:9;14917:18;14908:6;14864:72;:::i;:::-;14946:80;15022:2;15011:9;15007:18;14998:6;14946:80;:::i;:::-;15036;15112:2;15101:9;15097:18;15088:6;15036:80;:::i;:::-;15126:73;15194:3;15183:9;15179:19;15170:6;15126:73;:::i;:::-;15209;15277:3;15266:9;15262:19;15253:6;15209:73;:::i;:::-;14482:807;;;;;;;;;:::o;15295:663::-;15383:6;15391;15399;15448:2;15436:9;15427:7;15423:23;15419:32;15416:119;;;15454:79;;:::i;:::-;15416:119;15574:1;15599:64;15655:7;15646:6;15635:9;15631:22;15599:64;:::i;:::-;15589:74;;15545:128;15712:2;15738:64;15794:7;15785:6;15774:9;15770:22;15738:64;:::i;:::-;15728:74;;15683:129;15851:2;15877:64;15933:7;15924:6;15913:9;15909:22;15877:64;:::i;:::-;15867:74;;15822:129;15295:663;;;;;:::o;15964:173::-;16104:25;16100:1;16092:6;16088:14;16081:49;15964:173;:::o;16143:366::-;16285:3;16306:67;16370:2;16365:3;16306:67;:::i;:::-;16299:74;;16382:93;16471:3;16382:93;:::i;:::-;16500:2;16495:3;16491:12;16484:19;;16143:366;;;:::o;16515:419::-;16681:4;16719:2;16708:9;16704:18;16696:26;;16768:9;16762:4;16758:20;16754:1;16743:9;16739:17;16732:47;16796:131;16922:4;16796:131;:::i;:::-;16788:139;;16515:419;;;:::o;16940:332::-;17061:4;17099:2;17088:9;17084:18;17076:26;;17112:71;17180:1;17169:9;17165:17;17156:6;17112:71;:::i;:::-;17193:72;17261:2;17250:9;17246:18;17237:6;17193:72;:::i;:::-;16940:332;;;;;:::o;17278:177::-;17418:29;17414:1;17406:6;17402:14;17395:53;17278:177;:::o;17461:366::-;17603:3;17624:67;17688:2;17683:3;17624:67;:::i;:::-;17617:74;;17700:93;17789:3;17700:93;:::i;:::-;17818:2;17813:3;17809:12;17802:19;;17461:366;;;:::o;17833:419::-;17999:4;18037:2;18026:9;18022:18;18014:26;;18086:9;18080:4;18076:20;18072:1;18061:9;18057:17;18050:47;18114:131;18240:4;18114:131;:::i;:::-;18106:139;;17833:419;;;:::o;18258:332::-;18379:4;18417:2;18406:9;18402:18;18394:26;;18430:71;18498:1;18487:9;18483:17;18474:6;18430:71;:::i;:::-;18511:72;18579:2;18568:9;18564:18;18555:6;18511:72;:::i;:::-;18258:332;;;;;:::o;18596:116::-;18666:21;18681:5;18666:21;:::i;:::-;18659:5;18656:32;18646:60;;18702:1;18699;18692:12;18646:60;18596:116;:::o;18718:137::-;18772:5;18803:6;18797:13;18788:22;;18819:30;18843:5;18819:30;:::i;:::-;18718:137;;;;:::o;18861:345::-;18928:6;18977:2;18965:9;18956:7;18952:23;18948:32;18945:119;;;18983:79;;:::i;:::-;18945:119;19103:1;19128:61;19181:7;19172:6;19161:9;19157:22;19128:61;:::i;:::-;19118:71;;19074:125;18861:345;;;;:::o;19212:170::-;19352:22;19348:1;19340:6;19336:14;19329:46;19212:170;:::o;19388:366::-;19530:3;19551:67;19615:2;19610:3;19551:67;:::i;:::-;19544:74;;19627:93;19716:3;19627:93;:::i;:::-;19745:2;19740:3;19736:12;19729:19;;19388:366;;;:::o;19760:419::-;19926:4;19964:2;19953:9;19949:18;19941:26;;20013:9;20007:4;20003:20;19999:1;19988:9;19984:17;19977:47;20041:131;20167:4;20041:131;:::i;:::-;20033:139;;19760:419;;;:::o;20185:172::-;20325:24;20321:1;20313:6;20309:14;20302:48;20185:172;:::o;20363:366::-;20505:3;20526:67;20590:2;20585:3;20526:67;:::i;:::-;20519:74;;20602:93;20691:3;20602:93;:::i;:::-;20720:2;20715:3;20711:12;20704:19;;20363:366;;;:::o;20735:419::-;20901:4;20939:2;20928:9;20924:18;20916:26;;20988:9;20982:4;20978:20;20974:1;20963:9;20959:17;20952:47;21016:131;21142:4;21016:131;:::i;:::-;21008:139;;20735:419;;;:::o;21160:225::-;21300:34;21296:1;21288:6;21284:14;21277:58;21369:8;21364:2;21356:6;21352:15;21345:33;21160:225;:::o;21391:366::-;21533:3;21554:67;21618:2;21613:3;21554:67;:::i;:::-;21547:74;;21630:93;21719:3;21630:93;:::i;:::-;21748:2;21743:3;21739:12;21732:19;;21391:366;;;:::o;21763:419::-;21929:4;21967:2;21956:9;21952:18;21944:26;;22016:9;22010:4;22006:20;22002:1;21991:9;21987:17;21980:47;22044:131;22170:4;22044:131;:::i;:::-;22036:139;;21763:419;;;:::o;22188:223::-;22328:34;22324:1;22316:6;22312:14;22305:58;22397:6;22392:2;22384:6;22380:15;22373:31;22188:223;:::o;22417:366::-;22559:3;22580:67;22644:2;22639:3;22580:67;:::i;:::-;22573:74;;22656:93;22745:3;22656:93;:::i;:::-;22774:2;22769:3;22765:12;22758:19;;22417:366;;;:::o;22789:419::-;22955:4;22993:2;22982:9;22978:18;22970:26;;23042:9;23036:4;23032:20;23028:1;23017:9;23013:17;23006:47;23070:131;23196:4;23070:131;:::i;:::-;23062:139;;22789:419;;;:::o;23214:221::-;23354:34;23350:1;23342:6;23338:14;23331:58;23423:4;23418:2;23410:6;23406:15;23399:29;23214:221;:::o;23441:366::-;23583:3;23604:67;23668:2;23663:3;23604:67;:::i;:::-;23597:74;;23680:93;23769:3;23680:93;:::i;:::-;23798:2;23793:3;23789:12;23782:19;;23441:366;;;:::o;23813:419::-;23979:4;24017:2;24006:9;24002:18;23994:26;;24066:9;24060:4;24056:20;24052:1;24041:9;24037:17;24030:47;24094:131;24220:4;24094:131;:::i;:::-;24086:139;;23813:419;;;:::o;24238:179::-;24378:31;24374:1;24366:6;24362:14;24355:55;24238:179;:::o;24423:366::-;24565:3;24586:67;24650:2;24645:3;24586:67;:::i;:::-;24579:74;;24662:93;24751:3;24662:93;:::i;:::-;24780:2;24775:3;24771:12;24764:19;;24423:366;;;:::o;24795:419::-;24961:4;24999:2;24988:9;24984:18;24976:26;;25048:9;25042:4;25038:20;25034:1;25023:9;25019:17;25012:47;25076:131;25202:4;25076:131;:::i;:::-;25068:139;;24795:419;;;:::o;25220:180::-;25268:77;25265:1;25258:88;25365:4;25362:1;25355:15;25389:4;25386:1;25379:15;25406:410;25446:7;25469:20;25487:1;25469:20;:::i;:::-;25464:25;;25503:20;25521:1;25503:20;:::i;:::-;25498:25;;25558:1;25555;25551:9;25580:30;25598:11;25580:30;:::i;:::-;25569:41;;25759:1;25750:7;25746:15;25743:1;25740:22;25720:1;25713:9;25693:83;25670:139;;25789:18;;:::i;:::-;25670:139;25454:362;25406:410;;;;:::o;25822:180::-;25870:77;25867:1;25860:88;25967:4;25964:1;25957:15;25991:4;25988:1;25981:15;26008:185;26048:1;26065:20;26083:1;26065:20;:::i;:::-;26060:25;;26099:20;26117:1;26099:20;:::i;:::-;26094:25;;26138:1;26128:35;;26143:18;;:::i;:::-;26128:35;26185:1;26182;26178:9;26173:14;;26008:185;;;;:::o;26199:194::-;26239:4;26259:20;26277:1;26259:20;:::i;:::-;26254:25;;26293:20;26311:1;26293:20;:::i;:::-;26288:25;;26337:1;26334;26330:9;26322:17;;26361:1;26355:4;26352:11;26349:37;;;26366:18;;:::i;:::-;26349:37;26199:194;;;;:::o;26399:191::-;26439:3;26458:20;26476:1;26458:20;:::i;:::-;26453:25;;26492:20;26510:1;26492:20;:::i;:::-;26487:25;;26535:1;26532;26528:9;26521:16;;26556:3;26553:1;26550:10;26547:36;;;26563:18;;:::i;:::-;26547:36;26399:191;;;;:::o;26596:182::-;26736:34;26732:1;26724:6;26720:14;26713:58;26596:182;:::o;26784:366::-;26926:3;26947:67;27011:2;27006:3;26947:67;:::i;:::-;26940:74;;27023:93;27112:3;27023:93;:::i;:::-;27141:2;27136:3;27132:12;27125:19;;26784:366;;;:::o;27156:419::-;27322:4;27360:2;27349:9;27345:18;27337:26;;27409:9;27403:4;27399:20;27395:1;27384:9;27380:17;27373:47;27437:131;27563:4;27437:131;:::i;:::-;27429:139;;27156:419;;;:::o;27581:224::-;27721:34;27717:1;27709:6;27705:14;27698:58;27790:7;27785:2;27777:6;27773:15;27766:32;27581:224;:::o;27811:366::-;27953:3;27974:67;28038:2;28033:3;27974:67;:::i;:::-;27967:74;;28050:93;28139:3;28050:93;:::i;:::-;28168:2;28163:3;28159:12;28152:19;;27811:366;;;:::o;28183:419::-;28349:4;28387:2;28376:9;28372:18;28364:26;;28436:9;28430:4;28426:20;28422:1;28411:9;28407:17;28400:47;28464:131;28590:4;28464:131;:::i;:::-;28456:139;;28183:419;;;:::o;28608:222::-;28748:34;28744:1;28736:6;28732:14;28725:58;28817:5;28812:2;28804:6;28800:15;28793:30;28608:222;:::o;28836:366::-;28978:3;28999:67;29063:2;29058:3;28999:67;:::i;:::-;28992:74;;29075:93;29164:3;29075:93;:::i;:::-;29193:2;29188:3;29184:12;29177:19;;28836:366;;;:::o;29208:419::-;29374:4;29412:2;29401:9;29397:18;29389:26;;29461:9;29455:4;29451:20;29447:1;29436:9;29432:17;29425:47;29489:131;29615:4;29489:131;:::i;:::-;29481:139;;29208:419;;;:::o;29633:225::-;29773:34;29769:1;29761:6;29757:14;29750:58;29842:8;29837:2;29829:6;29825:15;29818:33;29633:225;:::o;29864:366::-;30006:3;30027:67;30091:2;30086:3;30027:67;:::i;:::-;30020:74;;30103:93;30192:3;30103:93;:::i;:::-;30221:2;30216:3;30212:12;30205:19;;29864:366;;;:::o;30236:419::-;30402:4;30440:2;30429:9;30425:18;30417:26;;30489:9;30483:4;30479:20;30475:1;30464:9;30460:17;30453:47;30517:131;30643:4;30517:131;:::i;:::-;30509:139;;30236:419;;;:::o;30661:180::-;30709:77;30706:1;30699:88;30806:4;30803:1;30796:15;30830:4;30827:1;30820:15;30847:180;30895:77;30892:1;30885:88;30992:4;30989:1;30982:15;31016:4;31013:1;31006:15;31033:143;31090:5;31121:6;31115:13;31106:22;;31137:33;31164:5;31137:33;:::i;:::-;31033:143;;;;:::o;31182:351::-;31252:6;31301:2;31289:9;31280:7;31276:23;31272:32;31269:119;;;31307:79;;:::i;:::-;31269:119;31427:1;31452:64;31508:7;31499:6;31488:9;31484:22;31452:64;:::i;:::-;31442:74;;31398:128;31182:351;;;;:::o;31539:332::-;31660:4;31698:2;31687:9;31683:18;31675:26;;31711:71;31779:1;31768:9;31764:17;31755:6;31711:71;:::i;:::-;31792:72;31860:2;31849:9;31845:18;31836:6;31792:72;:::i;:::-;31539:332;;;;;:::o;31877:831::-;32140:4;32178:3;32167:9;32163:19;32155:27;;32192:71;32260:1;32249:9;32245:17;32236:6;32192:71;:::i;:::-;32273:80;32349:2;32338:9;32334:18;32325:6;32273:80;:::i;:::-;32400:9;32394:4;32390:20;32385:2;32374:9;32370:18;32363:48;32428:108;32531:4;32522:6;32428:108;:::i;:::-;32420:116;;32546:72;32614:2;32603:9;32599:18;32590:6;32546:72;:::i;:::-;32628:73;32696:3;32685:9;32681:19;32672:6;32628:73;:::i;:::-;31877:831;;;;;;;;:::o;32714:117::-;32823:1;32820;32813:12;32837:281;32920:27;32942:4;32920:27;:::i;:::-;32912:6;32908:40;33050:6;33038:10;33035:22;33014:18;33002:10;32999:34;32996:62;32993:88;;;33061:18;;:::i;:::-;32993:88;33101:10;33097:2;33090:22;32880:238;32837:281;;:::o;33124:129::-;33158:6;33185:20;;:::i;:::-;33175:30;;33214:33;33242:4;33234:6;33214:33;:::i;:::-;33124:129;;;:::o;33259:311::-;33336:4;33426:18;33418:6;33415:30;33412:56;;;33448:18;;:::i;:::-;33412:56;33498:4;33490:6;33486:17;33478:25;;33558:4;33552;33548:15;33540:23;;33259:311;;;:::o;33576:117::-;33685:1;33682;33675:12;33716:732;33823:5;33848:81;33864:64;33921:6;33864:64;:::i;:::-;33848:81;:::i;:::-;33839:90;;33949:5;33978:6;33971:5;33964:21;34012:4;34005:5;34001:16;33994:23;;34065:4;34057:6;34053:17;34045:6;34041:30;34094:3;34086:6;34083:15;34080:122;;;34113:79;;:::i;:::-;34080:122;34228:6;34211:231;34245:6;34240:3;34237:15;34211:231;;;34320:3;34349:48;34393:3;34381:10;34349:48;:::i;:::-;34344:3;34337:61;34427:4;34422:3;34418:14;34411:21;;34287:155;34271:4;34266:3;34262:14;34255:21;;34211:231;;;34215:21;33829:619;;33716:732;;;;;:::o;34471:385::-;34553:5;34602:3;34595:4;34587:6;34583:17;34579:27;34569:122;;34610:79;;:::i;:::-;34569:122;34720:6;34714:13;34745:105;34846:3;34838:6;34831:4;34823:6;34819:17;34745:105;:::i;:::-;34736:114;;34559:297;34471:385;;;;:::o;34862:554::-;34957:6;35006:2;34994:9;34985:7;34981:23;34977:32;34974:119;;;35012:79;;:::i;:::-;34974:119;35153:1;35142:9;35138:17;35132:24;35183:18;35175:6;35172:30;35169:117;;;35205:79;;:::i;:::-;35169:117;35310:89;35391:7;35382:6;35371:9;35367:22;35310:89;:::i;:::-;35300:99;;35103:306;34862:554;;;;:::o;35422:1029::-;35727:4;35765:3;35754:9;35750:19;35742:27;;35779:71;35847:1;35836:9;35832:17;35823:6;35779:71;:::i;:::-;35860:72;35928:2;35917:9;35913:18;35904:6;35860:72;:::i;:::-;35942;36010:2;35999:9;35995:18;35986:6;35942:72;:::i;:::-;36024;36092:2;36081:9;36077:18;36068:6;36024:72;:::i;:::-;36106:81;36182:3;36171:9;36167:19;36158:6;36106:81;:::i;:::-;36197;36273:3;36262:9;36258:19;36249:6;36197:81;:::i;:::-;36288:73;36356:3;36345:9;36341:19;36332:6;36288:73;:::i;:::-;36371;36439:3;36428:9;36424:19;36415:6;36371:73;:::i;:::-;35422:1029;;;;;;;;;;;:::o;36457:233::-;36496:3;36519:24;36537:5;36519:24;:::i;:::-;36510:33;;36565:66;36558:5;36555:77;36552:103;;36635:18;;:::i;:::-;36552:103;36682:1;36675:5;36671:13;36664:20;;36457:233;;;:::o;36696:180::-;36744:77;36741:1;36734:88;36841:4;36838:1;36831:15;36865:4;36862:1;36855:15

Swarm Source

ipfs://59b880ddcc127446371cd43978d2e2e92f4a0c29090bbde0c58be912baf614b8
[ 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.