ETH Price: $3,457.16 (+1.74%)
Gas: 11 Gwei

Token

Ethereum Hive (EHIVE)
 

Overview

Max Total Supply

466,180,446,396.153876003673761344 EHIVE

Holders

457 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
23,039,673 EHIVE

Value
$0.00
0xd9d33b1479e2c671703e56996ab0b1c3f2838752
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

In the coming months, the Ethereum network will be going through their upgrade to ETH 2.0. With this, Ethereum validators will be going live on the main net and generating ETH rewards for operators. eHive plans to open this opportunity up to the entire DeFi community through shared validators.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EHIVE_NEW

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 11: contract.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./Ownable.sol";
import "./SafeMath.sol";

import "./IUniswapV2Pair.sol";
import "./IUniswapV2Router02.sol";
import "./IUniswapV2Factory.sol";

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

    uint256 public maxSupply; // what the total supply can reach and not go beyond

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    bool private _swapping;

    address private _swapFeeReceiver;
    
    uint256 public swapTokensThreshold;

    uint256 public totalFees;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;
    uint256 private _validatorFee;
    
    uint256 private _tokensForMarketing;
    uint256 private _tokensForLiquidity;
    uint256 private _tokensForValidator;
    
    // staking vars
    uint256 public totalStaked;
    uint256 public totalClaimed;
    uint256 public apr;

    bool public stakingEnabled = false;
    uint256[] public monthlyReward = [0, 0, 0]; // [timestamp, totalStaked, weekly eth]

    struct Staker {
        address staker;
        uint256 start;
        uint256 staked;
        uint256 earned;
        uint256 ethEarned;
    }

    struct ClaimHistory {
        uint256[] dates;
        uint256[] amounts;
    }

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) private _automatedMarketMakerPairs;

    // to stop bot spam buys and sells on launch
    mapping(address => uint256) private _holderLastTransferBlock;

    // stake data
    mapping(address => Staker) public stakers;
    mapping(address => ClaimHistory) private _claimHistory;
    mapping(address => mapping(uint256 => bool)) public userMonthlyClaimed; //specific to the months timestmap
    mapping (address => bool) private _isBlacklisted;

    event Stake(uint256 amount);
    event Claim(uint256 amount);

    /**
     * @dev Throws if called by any account other than the _swapFeeReceiver
     */
    modifier teamOROwner() {
        require(_swapFeeReceiver == _msgSender() || owner() == _msgSender(), "Caller is not the _swapFeeReceiver address nor owner.");
        _;
    }

    modifier isStakingEnabled() {
        require(stakingEnabled, "Staking is not enabled.");
        _;
    }

    constructor() ERC20("Ethereum Hive", "EHIVE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;

        uint256 marketingFee = 2;
        uint256 liquidityFee = 1;
        uint256 validatorFee = 3;

        uint256 totalSupply = 55e10 * 1e18;
        maxSupply = 1e12 * 1e18;

        swapTokensThreshold = 62500000000000000000000000;
        
        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        _validatorFee = validatorFee;
        totalFees = _marketingFee + _liquidityFee + _validatorFee;

        _swapFeeReceiver = owner();

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

        _mint(msg.sender, totalSupply);
    }

    /**
    * @dev Exclude from fee calculation
    */
    function excludeFromFees(address account, bool excluded) public teamOROwner {
        _isExcludedFromFees[account] = excluded;
    }
    
    function setAutomatedMarketMakerPairs(address account, bool allow) public teamOROwner {
        _automatedMarketMakerPairs[account] = allow;
    }

    function setBlacklisted(address[] memory blacklisted_) external onlyOwner {
        for (uint i = 0; i < blacklisted_.length; i++) {
            if (blacklisted_[i] != uniswapV2Pair && blacklisted_[i] != address(uniswapV2Router)) {
                _isBlacklisted[blacklisted_[i]] = true;
            }
        }
    }
    
    function delBlacklisted(address[] memory blacklisted_) external onlyOwner {
        for (uint i = 0; i < blacklisted_.length; i++) {
            _isBlacklisted[blacklisted_[i]] = false;
        }
    }

    /**
    * @dev Update token fees (max set to initial fee)
    */
    function updateFees(uint256 marketingFee, uint256 liquidityFee, uint256 validatorFee) external onlyOwner {
        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        _validatorFee = validatorFee;

        totalFees = _marketingFee + _liquidityFee + _validatorFee;

        require(totalFees <= 6, "Must keep fees at 6% or less");
    }

    /**
    * @dev Update wallet that receives fees and newly added LP
    */
    function updateFeeReceiver(address newWallet) external teamOROwner {
        _swapFeeReceiver = newWallet;
    }

    /**
    * @dev Very important function. 
    * Updates the threshold of how many tokens that must be in the contract calculation for fees to be taken
    */
    function updateSwapTokensThreshold(uint256 newThreshold) external teamOROwner returns (bool) {
  	    require(newThreshold >= totalSupply() * 1 / 100000, "Swap threshold cannot be lower than 0.001% total supply.");
  	    require(newThreshold <= totalSupply() * 5 / 1000, "Swap threshold cannot be higher than 0.5% total supply.");
  	    swapTokensThreshold = newThreshold;
  	    return true;
  	}

    /**
    * @dev Check if an address is excluded from the fee calculation
    */
    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlacklisted[from], "You are unable to transfer or swap due to blacklist.");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensThreshold;
        if (
            canSwap &&
            !_swapping &&
            !_automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any addy belongs to _isExcludedFromFee or isn't a swap then remove the fee
        if (
            _isExcludedFromFees[from] || 
            _isExcludedFromFees[to] || 
            (!_automatedMarketMakerPairs[from] && !_automatedMarketMakerPairs[to])
        ) takeFee = false;
        
        uint256 fees = 0;
        if (takeFee) {
            fees = amount.mul(totalFees).div(100);
            _tokensForLiquidity += fees * _liquidityFee / totalFees;
            _tokensForValidator += fees * _validatorFee / totalFees;
            _tokensForMarketing += fees * _marketingFee / totalFees;
            
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

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

    function _swapTokensForEth(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            _swapFeeReceiver,
            block.timestamp
        );
    }

    function swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + _tokensForValidator;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > swapTokensThreshold) contractBalance = swapTokensThreshold;
        
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwapForETH);
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForValidator = ethBalance.mul(_tokensForValidator).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForValidator;
        
        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForValidator = 0;

        payable(_swapFeeReceiver).transfer(ethForMarketing.add(ethForValidator));
                
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
        }
    }

    /**
    * @dev Transfer eth stuck in contract to _swapFeeReceiver
    */
    function withdrawContractETH() external {
        payable(_swapFeeReceiver).transfer(address(this).balance);
    }

    /**
    * @dev In case swap wont do it and sells/buys might be blocked
    */
    function forceSwap() external teamOROwner {
        _swapTokensForEth(balanceOf(address(this)));
    }

    /**
        *
        * @dev Staking part starts here
        *
    */

    /**
    * @dev Checks if holder is staking
    */
    function isStaking(address stakerAddr) public view returns (bool) {
        return stakers[stakerAddr].staker == stakerAddr;
    }

    /**
    * @dev Returns how much staker is staking
    */
    function userStaked(address staker) public view returns (uint256) {
        return stakers[staker].staked;
    }

    /**
    * @dev Returns how much staker has claimed over time
    */
    function userClaimHistory(address staker) public view returns (ClaimHistory memory) {
        return _claimHistory[staker];
    }

    /**
    * @dev Returns how much staker has earned
    */
    function userEarned(address staker) public view returns (uint256) {
        uint256 currentlyEarned = _userEarned(staker);
        uint256 previouslyEarned = stakers[msg.sender].earned;

        if (previouslyEarned > 0) return currentlyEarned.add(previouslyEarned);
        return currentlyEarned;
    }

    function _userEarned(address staker) private view returns (uint256) {
        require(isStaking(staker), "User is not staking.");

        uint256 staked = userStaked(staker);
        uint256 stakersStartInSeconds = stakers[staker].start.div(1 seconds);
        uint256 blockTimestampInSeconds = block.timestamp.div(1 seconds);
        uint256 secondsStaked = blockTimestampInSeconds.sub(stakersStartInSeconds);

        uint256 earn = staked.mul(apr).div(100);
        uint256 rewardPerSec = earn.div(365).div(24).div(60).div(60);
        uint256 earned = rewardPerSec.mul(secondsStaked);

        return earned;
    }
 
    /**
    * @dev Stake tokens in validator
    */
    function stake(uint256 stakeAmount) external isStakingEnabled {
        require(totalSupply() <= maxSupply, "There are no more rewards left to be claimed.");

        // Check user is registered as staker
        if (isStaking(msg.sender)) {
            stakers[msg.sender].earned += _userEarned(msg.sender);
            stakers[msg.sender].staked += stakeAmount;
            stakers[msg.sender].start = block.timestamp;
        } else {
            stakers[msg.sender] = Staker(msg.sender, block.timestamp, stakeAmount, 0, 0);
        }

        totalStaked += stakeAmount;
        _burn(msg.sender, stakeAmount);

        emit Stake(stakeAmount);
    }
    
    /**
    * @dev Claim earned tokens from stake in validator
    */
    function claim() external isStakingEnabled {
        require(isStaking(msg.sender), "You are not staking!?");
        require(totalSupply() <= maxSupply, "There are no more rewards left to be claimed.");

        uint256 reward = userEarned(msg.sender);

        _claimHistory[msg.sender].dates.push(block.timestamp);
        _claimHistory[msg.sender].amounts.push(reward);
        totalClaimed += reward;

        _mint(msg.sender, reward);

        stakers[msg.sender].start = block.timestamp;
        stakers[msg.sender].earned = 0;
    }

    /**
    * @dev Claim earned and staked tokens from validator
    */
    function unstake() external {
        require(isStaking(msg.sender), "You are not staking!?");

        uint256 ethReward = stakers[msg.sender].ethEarned;
        if (!userMonthlyClaimed[msg.sender][monthlyReward[0]]) ethReward += _calcMonthlyReward();

        if (ethReward > 0) withdrawETHRewards();

        uint256 reward = userEarned(msg.sender);
        uint256 staked = stakers[msg.sender].staked;

        if (totalSupply().add(reward) < maxSupply && stakingEnabled) {
            _claimHistory[msg.sender].dates.push(block.timestamp);
            _claimHistory[msg.sender].amounts.push(reward);
            totalClaimed += reward;

            _mint(msg.sender, staked.add(reward));
        } else {
            _mint(msg.sender, staked);
        }

        totalStaked -= staked;

        delete stakers[msg.sender];
    }

    /**
    * @dev Add monthly eth reward for stakers
    */
    function addRewards() external payable teamOROwner {
        monthlyReward = [block.timestamp, totalStaked, msg.value];
    }

    function _calcMonthlyReward() private view returns (uint256) {
        require(isStaking(msg.sender), "You are not staking!?");
        require(!userMonthlyClaimed[msg.sender][monthlyReward[0]], "You already claimed your monthly reward.");
        require(stakers[msg.sender].start < monthlyReward[0], "You will not receive ETH rewards until next period.");

        uint256 staked = stakers[msg.sender].staked;
        uint256 total = monthlyReward[1];
        uint256 P = (staked * 1e18) / total;
        uint256 reward = monthlyReward[2] * P / 1e18;

        return reward;
    }

    /**
    * @dev Claiming of eth rewards
    */
    function claimETHRewards() external {
        uint256 reward = _calcMonthlyReward();

        userMonthlyClaimed[msg.sender][monthlyReward[0]] = true;

        stakers[msg.sender].ethEarned += reward;
    }

    /**
    * @dev Withdrawing of eth rewards
    */
    function withdrawETHRewards() public {
        uint256 reward = stakers[msg.sender].ethEarned;
        if (!userMonthlyClaimed[msg.sender][monthlyReward[0]]) reward += _calcMonthlyReward();

        require(reward > 0, "There is no ETH to be withdrawn.");
        
        userMonthlyClaimed[msg.sender][monthlyReward[0]] = true;

        stakers[msg.sender].ethEarned = 0;
        payable(msg.sender).transfer(reward);

        emit Claim(reward);
    }


    /**
    * @dev Enables/disables staking
    */
    function setStakingState(bool onoff) external teamOROwner {
        stakingEnabled = onoff;
    }

    receive() external payable {}
}

File 1 of 11: Context.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

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

File 3 of 11: ERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        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;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

    function _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 {}
}

File 4 of 11: IERC20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

File 5 of 11: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./IERC20.sol";

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

File 6 of 11: IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 7 of 11: IUniswapV2Pair.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

File 8 of 11: IUniswapV2Router01.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

File 9 of 11: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

File 10 of 11: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./Context.sol";

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

File 11 of 11: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

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

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Stake","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":"addRewards","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":[],"name":"apr","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimETHRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"}],"name":"delBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"stakerAddr","type":"address"}],"name":"isStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"monthlyReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allow","type":"bool"}],"name":"setAutomatedMarketMakerPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setStakingState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakers","outputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"staked","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"ethEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"validatorFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateSwapTokensThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"userClaimHistory","outputs":[{"components":[{"internalType":"uint256[]","name":"dates","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"internalType":"struct EHIVE_NEW.ClaimHistory","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"userEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userMonthlyClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"userStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawContractETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETHRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000601560006101000a81548160ff0219169083151502179055506040518060600160405280600060ff168152602001600060ff168152602001600060ff1681525060169060036200005892919062000693565b503480156200006657600080fd5b506040518060400160405280600d81526020017f457468657265756d2048697665000000000000000000000000000000000000008152506040518060400160405280600581526020017f45484956450000000000000000000000000000000000000000000000000000008152508160039080519060200190620000eb929190620006ea565b50806004908051906020019062000104929190620006ea565b505050620001276200011b620002c660201b60201c565b620002ce60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006002905060006001905060006003905060006c06f125563f59f382da7000000090506c0c9f2c9cd04674edea400000006006819055506a33b2e3c9fd0803ce800000600a8190555083600c8190555082600d8190555081600e81905550600e54600d54600c54620001f591906200086b565b6200020191906200086b565b600b81905550620002176200039460201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002796200026b6200039460201b60201c565b6001620003be60201b60201c565b6200028c306001620003be60201b60201c565b620002a161dead6001620003be60201b60201c565b6032601481905550620002bb33826200051060201b60201c565b5050505050620009de565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003ce620002c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148062000473575062000435620002c660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200045b6200039460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b620004b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ac90620007f9565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000583576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057a906200081b565b60405180910390fd5b62000597600083836200068960201b60201c565b8060026000828254620005ab91906200086b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200060291906200086b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200066991906200083d565b60405180910390a362000685600083836200068e60201b60201c565b5050565b505050565b505050565b828054828255906000526020600020908101928215620006d7579160200282015b82811115620006d6578251829060ff16905591602001919060010190620006b4565b5b509050620006e691906200077b565b5090565b828054620006f890620008d2565b90600052602060002090601f0160209004810192826200071c576000855562000768565b82601f106200073757805160ff191683800117855562000768565b8280016001018555821562000768579182015b82811115620007675782518255916020019190600101906200074a565b5b5090506200077791906200077b565b5090565b5b80821115620007965760008160009055506001016200077c565b5090565b6000620007a96035836200085a565b9150620007b68262000966565b604082019050919050565b6000620007d0601f836200085a565b9150620007dd82620009b5565b602082019050919050565b620007f381620008c8565b82525050565b6000602082019050818103600083015262000814816200079a565b9050919050565b600060208201905081810360008301526200083681620007c1565b9050919050565b6000602082019050620008546000830184620007e8565b92915050565b600082825260208201905092915050565b60006200087882620008c8565b91506200088583620008c8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008bd57620008bc62000908565b5b828201905092915050565b6000819050919050565b60006002820490506001821680620008eb57607f821691505b6020821081141562000902576200090162000937565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f43616c6c6572206973206e6f7420746865205f7377617046656552656365697660008201527f65722061646472657373206e6f72206f776e65722e0000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b615def80620009ee6000396000f3fe6080604052600436106102765760003560e01c806370a082311161014f578063b4b72c1d116100c1578063cef851391161007a578063cef8513914610978578063d54ad2a1146109a3578063d5abeb01146109ce578063dd62ed3e146109f9578063df778d2614610a36578063f2fde38b14610a4d5761027d565b8063b4b72c1d1461086c578063c024666814610883578063c350f6ca146108ac578063c69bebe4146108e9578063c8125e4514610912578063cba725401461093b5761027d565b80639168ae72116101135780639168ae721461072057806395d89b4114610761578063a457c2d71461078c578063a694fc3a146107c9578063a9059cbb146107f2578063acc3a9391461082f5761027d565b806370a0823114610639578063715018a614610676578063817b1cd21461068d5780638baa63b2146106b85780638da5cb5b146106f55761027d565b8063313ce567116101e85780634e71d92d116101ac5780634e71d92d146105035780634fbee1931461051a57806357ded9c9146105575780636ceb23a1146105825780636e0df713146105bf5780636f49712b146105fc5761027d565b8063313ce56714610432578063395093511461045d5780633b51e5cf1461049a5780633dd5b2da146104c357806345167f26146104da5761027d565b806318160ddd1161023a57806318160ddd146103485780631cfff51b146103735780631e25d98f1461039e57806322429085146103b557806323b872dd146103de5780632def66201461041b5761027d565b806306fdde0314610282578063095ea7b3146102ad5780630b559c6f146102ea57806313114a9d1461031357806314d6aed01461033e5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a76565b6040516102a49190614f1e565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190614791565b610b08565b6040516102e19190614f03565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c91906147d1565b610b2b565b005b34801561031f57600080fd5b50610328610d22565b6040516103359190615262565b60405180910390f35b610346610d28565b005b34801561035457600080fd5b5061035d610e33565b60405161036a9190615262565b60405180910390f35b34801561037f57600080fd5b50610388610e3d565b6040516103959190614f03565b60405180910390f35b3480156103aa57600080fd5b506103b3610e50565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190614874565b6110c2565b005b3480156103ea57600080fd5b50610405600480360381019061040091906146fe565b6111c1565b6040516104129190614f03565b60405180910390f35b34801561042757600080fd5b506104306111f0565b005b34801561043e57600080fd5b50610447611575565b60405161045491906152d7565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190614791565b61157e565b6040516104919190614f03565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc919061481a565b611628565b005b3480156104cf57600080fd5b506104d8611720565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190614751565b61178b565b005b34801561050f57600080fd5b506105186118c1565b005b34801561052657600080fd5b50610541600480360381019061053c9190614664565b611b38565b60405161054e9190614f03565b60405180910390f35b34801561056357600080fd5b5061056c611b8e565b6040516105799190615262565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a49190614664565b611b94565b6040516105b69190615240565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190614847565b611c9d565b6040516105f39190615262565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190614664565b611cc1565b6040516106309190614f03565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190614664565b611d5b565b60405161066d9190615262565b60405180910390f35b34801561068257600080fd5b5061068b611da3565b005b34801561069957600080fd5b506106a2611e2b565b6040516106af9190615262565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da9190614847565b611e31565b6040516106ec9190614f03565b60405180910390f35b34801561070157600080fd5b5061070a611fe5565b6040516107179190614e34565b60405180910390f35b34801561072c57600080fd5b5061074760048036038101906107429190614664565b61200f565b604051610758959493929190614eb0565b60405180910390f35b34801561076d57600080fd5b50610776612065565b6040516107839190614f1e565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae9190614791565b6120f7565b6040516107c09190614f03565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb9190614847565b6121e1565b005b3480156107fe57600080fd5b5061081960048036038101906108149190614791565b6124de565b6040516108269190614f03565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190614664565b612501565b6040516108639190615262565b60405180910390f35b34801561087857600080fd5b5061088161254d565b005b34801561088f57600080fd5b506108aa60048036038101906108a59190614751565b61263d565b005b3480156108b857600080fd5b506108d360048036038101906108ce9190614791565b612773565b6040516108e09190614f03565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b9190614664565b6127a2565b005b34801561091e57600080fd5b50610939600480360381019061093491906147d1565b6128c1565b005b34801561094757600080fd5b50610962600480360381019061095d9190614664565b6129d2565b60405161096f9190615262565b60405180910390f35b34801561098457600080fd5b5061098d612a57565b60405161099a9190615262565b60405180910390f35b3480156109af57600080fd5b506109b8612a5d565b6040516109c59190615262565b60405180910390f35b3480156109da57600080fd5b506109e3612a63565b6040516109f09190615262565b60405180910390f35b348015610a0557600080fd5b50610a206004803603810190610a1b91906146be565b612a69565b604051610a2d9190615262565b60405180910390f35b348015610a4257600080fd5b50610a4b612af0565b005b348015610a5957600080fd5b50610a746004803603810190610a6f9190614664565b612bde565b005b606060038054610a8590615580565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab190615580565b8015610afe5780601f10610ad357610100808354040283529160200191610afe565b820191906000526020600020905b815481529060010190602001808311610ae157829003601f168201915b5050505050905090565b600080610b13612cd6565b9050610b20818585612cde565b600191505092915050565b610b33612cd6565b73ffffffffffffffffffffffffffffffffffffffff16610b51611fe5565b73ffffffffffffffffffffffffffffffffffffffff1614610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90615140565b60405180910390fd5b60005b8151811015610d1e57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610bff57610bfe6156b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610c935750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610c7257610c716156b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610d0b576001601d6000848481518110610cb157610cb06156b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610d16906155e3565b915050610baa565b5050565b600b5481565b610d30612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610dc45750610d8e612cd6565b73ffffffffffffffffffffffffffffffffffffffff16610dac611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b610e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfa90615100565b60405180910390fd5b60405180606001604052804281526020016012548152602001348152506016906003610e309291906144d9565b50565b6000600254905090565b601560009054906101000a900460ff1681565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006016600081548110610eed57610eec6156b9565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff16610f2e57610f20612ea9565b81610f2b91906153d1565b90505b60008111610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890615080565b60405180910390fd5b6001601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006016600081548110610fc957610fc86156b9565b5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611087573d6000803e3d6000fd5b507f7bb2b3c10797baccb6f8c4791f1edd6ca2f0d028ee0eda64b01a9a57e3a653f7816040516110b79190615262565b60405180910390a150565b6110ca612cd6565b73ffffffffffffffffffffffffffffffffffffffff166110e8611fe5565b73ffffffffffffffffffffffffffffffffffffffff161461113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590615140565b60405180910390fd5b82600c8190555081600d8190555080600e81905550600e54600d54600c5461116691906153d1565b61117091906153d1565b600b819055506006600b5411156111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b3906150e0565b60405180910390fd5b505050565b6000806111cc612cd6565b90506111d985828561312d565b6111e48585856131b9565b60019150509392505050565b6111f933611cc1565b611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90615160565b60405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060166000815481106112d5576112d46156b9565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff1661131657611308612ea9565b8161131391906153d1565b90505b600081111561132857611327610e50565b5b6000611333336129d2565b90506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015490506006546113998361138b610e33565b61372690919063ffffffff16565b1080156113b25750601560009054906101000a900460ff165b156114c357601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001429080600181540180825580915050600190039060005260206000200160009091909190915055601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101829080600181540180825580915050600190039060005260206000200160009091909190915055816013600082825461149b91906153d1565b925050819055506114be336114b9848461372690919063ffffffff16565b61373c565b6114ce565b6114cd338261373c565b5b80601260008282546114e091906154b2565b92505081905550601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160009055600382016000905560048201600090555050505050565b60006012905090565b600080611589612cd6565b905061161d818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461161891906153d1565b612cde565b600191505092915050565b611630612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806116c4575061168e612cd6565b73ffffffffffffffffffffffffffffffffffffffff166116ac611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa90615100565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611788573d6000803e3d6000fd5b50565b611793612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061182757506117f1612cd6565b73ffffffffffffffffffffffffffffffffffffffff1661180f611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90615100565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601560009054906101000a900460ff16611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790615120565b60405180910390fd5b61191933611cc1565b611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f90615160565b60405180910390fd5b600654611963610e33565b11156119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b90614f80565b60405180910390fd5b60006119af336129d2565b9050601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001429080600181540180825580915050600190039060005260206000200160009091909190915055601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190806001815401808255809150506001900390600052602060002001600090919091909150558060136000828254611a9591906153d1565b92505081905550611aa6338261373c565b42601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b611b9c614526565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611c3557602002820191906000526020600020905b815481526020019060010190808311611c21575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c8d57602002820191906000526020600020905b815481526020019060010190808311611c79575b5050505050815250509050919050565b60168181548110611cad57600080fd5b906000526020600020016000915090505481565b60008173ffffffffffffffffffffffffffffffffffffffff16601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611dab612cd6565b73ffffffffffffffffffffffffffffffffffffffff16611dc9611fe5565b73ffffffffffffffffffffffffffffffffffffffff1614611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690615140565b60405180910390fd5b611e29600061389c565b565b60125481565b6000611e3b612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611ecf5750611e99612cd6565b73ffffffffffffffffffffffffffffffffffffffff16611eb7611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0590615100565b60405180910390fd5b620186a06001611f1c610e33565b611f269190615458565b611f309190615427565b821015611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906150c0565b60405180910390fd5b6103e86005611f7f610e33565b611f899190615458565b611f939190615427565b821115611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc906150a0565b60405180910390fd5b81600a8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154905085565b60606004805461207490615580565b80601f01602080910402602001604051908101604052809291908181526020018280546120a090615580565b80156120ed5780601f106120c2576101008083540402835291602001916120ed565b820191906000526020600020905b8154815290600101906020018083116120d057829003601f168201915b5050505050905090565b600080612102612cd6565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf90615200565b60405180910390fd5b6121d58286868403612cde565b60019250505092915050565b601560009054906101000a900460ff16612230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222790615120565b60405180910390fd5b60065461223b610e33565b111561227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614f80565b60405180910390fd5b61228533611cc1565b156123905761229333613962565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008282546122e491906153d1565b9250508190555080601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201600082825461233d91906153d1565b9250508190555042601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550612481565b6040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001428152602001828152602001600081526020016000815250601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030155608082015181600401559050505b806012600082825461249391906153d1565b925050819055506124a43382613ae6565b7f227a473b70d2f893cc7659219575c030a63b5743024fe1e0c1a680e708b1525a816040516124d39190615262565b60405180910390a150565b6000806124e9612cd6565b90506124f68185856131b9565b600191505092915050565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b6000612557612ea9565b90506001601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060166000815481106125b1576125b06156b9565b5b9060005260206000200154815260200190815260200160002060006101000a81548160ff02191690831515021790555080601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401600082825461263391906153d1565b9250508190555050565b612645612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806126d957506126a3612cd6565b73ffffffffffffffffffffffffffffffffffffffff166126c1611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b612718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270f90615100565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6127aa612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061283e5750612808612cd6565b73ffffffffffffffffffffffffffffffffffffffff16612826611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b61287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287490615100565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6128c9612cd6565b73ffffffffffffffffffffffffffffffffffffffff166128e7611fe5565b73ffffffffffffffffffffffffffffffffffffffff161461293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490615140565b60405180910390fd5b60005b81518110156129ce576000601d6000848481518110612962576129616156b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806129c6906155e3565b915050612940565b5050565b6000806129de83613962565b90506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015490506000811115612a4c57612a43818361372690919063ffffffff16565b92505050612a52565b81925050505b919050565b600a5481565b60135481565b60065481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612af8612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612b8c5750612b56612cd6565b73ffffffffffffffffffffffffffffffffffffffff16612b74611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc290615100565b60405180910390fd5b612bdc612bd730611d5b565b613cbd565b565b612be6612cd6565b73ffffffffffffffffffffffffffffffffffffffff16612c04611fe5565b73ffffffffffffffffffffffffffffffffffffffff1614612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5190615140565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc190614fc0565b60405180910390fd5b612cd38161389c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d45906151e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db590614fe0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e9c9190615262565b60405180910390a3505050565b6000612eb433611cc1565b612ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eea90615160565b60405180910390fd5b601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006016600081548110612f4957612f486156b9565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff1615612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790615040565b60405180910390fd5b6016600081548110612fc557612fc46156b9565b5b9060005260206000200154601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410613053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304a906151c0565b60405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050600060166001815481106130b1576130b06156b9565b5b90600052602060002001549050600081670de0b6b3a7640000846130d59190615458565b6130df9190615427565b90506000670de0b6b3a7640000826016600281548110613102576131016156b9565b5b90600052602060002001546131179190615458565b6131219190615427565b90508094505050505090565b60006131398484612a69565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146131b357818110156131a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319c90615000565b60405180910390fd5b6131b28484848403612cde565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613220906151a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329090614f60565b60405180910390fd5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331d90615060565b60405180910390fd5b60008114156133405761333b83836000613f0f565b613721565b600061334b30611d5b565b90506000600a5482101590508080156133715750600860149054906101000a900460ff16155b80156133c75750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561341d5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134735750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134b7576001600860146101000a81548160ff02191690831515021790555061349b614190565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061356d5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806136185750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136175750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b1561362257600090505b60008115613711576136526064613644600b548861437e90919063ffffffff16565b61439490919063ffffffff16565b9050600b54600d54826136659190615458565b61366f9190615427565b6010600082825461368091906153d1565b92505081905550600b54600e54826136989190615458565b6136a29190615427565b601160008282546136b391906153d1565b92505081905550600b54600c54826136cb9190615458565b6136d59190615427565b600f60008282546136e691906153d1565b92505081905550600081111561370257613701873083613f0f565b5b808561370e91906154b2565b94505b61371c878787613f0f565b505050505b505050565b6000818361373491906153d1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a390615220565b60405180910390fd5b6137b8600083836143aa565b80600260008282546137ca91906153d1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461381f91906153d1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138849190615262565b60405180910390a3613898600083836143af565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061396d82611cc1565b6139ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a390614f40565b60405180910390fd5b60006139b783612501565b90506000613a116001601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461439490919063ffffffff16565b90506000613a2960014261439490919063ffffffff16565b90506000613a4083836143b490919063ffffffff16565b90506000613a6c6064613a5e6014548861437e90919063ffffffff16565b61439490919063ffffffff16565b90506000613abe603c613ab0603c613aa26018613a9461016d8961439490919063ffffffff16565b61439490919063ffffffff16565b61439490919063ffffffff16565b61439490919063ffffffff16565b90506000613ad5848361437e90919063ffffffff16565b905080975050505050505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4d90615180565b60405180910390fd5b613b62826000836143aa565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdf90614fa0565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254613c3f91906154b2565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ca49190615262565b60405180910390a3613cb8836000846143af565b505050565b6000600267ffffffffffffffff811115613cda57613cd96156e8565b5b604051908082528060200260200182016040528015613d085781602001602082028036833780820191505090505b5090503081600081518110613d2057613d1f6156b9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613dc257600080fd5b505afa158015613dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dfa9190614691565b81600181518110613e0e57613e0d6156b9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e7530600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cde565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ed995949392919061527d565b600060405180830381600087803b158015613ef357600080fd5b505af1158015613f07573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f76906151a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fe690614f60565b60405180910390fd5b613ffa8383836143aa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015614080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407790615020565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461411391906153d1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141779190615262565b60405180910390a361418a8484846143af565b50505050565b600061419b30611d5b565b90506000601154600f546010546141b291906153d1565b6141bc91906153d1565b905060008214806141cd5750600081145b156141d957505061437c565b600a548211156141e957600a5491505b6000600282601054856141fc9190615458565b6142069190615427565b6142109190615427565b9050600061422782856143b490919063ffffffff16565b9050600047905061423782613cbd565b600061424c82476143b490919063ffffffff16565b9050600061427786614269600f548561437e90919063ffffffff16565b61439490919063ffffffff16565b905060006142a2876142946011548661437e90919063ffffffff16565b61439490919063ffffffff16565b905060008183856142b391906154b2565b6142bd91906154b2565b905060006010819055506000600f819055506000601181905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc614326848661372690919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015614351573d6000803e3d6000fd5b506000871180156143625750600081115b156143725761437187826143ca565b5b5050505050505050505b565b6000818361438c9190615458565b905092915050565b600081836143a29190615427565b905092915050565b505050565b505050565b600081836143c291906154b2565b905092915050565b6143f730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cde565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161448096959493929190614e4f565b6060604051808303818588803b15801561449957600080fd5b505af11580156144ad573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144d291906148c7565b5050505050565b828054828255906000526020600020908101928215614515579160200282015b828111156145145782518255916020019190600101906144f9565b5b5090506145229190614540565b5090565b604051806040016040528060608152602001606081525090565b5b80821115614559576000816000905550600101614541565b5090565b600061457061456b84615317565b6152f2565b905080838252602082019050828560208602820111156145935761459261571c565b5b60005b858110156145c357816145a988826145cd565b845260208401935060208301925050600181019050614596565b5050509392505050565b6000813590506145dc81615d74565b92915050565b6000815190506145f181615d74565b92915050565b600082601f83011261460c5761460b615717565b5b813561461c84826020860161455d565b91505092915050565b60008135905061463481615d8b565b92915050565b60008135905061464981615da2565b92915050565b60008151905061465e81615da2565b92915050565b60006020828403121561467a57614679615726565b5b6000614688848285016145cd565b91505092915050565b6000602082840312156146a7576146a6615726565b5b60006146b5848285016145e2565b91505092915050565b600080604083850312156146d5576146d4615726565b5b60006146e3858286016145cd565b92505060206146f4858286016145cd565b9150509250929050565b60008060006060848603121561471757614716615726565b5b6000614725868287016145cd565b9350506020614736868287016145cd565b92505060406147478682870161463a565b9150509250925092565b6000806040838503121561476857614767615726565b5b6000614776858286016145cd565b925050602061478785828601614625565b9150509250929050565b600080604083850312156147a8576147a7615726565b5b60006147b6858286016145cd565b92505060206147c78582860161463a565b9150509250929050565b6000602082840312156147e7576147e6615726565b5b600082013567ffffffffffffffff81111561480557614804615721565b5b614811848285016145f7565b91505092915050565b6000602082840312156148305761482f615726565b5b600061483e84828501614625565b91505092915050565b60006020828403121561485d5761485c615726565b5b600061486b8482850161463a565b91505092915050565b60008060006060848603121561488d5761488c615726565b5b600061489b8682870161463a565b93505060206148ac8682870161463a565b92505060406148bd8682870161463a565b9150509250925092565b6000806000606084860312156148e0576148df615726565b5b60006148ee8682870161464f565b93505060206148ff8682870161464f565b92505060406149108682870161464f565b9150509250925092565b6000614926838361494a565b60208301905092915050565b600061493e8383614e07565b60208301905092915050565b614953816154e6565b82525050565b614962816154e6565b82525050565b600061497382615363565b61497d818561539e565b935061498883615343565b8060005b838110156149b95781516149a0888261491a565b97506149ab83615384565b92505060018101905061498c565b5085935050505092915050565b60006149d18261536e565b6149db81856153af565b93506149e683615353565b8060005b83811015614a175781516149fe8882614932565b9750614a0983615391565b9250506001810190506149ea565b5085935050505092915050565b614a2d816154f8565b82525050565b614a3c8161553b565b82525050565b6000614a4d82615379565b614a5781856153c0565b9350614a6781856020860161554d565b614a708161572b565b840191505092915050565b6000614a886014836153c0565b9150614a938261573c565b602082019050919050565b6000614aab6023836153c0565b9150614ab682615765565b604082019050919050565b6000614ace602d836153c0565b9150614ad9826157b4565b604082019050919050565b6000614af16022836153c0565b9150614afc82615803565b604082019050919050565b6000614b146026836153c0565b9150614b1f82615852565b604082019050919050565b6000614b376022836153c0565b9150614b42826158a1565b604082019050919050565b6000614b5a601d836153c0565b9150614b65826158f0565b602082019050919050565b6000614b7d6026836153c0565b9150614b8882615919565b604082019050919050565b6000614ba06028836153c0565b9150614bab82615968565b604082019050919050565b6000614bc36034836153c0565b9150614bce826159b7565b604082019050919050565b6000614be66020836153c0565b9150614bf182615a06565b602082019050919050565b6000614c096037836153c0565b9150614c1482615a2f565b604082019050919050565b6000614c2c6038836153c0565b9150614c3782615a7e565b604082019050919050565b6000614c4f601c836153c0565b9150614c5a82615acd565b602082019050919050565b6000614c726035836153c0565b9150614c7d82615af6565b604082019050919050565b6000614c956017836153c0565b9150614ca082615b45565b602082019050919050565b6000614cb86020836153c0565b9150614cc382615b6e565b602082019050919050565b6000614cdb6015836153c0565b9150614ce682615b97565b602082019050919050565b6000614cfe6021836153c0565b9150614d0982615bc0565b604082019050919050565b6000614d216025836153c0565b9150614d2c82615c0f565b604082019050919050565b6000614d446033836153c0565b9150614d4f82615c5e565b604082019050919050565b6000614d676024836153c0565b9150614d7282615cad565b604082019050919050565b6000614d8a6025836153c0565b9150614d9582615cfc565b604082019050919050565b6000614dad601f836153c0565b9150614db882615d4b565b602082019050919050565b60006040830160008301518482036000860152614de082826149c6565b91505060208301518482036020860152614dfa82826149c6565b9150508091505092915050565b614e1081615524565b82525050565b614e1f81615524565b82525050565b614e2e8161552e565b82525050565b6000602082019050614e496000830184614959565b92915050565b600060c082019050614e646000830189614959565b614e716020830188614e16565b614e7e6040830187614a33565b614e8b6060830186614a33565b614e986080830185614959565b614ea560a0830184614e16565b979650505050505050565b600060a082019050614ec56000830188614959565b614ed26020830187614e16565b614edf6040830186614e16565b614eec6060830185614e16565b614ef96080830184614e16565b9695505050505050565b6000602082019050614f186000830184614a24565b92915050565b60006020820190508181036000830152614f388184614a42565b905092915050565b60006020820190508181036000830152614f5981614a7b565b9050919050565b60006020820190508181036000830152614f7981614a9e565b9050919050565b60006020820190508181036000830152614f9981614ac1565b9050919050565b60006020820190508181036000830152614fb981614ae4565b9050919050565b60006020820190508181036000830152614fd981614b07565b9050919050565b60006020820190508181036000830152614ff981614b2a565b9050919050565b6000602082019050818103600083015261501981614b4d565b9050919050565b6000602082019050818103600083015261503981614b70565b9050919050565b6000602082019050818103600083015261505981614b93565b9050919050565b6000602082019050818103600083015261507981614bb6565b9050919050565b6000602082019050818103600083015261509981614bd9565b9050919050565b600060208201905081810360008301526150b981614bfc565b9050919050565b600060208201905081810360008301526150d981614c1f565b9050919050565b600060208201905081810360008301526150f981614c42565b9050919050565b6000602082019050818103600083015261511981614c65565b9050919050565b6000602082019050818103600083015261513981614c88565b9050919050565b6000602082019050818103600083015261515981614cab565b9050919050565b6000602082019050818103600083015261517981614cce565b9050919050565b6000602082019050818103600083015261519981614cf1565b9050919050565b600060208201905081810360008301526151b981614d14565b9050919050565b600060208201905081810360008301526151d981614d37565b9050919050565b600060208201905081810360008301526151f981614d5a565b9050919050565b6000602082019050818103600083015261521981614d7d565b9050919050565b6000602082019050818103600083015261523981614da0565b9050919050565b6000602082019050818103600083015261525a8184614dc3565b905092915050565b60006020820190506152776000830184614e16565b92915050565b600060a0820190506152926000830188614e16565b61529f6020830187614a33565b81810360408301526152b18186614968565b90506152c06060830185614959565b6152cd6080830184614e16565b9695505050505050565b60006020820190506152ec6000830184614e25565b92915050565b60006152fc61530d565b905061530882826155b2565b919050565b6000604051905090565b600067ffffffffffffffff821115615332576153316156e8565b5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006153dc82615524565b91506153e783615524565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561541c5761541b61562c565b5b828201905092915050565b600061543282615524565b915061543d83615524565b92508261544d5761544c61565b565b5b828204905092915050565b600061546382615524565b915061546e83615524565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154a7576154a661562c565b5b828202905092915050565b60006154bd82615524565b91506154c883615524565b9250828210156154db576154da61562c565b5b828203905092915050565b60006154f182615504565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061554682615524565b9050919050565b60005b8381101561556b578082015181840152602081019050615550565b8381111561557a576000848401525b50505050565b6000600282049050600182168061559857607f821691505b602082108114156155ac576155ab61568a565b5b50919050565b6155bb8261572b565b810181811067ffffffffffffffff821117156155da576155d96156e8565b5b80604052505050565b60006155ee82615524565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156215761562061562c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f55736572206973206e6f74207374616b696e672e000000000000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f546865726520617265206e6f206d6f72652072657761726473206c656674207460008201527f6f20626520636c61696d65642e00000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f596f7520616c726561647920636c61696d656420796f7572206d6f6e74686c7960008201527f207265776172642e000000000000000000000000000000000000000000000000602082015250565b7f596f752061726520756e61626c6520746f207472616e73666572206f7220737760008201527f61702064756520746f20626c61636b6c6973742e000000000000000000000000602082015250565b7f5468657265206973206e6f2045544820746f2062652077697468647261776e2e600082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b7f43616c6c6572206973206e6f7420746865205f7377617046656552656365697660008201527f65722061646472657373206e6f72206f776e65722e0000000000000000000000602082015250565b7f5374616b696e67206973206e6f7420656e61626c65642e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520617265206e6f74207374616b696e67213f0000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f752077696c6c206e6f74207265636569766520455448207265776172647360008201527f20756e74696c206e65787420706572696f642e00000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b615d7d816154e6565b8114615d8857600080fd5b50565b615d94816154f8565b8114615d9f57600080fd5b50565b615dab81615524565b8114615db657600080fd5b5056fea264697066735822122047913b9e4af9509ed8404e6715226e93ecdafd085f65dbc490f417e8f69efb1164736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102765760003560e01c806370a082311161014f578063b4b72c1d116100c1578063cef851391161007a578063cef8513914610978578063d54ad2a1146109a3578063d5abeb01146109ce578063dd62ed3e146109f9578063df778d2614610a36578063f2fde38b14610a4d5761027d565b8063b4b72c1d1461086c578063c024666814610883578063c350f6ca146108ac578063c69bebe4146108e9578063c8125e4514610912578063cba725401461093b5761027d565b80639168ae72116101135780639168ae721461072057806395d89b4114610761578063a457c2d71461078c578063a694fc3a146107c9578063a9059cbb146107f2578063acc3a9391461082f5761027d565b806370a0823114610639578063715018a614610676578063817b1cd21461068d5780638baa63b2146106b85780638da5cb5b146106f55761027d565b8063313ce567116101e85780634e71d92d116101ac5780634e71d92d146105035780634fbee1931461051a57806357ded9c9146105575780636ceb23a1146105825780636e0df713146105bf5780636f49712b146105fc5761027d565b8063313ce56714610432578063395093511461045d5780633b51e5cf1461049a5780633dd5b2da146104c357806345167f26146104da5761027d565b806318160ddd1161023a57806318160ddd146103485780631cfff51b146103735780631e25d98f1461039e57806322429085146103b557806323b872dd146103de5780632def66201461041b5761027d565b806306fdde0314610282578063095ea7b3146102ad5780630b559c6f146102ea57806313114a9d1461031357806314d6aed01461033e5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a76565b6040516102a49190614f1e565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190614791565b610b08565b6040516102e19190614f03565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c91906147d1565b610b2b565b005b34801561031f57600080fd5b50610328610d22565b6040516103359190615262565b60405180910390f35b610346610d28565b005b34801561035457600080fd5b5061035d610e33565b60405161036a9190615262565b60405180910390f35b34801561037f57600080fd5b50610388610e3d565b6040516103959190614f03565b60405180910390f35b3480156103aa57600080fd5b506103b3610e50565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190614874565b6110c2565b005b3480156103ea57600080fd5b50610405600480360381019061040091906146fe565b6111c1565b6040516104129190614f03565b60405180910390f35b34801561042757600080fd5b506104306111f0565b005b34801561043e57600080fd5b50610447611575565b60405161045491906152d7565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190614791565b61157e565b6040516104919190614f03565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc919061481a565b611628565b005b3480156104cf57600080fd5b506104d8611720565b005b3480156104e657600080fd5b5061050160048036038101906104fc9190614751565b61178b565b005b34801561050f57600080fd5b506105186118c1565b005b34801561052657600080fd5b50610541600480360381019061053c9190614664565b611b38565b60405161054e9190614f03565b60405180910390f35b34801561056357600080fd5b5061056c611b8e565b6040516105799190615262565b60405180910390f35b34801561058e57600080fd5b506105a960048036038101906105a49190614664565b611b94565b6040516105b69190615240565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190614847565b611c9d565b6040516105f39190615262565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190614664565b611cc1565b6040516106309190614f03565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190614664565b611d5b565b60405161066d9190615262565b60405180910390f35b34801561068257600080fd5b5061068b611da3565b005b34801561069957600080fd5b506106a2611e2b565b6040516106af9190615262565b60405180910390f35b3480156106c457600080fd5b506106df60048036038101906106da9190614847565b611e31565b6040516106ec9190614f03565b60405180910390f35b34801561070157600080fd5b5061070a611fe5565b6040516107179190614e34565b60405180910390f35b34801561072c57600080fd5b5061074760048036038101906107429190614664565b61200f565b604051610758959493929190614eb0565b60405180910390f35b34801561076d57600080fd5b50610776612065565b6040516107839190614f1e565b60405180910390f35b34801561079857600080fd5b506107b360048036038101906107ae9190614791565b6120f7565b6040516107c09190614f03565b60405180910390f35b3480156107d557600080fd5b506107f060048036038101906107eb9190614847565b6121e1565b005b3480156107fe57600080fd5b5061081960048036038101906108149190614791565b6124de565b6040516108269190614f03565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190614664565b612501565b6040516108639190615262565b60405180910390f35b34801561087857600080fd5b5061088161254d565b005b34801561088f57600080fd5b506108aa60048036038101906108a59190614751565b61263d565b005b3480156108b857600080fd5b506108d360048036038101906108ce9190614791565b612773565b6040516108e09190614f03565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b9190614664565b6127a2565b005b34801561091e57600080fd5b50610939600480360381019061093491906147d1565b6128c1565b005b34801561094757600080fd5b50610962600480360381019061095d9190614664565b6129d2565b60405161096f9190615262565b60405180910390f35b34801561098457600080fd5b5061098d612a57565b60405161099a9190615262565b60405180910390f35b3480156109af57600080fd5b506109b8612a5d565b6040516109c59190615262565b60405180910390f35b3480156109da57600080fd5b506109e3612a63565b6040516109f09190615262565b60405180910390f35b348015610a0557600080fd5b50610a206004803603810190610a1b91906146be565b612a69565b604051610a2d9190615262565b60405180910390f35b348015610a4257600080fd5b50610a4b612af0565b005b348015610a5957600080fd5b50610a746004803603810190610a6f9190614664565b612bde565b005b606060038054610a8590615580565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab190615580565b8015610afe5780601f10610ad357610100808354040283529160200191610afe565b820191906000526020600020905b815481529060010190602001808311610ae157829003601f168201915b5050505050905090565b600080610b13612cd6565b9050610b20818585612cde565b600191505092915050565b610b33612cd6565b73ffffffffffffffffffffffffffffffffffffffff16610b51611fe5565b73ffffffffffffffffffffffffffffffffffffffff1614610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90615140565b60405180910390fd5b60005b8151811015610d1e57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610bff57610bfe6156b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610c935750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610c7257610c716156b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610d0b576001601d6000848481518110610cb157610cb06156b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610d16906155e3565b915050610baa565b5050565b600b5481565b610d30612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610dc45750610d8e612cd6565b73ffffffffffffffffffffffffffffffffffffffff16610dac611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b610e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfa90615100565b60405180910390fd5b60405180606001604052804281526020016012548152602001348152506016906003610e309291906144d9565b50565b6000600254905090565b601560009054906101000a900460ff1681565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006016600081548110610eed57610eec6156b9565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff16610f2e57610f20612ea9565b81610f2b91906153d1565b90505b60008111610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890615080565b60405180910390fd5b6001601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006016600081548110610fc957610fc86156b9565b5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611087573d6000803e3d6000fd5b507f7bb2b3c10797baccb6f8c4791f1edd6ca2f0d028ee0eda64b01a9a57e3a653f7816040516110b79190615262565b60405180910390a150565b6110ca612cd6565b73ffffffffffffffffffffffffffffffffffffffff166110e8611fe5565b73ffffffffffffffffffffffffffffffffffffffff161461113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113590615140565b60405180910390fd5b82600c8190555081600d8190555080600e81905550600e54600d54600c5461116691906153d1565b61117091906153d1565b600b819055506006600b5411156111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b3906150e0565b60405180910390fd5b505050565b6000806111cc612cd6565b90506111d985828561312d565b6111e48585856131b9565b60019150509392505050565b6111f933611cc1565b611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90615160565b60405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060166000815481106112d5576112d46156b9565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff1661131657611308612ea9565b8161131391906153d1565b90505b600081111561132857611327610e50565b5b6000611333336129d2565b90506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015490506006546113998361138b610e33565b61372690919063ffffffff16565b1080156113b25750601560009054906101000a900460ff165b156114c357601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001429080600181540180825580915050600190039060005260206000200160009091909190915055601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101829080600181540180825580915050600190039060005260206000200160009091909190915055816013600082825461149b91906153d1565b925050819055506114be336114b9848461372690919063ffffffff16565b61373c565b6114ce565b6114cd338261373c565b5b80601260008282546114e091906154b2565b92505081905550601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160009055600382016000905560048201600090555050505050565b60006012905090565b600080611589612cd6565b905061161d818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461161891906153d1565b612cde565b600191505092915050565b611630612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806116c4575061168e612cd6565b73ffffffffffffffffffffffffffffffffffffffff166116ac611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa90615100565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611788573d6000803e3d6000fd5b50565b611793612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061182757506117f1612cd6565b73ffffffffffffffffffffffffffffffffffffffff1661180f611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90615100565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601560009054906101000a900460ff16611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190790615120565b60405180910390fd5b61191933611cc1565b611958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194f90615160565b60405180910390fd5b600654611963610e33565b11156119a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199b90614f80565b60405180910390fd5b60006119af336129d2565b9050601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001429080600181540180825580915050600190039060005260206000200160009091909190915055601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190806001815401808255809150506001900390600052602060002001600090919091909150558060136000828254611a9591906153d1565b92505081905550611aa6338261373c565b42601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b611b9c614526565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611c3557602002820191906000526020600020905b815481526020019060010190808311611c21575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611c8d57602002820191906000526020600020905b815481526020019060010190808311611c79575b5050505050815250509050919050565b60168181548110611cad57600080fd5b906000526020600020016000915090505481565b60008173ffffffffffffffffffffffffffffffffffffffff16601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611dab612cd6565b73ffffffffffffffffffffffffffffffffffffffff16611dc9611fe5565b73ffffffffffffffffffffffffffffffffffffffff1614611e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1690615140565b60405180910390fd5b611e29600061389c565b565b60125481565b6000611e3b612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611ecf5750611e99612cd6565b73ffffffffffffffffffffffffffffffffffffffff16611eb7611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b611f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0590615100565b60405180910390fd5b620186a06001611f1c610e33565b611f269190615458565b611f309190615427565b821015611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906150c0565b60405180910390fd5b6103e86005611f7f610e33565b611f899190615458565b611f939190615427565b821115611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcc906150a0565b60405180910390fd5b81600a8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154905085565b60606004805461207490615580565b80601f01602080910402602001604051908101604052809291908181526020018280546120a090615580565b80156120ed5780601f106120c2576101008083540402835291602001916120ed565b820191906000526020600020905b8154815290600101906020018083116120d057829003601f168201915b5050505050905090565b600080612102612cd6565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156121c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bf90615200565b60405180910390fd5b6121d58286868403612cde565b60019250505092915050565b601560009054906101000a900460ff16612230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222790615120565b60405180910390fd5b60065461223b610e33565b111561227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614f80565b60405180910390fd5b61228533611cc1565b156123905761229333613962565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008282546122e491906153d1565b9250508190555080601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201600082825461233d91906153d1565b9250508190555042601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550612481565b6040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001428152602001828152602001600081526020016000815250601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030155608082015181600401559050505b806012600082825461249391906153d1565b925050819055506124a43382613ae6565b7f227a473b70d2f893cc7659219575c030a63b5743024fe1e0c1a680e708b1525a816040516124d39190615262565b60405180910390a150565b6000806124e9612cd6565b90506124f68185856131b9565b600191505092915050565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b6000612557612ea9565b90506001601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060166000815481106125b1576125b06156b9565b5b9060005260206000200154815260200190815260200160002060006101000a81548160ff02191690831515021790555080601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401600082825461263391906153d1565b9250508190555050565b612645612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806126d957506126a3612cd6565b73ffffffffffffffffffffffffffffffffffffffff166126c1611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b612718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270f90615100565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b6127aa612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061283e5750612808612cd6565b73ffffffffffffffffffffffffffffffffffffffff16612826611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b61287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287490615100565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6128c9612cd6565b73ffffffffffffffffffffffffffffffffffffffff166128e7611fe5565b73ffffffffffffffffffffffffffffffffffffffff161461293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490615140565b60405180910390fd5b60005b81518110156129ce576000601d6000848481518110612962576129616156b9565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806129c6906155e3565b915050612940565b5050565b6000806129de83613962565b90506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015490506000811115612a4c57612a43818361372690919063ffffffff16565b92505050612a52565b81925050505b919050565b600a5481565b60135481565b60065481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612af8612cd6565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612b8c5750612b56612cd6565b73ffffffffffffffffffffffffffffffffffffffff16612b74611fe5565b73ffffffffffffffffffffffffffffffffffffffff16145b612bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc290615100565b60405180910390fd5b612bdc612bd730611d5b565b613cbd565b565b612be6612cd6565b73ffffffffffffffffffffffffffffffffffffffff16612c04611fe5565b73ffffffffffffffffffffffffffffffffffffffff1614612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5190615140565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612cca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc190614fc0565b60405180910390fd5b612cd38161389c565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d45906151e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db590614fe0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e9c9190615262565b60405180910390a3505050565b6000612eb433611cc1565b612ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eea90615160565b60405180910390fd5b601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006016600081548110612f4957612f486156b9565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff1615612fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa790615040565b60405180910390fd5b6016600081548110612fc557612fc46156b9565b5b9060005260206000200154601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410613053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161304a906151c0565b60405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050600060166001815481106130b1576130b06156b9565b5b90600052602060002001549050600081670de0b6b3a7640000846130d59190615458565b6130df9190615427565b90506000670de0b6b3a7640000826016600281548110613102576131016156b9565b5b90600052602060002001546131179190615458565b6131219190615427565b90508094505050505090565b60006131398484612a69565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146131b357818110156131a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319c90615000565b60405180910390fd5b6131b28484848403612cde565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613229576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613220906151a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329090614f60565b60405180910390fd5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331d90615060565b60405180910390fd5b60008114156133405761333b83836000613f0f565b613721565b600061334b30611d5b565b90506000600a5482101590508080156133715750600860149054906101000a900460ff16155b80156133c75750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561341d5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134735750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134b7576001600860146101000a81548160ff02191690831515021790555061349b614190565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061356d5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806136185750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136175750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b1561362257600090505b60008115613711576136526064613644600b548861437e90919063ffffffff16565b61439490919063ffffffff16565b9050600b54600d54826136659190615458565b61366f9190615427565b6010600082825461368091906153d1565b92505081905550600b54600e54826136989190615458565b6136a29190615427565b601160008282546136b391906153d1565b92505081905550600b54600c54826136cb9190615458565b6136d59190615427565b600f60008282546136e691906153d1565b92505081905550600081111561370257613701873083613f0f565b5b808561370e91906154b2565b94505b61371c878787613f0f565b505050505b505050565b6000818361373491906153d1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a390615220565b60405180910390fd5b6137b8600083836143aa565b80600260008282546137ca91906153d1565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461381f91906153d1565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138849190615262565b60405180910390a3613898600083836143af565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061396d82611cc1565b6139ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139a390614f40565b60405180910390fd5b60006139b783612501565b90506000613a116001601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461439490919063ffffffff16565b90506000613a2960014261439490919063ffffffff16565b90506000613a4083836143b490919063ffffffff16565b90506000613a6c6064613a5e6014548861437e90919063ffffffff16565b61439490919063ffffffff16565b90506000613abe603c613ab0603c613aa26018613a9461016d8961439490919063ffffffff16565b61439490919063ffffffff16565b61439490919063ffffffff16565b61439490919063ffffffff16565b90506000613ad5848361437e90919063ffffffff16565b905080975050505050505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4d90615180565b60405180910390fd5b613b62826000836143aa565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bdf90614fa0565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254613c3f91906154b2565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ca49190615262565b60405180910390a3613cb8836000846143af565b505050565b6000600267ffffffffffffffff811115613cda57613cd96156e8565b5b604051908082528060200260200182016040528015613d085781602001602082028036833780820191505090505b5090503081600081518110613d2057613d1f6156b9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613dc257600080fd5b505afa158015613dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dfa9190614691565b81600181518110613e0e57613e0d6156b9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613e7530600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cde565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ed995949392919061527d565b600060405180830381600087803b158015613ef357600080fd5b505af1158015613f07573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f76906151a0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fe690614f60565b60405180910390fd5b613ffa8383836143aa565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015614080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161407790615020565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461411391906153d1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516141779190615262565b60405180910390a361418a8484846143af565b50505050565b600061419b30611d5b565b90506000601154600f546010546141b291906153d1565b6141bc91906153d1565b905060008214806141cd5750600081145b156141d957505061437c565b600a548211156141e957600a5491505b6000600282601054856141fc9190615458565b6142069190615427565b6142109190615427565b9050600061422782856143b490919063ffffffff16565b9050600047905061423782613cbd565b600061424c82476143b490919063ffffffff16565b9050600061427786614269600f548561437e90919063ffffffff16565b61439490919063ffffffff16565b905060006142a2876142946011548661437e90919063ffffffff16565b61439490919063ffffffff16565b905060008183856142b391906154b2565b6142bd91906154b2565b905060006010819055506000600f819055506000601181905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc614326848661372690919063ffffffff16565b9081150290604051600060405180830381858888f19350505050158015614351573d6000803e3d6000fd5b506000871180156143625750600081115b156143725761437187826143ca565b5b5050505050505050505b565b6000818361438c9190615458565b905092915050565b600081836143a29190615427565b905092915050565b505050565b505050565b600081836143c291906154b2565b905092915050565b6143f730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612cde565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161448096959493929190614e4f565b6060604051808303818588803b15801561449957600080fd5b505af11580156144ad573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144d291906148c7565b5050505050565b828054828255906000526020600020908101928215614515579160200282015b828111156145145782518255916020019190600101906144f9565b5b5090506145229190614540565b5090565b604051806040016040528060608152602001606081525090565b5b80821115614559576000816000905550600101614541565b5090565b600061457061456b84615317565b6152f2565b905080838252602082019050828560208602820111156145935761459261571c565b5b60005b858110156145c357816145a988826145cd565b845260208401935060208301925050600181019050614596565b5050509392505050565b6000813590506145dc81615d74565b92915050565b6000815190506145f181615d74565b92915050565b600082601f83011261460c5761460b615717565b5b813561461c84826020860161455d565b91505092915050565b60008135905061463481615d8b565b92915050565b60008135905061464981615da2565b92915050565b60008151905061465e81615da2565b92915050565b60006020828403121561467a57614679615726565b5b6000614688848285016145cd565b91505092915050565b6000602082840312156146a7576146a6615726565b5b60006146b5848285016145e2565b91505092915050565b600080604083850312156146d5576146d4615726565b5b60006146e3858286016145cd565b92505060206146f4858286016145cd565b9150509250929050565b60008060006060848603121561471757614716615726565b5b6000614725868287016145cd565b9350506020614736868287016145cd565b92505060406147478682870161463a565b9150509250925092565b6000806040838503121561476857614767615726565b5b6000614776858286016145cd565b925050602061478785828601614625565b9150509250929050565b600080604083850312156147a8576147a7615726565b5b60006147b6858286016145cd565b92505060206147c78582860161463a565b9150509250929050565b6000602082840312156147e7576147e6615726565b5b600082013567ffffffffffffffff81111561480557614804615721565b5b614811848285016145f7565b91505092915050565b6000602082840312156148305761482f615726565b5b600061483e84828501614625565b91505092915050565b60006020828403121561485d5761485c615726565b5b600061486b8482850161463a565b91505092915050565b60008060006060848603121561488d5761488c615726565b5b600061489b8682870161463a565b93505060206148ac8682870161463a565b92505060406148bd8682870161463a565b9150509250925092565b6000806000606084860312156148e0576148df615726565b5b60006148ee8682870161464f565b93505060206148ff8682870161464f565b92505060406149108682870161464f565b9150509250925092565b6000614926838361494a565b60208301905092915050565b600061493e8383614e07565b60208301905092915050565b614953816154e6565b82525050565b614962816154e6565b82525050565b600061497382615363565b61497d818561539e565b935061498883615343565b8060005b838110156149b95781516149a0888261491a565b97506149ab83615384565b92505060018101905061498c565b5085935050505092915050565b60006149d18261536e565b6149db81856153af565b93506149e683615353565b8060005b83811015614a175781516149fe8882614932565b9750614a0983615391565b9250506001810190506149ea565b5085935050505092915050565b614a2d816154f8565b82525050565b614a3c8161553b565b82525050565b6000614a4d82615379565b614a5781856153c0565b9350614a6781856020860161554d565b614a708161572b565b840191505092915050565b6000614a886014836153c0565b9150614a938261573c565b602082019050919050565b6000614aab6023836153c0565b9150614ab682615765565b604082019050919050565b6000614ace602d836153c0565b9150614ad9826157b4565b604082019050919050565b6000614af16022836153c0565b9150614afc82615803565b604082019050919050565b6000614b146026836153c0565b9150614b1f82615852565b604082019050919050565b6000614b376022836153c0565b9150614b42826158a1565b604082019050919050565b6000614b5a601d836153c0565b9150614b65826158f0565b602082019050919050565b6000614b7d6026836153c0565b9150614b8882615919565b604082019050919050565b6000614ba06028836153c0565b9150614bab82615968565b604082019050919050565b6000614bc36034836153c0565b9150614bce826159b7565b604082019050919050565b6000614be66020836153c0565b9150614bf182615a06565b602082019050919050565b6000614c096037836153c0565b9150614c1482615a2f565b604082019050919050565b6000614c2c6038836153c0565b9150614c3782615a7e565b604082019050919050565b6000614c4f601c836153c0565b9150614c5a82615acd565b602082019050919050565b6000614c726035836153c0565b9150614c7d82615af6565b604082019050919050565b6000614c956017836153c0565b9150614ca082615b45565b602082019050919050565b6000614cb86020836153c0565b9150614cc382615b6e565b602082019050919050565b6000614cdb6015836153c0565b9150614ce682615b97565b602082019050919050565b6000614cfe6021836153c0565b9150614d0982615bc0565b604082019050919050565b6000614d216025836153c0565b9150614d2c82615c0f565b604082019050919050565b6000614d446033836153c0565b9150614d4f82615c5e565b604082019050919050565b6000614d676024836153c0565b9150614d7282615cad565b604082019050919050565b6000614d8a6025836153c0565b9150614d9582615cfc565b604082019050919050565b6000614dad601f836153c0565b9150614db882615d4b565b602082019050919050565b60006040830160008301518482036000860152614de082826149c6565b91505060208301518482036020860152614dfa82826149c6565b9150508091505092915050565b614e1081615524565b82525050565b614e1f81615524565b82525050565b614e2e8161552e565b82525050565b6000602082019050614e496000830184614959565b92915050565b600060c082019050614e646000830189614959565b614e716020830188614e16565b614e7e6040830187614a33565b614e8b6060830186614a33565b614e986080830185614959565b614ea560a0830184614e16565b979650505050505050565b600060a082019050614ec56000830188614959565b614ed26020830187614e16565b614edf6040830186614e16565b614eec6060830185614e16565b614ef96080830184614e16565b9695505050505050565b6000602082019050614f186000830184614a24565b92915050565b60006020820190508181036000830152614f388184614a42565b905092915050565b60006020820190508181036000830152614f5981614a7b565b9050919050565b60006020820190508181036000830152614f7981614a9e565b9050919050565b60006020820190508181036000830152614f9981614ac1565b9050919050565b60006020820190508181036000830152614fb981614ae4565b9050919050565b60006020820190508181036000830152614fd981614b07565b9050919050565b60006020820190508181036000830152614ff981614b2a565b9050919050565b6000602082019050818103600083015261501981614b4d565b9050919050565b6000602082019050818103600083015261503981614b70565b9050919050565b6000602082019050818103600083015261505981614b93565b9050919050565b6000602082019050818103600083015261507981614bb6565b9050919050565b6000602082019050818103600083015261509981614bd9565b9050919050565b600060208201905081810360008301526150b981614bfc565b9050919050565b600060208201905081810360008301526150d981614c1f565b9050919050565b600060208201905081810360008301526150f981614c42565b9050919050565b6000602082019050818103600083015261511981614c65565b9050919050565b6000602082019050818103600083015261513981614c88565b9050919050565b6000602082019050818103600083015261515981614cab565b9050919050565b6000602082019050818103600083015261517981614cce565b9050919050565b6000602082019050818103600083015261519981614cf1565b9050919050565b600060208201905081810360008301526151b981614d14565b9050919050565b600060208201905081810360008301526151d981614d37565b9050919050565b600060208201905081810360008301526151f981614d5a565b9050919050565b6000602082019050818103600083015261521981614d7d565b9050919050565b6000602082019050818103600083015261523981614da0565b9050919050565b6000602082019050818103600083015261525a8184614dc3565b905092915050565b60006020820190506152776000830184614e16565b92915050565b600060a0820190506152926000830188614e16565b61529f6020830187614a33565b81810360408301526152b18186614968565b90506152c06060830185614959565b6152cd6080830184614e16565b9695505050505050565b60006020820190506152ec6000830184614e25565b92915050565b60006152fc61530d565b905061530882826155b2565b919050565b6000604051905090565b600067ffffffffffffffff821115615332576153316156e8565b5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006153dc82615524565b91506153e783615524565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561541c5761541b61562c565b5b828201905092915050565b600061543282615524565b915061543d83615524565b92508261544d5761544c61565b565b5b828204905092915050565b600061546382615524565b915061546e83615524565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156154a7576154a661562c565b5b828202905092915050565b60006154bd82615524565b91506154c883615524565b9250828210156154db576154da61562c565b5b828203905092915050565b60006154f182615504565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061554682615524565b9050919050565b60005b8381101561556b578082015181840152602081019050615550565b8381111561557a576000848401525b50505050565b6000600282049050600182168061559857607f821691505b602082108114156155ac576155ab61568a565b5b50919050565b6155bb8261572b565b810181811067ffffffffffffffff821117156155da576155d96156e8565b5b80604052505050565b60006155ee82615524565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156215761562061562c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f55736572206973206e6f74207374616b696e672e000000000000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f546865726520617265206e6f206d6f72652072657761726473206c656674207460008201527f6f20626520636c61696d65642e00000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f596f7520616c726561647920636c61696d656420796f7572206d6f6e74686c7960008201527f207265776172642e000000000000000000000000000000000000000000000000602082015250565b7f596f752061726520756e61626c6520746f207472616e73666572206f7220737760008201527f61702064756520746f20626c61636b6c6973742e000000000000000000000000602082015250565b7f5468657265206973206e6f2045544820746f2062652077697468647261776e2e600082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b7f43616c6c6572206973206e6f7420746865205f7377617046656552656365697660008201527f65722061646472657373206e6f72206f776e65722e0000000000000000000000602082015250565b7f5374616b696e67206973206e6f7420656e61626c65642e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520617265206e6f74207374616b696e67213f0000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f752077696c6c206e6f74207265636569766520455448207265776172647360008201527f20756e74696c206e65787420706572696f642e00000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b615d7d816154e6565b8114615d8857600080fd5b50565b615d94816154f8565b8114615d9f57600080fd5b50565b615dab81615524565b8114615db657600080fd5b5056fea264697066735822122047913b9e4af9509ed8404e6715226e93ecdafd085f65dbc490f417e8f69efb1164736f6c63430008070033

Deployed Bytecode Sourcemap

241:16034:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;549:100:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1481:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3943:323:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;612:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14541:127;;;:::i;:::-;;870:108:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1004:34:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15606:466;;;;;;;;;;;;;:::i;:::-;;4563:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1690:295:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13612:857:10;;;;;;;;;;;;;:::i;:::-;;769:93:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1993:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16136:99:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10141:116;;;;;;;;;;;;;:::i;:::-;;3787:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12974:555;;;;;;;;;;;;;:::i;:::-;;5805:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;977:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11002:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1045:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10601:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;986:127:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;550:103:8;;;;;;;;;;;;;:::i;:::-;;910:26:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5307:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;327:87:8;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1854:41:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;657:104:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2241:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12219:670:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1121:193:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10805:114:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15330:212;;;;;;;;;;;;;:::i;:::-;;3641:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1963:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5020:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4278:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11205:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;569:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;943:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;320:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1322:151:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10350:104:10;;;;;;;;;;;;;:::i;:::-;;661:201:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;549:100:1;603:13;636:5;629:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;549:100;:::o;1481:201::-;1564:4;1581:13;1597:12;:10;:12::i;:::-;1581:28;;1620:32;1629:5;1636:7;1645:6;1620:8;:32::i;:::-;1670:4;1663:11;;;1481:201;;;;:::o;3943:323:10:-;473:12:8;:10;:12::i;:::-;462:23;;:7;:5;:7::i;:::-;:23;;;454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4033:6:10::1;4028:231;4049:12;:19;4045:1;:23;4028:231;;;4113:13;;;;;;;;;;;4094:32;;:12;4107:1;4094:15;;;;;;;;:::i;:::-;;;;;;;;:32;;;;:79;;;;;4157:15;;;;;;;;;;;4130:43;;:12;4143:1;4130:15;;;;;;;;:::i;:::-;;;;;;;;:43;;;;4094:79;4090:158;;;4228:4;4194:14;:31;4209:12;4222:1;4209:15;;;;;;;;:::i;:::-;;;;;;;;4194:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;4090:158;4070:3;;;;;:::i;:::-;;;;4028:231;;;;3943:323:::0;:::o;612:24::-;;;;:::o;14541:127::-;2359:12;:10;:12::i;:::-;2339:32;;:16;;;;;;;;;;;:32;;;:59;;;;2386:12;:10;:12::i;:::-;2375:23;;:7;:5;:7::i;:::-;:23;;;2339:59;2331:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;14603:57:::1;;;;;;;;14620:15;14603:57;;;;14637:11;;14603:57;;;;14650:9;14603:57;;::::0;:13:::1;:57;;;;;;;:::i;:::-;;14541:127::o:0;870:108:1:-;931:7;958:12;;951:19;;870:108;:::o;1004:34:10:-;;;;;;;;;;;;;:::o;15606:466::-;15654:14;15671:7;:19;15679:10;15671:19;;;;;;;;;;;;;;;:29;;;15654:46;;15716:18;:30;15735:10;15716:30;;;;;;;;;;;;;;;:48;15747:13;15761:1;15747:16;;;;;;;;:::i;:::-;;;;;;;;;;15716:48;;;;;;;;;;;;;;;;;;;;;15711:85;;15776:20;:18;:20::i;:::-;15766:30;;;;;:::i;:::-;;;15711:85;15826:1;15817:6;:10;15809:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;15936:4;15885:18;:30;15904:10;15885:30;;;;;;;;;;;;;;;:48;15916:13;15930:1;15916:16;;;;;;;;:::i;:::-;;;;;;;;;;15885:48;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;15985:1;15953:7;:19;15961:10;15953:19;;;;;;;;;;;;;;;:29;;:33;;;;16005:10;15997:28;;:36;16026:6;15997:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16051:13;16057:6;16051:13;;;;;;:::i;:::-;;;;;;;;15643:429;15606:466::o;4563:368::-;473:12:8;:10;:12::i;:::-;462:23;;:7;:5;:7::i;:::-;:23;;;454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4695:12:10::1;4679:13;:28;;;;4734:12;4718:13;:28;;;;4773:12;4757:13;:28;;;;4842:13;;4826;;4810;;:29;;;;:::i;:::-;:45;;;;:::i;:::-;4798:9;:57;;;;4889:1;4876:9;;:14;;4868:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4563:368:::0;;;:::o;1690:295:1:-;1821:4;1838:15;1856:12;:10;:12::i;:::-;1838:30;;1879:38;1895:4;1901:7;1910:6;1879:15;:38::i;:::-;1928:27;1938:4;1944:2;1948:6;1928:9;:27::i;:::-;1973:4;1966:11;;;1690:295;;;;;:::o;13612:857:10:-;13659:21;13669:10;13659:9;:21::i;:::-;13651:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;13719:17;13739:7;:19;13747:10;13739:19;;;;;;;;;;;;;;;:29;;;13719:49;;13784:18;:30;13803:10;13784:30;;;;;;;;;;;;;;;:48;13815:13;13829:1;13815:16;;;;;;;;:::i;:::-;;;;;;;;;;13784:48;;;;;;;;;;;;;;;;;;;;;13779:88;;13847:20;:18;:20::i;:::-;13834:33;;;;;:::i;:::-;;;13779:88;13896:1;13884:9;:13;13880:39;;;13899:20;:18;:20::i;:::-;13880:39;13932:14;13949:22;13960:10;13949;:22::i;:::-;13932:39;;13982:14;13999:7;:19;14007:10;13999:19;;;;;;;;;;;;;;;:26;;;13982:43;;14070:9;;14042:25;14060:6;14042:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:37;:55;;;;;14083:14;;;;;;;;;;;14042:55;14038:351;;;14114:13;:25;14128:10;14114:25;;;;;;;;;;;;;;;:31;;14151:15;14114:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14182:13;:25;14196:10;14182:25;;;;;;;;;;;;;;;:33;;14221:6;14182:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14259:6;14243:12;;:22;;;;;;;:::i;:::-;;;;;;;;14282:37;14288:10;14300:18;14311:6;14300;:10;;:18;;;;:::i;:::-;14282:5;:37::i;:::-;14038:351;;;14352:25;14358:10;14370:6;14352:5;:25::i;:::-;14038:351;14416:6;14401:11;;:21;;;;;;;:::i;:::-;;;;;;;;14442:7;:19;14450:10;14442:19;;;;;;;;;;;;;;;;14435:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13640:829;;;13612:857::o;769:93:1:-;827:5;852:2;845:9;;769:93;:::o;1993:240::-;2081:4;2098:13;2114:12;:10;:12::i;:::-;2098:28;;2137:66;2146:5;2153:7;2192:10;2162:11;:18;2174:5;2162:18;;;;;;;;;;;;;;;:27;2181:7;2162:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;2137:8;:66::i;:::-;2221:4;2214:11;;;1993:240;;;;:::o;16136:99:10:-;2359:12;:10;:12::i;:::-;2339:32;;:16;;;;;;;;;;;:32;;;:59;;;;2386:12;:10;:12::i;:::-;2375:23;;:7;:5;:7::i;:::-;:23;;;2339:59;2331:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;16222:5:::1;16205:14;;:22;;;;;;;;;;;;;;;;;;16136:99:::0;:::o;10141:116::-;10200:16;;;;;;;;;;;10192:34;;:57;10227:21;10192:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10141:116::o;3787:148::-;2359:12;:10;:12::i;:::-;2339:32;;:16;;;;;;;;;;;:32;;;:59;;;;2386:12;:10;:12::i;:::-;2375:23;;:7;:5;:7::i;:::-;:23;;;2339:59;2331:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;3922:5:::1;3884:26;:35;3911:7;3884:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;3787:148:::0;;:::o;12974:555::-;2531:14;;;;;;;;;;;2523:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;13036:21:::1;13046:10;13036:9;:21::i;:::-;13028:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;13119:9;;13102:13;:11;:13::i;:::-;:26;;13094:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;13191:14;13208:22;13219:10;13208;:22::i;:::-;13191:39;;13243:13;:25;13257:10;13243:25;;;;;;;;;;;;;;;:31;;13280:15;13243:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13307:13;:25;13321:10;13307:25;;;;;;;;;;;;;;;:33;;13346:6;13307:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13380:6;13364:12;;:22;;;;;;;:::i;:::-;;;;;;;;13399:25;13405:10;13417:6;13399:5;:25::i;:::-;13465:15;13437:7;:19;13445:10;13437:19;;;;;;;;;;;;;;;:25;;:43;;;;13520:1;13491:7;:19;13499:10;13491:19;;;;;;;;;;;;;;;:26;;:30;;;;13017:512;12974:555::o:0;5805:127::-;5872:4;5896:19;:28;5916:7;5896:28;;;;;;;;;;;;;;;;;;;;;;;;;5889:35;;5805:127;;;:::o;977:18::-;;;;:::o;11002:131::-;11065:19;;:::i;:::-;11104:13;:21;11118:6;11104:21;;;;;;;;;;;;;;;11097:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11002:131;;;:::o;1045:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10601:132::-;10661:4;10715:10;10685:40;;:7;:19;10693:10;10685:19;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:40;;;10678:47;;10601:132;;;:::o;986:127:1:-;1060:7;1087:9;:18;1097:7;1087:18;;;;;;;;;;;;;;;;1080:25;;986:127;;;:::o;550:103:8:-;473:12;:10;:12::i;:::-;462:23;;:7;:5;:7::i;:::-;:23;;;454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;615:30:::1;642:1;615:18;:30::i;:::-;550:103::o:0;910:26:10:-;;;;:::o;5307:404::-;5394:4;2359:12;:10;:12::i;:::-;2339:32;;:16;;;;;;;;;;;:32;;;:59;;;;2386:12;:10;:12::i;:::-;2375:23;;:7;:5;:7::i;:::-;:23;;;2339:59;2331:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;5454:6:::1;5450:1;5434:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;5418:12;:42;;5410:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;5575:4;5571:1;5555:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;5539:12;:40;;5531:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;5671:12;5649:19;:34;;;;5700:4;5693:11;;5307:404:::0;;;:::o;327:87:8:-;373:7;400:6;;;;;;;;;;;393:13;;327:87;:::o;1854:41:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;657:104:1:-;713:13;746:7;739:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;657:104;:::o;2241:438::-;2334:4;2351:13;2367:12;:10;:12::i;:::-;2351:28;;2390:24;2417:11;:18;2429:5;2417:18;;;;;;;;;;;;;;;:27;2436:7;2417:27;;;;;;;;;;;;;;;;2390:54;;2483:15;2463:16;:35;;2455:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;2576:60;2585:5;2592:7;2620:15;2601:16;:34;2576:8;:60::i;:::-;2667:4;2660:11;;;;2241:438;;;;:::o;12219:670:10:-;2531:14;;;;;;;;;;;2523:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;12317:9:::1;;12300:13;:11;:13::i;:::-;:26;;12292:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;12440:21;12450:10;12440:9;:21::i;:::-;12436:330;;;12508:23;12520:10;12508:11;:23::i;:::-;12478:7;:19;12486:10;12478:19;;;;;;;;;;;;;;;:26;;;:53;;;;;;;:::i;:::-;;;;;;;;12576:11;12546:7;:19;12554:10;12546:19;;;;;;;;;;;;;;;:26;;;:41;;;;;;;:::i;:::-;;;;;;;;12630:15;12602:7;:19;12610:10;12602:19;;;;;;;;;;;;;;;:25;;:43;;;;12436:330;;;12700:54;;;;;;;;12707:10;12700:54;;;;;;12719:15;12700:54;;;;12736:11;12700:54;;;;12749:1;12700:54;;;;12752:1;12700:54;;::::0;12678:7:::1;:19;12686:10;12678:19;;;;;;;;;;;;;;;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12436:330;12793:11;12778;;:26;;;;;;;:::i;:::-;;;;;;;;12815:30;12821:10;12833:11;12815:5;:30::i;:::-;12863:18;12869:11;12863:18;;;;;;:::i;:::-;;;;;;;;12219:670:::0;:::o;1121:193:1:-;1200:4;1217:13;1233:12;:10;:12::i;:::-;1217:28;;1256;1266:5;1273:2;1277:6;1256:9;:28::i;:::-;1302:4;1295:11;;;1121:193;;;;:::o;10805:114:10:-;10862:7;10889;:15;10897:6;10889:15;;;;;;;;;;;;;;;:22;;;10882:29;;10805:114;;;:::o;15330:212::-;15377:14;15394:20;:18;:20::i;:::-;15377:37;;15478:4;15427:18;:30;15446:10;15427:30;;;;;;;;;;;;;;;:48;15458:13;15472:1;15458:16;;;;;;;;:::i;:::-;;;;;;;;;;15427:48;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;15528:6;15495:7;:19;15503:10;15495:19;;;;;;;;;;;;;;;:29;;;:39;;;;;;;:::i;:::-;;;;;;;;15366:176;15330:212::o;3641:134::-;2359:12;:10;:12::i;:::-;2339:32;;:16;;;;;;;;;;;:32;;;:59;;;;2386:12;:10;:12::i;:::-;2375:23;;:7;:5;:7::i;:::-;:23;;;2339:59;2331:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;3759:8:::1;3728:19;:28;3748:7;3728:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;3641:134:::0;;:::o;1963:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5020:114::-;2359:12;:10;:12::i;:::-;2339:32;;:16;;;;;;;;;;;:32;;;:59;;;;2386:12;:10;:12::i;:::-;2375:23;;:7;:5;:7::i;:::-;:23;;;2339:59;2331:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;5117:9:::1;5098:16;;:28;;;;;;;;;;;;;;;;;;5020:114:::0;:::o;4278:205::-;473:12:8;:10;:12::i;:::-;462:23;;:7;:5;:7::i;:::-;:23;;;454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4368:6:10::1;4363:113;4384:12;:19;4380:1;:23;4363:113;;;4459:5;4425:14;:31;4440:12;4453:1;4440:15;;;;;;;;:::i;:::-;;;;;;;;4425:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;4405:3;;;;;:::i;:::-;;;;4363:113;;;;4278:205:::0;:::o;11205:310::-;11262:7;11282:23;11308:19;11320:6;11308:11;:19::i;:::-;11282:45;;11338:24;11365:7;:19;11373:10;11365:19;;;;;;;;;;;;;;;:26;;;11338:53;;11427:1;11408:16;:20;11404:70;;;11437:37;11457:16;11437:15;:19;;:37;;;;:::i;:::-;11430:44;;;;;;11404:70;11492:15;11485:22;;;;11205:310;;;;:::o;569:34::-;;;;:::o;943:27::-;;;;:::o;320:24::-;;;;:::o;1322:151:1:-;1411:7;1438:11;:18;1450:5;1438:18;;;;;;;;;;;;;;;:27;1457:7;1438:27;;;;;;;;;;;;;;;;1431:34;;1322:151;;;;:::o;10350:104:10:-;2359:12;:10;:12::i;:::-;2339:32;;:16;;;;;;;;;;;:32;;;:59;;;;2386:12;:10;:12::i;:::-;2375:23;;:7;:5;:7::i;:::-;:23;;;2339:59;2331:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;10403:43:::1;10421:24;10439:4;10421:9;:24::i;:::-;10403:17;:43::i;:::-;10350:104::o:0;661:201:8:-;473:12;:10;:12::i;:::-;462:23;;:7;:5;:7::i;:::-;:23;;;454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;770:1:::1;750:22;;:8;:22;;;;742:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;826:28;845:8;826:18;:28::i;:::-;661:201:::0;:::o;93:98:0:-;146:7;173:10;166:17;;93:98;:::o;4372:380:1:-;4525:1;4508:19;;:5;:19;;;;4500:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4606:1;4587:21;;:7;:21;;;;4579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4690:6;4660:11;:18;4672:5;4660:18;;;;;;;;;;;;;;;:27;4679:7;4660:27;;;;;;;;;;;;;;;:36;;;;4728:7;4712:32;;4721:5;4712:32;;;4737:6;4712:32;;;;;;:::i;:::-;;;;;;;;4372:380;;;:::o;14676:593:10:-;14728:7;14756:21;14766:10;14756:9;:21::i;:::-;14748:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;14823:18;:30;14842:10;14823:30;;;;;;;;;;;;;;;:48;14854:13;14868:1;14854:16;;;;;;;;:::i;:::-;;;;;;;;;;14823:48;;;;;;;;;;;;;;;;;;;;;14822:49;14814:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;14963:13;14977:1;14963:16;;;;;;;;:::i;:::-;;;;;;;;;;14935:7;:19;14943:10;14935:19;;;;;;;;;;;;;;;:25;;;:44;14927:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;15048:14;15065:7;:19;15073:10;15065:19;;;;;;;;;;;;;;;:26;;;15048:43;;15102:13;15118;15132:1;15118:16;;;;;;;;:::i;:::-;;;;;;;;;;15102:32;;15145:9;15175:5;15167:4;15158:6;:13;;;;:::i;:::-;15157:23;;;;:::i;:::-;15145:35;;15191:14;15231:4;15227:1;15208:13;15222:1;15208:16;;;;;;;;:::i;:::-;;;;;;;;;;:20;;;;:::i;:::-;:27;;;;:::i;:::-;15191:44;;15255:6;15248:13;;;;;;14676:593;:::o;4760:453:1:-;4895:24;4922:25;4932:5;4939:7;4922:9;:25::i;:::-;4895:52;;4982:17;4962:16;:37;4958:248;;5044:6;5024:16;:26;;5016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5128:51;5137:5;5144:7;5172:6;5153:16;:25;5128:8;:51::i;:::-;4958:248;4884:329;4760:453;;;:::o;5940:1800:10:-;6088:1;6072:18;;:4;:18;;;;6064:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6165:1;6151:16;;:2;:16;;;;6143:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;6227:14;:20;6242:4;6227:20;;;;;;;;;;;;;;;;;;;;;;;;;6226:21;6218:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;6331:1;6321:6;:11;6317:93;;;6349:28;6365:4;6371:2;6375:1;6349:15;:28::i;:::-;6392:7;;6317:93;6424:28;6455:24;6473:4;6455:9;:24::i;:::-;6424:55;;6490:12;6529:19;;6505:20;:43;;6490:58;;6577:7;:34;;;;;6602:9;;;;;;;;;;;6601:10;6577:34;:84;;;;;6629:26;:32;6656:4;6629:32;;;;;;;;;;;;;;;;;;;;;;;;;6628:33;6577:84;:127;;;;;6679:19;:25;6699:4;6679:25;;;;;;;;;;;;;;;;;;;;;;;;;6678:26;6577:127;:168;;;;;6722:19;:23;6742:2;6722:23;;;;;;;;;;;;;;;;;;;;;;;;;6721:24;6577:168;6559:298;;;6784:4;6772:9;;:16;;;;;;;;;;;;;;;;;;6803:10;:8;:10::i;:::-;6840:5;6828:9;;:17;;;;;;;;;;;;;;;;;;6559:298;6869:12;6885:9;;;;;;;;;;;6884:10;6869:25;;7015:19;:25;7035:4;7015:25;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;7058:19;:23;7078:2;7058:23;;;;;;;;;;;;;;;;;;;;;;;;;7015:66;:154;;;;7101:26;:32;7128:4;7101:32;;;;;;;;;;;;;;;;;;;;;;;;;7100:33;:68;;;;;7138:26;:30;7165:2;7138:30;;;;;;;;;;;;;;;;;;;;;;;;;7137:31;7100:68;7015:154;6997:199;;;7191:5;7181:15;;6997:199;7217:12;7248:7;7244:443;;;7279:30;7305:3;7279:21;7290:9;;7279:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;7272:37;;7370:9;;7354:13;;7347:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;7324:19;;:55;;;;;;;:::i;:::-;;;;;;;;7440:9;;7424:13;;7417:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;7394:19;;:55;;;;;;;:::i;:::-;;;;;;;;7510:9;;7494:13;;7487:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;7464:19;;:55;;;;;;;:::i;:::-;;;;;;;;7559:1;7552:4;:8;7548:91;;;7581:42;7597:4;7611;7618;7581:15;:42::i;:::-;7548:91;7671:4;7661:14;;;;;:::i;:::-;;;7244:443;7699:33;7715:4;7721:2;7725:6;7699:15;:33::i;:::-;6053:1687;;;;5940:1800;;;;:::o;1433:98:9:-;1491:7;1522:1;1518;:5;;;;:::i;:::-;1511:12;;1433:98;;;;:::o;3366:399:1:-;3469:1;3450:21;;:7;:21;;;;3442:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;3520:49;3549:1;3553:7;3562:6;3520:20;:49::i;:::-;3598:6;3582:12;;:22;;;;;;;:::i;:::-;;;;;;;;3637:6;3615:9;:18;3625:7;3615:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;3680:7;3659:37;;3676:1;3659:37;;;3689:6;3659:37;;;;;;:::i;:::-;;;;;;;;3709:48;3737:1;3741:7;3750:6;3709:19;:48::i;:::-;3366:399;;:::o;870:191:8:-;944:16;963:6;;;;;;;;;;;944:25;;989:8;980:6;;:17;;;;;;;;;;;;;;;;;;1044:8;1013:40;;1034:8;1013:40;;;;;;;;;;;;933:128;870:191;:::o;11523:632:10:-;11582:7;11610:17;11620:6;11610:9;:17::i;:::-;11602:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;11665:14;11682:18;11693:6;11682:10;:18::i;:::-;11665:35;;11711:29;11743:36;11769:9;11743:7;:15;11751:6;11743:15;;;;;;;;;;;;;;;:21;;;:25;;:36;;;;:::i;:::-;11711:68;;11790:31;11824:30;11844:9;11824:15;:19;;:30;;;;:::i;:::-;11790:64;;11865:21;11889:50;11917:21;11889:23;:27;;:50;;;;:::i;:::-;11865:74;;11952:12;11967:24;11987:3;11967:15;11978:3;;11967:6;:10;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;11952:39;;12002:20;12025:37;12059:2;12025:29;12051:2;12025:21;12043:2;12025:13;12034:3;12025:4;:8;;:13;;;;:::i;:::-;:17;;:21;;;;:::i;:::-;:25;;:29;;;;:::i;:::-;:33;;:37;;;;:::i;:::-;12002:60;;12073:14;12090:31;12107:13;12090:12;:16;;:31;;;;:::i;:::-;12073:48;;12141:6;12134:13;;;;;;;;;11523:632;;;:::o;3773:591:1:-;3876:1;3857:21;;:7;:21;;;;3849:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3929:49;3950:7;3967:1;3971:6;3929:20;:49::i;:::-;3991:22;4016:9;:18;4026:7;4016:18;;;;;;;;;;;;;;;;3991:43;;4071:6;4053:14;:24;;4045:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4190:6;4173:14;:23;4152:9;:18;4162:7;4152:18;;;;;;;;;;;;;;;:44;;;;4234:6;4218:12;;:22;;;;;;;:::i;:::-;;;;;;;;4284:1;4258:37;;4267:7;4258:37;;;4288:6;4258:37;;;;;;:::i;:::-;;;;;;;;4308:48;4328:7;4345:1;4349:6;4308:19;:48::i;:::-;3838:526;3773:591;;:::o;7748:477:10:-;7816:21;7854:1;7840:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7816:40;;7885:4;7867;7872:1;7867:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;7911:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7901:4;7906:1;7901:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;7946:62;7963:4;7978:15;;;;;;;;;;;7996:11;7946:8;:62::i;:::-;8021:15;;;;;;;;;;;:66;;;8102:11;8128:1;8144:4;8171;8191:15;8021:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7805:420;7748:477;:::o;2687:671:1:-;2834:1;2818:18;;:4;:18;;;;2810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2911:1;2897:16;;:2;:16;;;;2889:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;2966:38;2987:4;2993:2;2997:6;2966:20;:38::i;:::-;3017:19;3039:9;:15;3049:4;3039:15;;;;;;;;;;;;;;;;3017:37;;3088:6;3073:11;:21;;3065:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;3205:6;3191:11;:20;3173:9;:15;3183:4;3173:15;;;;;;;;;;;;;;;:38;;;;3250:6;3233:9;:13;3243:2;3233:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;3289:2;3274:26;;3283:4;3274:26;;;3293:6;3274:26;;;;;;:::i;:::-;;;;;;;;3313:37;3333:4;3339:2;3343:6;3313:19;:37::i;:::-;2799:559;2687:671;;;:::o;8614:1439:10:-;8654:23;8680:24;8698:4;8680:9;:24::i;:::-;8654:50;;8715:25;8787:19;;8765;;8743;;:41;;;;:::i;:::-;:63;;;;:::i;:::-;8715:91;;8850:1;8831:15;:20;:46;;;;8876:1;8855:17;:22;8831:46;8827:59;;;8879:7;;;;8827:59;8918:19;;8900:15;:37;8896:80;;;8957:19;;8939:37;;8896:80;9056:23;9142:1;9122:17;9100:19;;9082:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;9056:87;;9154:26;9183:36;9203:15;9183;:19;;:36;;;;:::i;:::-;9154:65;;9240:25;9268:21;9240:49;;9302:37;9320:18;9302:17;:37::i;:::-;9360:18;9381:44;9407:17;9381:21;:25;;:44;;;;:::i;:::-;9360:65;;9436:23;9462:58;9502:17;9462:35;9477:19;;9462:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;9436:84;;9531:23;9557:58;9597:17;9557:35;9572:19;;9557:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;9531:84;;9626:23;9683:15;9665;9652:10;:28;;;;:::i;:::-;:46;;;;:::i;:::-;9626:72;;9741:1;9719:19;:23;;;;9775:1;9753:19;:23;;;;9809:1;9787:19;:23;;;;9831:16;;;;;;;;;;;9823:34;;:72;9858:36;9878:15;9858;:19;;:36;;;;:::i;:::-;9823:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9946:1;9928:15;:19;:42;;;;;9969:1;9951:15;:19;9928:42;9924:122;;;9987:47;10001:15;10018;9987:13;:47::i;:::-;9924:122;8643:1410;;;;;;;;;8614:1439;:::o;1645:98:9:-;1703:7;1734:1;1730;:5;;;;:::i;:::-;1723:12;;1645:98;;;;:::o;1751:::-;1809:7;1840:1;1836;:5;;;;:::i;:::-;1829:12;;1751:98;;;;:::o;5221:125:1:-;;;;:::o;5354:124::-;;;;:::o;1539:98:9:-;1597:7;1628:1;1624;:5;;;;:::i;:::-;1617:12;;1539:98;;;;:::o;8233:373:10:-;8316:62;8333:4;8348:15;;;;;;;;;;;8366:11;8316:8;:62::i;:::-;8391:15;;;;;;;;;;;:31;;;8430:9;8463:4;8483:11;8509:1;8525;8541:16;;;;;;;;;;;8572:15;8391:207;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;8233:373;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:11:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1063:370::-;1134:5;1183:3;1176:4;1168:6;1164:17;1160:27;1150:122;;1191:79;;:::i;:::-;1150:122;1308:6;1295:20;1333:94;1423:3;1415:6;1408:4;1400:6;1396:17;1333:94;:::i;:::-;1324:103;;1140:293;1063:370;;;;:::o;1439:133::-;1482:5;1520:6;1507:20;1498:29;;1536:30;1560:5;1536:30;:::i;:::-;1439:133;;;;:::o;1578:139::-;1624:5;1662:6;1649:20;1640:29;;1678:33;1705:5;1678:33;:::i;:::-;1578:139;;;;:::o;1723:143::-;1780:5;1811:6;1805:13;1796:22;;1827:33;1854:5;1827:33;:::i;:::-;1723:143;;;;:::o;1872:329::-;1931:6;1980:2;1968:9;1959:7;1955:23;1951:32;1948:119;;;1986:79;;:::i;:::-;1948:119;2106:1;2131:53;2176:7;2167:6;2156:9;2152:22;2131:53;:::i;:::-;2121:63;;2077:117;1872:329;;;;:::o;2207:351::-;2277:6;2326:2;2314:9;2305:7;2301:23;2297:32;2294:119;;;2332:79;;:::i;:::-;2294:119;2452:1;2477:64;2533:7;2524:6;2513:9;2509:22;2477:64;:::i;:::-;2467:74;;2423:128;2207:351;;;;:::o;2564:474::-;2632:6;2640;2689:2;2677:9;2668:7;2664:23;2660:32;2657:119;;;2695:79;;:::i;:::-;2657:119;2815:1;2840:53;2885:7;2876:6;2865:9;2861:22;2840:53;:::i;:::-;2830:63;;2786:117;2942:2;2968:53;3013:7;3004:6;2993:9;2989:22;2968:53;:::i;:::-;2958:63;;2913:118;2564:474;;;;;:::o;3044:619::-;3121:6;3129;3137;3186:2;3174:9;3165:7;3161:23;3157:32;3154:119;;;3192:79;;:::i;:::-;3154:119;3312:1;3337:53;3382:7;3373:6;3362:9;3358:22;3337:53;:::i;:::-;3327:63;;3283:117;3439:2;3465:53;3510:7;3501:6;3490:9;3486:22;3465:53;:::i;:::-;3455:63;;3410:118;3567:2;3593:53;3638:7;3629:6;3618:9;3614:22;3593:53;:::i;:::-;3583:63;;3538:118;3044:619;;;;;:::o;3669:468::-;3734:6;3742;3791:2;3779:9;3770:7;3766:23;3762:32;3759:119;;;3797:79;;:::i;:::-;3759:119;3917:1;3942:53;3987:7;3978:6;3967:9;3963:22;3942:53;:::i;:::-;3932:63;;3888:117;4044:2;4070:50;4112:7;4103:6;4092:9;4088:22;4070:50;:::i;:::-;4060:60;;4015:115;3669:468;;;;;:::o;4143:474::-;4211:6;4219;4268:2;4256:9;4247:7;4243:23;4239:32;4236:119;;;4274:79;;:::i;:::-;4236:119;4394:1;4419:53;4464:7;4455:6;4444:9;4440:22;4419:53;:::i;:::-;4409:63;;4365:117;4521:2;4547:53;4592:7;4583:6;4572:9;4568:22;4547:53;:::i;:::-;4537:63;;4492:118;4143:474;;;;;:::o;4623:539::-;4707:6;4756:2;4744:9;4735:7;4731:23;4727:32;4724:119;;;4762:79;;:::i;:::-;4724:119;4910:1;4899:9;4895:17;4882:31;4940:18;4932:6;4929:30;4926:117;;;4962:79;;:::i;:::-;4926:117;5067:78;5137:7;5128:6;5117:9;5113:22;5067:78;:::i;:::-;5057:88;;4853:302;4623:539;;;;:::o;5168:323::-;5224:6;5273:2;5261:9;5252:7;5248:23;5244:32;5241:119;;;5279:79;;:::i;:::-;5241:119;5399:1;5424:50;5466:7;5457:6;5446:9;5442:22;5424:50;:::i;:::-;5414:60;;5370:114;5168:323;;;;:::o;5497:329::-;5556:6;5605:2;5593:9;5584:7;5580:23;5576:32;5573:119;;;5611:79;;:::i;:::-;5573:119;5731:1;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5702:117;5497:329;;;;:::o;5832:619::-;5909:6;5917;5925;5974:2;5962:9;5953:7;5949:23;5945:32;5942:119;;;5980:79;;:::i;:::-;5942:119;6100:1;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6071:117;6227:2;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6198:118;6355:2;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6326:118;5832:619;;;;;:::o;6457:663::-;6545:6;6553;6561;6610:2;6598:9;6589:7;6585:23;6581:32;6578:119;;;6616:79;;:::i;:::-;6578:119;6736:1;6761:64;6817:7;6808:6;6797:9;6793:22;6761:64;:::i;:::-;6751:74;;6707:128;6874:2;6900:64;6956:7;6947:6;6936:9;6932:22;6900:64;:::i;:::-;6890:74;;6845:129;7013:2;7039:64;7095:7;7086:6;7075:9;7071:22;7039:64;:::i;:::-;7029:74;;6984:129;6457:663;;;;;:::o;7126:179::-;7195:10;7216:46;7258:3;7250:6;7216:46;:::i;:::-;7294:4;7289:3;7285:14;7271:28;;7126:179;;;;:::o;7311:::-;7380:10;7401:46;7443:3;7435:6;7401:46;:::i;:::-;7479:4;7474:3;7470:14;7456:28;;7311:179;;;;:::o;7496:108::-;7573:24;7591:5;7573:24;:::i;:::-;7568:3;7561:37;7496:108;;:::o;7610:118::-;7697:24;7715:5;7697:24;:::i;:::-;7692:3;7685:37;7610:118;;:::o;7764:732::-;7883:3;7912:54;7960:5;7912:54;:::i;:::-;7982:86;8061:6;8056:3;7982:86;:::i;:::-;7975:93;;8092:56;8142:5;8092:56;:::i;:::-;8171:7;8202:1;8187:284;8212:6;8209:1;8206:13;8187:284;;;8288:6;8282:13;8315:63;8374:3;8359:13;8315:63;:::i;:::-;8308:70;;8401:60;8454:6;8401:60;:::i;:::-;8391:70;;8247:224;8234:1;8231;8227:9;8222:14;;8187:284;;;8191:14;8487:3;8480:10;;7888:608;;;7764:732;;;;:::o;8532:712::-;8641:3;8670:54;8718:5;8670:54;:::i;:::-;8740:76;8809:6;8804:3;8740:76;:::i;:::-;8733:83;;8840:56;8890:5;8840:56;:::i;:::-;8919:7;8950:1;8935:284;8960:6;8957:1;8954:13;8935:284;;;9036:6;9030:13;9063:63;9122:3;9107:13;9063:63;:::i;:::-;9056:70;;9149:60;9202:6;9149:60;:::i;:::-;9139:70;;8995:224;8982:1;8979;8975:9;8970:14;;8935:284;;;8939:14;9235:3;9228:10;;8646:598;;;8532:712;;;;:::o;9250:109::-;9331:21;9346:5;9331:21;:::i;:::-;9326:3;9319:34;9250:109;;:::o;9365:147::-;9460:45;9499:5;9460:45;:::i;:::-;9455:3;9448:58;9365:147;;:::o;9518:364::-;9606:3;9634:39;9667:5;9634:39;:::i;:::-;9689:71;9753:6;9748:3;9689:71;:::i;:::-;9682:78;;9769:52;9814:6;9809:3;9802:4;9795:5;9791:16;9769:52;:::i;:::-;9846:29;9868:6;9846:29;:::i;:::-;9841:3;9837:39;9830:46;;9610:272;9518:364;;;;:::o;9888:366::-;10030:3;10051:67;10115:2;10110:3;10051:67;:::i;:::-;10044:74;;10127:93;10216:3;10127:93;:::i;:::-;10245:2;10240:3;10236:12;10229:19;;9888:366;;;:::o;10260:::-;10402:3;10423:67;10487:2;10482:3;10423:67;:::i;:::-;10416:74;;10499:93;10588:3;10499:93;:::i;:::-;10617:2;10612:3;10608:12;10601:19;;10260:366;;;:::o;10632:::-;10774:3;10795:67;10859:2;10854:3;10795:67;:::i;:::-;10788:74;;10871:93;10960:3;10871:93;:::i;:::-;10989:2;10984:3;10980:12;10973:19;;10632:366;;;:::o;11004:::-;11146:3;11167:67;11231:2;11226:3;11167:67;:::i;:::-;11160:74;;11243:93;11332:3;11243:93;:::i;:::-;11361:2;11356:3;11352:12;11345:19;;11004:366;;;:::o;11376:::-;11518:3;11539:67;11603:2;11598:3;11539:67;:::i;:::-;11532:74;;11615:93;11704:3;11615:93;:::i;:::-;11733:2;11728:3;11724:12;11717:19;;11376:366;;;:::o;11748:::-;11890:3;11911:67;11975:2;11970:3;11911:67;:::i;:::-;11904:74;;11987:93;12076:3;11987:93;:::i;:::-;12105:2;12100:3;12096:12;12089:19;;11748:366;;;:::o;12120:::-;12262:3;12283:67;12347:2;12342:3;12283:67;:::i;:::-;12276:74;;12359:93;12448:3;12359:93;:::i;:::-;12477:2;12472:3;12468:12;12461:19;;12120:366;;;:::o;12492:::-;12634:3;12655:67;12719:2;12714:3;12655:67;:::i;:::-;12648:74;;12731:93;12820:3;12731:93;:::i;:::-;12849:2;12844:3;12840:12;12833:19;;12492:366;;;:::o;12864:::-;13006:3;13027:67;13091:2;13086:3;13027:67;:::i;:::-;13020:74;;13103:93;13192:3;13103:93;:::i;:::-;13221:2;13216:3;13212:12;13205:19;;12864:366;;;:::o;13236:::-;13378:3;13399:67;13463:2;13458:3;13399:67;:::i;:::-;13392:74;;13475:93;13564:3;13475:93;:::i;:::-;13593:2;13588:3;13584:12;13577:19;;13236:366;;;:::o;13608:::-;13750:3;13771:67;13835:2;13830:3;13771:67;:::i;:::-;13764:74;;13847:93;13936:3;13847:93;:::i;:::-;13965:2;13960:3;13956:12;13949:19;;13608:366;;;:::o;13980:::-;14122:3;14143:67;14207:2;14202:3;14143:67;:::i;:::-;14136:74;;14219:93;14308:3;14219:93;:::i;:::-;14337:2;14332:3;14328:12;14321:19;;13980:366;;;:::o;14352:::-;14494:3;14515:67;14579:2;14574:3;14515:67;:::i;:::-;14508:74;;14591:93;14680:3;14591:93;:::i;:::-;14709:2;14704:3;14700:12;14693:19;;14352:366;;;:::o;14724:::-;14866:3;14887:67;14951:2;14946:3;14887:67;:::i;:::-;14880:74;;14963:93;15052:3;14963:93;:::i;:::-;15081:2;15076:3;15072:12;15065:19;;14724:366;;;:::o;15096:::-;15238:3;15259:67;15323:2;15318:3;15259:67;:::i;:::-;15252:74;;15335:93;15424:3;15335:93;:::i;:::-;15453:2;15448:3;15444:12;15437:19;;15096:366;;;:::o;15468:::-;15610:3;15631:67;15695:2;15690:3;15631:67;:::i;:::-;15624:74;;15707:93;15796:3;15707:93;:::i;:::-;15825:2;15820:3;15816:12;15809:19;;15468:366;;;:::o;15840:::-;15982:3;16003:67;16067:2;16062:3;16003:67;:::i;:::-;15996:74;;16079:93;16168:3;16079:93;:::i;:::-;16197:2;16192:3;16188:12;16181:19;;15840:366;;;:::o;16212:::-;16354:3;16375:67;16439:2;16434:3;16375:67;:::i;:::-;16368:74;;16451:93;16540:3;16451:93;:::i;:::-;16569:2;16564:3;16560:12;16553:19;;16212:366;;;:::o;16584:::-;16726:3;16747:67;16811:2;16806:3;16747:67;:::i;:::-;16740:74;;16823:93;16912:3;16823:93;:::i;:::-;16941:2;16936:3;16932:12;16925:19;;16584:366;;;:::o;16956:::-;17098:3;17119:67;17183:2;17178:3;17119:67;:::i;:::-;17112:74;;17195:93;17284:3;17195:93;:::i;:::-;17313:2;17308:3;17304:12;17297:19;;16956:366;;;:::o;17328:::-;17470:3;17491:67;17555:2;17550:3;17491:67;:::i;:::-;17484:74;;17567:93;17656:3;17567:93;:::i;:::-;17685:2;17680:3;17676:12;17669:19;;17328:366;;;:::o;17700:::-;17842:3;17863:67;17927:2;17922:3;17863:67;:::i;:::-;17856:74;;17939:93;18028:3;17939:93;:::i;:::-;18057:2;18052:3;18048:12;18041:19;;17700:366;;;:::o;18072:::-;18214:3;18235:67;18299:2;18294:3;18235:67;:::i;:::-;18228:74;;18311:93;18400:3;18311:93;:::i;:::-;18429:2;18424:3;18420:12;18413:19;;18072:366;;;:::o;18444:::-;18586:3;18607:67;18671:2;18666:3;18607:67;:::i;:::-;18600:74;;18683:93;18772:3;18683:93;:::i;:::-;18801:2;18796:3;18792:12;18785:19;;18444:366;;;:::o;18886:751::-;19015:3;19051:4;19046:3;19042:14;19139:4;19132:5;19128:16;19122:23;19192:3;19186:4;19182:14;19175:4;19170:3;19166:14;19159:38;19218:103;19316:4;19302:12;19218:103;:::i;:::-;19210:111;;19066:266;19417:4;19410:5;19406:16;19400:23;19470:3;19464:4;19460:14;19453:4;19448:3;19444:14;19437:38;19496:103;19594:4;19580:12;19496:103;:::i;:::-;19488:111;;19342:268;19627:4;19620:11;;19020:617;18886:751;;;;:::o;19643:108::-;19720:24;19738:5;19720:24;:::i;:::-;19715:3;19708:37;19643:108;;:::o;19757:118::-;19844:24;19862:5;19844:24;:::i;:::-;19839:3;19832:37;19757:118;;:::o;19881:112::-;19964:22;19980:5;19964:22;:::i;:::-;19959:3;19952:35;19881:112;;:::o;19999:222::-;20092:4;20130:2;20119:9;20115:18;20107:26;;20143:71;20211:1;20200:9;20196:17;20187:6;20143:71;:::i;:::-;19999:222;;;;:::o;20227:807::-;20476:4;20514:3;20503:9;20499:19;20491:27;;20528:71;20596:1;20585:9;20581:17;20572:6;20528:71;:::i;:::-;20609:72;20677:2;20666:9;20662:18;20653:6;20609:72;:::i;:::-;20691:80;20767:2;20756:9;20752:18;20743:6;20691:80;:::i;:::-;20781;20857:2;20846:9;20842:18;20833:6;20781:80;:::i;:::-;20871:73;20939:3;20928:9;20924:19;20915:6;20871:73;:::i;:::-;20954;21022:3;21011:9;21007:19;20998:6;20954:73;:::i;:::-;20227:807;;;;;;;;;:::o;21040:664::-;21245:4;21283:3;21272:9;21268:19;21260:27;;21297:71;21365:1;21354:9;21350:17;21341:6;21297:71;:::i;:::-;21378:72;21446:2;21435:9;21431:18;21422:6;21378:72;:::i;:::-;21460;21528:2;21517:9;21513:18;21504:6;21460:72;:::i;:::-;21542;21610:2;21599:9;21595:18;21586:6;21542:72;:::i;:::-;21624:73;21692:3;21681:9;21677:19;21668:6;21624:73;:::i;:::-;21040:664;;;;;;;;:::o;21710:210::-;21797:4;21835:2;21824:9;21820:18;21812:26;;21848:65;21910:1;21899:9;21895:17;21886:6;21848:65;:::i;:::-;21710:210;;;;:::o;21926:313::-;22039:4;22077:2;22066:9;22062:18;22054:26;;22126:9;22120:4;22116:20;22112:1;22101:9;22097:17;22090:47;22154:78;22227:4;22218:6;22154:78;:::i;:::-;22146:86;;21926:313;;;;:::o;22245:419::-;22411:4;22449:2;22438:9;22434:18;22426:26;;22498:9;22492:4;22488:20;22484:1;22473:9;22469:17;22462:47;22526:131;22652:4;22526:131;:::i;:::-;22518:139;;22245:419;;;:::o;22670:::-;22836:4;22874:2;22863:9;22859:18;22851:26;;22923:9;22917:4;22913:20;22909:1;22898:9;22894:17;22887:47;22951:131;23077:4;22951:131;:::i;:::-;22943:139;;22670:419;;;:::o;23095:::-;23261:4;23299:2;23288:9;23284:18;23276:26;;23348:9;23342:4;23338:20;23334:1;23323:9;23319:17;23312:47;23376:131;23502:4;23376:131;:::i;:::-;23368:139;;23095:419;;;:::o;23520:::-;23686:4;23724:2;23713:9;23709:18;23701:26;;23773:9;23767:4;23763:20;23759:1;23748:9;23744:17;23737:47;23801:131;23927:4;23801:131;:::i;:::-;23793:139;;23520:419;;;:::o;23945:::-;24111:4;24149:2;24138:9;24134:18;24126:26;;24198:9;24192:4;24188:20;24184:1;24173:9;24169:17;24162:47;24226:131;24352:4;24226:131;:::i;:::-;24218:139;;23945:419;;;:::o;24370:::-;24536:4;24574:2;24563:9;24559:18;24551:26;;24623:9;24617:4;24613:20;24609:1;24598:9;24594:17;24587:47;24651:131;24777:4;24651:131;:::i;:::-;24643:139;;24370:419;;;:::o;24795:::-;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:::-;25386:4;25424:2;25413:9;25409:18;25401:26;;25473:9;25467:4;25463:20;25459:1;25448:9;25444:17;25437:47;25501:131;25627:4;25501:131;:::i;:::-;25493:139;;25220:419;;;:::o;25645:::-;25811:4;25849:2;25838:9;25834:18;25826:26;;25898:9;25892:4;25888:20;25884:1;25873:9;25869:17;25862:47;25926:131;26052:4;25926:131;:::i;:::-;25918:139;;25645:419;;;:::o;26070:::-;26236:4;26274:2;26263:9;26259:18;26251:26;;26323:9;26317:4;26313:20;26309:1;26298:9;26294:17;26287:47;26351:131;26477:4;26351:131;:::i;:::-;26343:139;;26070:419;;;:::o;26495:::-;26661:4;26699:2;26688:9;26684:18;26676:26;;26748:9;26742:4;26738:20;26734:1;26723:9;26719:17;26712:47;26776:131;26902:4;26776:131;:::i;:::-;26768:139;;26495:419;;;:::o;26920:::-;27086:4;27124:2;27113:9;27109:18;27101:26;;27173:9;27167:4;27163:20;27159:1;27148:9;27144:17;27137:47;27201:131;27327:4;27201:131;:::i;:::-;27193:139;;26920:419;;;:::o;27345:::-;27511:4;27549:2;27538:9;27534:18;27526:26;;27598:9;27592:4;27588:20;27584:1;27573:9;27569:17;27562:47;27626:131;27752:4;27626:131;:::i;:::-;27618:139;;27345:419;;;:::o;27770:::-;27936:4;27974:2;27963:9;27959:18;27951:26;;28023:9;28017:4;28013:20;28009:1;27998:9;27994:17;27987:47;28051:131;28177:4;28051:131;:::i;:::-;28043:139;;27770:419;;;:::o;28195:::-;28361:4;28399:2;28388:9;28384:18;28376:26;;28448:9;28442:4;28438:20;28434:1;28423:9;28419:17;28412:47;28476:131;28602:4;28476:131;:::i;:::-;28468:139;;28195:419;;;:::o;28620:::-;28786:4;28824:2;28813:9;28809:18;28801:26;;28873:9;28867:4;28863:20;28859:1;28848:9;28844:17;28837:47;28901:131;29027:4;28901:131;:::i;:::-;28893:139;;28620:419;;;:::o;29045:::-;29211:4;29249:2;29238:9;29234:18;29226:26;;29298:9;29292:4;29288:20;29284:1;29273:9;29269:17;29262:47;29326:131;29452:4;29326:131;:::i;:::-;29318:139;;29045:419;;;:::o;29470:::-;29636:4;29674:2;29663:9;29659:18;29651:26;;29723:9;29717:4;29713:20;29709:1;29698:9;29694:17;29687:47;29751:131;29877:4;29751:131;:::i;:::-;29743:139;;29470:419;;;:::o;29895:::-;30061:4;30099:2;30088:9;30084:18;30076:26;;30148:9;30142:4;30138:20;30134:1;30123:9;30119:17;30112:47;30176:131;30302:4;30176:131;:::i;:::-;30168:139;;29895:419;;;:::o;30320:::-;30486:4;30524:2;30513:9;30509:18;30501:26;;30573:9;30567:4;30563:20;30559:1;30548:9;30544:17;30537:47;30601:131;30727:4;30601:131;:::i;:::-;30593:139;;30320:419;;;:::o;30745:::-;30911:4;30949:2;30938:9;30934:18;30926:26;;30998:9;30992:4;30988:20;30984:1;30973:9;30969:17;30962:47;31026:131;31152:4;31026:131;:::i;:::-;31018:139;;30745:419;;;:::o;31170:::-;31336:4;31374:2;31363:9;31359:18;31351:26;;31423:9;31417:4;31413:20;31409:1;31398:9;31394:17;31387:47;31451:131;31577:4;31451:131;:::i;:::-;31443:139;;31170:419;;;:::o;31595:::-;31761:4;31799:2;31788:9;31784:18;31776:26;;31848:9;31842:4;31838:20;31834:1;31823:9;31819:17;31812:47;31876:131;32002:4;31876:131;:::i;:::-;31868:139;;31595:419;;;:::o;32020:::-;32186:4;32224:2;32213:9;32209:18;32201:26;;32273:9;32267:4;32263:20;32259:1;32248:9;32244:17;32237:47;32301:131;32427:4;32301:131;:::i;:::-;32293:139;;32020:419;;;:::o;32445:393::-;32598:4;32636:2;32625:9;32621:18;32613:26;;32685:9;32679:4;32675:20;32671:1;32660:9;32656:17;32649:47;32713:118;32826:4;32817:6;32713:118;:::i;:::-;32705:126;;32445:393;;;;:::o;32844:222::-;32937:4;32975:2;32964:9;32960:18;32952:26;;32988:71;33056:1;33045:9;33041:17;33032:6;32988:71;:::i;:::-;32844:222;;;;:::o;33072:831::-;33335:4;33373:3;33362:9;33358:19;33350:27;;33387:71;33455:1;33444:9;33440:17;33431:6;33387:71;:::i;:::-;33468:80;33544:2;33533:9;33529:18;33520:6;33468:80;:::i;:::-;33595:9;33589:4;33585:20;33580:2;33569:9;33565:18;33558:48;33623:108;33726:4;33717:6;33623:108;:::i;:::-;33615:116;;33741:72;33809:2;33798:9;33794:18;33785:6;33741:72;:::i;:::-;33823:73;33891:3;33880:9;33876:19;33867:6;33823:73;:::i;:::-;33072:831;;;;;;;;:::o;33909:214::-;33998:4;34036:2;34025:9;34021:18;34013:26;;34049:67;34113:1;34102:9;34098:17;34089:6;34049:67;:::i;:::-;33909:214;;;;:::o;34129:129::-;34163:6;34190:20;;:::i;:::-;34180:30;;34219:33;34247:4;34239:6;34219:33;:::i;:::-;34129:129;;;:::o;34264:75::-;34297:6;34330:2;34324:9;34314:19;;34264:75;:::o;34345:311::-;34422:4;34512:18;34504:6;34501:30;34498:56;;;34534:18;;:::i;:::-;34498:56;34584:4;34576:6;34572:17;34564:25;;34644:4;34638;34634:15;34626:23;;34345:311;;;:::o;34662:132::-;34729:4;34752:3;34744:11;;34782:4;34777:3;34773:14;34765:22;;34662:132;;;:::o;34800:::-;34867:4;34890:3;34882:11;;34920:4;34915:3;34911:14;34903:22;;34800:132;;;:::o;34938:114::-;35005:6;35039:5;35033:12;35023:22;;34938:114;;;:::o;35058:::-;35125:6;35159:5;35153:12;35143:22;;35058:114;;;:::o;35178:99::-;35230:6;35264:5;35258:12;35248:22;;35178:99;;;:::o;35283:113::-;35353:4;35385;35380:3;35376:14;35368:22;;35283:113;;;:::o;35402:::-;35472:4;35504;35499:3;35495:14;35487:22;;35402:113;;;:::o;35521:184::-;35620:11;35654:6;35649:3;35642:19;35694:4;35689:3;35685:14;35670:29;;35521:184;;;;:::o;35711:174::-;35800:11;35834:6;35829:3;35822:19;35874:4;35869:3;35865:14;35850:29;;35711:174;;;;:::o;35891:169::-;35975:11;36009:6;36004:3;35997:19;36049:4;36044:3;36040:14;36025:29;;35891:169;;;;:::o;36066:305::-;36106:3;36125:20;36143:1;36125:20;:::i;:::-;36120:25;;36159:20;36177:1;36159:20;:::i;:::-;36154:25;;36313:1;36245:66;36241:74;36238:1;36235:81;36232:107;;;36319:18;;:::i;:::-;36232:107;36363:1;36360;36356:9;36349:16;;36066:305;;;;:::o;36377:185::-;36417:1;36434:20;36452:1;36434:20;:::i;:::-;36429:25;;36468:20;36486:1;36468:20;:::i;:::-;36463:25;;36507:1;36497:35;;36512:18;;:::i;:::-;36497:35;36554:1;36551;36547:9;36542:14;;36377:185;;;;:::o;36568:348::-;36608:7;36631:20;36649:1;36631:20;:::i;:::-;36626:25;;36665:20;36683:1;36665:20;:::i;:::-;36660:25;;36853:1;36785:66;36781:74;36778:1;36775:81;36770:1;36763:9;36756:17;36752:105;36749:131;;;36860:18;;:::i;:::-;36749:131;36908:1;36905;36901:9;36890:20;;36568:348;;;;:::o;36922:191::-;36962:4;36982:20;37000:1;36982:20;:::i;:::-;36977:25;;37016:20;37034:1;37016:20;:::i;:::-;37011:25;;37055:1;37052;37049:8;37046:34;;;37060:18;;:::i;:::-;37046:34;37105:1;37102;37098:9;37090:17;;36922:191;;;;:::o;37119:96::-;37156:7;37185:24;37203:5;37185:24;:::i;:::-;37174:35;;37119:96;;;:::o;37221:90::-;37255:7;37298:5;37291:13;37284:21;37273:32;;37221:90;;;:::o;37317:126::-;37354:7;37394:42;37387:5;37383:54;37372:65;;37317:126;;;:::o;37449:77::-;37486:7;37515:5;37504:16;;37449:77;;;:::o;37532:86::-;37567:7;37607:4;37600:5;37596:16;37585:27;;37532:86;;;:::o;37624:121::-;37682:9;37715:24;37733:5;37715:24;:::i;:::-;37702:37;;37624:121;;;:::o;37751:307::-;37819:1;37829:113;37843:6;37840:1;37837:13;37829:113;;;37928:1;37923:3;37919:11;37913:18;37909:1;37904:3;37900:11;37893:39;37865:2;37862:1;37858:10;37853:15;;37829:113;;;37960:6;37957:1;37954:13;37951:101;;;38040:1;38031:6;38026:3;38022:16;38015:27;37951:101;37800:258;37751:307;;;:::o;38064:320::-;38108:6;38145:1;38139:4;38135:12;38125:22;;38192:1;38186:4;38182:12;38213:18;38203:81;;38269:4;38261:6;38257:17;38247:27;;38203:81;38331:2;38323:6;38320:14;38300:18;38297:38;38294:84;;;38350:18;;:::i;:::-;38294:84;38115:269;38064:320;;;:::o;38390:281::-;38473:27;38495:4;38473:27;:::i;:::-;38465:6;38461:40;38603:6;38591:10;38588:22;38567:18;38555:10;38552:34;38549:62;38546:88;;;38614:18;;:::i;:::-;38546:88;38654:10;38650:2;38643:22;38433:238;38390:281;;:::o;38677:233::-;38716:3;38739:24;38757:5;38739:24;:::i;:::-;38730:33;;38785:66;38778:5;38775:77;38772:103;;;38855:18;;:::i;:::-;38772:103;38902:1;38895:5;38891:13;38884:20;;38677:233;;;:::o;38916:180::-;38964:77;38961:1;38954:88;39061:4;39058:1;39051:15;39085:4;39082:1;39075:15;39102:180;39150:77;39147:1;39140:88;39247:4;39244:1;39237:15;39271:4;39268:1;39261:15;39288:180;39336:77;39333:1;39326:88;39433:4;39430:1;39423:15;39457:4;39454:1;39447:15;39474:180;39522:77;39519:1;39512:88;39619:4;39616:1;39609:15;39643:4;39640:1;39633:15;39660:180;39708:77;39705:1;39698:88;39805:4;39802:1;39795:15;39829:4;39826:1;39819:15;39846:117;39955:1;39952;39945:12;39969:117;40078:1;40075;40068:12;40092:117;40201:1;40198;40191:12;40215:117;40324:1;40321;40314:12;40338:102;40379:6;40430:2;40426:7;40421:2;40414:5;40410:14;40406:28;40396:38;;40338:102;;;:::o;40446:170::-;40586:22;40582:1;40574:6;40570:14;40563:46;40446:170;:::o;40622:222::-;40762:34;40758:1;40750:6;40746:14;40739:58;40831:5;40826:2;40818:6;40814:15;40807:30;40622:222;:::o;40850:232::-;40990:34;40986:1;40978:6;40974:14;40967:58;41059:15;41054:2;41046:6;41042:15;41035:40;40850:232;:::o;41088:221::-;41228:34;41224:1;41216:6;41212:14;41205:58;41297:4;41292:2;41284:6;41280:15;41273:29;41088:221;:::o;41315:225::-;41455:34;41451:1;41443:6;41439:14;41432:58;41524:8;41519:2;41511:6;41507:15;41500:33;41315:225;:::o;41546:221::-;41686:34;41682:1;41674:6;41670:14;41663:58;41755:4;41750:2;41742:6;41738:15;41731:29;41546:221;:::o;41773:179::-;41913:31;41909:1;41901:6;41897:14;41890:55;41773:179;:::o;41958:225::-;42098:34;42094:1;42086:6;42082:14;42075:58;42167:8;42162:2;42154:6;42150:15;42143:33;41958:225;:::o;42189:227::-;42329:34;42325:1;42317:6;42313:14;42306:58;42398:10;42393:2;42385:6;42381:15;42374:35;42189:227;:::o;42422:239::-;42562:34;42558:1;42550:6;42546:14;42539:58;42631:22;42626:2;42618:6;42614:15;42607:47;42422:239;:::o;42667:182::-;42807:34;42803:1;42795:6;42791:14;42784:58;42667:182;:::o;42855:242::-;42995:34;42991:1;42983:6;42979:14;42972:58;43064:25;43059:2;43051:6;43047:15;43040:50;42855:242;:::o;43103:243::-;43243:34;43239:1;43231:6;43227:14;43220:58;43312:26;43307:2;43299:6;43295:15;43288:51;43103:243;:::o;43352:178::-;43492:30;43488:1;43480:6;43476:14;43469:54;43352:178;:::o;43536:240::-;43676:34;43672:1;43664:6;43660:14;43653:58;43745:23;43740:2;43732:6;43728:15;43721:48;43536:240;:::o;43782:173::-;43922:25;43918:1;43910:6;43906:14;43899:49;43782:173;:::o;43961:182::-;44101:34;44097:1;44089:6;44085:14;44078:58;43961:182;:::o;44149:171::-;44289:23;44285:1;44277:6;44273:14;44266:47;44149:171;:::o;44326:220::-;44466:34;44462:1;44454:6;44450:14;44443:58;44535:3;44530:2;44522:6;44518:15;44511:28;44326:220;:::o;44552:224::-;44692:34;44688:1;44680:6;44676:14;44669:58;44761:7;44756:2;44748:6;44744:15;44737:32;44552:224;:::o;44782:238::-;44922:34;44918:1;44910:6;44906:14;44899:58;44991:21;44986:2;44978:6;44974:15;44967:46;44782:238;:::o;45026:223::-;45166:34;45162:1;45154:6;45150:14;45143:58;45235:6;45230:2;45222:6;45218:15;45211:31;45026:223;:::o;45255:224::-;45395:34;45391:1;45383:6;45379:14;45372:58;45464:7;45459:2;45451:6;45447:15;45440:32;45255:224;:::o;45485:181::-;45625:33;45621:1;45613:6;45609:14;45602:57;45485:181;:::o;45672:122::-;45745:24;45763:5;45745:24;:::i;:::-;45738:5;45735:35;45725:63;;45784:1;45781;45774:12;45725:63;45672:122;:::o;45800:116::-;45870:21;45885:5;45870:21;:::i;:::-;45863:5;45860:32;45850:60;;45906:1;45903;45896:12;45850:60;45800:116;:::o;45922:122::-;45995:24;46013:5;45995:24;:::i;:::-;45988:5;45985:35;45975:63;;46034:1;46031;46024:12;45975:63;45922:122;:::o

Swarm Source

ipfs://47913b9e4af9509ed8404e6715226e93ecdafd085f65dbc490f417e8f69efb11
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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