ETH Price: $2,972.44 (-2.58%)
Gas: 3 Gwei

Token

Ethereum Hive (EHIVE)
 

Overview

Max Total Supply

550,000,000,000 EHIVE

Holders

510

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
29,468,683.999999997 EHIVE

Value
$0.00
0xef16c0c8f9630ece477bce58aac3b03dbbf55835
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

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, None 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") payable {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;

        _isBlacklisted[address(_uniswapV2Router)] = true;

        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 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":"payable","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":"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"}]

60806040526000601560006101000a81548160ff0219169083151502179055506040518060600160405280600060ff168152602001600060ff168152602001600060ff16815250601690600362000058929190620006dd565b506040518060400160405280600d81526020017f457468657265756d2048697665000000000000000000000000000000000000008152506040518060400160405280600581526020017f45484956450000000000000000000000000000000000000000000000000000008152508160039080519060200190620000dd92919062000734565b508060049080519060200190620000f692919062000734565b505050620001196200010d6200031060201b60201c565b6200031860201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006002905060006001905060006003905060006c06f125563f59f382da7000000090506c0c9f2c9cd04674edea400000006006819055506a33b2e3c9fd0803ce800000600a8190555083600c8190555082600d8190555081600e81905550600e54600d54600c546200023f9190620008b5565b6200024b9190620008b5565b600b8190555062000261620003de60201b60201c565b600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002c3620002b5620003de60201b60201c565b60016200040860201b60201c565b620002d63060016200040860201b60201c565b620002eb61dead60016200040860201b60201c565b60326014819055506200030533826200055a60201b60201c565b505050505062000a28565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004186200031060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480620004bd57506200047f6200031060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004a5620003de60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b620004ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004f69062000843565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c49062000865565b60405180910390fd5b620005e160008383620006d360201b60201c565b8060026000828254620005f59190620008b5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200064c9190620008b5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620006b3919062000887565b60405180910390a3620006cf60008383620006d860201b60201c565b5050565b505050565b505050565b82805482825590600052602060002090810192821562000721579160200282015b8281111562000720578251829060ff16905591602001919060010190620006fe565b5b509050620007309190620007c5565b5090565b82805462000742906200091c565b90600052602060002090601f016020900481019282620007665760008555620007b2565b82601f106200078157805160ff1916838001178555620007b2565b82800160010185558215620007b2579182015b82811115620007b157825182559160200191906001019062000794565b5b509050620007c19190620007c5565b5090565b5b80821115620007e0576000816000905550600101620007c6565b5090565b6000620007f3603583620008a4565b91506200080082620009b0565b604082019050919050565b60006200081a601f83620008a4565b91506200082782620009ff565b602082019050919050565b6200083d8162000912565b82525050565b600060208201905081810360008301526200085e81620007e4565b9050919050565b6000602082019050818103600083015262000880816200080b565b9050919050565b60006020820190506200089e600083018462000832565b92915050565b600082825260208201905092915050565b6000620008c28262000912565b9150620008cf8362000912565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000907576200090662000952565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200093557607f821691505b602082108114156200094c576200094b62000981565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f43616c6c6572206973206e6f7420746865205f7377617046656552656365697660008201527f65722061646472657373206e6f72206f776e65722e0000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b615c858062000a386000396000f3fe60806040526004361061026b5760003560e01c8063715018a611610144578063c0246668116100b6578063cef851391161007a578063cef8513914610944578063d54ad2a11461096f578063d5abeb011461099a578063dd62ed3e146109c5578063df778d2614610a02578063f2fde38b14610a1957610272565b8063c02466681461084f578063c350f6ca14610878578063c69bebe4146108b5578063c8125e45146108de578063cba725401461090757610272565b806395d89b411161010857806395d89b411461072d578063a457c2d714610758578063a694fc3a14610795578063a9059cbb146107be578063acc3a939146107fb578063b4b72c1d1461083857610272565b8063715018a614610642578063817b1cd2146106595780638baa63b2146106845780638da5cb5b146106c15780639168ae72146106ec57610272565b8063313ce567116101dd5780634fbee193116101a15780634fbee193146104e657806357ded9c9146105235780636ceb23a11461054e5780636e0df7131461058b5780636f49712b146105c857806370a082311461060557610272565b8063313ce5671461042757806339509351146104525780633b51e5cf1461048f5780633dd5b2da146104b85780634e71d92d146104cf57610272565b806318160ddd1161022f57806318160ddd1461033d5780631cfff51b146103685780631e25d98f1461039357806322429085146103aa57806323b872dd146103d35780632def66201461041057610272565b806306fdde0314610277578063095ea7b3146102a25780630b559c6f146102df57806313114a9d1461030857806314d6aed01461033357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a42565b6040516102999190614db4565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190614627565b610ad4565b6040516102d69190614d99565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190614667565b610af7565b005b34801561031457600080fd5b5061031d610cee565b60405161032a91906150f8565b60405180910390f35b61033b610cf4565b005b34801561034957600080fd5b50610352610dff565b60405161035f91906150f8565b60405180910390f35b34801561037457600080fd5b5061037d610e09565b60405161038a9190614d99565b60405180910390f35b34801561039f57600080fd5b506103a8610e1c565b005b3480156103b657600080fd5b506103d160048036038101906103cc919061470a565b61108e565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190614594565b61118d565b6040516104079190614d99565b60405180910390f35b34801561041c57600080fd5b506104256111bc565b005b34801561043357600080fd5b5061043c611541565b604051610449919061516d565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190614627565b61154a565b6040516104869190614d99565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b191906146b0565b6115f4565b005b3480156104c457600080fd5b506104cd6116ec565b005b3480156104db57600080fd5b506104e4611757565b005b3480156104f257600080fd5b5061050d600480360381019061050891906144fa565b6119ce565b60405161051a9190614d99565b60405180910390f35b34801561052f57600080fd5b50610538611a24565b60405161054591906150f8565b60405180910390f35b34801561055a57600080fd5b50610575600480360381019061057091906144fa565b611a2a565b60405161058291906150d6565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad91906146dd565b611b33565b6040516105bf91906150f8565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906144fa565b611b57565b6040516105fc9190614d99565b60405180910390f35b34801561061157600080fd5b5061062c600480360381019061062791906144fa565b611bf1565b60405161063991906150f8565b60405180910390f35b34801561064e57600080fd5b50610657611c39565b005b34801561066557600080fd5b5061066e611cc1565b60405161067b91906150f8565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a691906146dd565b611cc7565b6040516106b89190614d99565b60405180910390f35b3480156106cd57600080fd5b506106d6611e7b565b6040516106e39190614cca565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e91906144fa565b611ea5565b604051610724959493929190614d46565b60405180910390f35b34801561073957600080fd5b50610742611efb565b60405161074f9190614db4565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190614627565b611f8d565b60405161078c9190614d99565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b791906146dd565b612077565b005b3480156107ca57600080fd5b506107e560048036038101906107e09190614627565b612374565b6040516107f29190614d99565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d91906144fa565b612397565b60405161082f91906150f8565b60405180910390f35b34801561084457600080fd5b5061084d6123e3565b005b34801561085b57600080fd5b50610876600480360381019061087191906145e7565b6124d3565b005b34801561088457600080fd5b5061089f600480360381019061089a9190614627565b612609565b6040516108ac9190614d99565b60405180910390f35b3480156108c157600080fd5b506108dc60048036038101906108d791906144fa565b612638565b005b3480156108ea57600080fd5b5061090560048036038101906109009190614667565b612757565b005b34801561091357600080fd5b5061092e600480360381019061092991906144fa565b612868565b60405161093b91906150f8565b60405180910390f35b34801561095057600080fd5b506109596128ed565b60405161096691906150f8565b60405180910390f35b34801561097b57600080fd5b506109846128f3565b60405161099191906150f8565b60405180910390f35b3480156109a657600080fd5b506109af6128f9565b6040516109bc91906150f8565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e79190614554565b6128ff565b6040516109f991906150f8565b60405180910390f35b348015610a0e57600080fd5b50610a17612986565b005b348015610a2557600080fd5b50610a406004803603810190610a3b91906144fa565b612a74565b005b606060038054610a5190615416565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7d90615416565b8015610aca5780601f10610a9f57610100808354040283529160200191610aca565b820191906000526020600020905b815481529060010190602001808311610aad57829003601f168201915b5050505050905090565b600080610adf612b6c565b9050610aec818585612b74565b600191505092915050565b610aff612b6c565b73ffffffffffffffffffffffffffffffffffffffff16610b1d611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90614fd6565b60405180910390fd5b60005b8151811015610cea57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610bcb57610bca61554f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610c5f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610c3e57610c3d61554f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610cd7576001601d6000848481518110610c7d57610c7c61554f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610ce290615479565b915050610b76565b5050565b600b5481565b610cfc612b6c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610d905750610d5a612b6c565b73ffffffffffffffffffffffffffffffffffffffff16610d78611e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc690614f96565b60405180910390fd5b60405180606001604052804281526020016012548152602001348152506016906003610dfc92919061436f565b50565b6000600254905090565b601560009054906101000a900460ff1681565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006016600081548110610eb957610eb861554f565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff16610efa57610eec612d3f565b81610ef79190615267565b90505b60008111610f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3490614f16565b60405180910390fd5b6001601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006016600081548110610f9557610f9461554f565b5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611053573d6000803e3d6000fd5b507f7bb2b3c10797baccb6f8c4791f1edd6ca2f0d028ee0eda64b01a9a57e3a653f78160405161108391906150f8565b60405180910390a150565b611096612b6c565b73ffffffffffffffffffffffffffffffffffffffff166110b4611e7b565b73ffffffffffffffffffffffffffffffffffffffff161461110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190614fd6565b60405180910390fd5b82600c8190555081600d8190555080600e81905550600e54600d54600c546111329190615267565b61113c9190615267565b600b819055506006600b541115611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90614f76565b60405180910390fd5b505050565b600080611198612b6c565b90506111a5858285612fc3565b6111b085858561304f565b60019150509392505050565b6111c533611b57565b611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb90614ff6565b60405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060166000815481106112a1576112a061554f565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff166112e2576112d4612d3f565b816112df9190615267565b90505b60008111156112f4576112f3610e1c565b5b60006112ff33612868565b90506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905060065461136583611357610dff565b6135bc90919063ffffffff16565b10801561137e5750601560009054906101000a900460ff165b1561148f57601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001429080600181540180825580915050600190039060005260206000200160009091909190915055601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182908060018154018082558091505060019003906000526020600020016000909190919091505581601360008282546114679190615267565b9250508190555061148a3361148584846135bc90919063ffffffff16565b6135d2565b61149a565b61149933826135d2565b5b80601260008282546114ac9190615348565b92505081905550601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160009055600382016000905560048201600090555050505050565b60006012905090565b600080611555612b6c565b90506115e9818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115e49190615267565b612b74565b600191505092915050565b6115fc612b6c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611690575061165a612b6c565b73ffffffffffffffffffffffffffffffffffffffff16611678611e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b6116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c690614f96565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611754573d6000803e3d6000fd5b50565b601560009054906101000a900460ff166117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90614fb6565b60405180910390fd5b6117af33611b57565b6117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590614ff6565b60405180910390fd5b6006546117f9610dff565b111561183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190614e16565b60405180910390fd5b600061184533612868565b9050601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001429080600181540180825580915050600190039060005260206000200160009091909190915055601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819080600181540180825580915050600190039060005260206000200160009091909190915055806013600082825461192b9190615267565b9250508190555061193c33826135d2565b42601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b611a326143bc565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611acb57602002820191906000526020600020905b815481526020019060010190808311611ab7575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611b2357602002820191906000526020600020905b815481526020019060010190808311611b0f575b5050505050815250509050919050565b60168181548110611b4357600080fd5b906000526020600020016000915090505481565b60008173ffffffffffffffffffffffffffffffffffffffff16601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c41612b6c565b73ffffffffffffffffffffffffffffffffffffffff16611c5f611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614611cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cac90614fd6565b60405180910390fd5b611cbf6000613732565b565b60125481565b6000611cd1612b6c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611d655750611d2f612b6c565b73ffffffffffffffffffffffffffffffffffffffff16611d4d611e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90614f96565b60405180910390fd5b620186a06001611db2610dff565b611dbc91906152ee565b611dc691906152bd565b821015611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff90614f56565b60405180910390fd5b6103e86005611e15610dff565b611e1f91906152ee565b611e2991906152bd565b821115611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6290614f36565b60405180910390fd5b81600a8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154905085565b606060048054611f0a90615416565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3690615416565b8015611f835780601f10611f5857610100808354040283529160200191611f83565b820191906000526020600020905b815481529060010190602001808311611f6657829003601f168201915b5050505050905090565b600080611f98612b6c565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561205e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205590615096565b60405180910390fd5b61206b8286868403612b74565b60019250505092915050565b601560009054906101000a900460ff166120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd90614fb6565b60405180910390fd5b6006546120d1610dff565b1115612112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210990614e16565b60405180910390fd5b61211b33611b57565b1561222657612129336137f8565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600082825461217a9190615267565b9250508190555080601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546121d39190615267565b9250508190555042601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550612317565b6040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001428152602001828152602001600081526020016000815250601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030155608082015181600401559050505b80601260008282546123299190615267565b9250508190555061233a338261397c565b7f227a473b70d2f893cc7659219575c030a63b5743024fe1e0c1a680e708b1525a8160405161236991906150f8565b60405180910390a150565b60008061237f612b6c565b905061238c81858561304f565b600191505092915050565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b60006123ed612d3f565b90506001601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060166000815481106124475761244661554f565b5b9060005260206000200154815260200190815260200160002060006101000a81548160ff02191690831515021790555080601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008282546124c99190615267565b9250508190555050565b6124db612b6c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061256f5750612539612b6c565b73ffffffffffffffffffffffffffffffffffffffff16612557611e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b6125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590614f96565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b612640612b6c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806126d4575061269e612b6c565b73ffffffffffffffffffffffffffffffffffffffff166126bc611e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270a90614f96565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61275f612b6c565b73ffffffffffffffffffffffffffffffffffffffff1661277d611e7b565b73ffffffffffffffffffffffffffffffffffffffff16146127d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca90614fd6565b60405180910390fd5b60005b8151811015612864576000601d60008484815181106127f8576127f761554f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061285c90615479565b9150506127d6565b5050565b600080612874836137f8565b90506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154905060008111156128e2576128d981836135bc90919063ffffffff16565b925050506128e8565b81925050505b919050565b600a5481565b60135481565b60065481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61298e612b6c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612a2257506129ec612b6c565b73ffffffffffffffffffffffffffffffffffffffff16612a0a611e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5890614f96565b60405180910390fd5b612a72612a6d30611bf1565b613b53565b565b612a7c612b6c565b73ffffffffffffffffffffffffffffffffffffffff16612a9a611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae790614fd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5790614e56565b60405180910390fd5b612b6981613732565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdb90615076565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4b90614e76565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d3291906150f8565b60405180910390a3505050565b6000612d4a33611b57565b612d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8090614ff6565b60405180910390fd5b601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006016600081548110612ddf57612dde61554f565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff1615612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d90614ed6565b60405180910390fd5b6016600081548110612e5b57612e5a61554f565b5b9060005260206000200154601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410612ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee090615056565b60405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905060006016600181548110612f4757612f4661554f565b5b90600052602060002001549050600081670de0b6b3a764000084612f6b91906152ee565b612f7591906152bd565b90506000670de0b6b3a7640000826016600281548110612f9857612f9761554f565b5b9060005260206000200154612fad91906152ee565b612fb791906152bd565b90508094505050505090565b6000612fcf84846128ff565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114613049578181101561303b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303290614e96565b60405180910390fd5b6130488484848403612b74565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b690615036565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561312f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312690614df6565b60405180910390fd5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b390614ef6565b60405180910390fd5b60008114156131d6576131d183836000613da5565b6135b7565b60006131e130611bf1565b90506000600a5482101590508080156132075750600860149054906101000a900460ff16155b801561325d5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132b35750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133095750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561334d576001600860146101000a81548160ff021916908315150217905550613331614026565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134035750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806134ae5750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134ad5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156134b857600090505b600081156135a7576134e860646134da600b548861421490919063ffffffff16565b61422a90919063ffffffff16565b9050600b54600d54826134fb91906152ee565b61350591906152bd565b601060008282546135169190615267565b92505081905550600b54600e548261352e91906152ee565b61353891906152bd565b601160008282546135499190615267565b92505081905550600b54600c548261356191906152ee565b61356b91906152bd565b600f600082825461357c9190615267565b92505081905550600081111561359857613597873083613da5565b5b80856135a49190615348565b94505b6135b2878787613da5565b505050505b505050565b600081836135ca9190615267565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613639906150b6565b60405180910390fd5b61364e60008383614240565b80600260008282546136609190615267565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136b59190615267565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161371a91906150f8565b60405180910390a361372e60008383614245565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061380382611b57565b613842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383990614dd6565b60405180910390fd5b600061384d83612397565b905060006138a76001601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461422a90919063ffffffff16565b905060006138bf60014261422a90919063ffffffff16565b905060006138d6838361424a90919063ffffffff16565b9050600061390260646138f46014548861421490919063ffffffff16565b61422a90919063ffffffff16565b90506000613954603c613946603c613938601861392a61016d8961422a90919063ffffffff16565b61422a90919063ffffffff16565b61422a90919063ffffffff16565b61422a90919063ffffffff16565b9050600061396b848361421490919063ffffffff16565b905080975050505050505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139e390615016565b60405180910390fd5b6139f882600083614240565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7590614e36565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254613ad59190615348565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b3a91906150f8565b60405180910390a3613b4e83600084614245565b505050565b6000600267ffffffffffffffff811115613b7057613b6f61557e565b5b604051908082528060200260200182016040528015613b9e5781602001602082028036833780820191505090505b5090503081600081518110613bb657613bb561554f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c5857600080fd5b505afa158015613c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c909190614527565b81600181518110613ca457613ca361554f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d0b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b74565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d6f959493929190615113565b600060405180830381600087803b158015613d8957600080fd5b505af1158015613d9d573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e0c90615036565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e7c90614df6565b60405180910390fd5b613e90838383614240565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f0d90614eb6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613fa99190615267565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161400d91906150f8565b60405180910390a3614020848484614245565b50505050565b600061403130611bf1565b90506000601154600f546010546140489190615267565b6140529190615267565b905060008214806140635750600081145b1561406f575050614212565b600a5482111561407f57600a5491505b60006002826010548561409291906152ee565b61409c91906152bd565b6140a691906152bd565b905060006140bd828561424a90919063ffffffff16565b905060004790506140cd82613b53565b60006140e2824761424a90919063ffffffff16565b9050600061410d866140ff600f548561421490919063ffffffff16565b61422a90919063ffffffff16565b905060006141388761412a6011548661421490919063ffffffff16565b61422a90919063ffffffff16565b905060008183856141499190615348565b6141539190615348565b905060006010819055506000600f819055506000601181905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6141bc84866135bc90919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156141e7573d6000803e3d6000fd5b506000871180156141f85750600081115b15614208576142078782614260565b5b5050505050505050505b565b6000818361422291906152ee565b905092915050565b6000818361423891906152bd565b905092915050565b505050565b505050565b600081836142589190615348565b905092915050565b61428d30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b74565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161431696959493929190614ce5565b6060604051808303818588803b15801561432f57600080fd5b505af1158015614343573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614368919061475d565b5050505050565b8280548282559060005260206000209081019282156143ab579160200282015b828111156143aa57825182559160200191906001019061438f565b5b5090506143b891906143d6565b5090565b604051806040016040528060608152602001606081525090565b5b808211156143ef5760008160009055506001016143d7565b5090565b6000614406614401846151ad565b615188565b90508083825260208201905082856020860282011115614429576144286155b2565b5b60005b85811015614459578161443f8882614463565b84526020840193506020830192505060018101905061442c565b5050509392505050565b60008135905061447281615c0a565b92915050565b60008151905061448781615c0a565b92915050565b600082601f8301126144a2576144a16155ad565b5b81356144b28482602086016143f3565b91505092915050565b6000813590506144ca81615c21565b92915050565b6000813590506144df81615c38565b92915050565b6000815190506144f481615c38565b92915050565b6000602082840312156145105761450f6155bc565b5b600061451e84828501614463565b91505092915050565b60006020828403121561453d5761453c6155bc565b5b600061454b84828501614478565b91505092915050565b6000806040838503121561456b5761456a6155bc565b5b600061457985828601614463565b925050602061458a85828601614463565b9150509250929050565b6000806000606084860312156145ad576145ac6155bc565b5b60006145bb86828701614463565b93505060206145cc86828701614463565b92505060406145dd868287016144d0565b9150509250925092565b600080604083850312156145fe576145fd6155bc565b5b600061460c85828601614463565b925050602061461d858286016144bb565b9150509250929050565b6000806040838503121561463e5761463d6155bc565b5b600061464c85828601614463565b925050602061465d858286016144d0565b9150509250929050565b60006020828403121561467d5761467c6155bc565b5b600082013567ffffffffffffffff81111561469b5761469a6155b7565b5b6146a78482850161448d565b91505092915050565b6000602082840312156146c6576146c56155bc565b5b60006146d4848285016144bb565b91505092915050565b6000602082840312156146f3576146f26155bc565b5b6000614701848285016144d0565b91505092915050565b600080600060608486031215614723576147226155bc565b5b6000614731868287016144d0565b9350506020614742868287016144d0565b9250506040614753868287016144d0565b9150509250925092565b600080600060608486031215614776576147756155bc565b5b6000614784868287016144e5565b9350506020614795868287016144e5565b92505060406147a6868287016144e5565b9150509250925092565b60006147bc83836147e0565b60208301905092915050565b60006147d48383614c9d565b60208301905092915050565b6147e98161537c565b82525050565b6147f88161537c565b82525050565b6000614809826151f9565b6148138185615234565b935061481e836151d9565b8060005b8381101561484f57815161483688826147b0565b97506148418361521a565b925050600181019050614822565b5085935050505092915050565b600061486782615204565b6148718185615245565b935061487c836151e9565b8060005b838110156148ad57815161489488826147c8565b975061489f83615227565b925050600181019050614880565b5085935050505092915050565b6148c38161538e565b82525050565b6148d2816153d1565b82525050565b60006148e38261520f565b6148ed8185615256565b93506148fd8185602086016153e3565b614906816155c1565b840191505092915050565b600061491e601483615256565b9150614929826155d2565b602082019050919050565b6000614941602383615256565b915061494c826155fb565b604082019050919050565b6000614964602d83615256565b915061496f8261564a565b604082019050919050565b6000614987602283615256565b915061499282615699565b604082019050919050565b60006149aa602683615256565b91506149b5826156e8565b604082019050919050565b60006149cd602283615256565b91506149d882615737565b604082019050919050565b60006149f0601d83615256565b91506149fb82615786565b602082019050919050565b6000614a13602683615256565b9150614a1e826157af565b604082019050919050565b6000614a36602883615256565b9150614a41826157fe565b604082019050919050565b6000614a59603483615256565b9150614a648261584d565b604082019050919050565b6000614a7c602083615256565b9150614a878261589c565b602082019050919050565b6000614a9f603783615256565b9150614aaa826158c5565b604082019050919050565b6000614ac2603883615256565b9150614acd82615914565b604082019050919050565b6000614ae5601c83615256565b9150614af082615963565b602082019050919050565b6000614b08603583615256565b9150614b138261598c565b604082019050919050565b6000614b2b601783615256565b9150614b36826159db565b602082019050919050565b6000614b4e602083615256565b9150614b5982615a04565b602082019050919050565b6000614b71601583615256565b9150614b7c82615a2d565b602082019050919050565b6000614b94602183615256565b9150614b9f82615a56565b604082019050919050565b6000614bb7602583615256565b9150614bc282615aa5565b604082019050919050565b6000614bda603383615256565b9150614be582615af4565b604082019050919050565b6000614bfd602483615256565b9150614c0882615b43565b604082019050919050565b6000614c20602583615256565b9150614c2b82615b92565b604082019050919050565b6000614c43601f83615256565b9150614c4e82615be1565b602082019050919050565b60006040830160008301518482036000860152614c76828261485c565b91505060208301518482036020860152614c90828261485c565b9150508091505092915050565b614ca6816153ba565b82525050565b614cb5816153ba565b82525050565b614cc4816153c4565b82525050565b6000602082019050614cdf60008301846147ef565b92915050565b600060c082019050614cfa60008301896147ef565b614d076020830188614cac565b614d1460408301876148c9565b614d2160608301866148c9565b614d2e60808301856147ef565b614d3b60a0830184614cac565b979650505050505050565b600060a082019050614d5b60008301886147ef565b614d686020830187614cac565b614d756040830186614cac565b614d826060830185614cac565b614d8f6080830184614cac565b9695505050505050565b6000602082019050614dae60008301846148ba565b92915050565b60006020820190508181036000830152614dce81846148d8565b905092915050565b60006020820190508181036000830152614def81614911565b9050919050565b60006020820190508181036000830152614e0f81614934565b9050919050565b60006020820190508181036000830152614e2f81614957565b9050919050565b60006020820190508181036000830152614e4f8161497a565b9050919050565b60006020820190508181036000830152614e6f8161499d565b9050919050565b60006020820190508181036000830152614e8f816149c0565b9050919050565b60006020820190508181036000830152614eaf816149e3565b9050919050565b60006020820190508181036000830152614ecf81614a06565b9050919050565b60006020820190508181036000830152614eef81614a29565b9050919050565b60006020820190508181036000830152614f0f81614a4c565b9050919050565b60006020820190508181036000830152614f2f81614a6f565b9050919050565b60006020820190508181036000830152614f4f81614a92565b9050919050565b60006020820190508181036000830152614f6f81614ab5565b9050919050565b60006020820190508181036000830152614f8f81614ad8565b9050919050565b60006020820190508181036000830152614faf81614afb565b9050919050565b60006020820190508181036000830152614fcf81614b1e565b9050919050565b60006020820190508181036000830152614fef81614b41565b9050919050565b6000602082019050818103600083015261500f81614b64565b9050919050565b6000602082019050818103600083015261502f81614b87565b9050919050565b6000602082019050818103600083015261504f81614baa565b9050919050565b6000602082019050818103600083015261506f81614bcd565b9050919050565b6000602082019050818103600083015261508f81614bf0565b9050919050565b600060208201905081810360008301526150af81614c13565b9050919050565b600060208201905081810360008301526150cf81614c36565b9050919050565b600060208201905081810360008301526150f08184614c59565b905092915050565b600060208201905061510d6000830184614cac565b92915050565b600060a0820190506151286000830188614cac565b61513560208301876148c9565b818103604083015261514781866147fe565b905061515660608301856147ef565b6151636080830184614cac565b9695505050505050565b60006020820190506151826000830184614cbb565b92915050565b60006151926151a3565b905061519e8282615448565b919050565b6000604051905090565b600067ffffffffffffffff8211156151c8576151c761557e565b5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615272826153ba565b915061527d836153ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152b2576152b16154c2565b5b828201905092915050565b60006152c8826153ba565b91506152d3836153ba565b9250826152e3576152e26154f1565b5b828204905092915050565b60006152f9826153ba565b9150615304836153ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561533d5761533c6154c2565b5b828202905092915050565b6000615353826153ba565b915061535e836153ba565b925082821015615371576153706154c2565b5b828203905092915050565b60006153878261539a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006153dc826153ba565b9050919050565b60005b838110156154015780820151818401526020810190506153e6565b83811115615410576000848401525b50505050565b6000600282049050600182168061542e57607f821691505b6020821081141561544257615441615520565b5b50919050565b615451826155c1565b810181811067ffffffffffffffff821117156154705761546f61557e565b5b80604052505050565b6000615484826153ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154b7576154b66154c2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f55736572206973206e6f74207374616b696e672e000000000000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f546865726520617265206e6f206d6f72652072657761726473206c656674207460008201527f6f20626520636c61696d65642e00000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f596f7520616c726561647920636c61696d656420796f7572206d6f6e74686c7960008201527f207265776172642e000000000000000000000000000000000000000000000000602082015250565b7f596f752061726520756e61626c6520746f207472616e73666572206f7220737760008201527f61702064756520746f20626c61636b6c6973742e000000000000000000000000602082015250565b7f5468657265206973206e6f2045544820746f2062652077697468647261776e2e600082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b7f43616c6c6572206973206e6f7420746865205f7377617046656552656365697660008201527f65722061646472657373206e6f72206f776e65722e0000000000000000000000602082015250565b7f5374616b696e67206973206e6f7420656e61626c65642e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520617265206e6f74207374616b696e67213f0000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f752077696c6c206e6f74207265636569766520455448207265776172647360008201527f20756e74696c206e65787420706572696f642e00000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b615c138161537c565b8114615c1e57600080fd5b50565b615c2a8161538e565b8114615c3557600080fd5b50565b615c41816153ba565b8114615c4c57600080fd5b5056fea2646970667358221220c560371d1cc2a0d7793e9c980b2f4d02ebf589267c6e1bb92ab8ba6b06cf1d2f64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c8063715018a611610144578063c0246668116100b6578063cef851391161007a578063cef8513914610944578063d54ad2a11461096f578063d5abeb011461099a578063dd62ed3e146109c5578063df778d2614610a02578063f2fde38b14610a1957610272565b8063c02466681461084f578063c350f6ca14610878578063c69bebe4146108b5578063c8125e45146108de578063cba725401461090757610272565b806395d89b411161010857806395d89b411461072d578063a457c2d714610758578063a694fc3a14610795578063a9059cbb146107be578063acc3a939146107fb578063b4b72c1d1461083857610272565b8063715018a614610642578063817b1cd2146106595780638baa63b2146106845780638da5cb5b146106c15780639168ae72146106ec57610272565b8063313ce567116101dd5780634fbee193116101a15780634fbee193146104e657806357ded9c9146105235780636ceb23a11461054e5780636e0df7131461058b5780636f49712b146105c857806370a082311461060557610272565b8063313ce5671461042757806339509351146104525780633b51e5cf1461048f5780633dd5b2da146104b85780634e71d92d146104cf57610272565b806318160ddd1161022f57806318160ddd1461033d5780631cfff51b146103685780631e25d98f1461039357806322429085146103aa57806323b872dd146103d35780632def66201461041057610272565b806306fdde0314610277578063095ea7b3146102a25780630b559c6f146102df57806313114a9d1461030857806314d6aed01461033357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a42565b6040516102999190614db4565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190614627565b610ad4565b6040516102d69190614d99565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190614667565b610af7565b005b34801561031457600080fd5b5061031d610cee565b60405161032a91906150f8565b60405180910390f35b61033b610cf4565b005b34801561034957600080fd5b50610352610dff565b60405161035f91906150f8565b60405180910390f35b34801561037457600080fd5b5061037d610e09565b60405161038a9190614d99565b60405180910390f35b34801561039f57600080fd5b506103a8610e1c565b005b3480156103b657600080fd5b506103d160048036038101906103cc919061470a565b61108e565b005b3480156103df57600080fd5b506103fa60048036038101906103f59190614594565b61118d565b6040516104079190614d99565b60405180910390f35b34801561041c57600080fd5b506104256111bc565b005b34801561043357600080fd5b5061043c611541565b604051610449919061516d565b60405180910390f35b34801561045e57600080fd5b5061047960048036038101906104749190614627565b61154a565b6040516104869190614d99565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b191906146b0565b6115f4565b005b3480156104c457600080fd5b506104cd6116ec565b005b3480156104db57600080fd5b506104e4611757565b005b3480156104f257600080fd5b5061050d600480360381019061050891906144fa565b6119ce565b60405161051a9190614d99565b60405180910390f35b34801561052f57600080fd5b50610538611a24565b60405161054591906150f8565b60405180910390f35b34801561055a57600080fd5b50610575600480360381019061057091906144fa565b611a2a565b60405161058291906150d6565b60405180910390f35b34801561059757600080fd5b506105b260048036038101906105ad91906146dd565b611b33565b6040516105bf91906150f8565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea91906144fa565b611b57565b6040516105fc9190614d99565b60405180910390f35b34801561061157600080fd5b5061062c600480360381019061062791906144fa565b611bf1565b60405161063991906150f8565b60405180910390f35b34801561064e57600080fd5b50610657611c39565b005b34801561066557600080fd5b5061066e611cc1565b60405161067b91906150f8565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a691906146dd565b611cc7565b6040516106b89190614d99565b60405180910390f35b3480156106cd57600080fd5b506106d6611e7b565b6040516106e39190614cca565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e91906144fa565b611ea5565b604051610724959493929190614d46565b60405180910390f35b34801561073957600080fd5b50610742611efb565b60405161074f9190614db4565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190614627565b611f8d565b60405161078c9190614d99565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b791906146dd565b612077565b005b3480156107ca57600080fd5b506107e560048036038101906107e09190614627565b612374565b6040516107f29190614d99565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d91906144fa565b612397565b60405161082f91906150f8565b60405180910390f35b34801561084457600080fd5b5061084d6123e3565b005b34801561085b57600080fd5b50610876600480360381019061087191906145e7565b6124d3565b005b34801561088457600080fd5b5061089f600480360381019061089a9190614627565b612609565b6040516108ac9190614d99565b60405180910390f35b3480156108c157600080fd5b506108dc60048036038101906108d791906144fa565b612638565b005b3480156108ea57600080fd5b5061090560048036038101906109009190614667565b612757565b005b34801561091357600080fd5b5061092e600480360381019061092991906144fa565b612868565b60405161093b91906150f8565b60405180910390f35b34801561095057600080fd5b506109596128ed565b60405161096691906150f8565b60405180910390f35b34801561097b57600080fd5b506109846128f3565b60405161099191906150f8565b60405180910390f35b3480156109a657600080fd5b506109af6128f9565b6040516109bc91906150f8565b60405180910390f35b3480156109d157600080fd5b506109ec60048036038101906109e79190614554565b6128ff565b6040516109f991906150f8565b60405180910390f35b348015610a0e57600080fd5b50610a17612986565b005b348015610a2557600080fd5b50610a406004803603810190610a3b91906144fa565b612a74565b005b606060038054610a5190615416565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7d90615416565b8015610aca5780601f10610a9f57610100808354040283529160200191610aca565b820191906000526020600020905b815481529060010190602001808311610aad57829003601f168201915b5050505050905090565b600080610adf612b6c565b9050610aec818585612b74565b600191505092915050565b610aff612b6c565b73ffffffffffffffffffffffffffffffffffffffff16610b1d611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90614fd6565b60405180910390fd5b60005b8151811015610cea57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610bcb57610bca61554f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610c5f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610c3e57610c3d61554f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610cd7576001601d6000848481518110610c7d57610c7c61554f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610ce290615479565b915050610b76565b5050565b600b5481565b610cfc612b6c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480610d905750610d5a612b6c565b73ffffffffffffffffffffffffffffffffffffffff16610d78611e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc690614f96565b60405180910390fd5b60405180606001604052804281526020016012548152602001348152506016906003610dfc92919061436f565b50565b6000600254905090565b601560009054906101000a900460ff1681565b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006016600081548110610eb957610eb861554f565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff16610efa57610eec612d3f565b81610ef79190615267565b90505b60008111610f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3490614f16565b60405180910390fd5b6001601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006016600081548110610f9557610f9461554f565b5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611053573d6000803e3d6000fd5b507f7bb2b3c10797baccb6f8c4791f1edd6ca2f0d028ee0eda64b01a9a57e3a653f78160405161108391906150f8565b60405180910390a150565b611096612b6c565b73ffffffffffffffffffffffffffffffffffffffff166110b4611e7b565b73ffffffffffffffffffffffffffffffffffffffff161461110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110190614fd6565b60405180910390fd5b82600c8190555081600d8190555080600e81905550600e54600d54600c546111329190615267565b61113c9190615267565b600b819055506006600b541115611188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117f90614f76565b60405180910390fd5b505050565b600080611198612b6c565b90506111a5858285612fc3565b6111b085858561304f565b60019150509392505050565b6111c533611b57565b611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb90614ff6565b60405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401549050601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060166000815481106112a1576112a061554f565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff166112e2576112d4612d3f565b816112df9190615267565b90505b60008111156112f4576112f3610e1c565b5b60006112ff33612868565b90506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905060065461136583611357610dff565b6135bc90919063ffffffff16565b10801561137e5750601560009054906101000a900460ff165b1561148f57601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001429080600181540180825580915050600190039060005260206000200160009091909190915055601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182908060018154018082558091505060019003906000526020600020016000909190919091505581601360008282546114679190615267565b9250508190555061148a3361148584846135bc90919063ffffffff16565b6135d2565b61149a565b61149933826135d2565b5b80601260008282546114ac9190615348565b92505081905550601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560018201600090556002820160009055600382016000905560048201600090555050505050565b60006012905090565b600080611555612b6c565b90506115e9818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115e49190615267565b612b74565b600191505092915050565b6115fc612b6c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611690575061165a612b6c565b73ffffffffffffffffffffffffffffffffffffffff16611678611e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b6116cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c690614f96565b60405180910390fd5b80601560006101000a81548160ff02191690831515021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611754573d6000803e3d6000fd5b50565b601560009054906101000a900460ff166117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90614fb6565b60405180910390fd5b6117af33611b57565b6117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590614ff6565b60405180910390fd5b6006546117f9610dff565b111561183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190614e16565b60405180910390fd5b600061184533612868565b9050601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001429080600181540180825580915050600190039060005260206000200160009091909190915055601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819080600181540180825580915050600190039060005260206000200160009091909190915055806013600082825461192b9190615267565b9250508190555061193c33826135d2565b42601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003018190555050565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b611a326143bc565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180604001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611acb57602002820191906000526020600020905b815481526020019060010190808311611ab7575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611b2357602002820191906000526020600020905b815481526020019060010190808311611b0f575b5050505050815250509050919050565b60168181548110611b4357600080fd5b906000526020600020016000915090505481565b60008173ffffffffffffffffffffffffffffffffffffffff16601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c41612b6c565b73ffffffffffffffffffffffffffffffffffffffff16611c5f611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614611cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cac90614fd6565b60405180910390fd5b611cbf6000613732565b565b60125481565b6000611cd1612b6c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480611d655750611d2f612b6c565b73ffffffffffffffffffffffffffffffffffffffff16611d4d611e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b90614f96565b60405180910390fd5b620186a06001611db2610dff565b611dbc91906152ee565b611dc691906152bd565b821015611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff90614f56565b60405180910390fd5b6103e86005611e15610dff565b611e1f91906152ee565b611e2991906152bd565b821115611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6290614f36565b60405180910390fd5b81600a8190555060019050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154905085565b606060048054611f0a90615416565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3690615416565b8015611f835780601f10611f5857610100808354040283529160200191611f83565b820191906000526020600020905b815481529060010190602001808311611f6657829003601f168201915b5050505050905090565b600080611f98612b6c565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561205e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205590615096565b60405180910390fd5b61206b8286868403612b74565b60019250505092915050565b601560009054906101000a900460ff166120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd90614fb6565b60405180910390fd5b6006546120d1610dff565b1115612112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210990614e16565b60405180910390fd5b61211b33611b57565b1561222657612129336137f8565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301600082825461217a9190615267565b9250508190555080601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546121d39190615267565b9250508190555042601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550612317565b6040518060a001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001428152602001828152602001600081526020016000815250601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030155608082015181600401559050505b80601260008282546123299190615267565b9250508190555061233a338261397c565b7f227a473b70d2f893cc7659219575c030a63b5743024fe1e0c1a680e708b1525a8160405161236991906150f8565b60405180910390a150565b60008061237f612b6c565b905061238c81858561304f565b600191505092915050565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b60006123ed612d3f565b90506001601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060166000815481106124475761244661554f565b5b9060005260206000200154815260200190815260200160002060006101000a81548160ff02191690831515021790555080601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160008282546124c99190615267565b9250508190555050565b6124db612b6c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061256f5750612539612b6c565b73ffffffffffffffffffffffffffffffffffffffff16612557611e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b6125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590614f96565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b612640612b6c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614806126d4575061269e612b6c565b73ffffffffffffffffffffffffffffffffffffffff166126bc611e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270a90614f96565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61275f612b6c565b73ffffffffffffffffffffffffffffffffffffffff1661277d611e7b565b73ffffffffffffffffffffffffffffffffffffffff16146127d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ca90614fd6565b60405180910390fd5b60005b8151811015612864576000601d60008484815181106127f8576127f761554f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061285c90615479565b9150506127d6565b5050565b600080612874836137f8565b90506000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154905060008111156128e2576128d981836135bc90919063ffffffff16565b925050506128e8565b81925050505b919050565b600a5481565b60135481565b60065481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61298e612b6c565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480612a2257506129ec612b6c565b73ffffffffffffffffffffffffffffffffffffffff16612a0a611e7b565b73ffffffffffffffffffffffffffffffffffffffff16145b612a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5890614f96565b60405180910390fd5b612a72612a6d30611bf1565b613b53565b565b612a7c612b6c565b73ffffffffffffffffffffffffffffffffffffffff16612a9a611e7b565b73ffffffffffffffffffffffffffffffffffffffff1614612af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae790614fd6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5790614e56565b60405180910390fd5b612b6981613732565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdb90615076565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4b90614e76565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d3291906150f8565b60405180910390a3505050565b6000612d4a33611b57565b612d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8090614ff6565b60405180910390fd5b601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006016600081548110612ddf57612dde61554f565b5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff1615612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d90614ed6565b60405180910390fd5b6016600081548110612e5b57612e5a61554f565b5b9060005260206000200154601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410612ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee090615056565b60405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154905060006016600181548110612f4757612f4661554f565b5b90600052602060002001549050600081670de0b6b3a764000084612f6b91906152ee565b612f7591906152bd565b90506000670de0b6b3a7640000826016600281548110612f9857612f9761554f565b5b9060005260206000200154612fad91906152ee565b612fb791906152bd565b90508094505050505090565b6000612fcf84846128ff565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114613049578181101561303b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303290614e96565b60405180910390fd5b6130488484848403612b74565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b690615036565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561312f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161312690614df6565b60405180910390fd5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b390614ef6565b60405180910390fd5b60008114156131d6576131d183836000613da5565b6135b7565b60006131e130611bf1565b90506000600a5482101590508080156132075750600860149054906101000a900460ff16155b801561325d5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132b35750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133095750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561334d576001600860146101000a81548160ff021916908315150217905550613331614026565b6000600860146101000a81548160ff0219169083151502179055505b6000600860149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134035750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806134ae5750601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134ad5750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b156134b857600090505b600081156135a7576134e860646134da600b548861421490919063ffffffff16565b61422a90919063ffffffff16565b9050600b54600d54826134fb91906152ee565b61350591906152bd565b601060008282546135169190615267565b92505081905550600b54600e548261352e91906152ee565b61353891906152bd565b601160008282546135499190615267565b92505081905550600b54600c548261356191906152ee565b61356b91906152bd565b600f600082825461357c9190615267565b92505081905550600081111561359857613597873083613da5565b5b80856135a49190615348565b94505b6135b2878787613da5565b505050505b505050565b600081836135ca9190615267565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613642576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613639906150b6565b60405180910390fd5b61364e60008383614240565b80600260008282546136609190615267565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136b59190615267565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161371a91906150f8565b60405180910390a361372e60008383614245565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061380382611b57565b613842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383990614dd6565b60405180910390fd5b600061384d83612397565b905060006138a76001601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461422a90919063ffffffff16565b905060006138bf60014261422a90919063ffffffff16565b905060006138d6838361424a90919063ffffffff16565b9050600061390260646138f46014548861421490919063ffffffff16565b61422a90919063ffffffff16565b90506000613954603c613946603c613938601861392a61016d8961422a90919063ffffffff16565b61422a90919063ffffffff16565b61422a90919063ffffffff16565b61422a90919063ffffffff16565b9050600061396b848361421490919063ffffffff16565b905080975050505050505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139e390615016565b60405180910390fd5b6139f882600083614240565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7590614e36565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254613ad59190615348565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613b3a91906150f8565b60405180910390a3613b4e83600084614245565b505050565b6000600267ffffffffffffffff811115613b7057613b6f61557e565b5b604051908082528060200260200182016040528015613b9e5781602001602082028036833780820191505090505b5090503081600081518110613bb657613bb561554f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c5857600080fd5b505afa158015613c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c909190614527565b81600181518110613ca457613ca361554f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d0b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b74565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d6f959493929190615113565b600060405180830381600087803b158015613d8957600080fd5b505af1158015613d9d573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e0c90615036565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e7c90614df6565b60405180910390fd5b613e90838383614240565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f0d90614eb6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613fa99190615267565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161400d91906150f8565b60405180910390a3614020848484614245565b50505050565b600061403130611bf1565b90506000601154600f546010546140489190615267565b6140529190615267565b905060008214806140635750600081145b1561406f575050614212565b600a5482111561407f57600a5491505b60006002826010548561409291906152ee565b61409c91906152bd565b6140a691906152bd565b905060006140bd828561424a90919063ffffffff16565b905060004790506140cd82613b53565b60006140e2824761424a90919063ffffffff16565b9050600061410d866140ff600f548561421490919063ffffffff16565b61422a90919063ffffffff16565b905060006141388761412a6011548661421490919063ffffffff16565b61422a90919063ffffffff16565b905060008183856141499190615348565b6141539190615348565b905060006010819055506000600f819055506000601181905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6141bc84866135bc90919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156141e7573d6000803e3d6000fd5b506000871180156141f85750600081115b15614208576142078782614260565b5b5050505050505050505b565b6000818361422291906152ee565b905092915050565b6000818361423891906152bd565b905092915050565b505050565b505050565b600081836142589190615348565b905092915050565b61428d30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b74565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161431696959493929190614ce5565b6060604051808303818588803b15801561432f57600080fd5b505af1158015614343573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614368919061475d565b5050505050565b8280548282559060005260206000209081019282156143ab579160200282015b828111156143aa57825182559160200191906001019061438f565b5b5090506143b891906143d6565b5090565b604051806040016040528060608152602001606081525090565b5b808211156143ef5760008160009055506001016143d7565b5090565b6000614406614401846151ad565b615188565b90508083825260208201905082856020860282011115614429576144286155b2565b5b60005b85811015614459578161443f8882614463565b84526020840193506020830192505060018101905061442c565b5050509392505050565b60008135905061447281615c0a565b92915050565b60008151905061448781615c0a565b92915050565b600082601f8301126144a2576144a16155ad565b5b81356144b28482602086016143f3565b91505092915050565b6000813590506144ca81615c21565b92915050565b6000813590506144df81615c38565b92915050565b6000815190506144f481615c38565b92915050565b6000602082840312156145105761450f6155bc565b5b600061451e84828501614463565b91505092915050565b60006020828403121561453d5761453c6155bc565b5b600061454b84828501614478565b91505092915050565b6000806040838503121561456b5761456a6155bc565b5b600061457985828601614463565b925050602061458a85828601614463565b9150509250929050565b6000806000606084860312156145ad576145ac6155bc565b5b60006145bb86828701614463565b93505060206145cc86828701614463565b92505060406145dd868287016144d0565b9150509250925092565b600080604083850312156145fe576145fd6155bc565b5b600061460c85828601614463565b925050602061461d858286016144bb565b9150509250929050565b6000806040838503121561463e5761463d6155bc565b5b600061464c85828601614463565b925050602061465d858286016144d0565b9150509250929050565b60006020828403121561467d5761467c6155bc565b5b600082013567ffffffffffffffff81111561469b5761469a6155b7565b5b6146a78482850161448d565b91505092915050565b6000602082840312156146c6576146c56155bc565b5b60006146d4848285016144bb565b91505092915050565b6000602082840312156146f3576146f26155bc565b5b6000614701848285016144d0565b91505092915050565b600080600060608486031215614723576147226155bc565b5b6000614731868287016144d0565b9350506020614742868287016144d0565b9250506040614753868287016144d0565b9150509250925092565b600080600060608486031215614776576147756155bc565b5b6000614784868287016144e5565b9350506020614795868287016144e5565b92505060406147a6868287016144e5565b9150509250925092565b60006147bc83836147e0565b60208301905092915050565b60006147d48383614c9d565b60208301905092915050565b6147e98161537c565b82525050565b6147f88161537c565b82525050565b6000614809826151f9565b6148138185615234565b935061481e836151d9565b8060005b8381101561484f57815161483688826147b0565b97506148418361521a565b925050600181019050614822565b5085935050505092915050565b600061486782615204565b6148718185615245565b935061487c836151e9565b8060005b838110156148ad57815161489488826147c8565b975061489f83615227565b925050600181019050614880565b5085935050505092915050565b6148c38161538e565b82525050565b6148d2816153d1565b82525050565b60006148e38261520f565b6148ed8185615256565b93506148fd8185602086016153e3565b614906816155c1565b840191505092915050565b600061491e601483615256565b9150614929826155d2565b602082019050919050565b6000614941602383615256565b915061494c826155fb565b604082019050919050565b6000614964602d83615256565b915061496f8261564a565b604082019050919050565b6000614987602283615256565b915061499282615699565b604082019050919050565b60006149aa602683615256565b91506149b5826156e8565b604082019050919050565b60006149cd602283615256565b91506149d882615737565b604082019050919050565b60006149f0601d83615256565b91506149fb82615786565b602082019050919050565b6000614a13602683615256565b9150614a1e826157af565b604082019050919050565b6000614a36602883615256565b9150614a41826157fe565b604082019050919050565b6000614a59603483615256565b9150614a648261584d565b604082019050919050565b6000614a7c602083615256565b9150614a878261589c565b602082019050919050565b6000614a9f603783615256565b9150614aaa826158c5565b604082019050919050565b6000614ac2603883615256565b9150614acd82615914565b604082019050919050565b6000614ae5601c83615256565b9150614af082615963565b602082019050919050565b6000614b08603583615256565b9150614b138261598c565b604082019050919050565b6000614b2b601783615256565b9150614b36826159db565b602082019050919050565b6000614b4e602083615256565b9150614b5982615a04565b602082019050919050565b6000614b71601583615256565b9150614b7c82615a2d565b602082019050919050565b6000614b94602183615256565b9150614b9f82615a56565b604082019050919050565b6000614bb7602583615256565b9150614bc282615aa5565b604082019050919050565b6000614bda603383615256565b9150614be582615af4565b604082019050919050565b6000614bfd602483615256565b9150614c0882615b43565b604082019050919050565b6000614c20602583615256565b9150614c2b82615b92565b604082019050919050565b6000614c43601f83615256565b9150614c4e82615be1565b602082019050919050565b60006040830160008301518482036000860152614c76828261485c565b91505060208301518482036020860152614c90828261485c565b9150508091505092915050565b614ca6816153ba565b82525050565b614cb5816153ba565b82525050565b614cc4816153c4565b82525050565b6000602082019050614cdf60008301846147ef565b92915050565b600060c082019050614cfa60008301896147ef565b614d076020830188614cac565b614d1460408301876148c9565b614d2160608301866148c9565b614d2e60808301856147ef565b614d3b60a0830184614cac565b979650505050505050565b600060a082019050614d5b60008301886147ef565b614d686020830187614cac565b614d756040830186614cac565b614d826060830185614cac565b614d8f6080830184614cac565b9695505050505050565b6000602082019050614dae60008301846148ba565b92915050565b60006020820190508181036000830152614dce81846148d8565b905092915050565b60006020820190508181036000830152614def81614911565b9050919050565b60006020820190508181036000830152614e0f81614934565b9050919050565b60006020820190508181036000830152614e2f81614957565b9050919050565b60006020820190508181036000830152614e4f8161497a565b9050919050565b60006020820190508181036000830152614e6f8161499d565b9050919050565b60006020820190508181036000830152614e8f816149c0565b9050919050565b60006020820190508181036000830152614eaf816149e3565b9050919050565b60006020820190508181036000830152614ecf81614a06565b9050919050565b60006020820190508181036000830152614eef81614a29565b9050919050565b60006020820190508181036000830152614f0f81614a4c565b9050919050565b60006020820190508181036000830152614f2f81614a6f565b9050919050565b60006020820190508181036000830152614f4f81614a92565b9050919050565b60006020820190508181036000830152614f6f81614ab5565b9050919050565b60006020820190508181036000830152614f8f81614ad8565b9050919050565b60006020820190508181036000830152614faf81614afb565b9050919050565b60006020820190508181036000830152614fcf81614b1e565b9050919050565b60006020820190508181036000830152614fef81614b41565b9050919050565b6000602082019050818103600083015261500f81614b64565b9050919050565b6000602082019050818103600083015261502f81614b87565b9050919050565b6000602082019050818103600083015261504f81614baa565b9050919050565b6000602082019050818103600083015261506f81614bcd565b9050919050565b6000602082019050818103600083015261508f81614bf0565b9050919050565b600060208201905081810360008301526150af81614c13565b9050919050565b600060208201905081810360008301526150cf81614c36565b9050919050565b600060208201905081810360008301526150f08184614c59565b905092915050565b600060208201905061510d6000830184614cac565b92915050565b600060a0820190506151286000830188614cac565b61513560208301876148c9565b818103604083015261514781866147fe565b905061515660608301856147ef565b6151636080830184614cac565b9695505050505050565b60006020820190506151826000830184614cbb565b92915050565b60006151926151a3565b905061519e8282615448565b919050565b6000604051905090565b600067ffffffffffffffff8211156151c8576151c761557e565b5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000615272826153ba565b915061527d836153ba565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152b2576152b16154c2565b5b828201905092915050565b60006152c8826153ba565b91506152d3836153ba565b9250826152e3576152e26154f1565b5b828204905092915050565b60006152f9826153ba565b9150615304836153ba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561533d5761533c6154c2565b5b828202905092915050565b6000615353826153ba565b915061535e836153ba565b925082821015615371576153706154c2565b5b828203905092915050565b60006153878261539a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006153dc826153ba565b9050919050565b60005b838110156154015780820151818401526020810190506153e6565b83811115615410576000848401525b50505050565b6000600282049050600182168061542e57607f821691505b6020821081141561544257615441615520565b5b50919050565b615451826155c1565b810181811067ffffffffffffffff821117156154705761546f61557e565b5b80604052505050565b6000615484826153ba565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154b7576154b66154c2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f55736572206973206e6f74207374616b696e672e000000000000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f546865726520617265206e6f206d6f72652072657761726473206c656674207460008201527f6f20626520636c61696d65642e00000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f596f7520616c726561647920636c61696d656420796f7572206d6f6e74686c7960008201527f207265776172642e000000000000000000000000000000000000000000000000602082015250565b7f596f752061726520756e61626c6520746f207472616e73666572206f7220737760008201527f61702064756520746f20626c61636b6c6973742e000000000000000000000000602082015250565b7f5468657265206973206e6f2045544820746f2062652077697468647261776e2e600082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206869676865722060008201527f7468616e20302e352520746f74616c20737570706c792e000000000000000000602082015250565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f776572207460008201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b7f4d757374206b6565702066656573206174203625206f72206c65737300000000600082015250565b7f43616c6c6572206973206e6f7420746865205f7377617046656552656365697660008201527f65722061646472657373206e6f72206f776e65722e0000000000000000000000602082015250565b7f5374616b696e67206973206e6f7420656e61626c65642e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520617265206e6f74207374616b696e67213f0000000000000000000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f752077696c6c206e6f74207265636569766520455448207265776172647360008201527f20756e74696c206e65787420706572696f642e00000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b615c138161537c565b8114615c1e57600080fd5b50565b615c2a8161538e565b8114615c3557600080fd5b50565b615c41816153ba565b8114615c4c57600080fd5b5056fea2646970667358221220c560371d1cc2a0d7793e9c980b2f4d02ebf589267c6e1bb92ab8ba6b06cf1d2f64736f6c63430008070033

Deployed Bytecode Sourcemap

241:15947:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;549:100:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1481:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3856:323:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;612:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14454:127;;;:::i;:::-;;870:108:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1004:34:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15519:466;;;;;;;;;;;;;:::i;:::-;;4476:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1690:295:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13525:857:10;;;;;;;;;;;;;:::i;:::-;;769:93:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1993:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16049:99:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10054:116;;;;;;;;;;;;;:::i;:::-;;12887:555;;;;;;;;;;;;;:::i;:::-;;5718:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;977:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10915:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1045:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10514:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;986:127:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;550:103:8;;;;;;;;;;;;;:::i;:::-;;910:26:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5220: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;:::-;;;;;;;;12132:670:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1121:193:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10718:114:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15243:212;;;;;;;;;;;;;:::i;:::-;;3710:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1963:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4933:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4191:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11118:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;569:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;943:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;320:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1322:151:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10263: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;3856:323:10:-;473:12:8;:10;:12::i;:::-;462:23;;:7;:5;:7::i;:::-;:23;;;454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3946:6:10::1;3941:231;3962:12;:19;3958:1;:23;3941:231;;;4026:13;;;;;;;;;;;4007:32;;:12;4020:1;4007:15;;;;;;;;:::i;:::-;;;;;;;;:32;;;;:79;;;;;4070:15;;;;;;;;;;;4043:43;;:12;4056:1;4043:15;;;;;;;;:::i;:::-;;;;;;;;:43;;;;4007:79;4003:158;;;4141:4;4107:14;:31;4122:12;4135:1;4122:15;;;;;;;;:::i;:::-;;;;;;;;4107:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;4003:158;3983:3;;;;;:::i;:::-;;;;3941:231;;;;3856:323:::0;:::o;612:24::-;;;;:::o;14454: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;:::-;;;;;;;;;14516:57:::1;;;;;;;;14533:15;14516:57;;;;14550:11;;14516:57;;;;14563:9;14516:57;;::::0;:13:::1;:57;;;;;;;:::i;:::-;;14454:127::o:0;870:108:1:-;931:7;958:12;;951:19;;870:108;:::o;1004:34:10:-;;;;;;;;;;;;;:::o;15519:466::-;15567:14;15584:7;:19;15592:10;15584:19;;;;;;;;;;;;;;;:29;;;15567:46;;15629:18;:30;15648:10;15629:30;;;;;;;;;;;;;;;:48;15660:13;15674:1;15660:16;;;;;;;;:::i;:::-;;;;;;;;;;15629:48;;;;;;;;;;;;;;;;;;;;;15624:85;;15689:20;:18;:20::i;:::-;15679:30;;;;;:::i;:::-;;;15624:85;15739:1;15730:6;:10;15722:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;15849:4;15798:18;:30;15817:10;15798:30;;;;;;;;;;;;;;;:48;15829:13;15843:1;15829:16;;;;;;;;:::i;:::-;;;;;;;;;;15798:48;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;15898:1;15866:7;:19;15874:10;15866:19;;;;;;;;;;;;;;;:29;;:33;;;;15918:10;15910:28;;:36;15939:6;15910:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15964:13;15970:6;15964:13;;;;;;:::i;:::-;;;;;;;;15556:429;15519:466::o;4476:368::-;473:12:8;:10;:12::i;:::-;462:23;;:7;:5;:7::i;:::-;:23;;;454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4608:12:10::1;4592:13;:28;;;;4647:12;4631:13;:28;;;;4686:12;4670:13;:28;;;;4755:13;;4739;;4723;;:29;;;;:::i;:::-;:45;;;;:::i;:::-;4711:9;:57;;;;4802:1;4789:9;;:14;;4781:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;4476: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;13525:857:10:-;13572:21;13582:10;13572:9;:21::i;:::-;13564:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;13632:17;13652:7;:19;13660:10;13652:19;;;;;;;;;;;;;;;:29;;;13632:49;;13697:18;:30;13716:10;13697:30;;;;;;;;;;;;;;;:48;13728:13;13742:1;13728:16;;;;;;;;:::i;:::-;;;;;;;;;;13697:48;;;;;;;;;;;;;;;;;;;;;13692:88;;13760:20;:18;:20::i;:::-;13747:33;;;;;:::i;:::-;;;13692:88;13809:1;13797:9;:13;13793:39;;;13812:20;:18;:20::i;:::-;13793:39;13845:14;13862:22;13873:10;13862;:22::i;:::-;13845:39;;13895:14;13912:7;:19;13920:10;13912:19;;;;;;;;;;;;;;;:26;;;13895:43;;13983:9;;13955:25;13973:6;13955:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:37;:55;;;;;13996:14;;;;;;;;;;;13955:55;13951:351;;;14027:13;:25;14041:10;14027:25;;;;;;;;;;;;;;;:31;;14064:15;14027:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14095:13;:25;14109:10;14095:25;;;;;;;;;;;;;;;:33;;14134:6;14095:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14172:6;14156:12;;:22;;;;;;;:::i;:::-;;;;;;;;14195:37;14201:10;14213:18;14224:6;14213;:10;;:18;;;;:::i;:::-;14195:5;:37::i;:::-;13951:351;;;14265:25;14271:10;14283:6;14265:5;:25::i;:::-;13951:351;14329:6;14314:11;;:21;;;;;;;:::i;:::-;;;;;;;;14355:7;:19;14363:10;14355:19;;;;;;;;;;;;;;;;14348:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13553:829;;;13525: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;16049: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;:::-;;;;;;;;;16135:5:::1;16118:14;;:22;;;;;;;;;;;;;;;;;;16049:99:::0;:::o;10054:116::-;10113:16;;;;;;;;;;;10105:34;;:57;10140:21;10105:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10054:116::o;12887:555::-;2531:14;;;;;;;;;;;2523:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;12949:21:::1;12959:10;12949:9;:21::i;:::-;12941:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;13032:9;;13015:13;:11;:13::i;:::-;:26;;13007:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;13104:14;13121:22;13132:10;13121;:22::i;:::-;13104:39;;13156:13;:25;13170:10;13156:25;;;;;;;;;;;;;;;:31;;13193:15;13156:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13220:13;:25;13234:10;13220:25;;;;;;;;;;;;;;;:33;;13259:6;13220:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13293:6;13277:12;;:22;;;;;;;:::i;:::-;;;;;;;;13312:25;13318:10;13330:6;13312:5;:25::i;:::-;13378:15;13350:7;:19;13358:10;13350:19;;;;;;;;;;;;;;;:25;;:43;;;;13433:1;13404:7;:19;13412:10;13404:19;;;;;;;;;;;;;;;:26;;:30;;;;12930:512;12887:555::o:0;5718:127::-;5785:4;5809:19;:28;5829:7;5809:28;;;;;;;;;;;;;;;;;;;;;;;;;5802:35;;5718:127;;;:::o;977:18::-;;;;:::o;10915:131::-;10978:19;;:::i;:::-;11017:13;:21;11031:6;11017:21;;;;;;;;;;;;;;;11010:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10915:131;;;:::o;1045:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10514:132::-;10574:4;10628:10;10598:40;;:7;:19;10606:10;10598:19;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:40;;;10591:47;;10514: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;5220:404::-;5307: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;:::-;;;;;;;;;5367:6:::1;5363:1;5347:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;5331:12;:42;;5323:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;5488:4;5484:1;5468:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;5452:12;:40;;5444:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;5584:12;5562:19;:34;;;;5613:4;5606:11;;5220: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;12132:670:10:-;2531:14;;;;;;;;;;;2523:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;12230:9:::1;;12213:13;:11;:13::i;:::-;:26;;12205:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;12353:21;12363:10;12353:9;:21::i;:::-;12349:330;;;12421:23;12433:10;12421:11;:23::i;:::-;12391:7;:19;12399:10;12391:19;;;;;;;;;;;;;;;:26;;;:53;;;;;;;:::i;:::-;;;;;;;;12489:11;12459:7;:19;12467:10;12459:19;;;;;;;;;;;;;;;:26;;;:41;;;;;;;:::i;:::-;;;;;;;;12543:15;12515:7;:19;12523:10;12515:19;;;;;;;;;;;;;;;:25;;:43;;;;12349:330;;;12613:54;;;;;;;;12620:10;12613:54;;;;;;12632:15;12613:54;;;;12649:11;12613:54;;;;12662:1;12613:54;;;;12665:1;12613:54;;::::0;12591:7:::1;:19;12599:10;12591:19;;;;;;;;;;;;;;;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12349:330;12706:11;12691;;:26;;;;;;;:::i;:::-;;;;;;;;12728:30;12734:10;12746:11;12728:5;:30::i;:::-;12776:18;12782:11;12776:18;;;;;;:::i;:::-;;;;;;;;12132: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;10718:114:10:-;10775:7;10802;:15;10810:6;10802:15;;;;;;;;;;;;;;;:22;;;10795:29;;10718:114;;;:::o;15243:212::-;15290:14;15307:20;:18;:20::i;:::-;15290:37;;15391:4;15340:18;:30;15359:10;15340:30;;;;;;;;;;;;;;;:48;15371:13;15385:1;15371:16;;;;;;;;:::i;:::-;;;;;;;;;;15340:48;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;15441:6;15408:7;:19;15416:10;15408:19;;;;;;;;;;;;;;;:29;;;:39;;;;;;;:::i;:::-;;;;;;;;15279:176;15243:212::o;3710: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;:::-;;;;;;;;;3828:8:::1;3797:19;:28;3817:7;3797:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;3710:134:::0;;:::o;1963:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4933: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;:::-;;;;;;;;;5030:9:::1;5011:16;;:28;;;;;;;;;;;;;;;;;;4933:114:::0;:::o;4191:205::-;473:12:8;:10;:12::i;:::-;462:23;;:7;:5;:7::i;:::-;:23;;;454:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4281:6:10::1;4276:113;4297:12;:19;4293:1;:23;4276:113;;;4372:5;4338:14;:31;4353:12;4366:1;4353:15;;;;;;;;:::i;:::-;;;;;;;;4338:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;4318:3;;;;;:::i;:::-;;;;4276:113;;;;4191:205:::0;:::o;11118:310::-;11175:7;11195:23;11221:19;11233:6;11221:11;:19::i;:::-;11195:45;;11251:24;11278:7;:19;11286:10;11278:19;;;;;;;;;;;;;;;:26;;;11251:53;;11340:1;11321:16;:20;11317:70;;;11350:37;11370:16;11350:15;:19;;:37;;;;:::i;:::-;11343:44;;;;;;11317:70;11405:15;11398:22;;;;11118: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;10263: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;:::-;;;;;;;;;10316:43:::1;10334:24;10352:4;10334:9;:24::i;:::-;10316:17;:43::i;:::-;10263: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;14589:593:10:-;14641:7;14669:21;14679:10;14669:9;:21::i;:::-;14661:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;14736:18;:30;14755:10;14736:30;;;;;;;;;;;;;;;:48;14767:13;14781:1;14767:16;;;;;;;;:::i;:::-;;;;;;;;;;14736:48;;;;;;;;;;;;;;;;;;;;;14735:49;14727:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;14876:13;14890:1;14876:16;;;;;;;;:::i;:::-;;;;;;;;;;14848:7;:19;14856:10;14848:19;;;;;;;;;;;;;;;:25;;;:44;14840:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;14961:14;14978:7;:19;14986:10;14978:19;;;;;;;;;;;;;;;:26;;;14961:43;;15015:13;15031;15045:1;15031:16;;;;;;;;:::i;:::-;;;;;;;;;;15015:32;;15058:9;15088:5;15080:4;15071:6;:13;;;;:::i;:::-;15070:23;;;;:::i;:::-;15058:35;;15104:14;15144:4;15140:1;15121:13;15135:1;15121:16;;;;;;;;:::i;:::-;;;;;;;;;;:20;;;;:::i;:::-;:27;;;;:::i;:::-;15104:44;;15168:6;15161:13;;;;;;14589: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;5853:1800:10:-;6001:1;5985:18;;:4;:18;;;;5977:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6078:1;6064:16;;:2;:16;;;;6056:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;6140:14;:20;6155:4;6140:20;;;;;;;;;;;;;;;;;;;;;;;;;6139:21;6131:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;6244:1;6234:6;:11;6230:93;;;6262:28;6278:4;6284:2;6288:1;6262:15;:28::i;:::-;6305:7;;6230:93;6337:28;6368:24;6386:4;6368:9;:24::i;:::-;6337:55;;6403:12;6442:19;;6418:20;:43;;6403:58;;6490:7;:34;;;;;6515:9;;;;;;;;;;;6514:10;6490:34;:84;;;;;6542:26;:32;6569:4;6542:32;;;;;;;;;;;;;;;;;;;;;;;;;6541:33;6490:84;:127;;;;;6592:19;:25;6612:4;6592:25;;;;;;;;;;;;;;;;;;;;;;;;;6591:26;6490:127;:168;;;;;6635:19;:23;6655:2;6635:23;;;;;;;;;;;;;;;;;;;;;;;;;6634:24;6490:168;6472:298;;;6697:4;6685:9;;:16;;;;;;;;;;;;;;;;;;6716:10;:8;:10::i;:::-;6753:5;6741:9;;:17;;;;;;;;;;;;;;;;;;6472:298;6782:12;6798:9;;;;;;;;;;;6797:10;6782:25;;6928:19;:25;6948:4;6928:25;;;;;;;;;;;;;;;;;;;;;;;;;:66;;;;6971:19;:23;6991:2;6971:23;;;;;;;;;;;;;;;;;;;;;;;;;6928:66;:154;;;;7014:26;:32;7041:4;7014:32;;;;;;;;;;;;;;;;;;;;;;;;;7013:33;:68;;;;;7051:26;:30;7078:2;7051:30;;;;;;;;;;;;;;;;;;;;;;;;;7050:31;7013:68;6928:154;6910:199;;;7104:5;7094:15;;6910:199;7130:12;7161:7;7157:443;;;7192:30;7218:3;7192:21;7203:9;;7192:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;7185:37;;7283:9;;7267:13;;7260:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;7237:19;;:55;;;;;;;:::i;:::-;;;;;;;;7353:9;;7337:13;;7330:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;7307:19;;:55;;;;;;;:::i;:::-;;;;;;;;7423:9;;7407:13;;7400:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;7377:19;;:55;;;;;;;:::i;:::-;;;;;;;;7472:1;7465:4;:8;7461:91;;;7494:42;7510:4;7524;7531;7494:15;:42::i;:::-;7461:91;7584:4;7574:14;;;;;:::i;:::-;;;7157:443;7612:33;7628:4;7634:2;7638:6;7612:15;:33::i;:::-;5966:1687;;;;5853: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;11436:632:10:-;11495:7;11523:17;11533:6;11523:9;:17::i;:::-;11515:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;11578:14;11595:18;11606:6;11595:10;:18::i;:::-;11578:35;;11624:29;11656:36;11682:9;11656:7;:15;11664:6;11656:15;;;;;;;;;;;;;;;:21;;;:25;;:36;;;;:::i;:::-;11624:68;;11703:31;11737:30;11757:9;11737:15;:19;;:30;;;;:::i;:::-;11703:64;;11778:21;11802:50;11830:21;11802:23;:27;;:50;;;;:::i;:::-;11778:74;;11865:12;11880:24;11900:3;11880:15;11891:3;;11880:6;:10;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;11865:39;;11915:20;11938:37;11972:2;11938:29;11964:2;11938:21;11956:2;11938:13;11947:3;11938:4;:8;;:13;;;;:::i;:::-;:17;;:21;;;;:::i;:::-;:25;;:29;;;;:::i;:::-;:33;;:37;;;;:::i;:::-;11915:60;;11986:14;12003:31;12020:13;12003:12;:16;;:31;;;;:::i;:::-;11986:48;;12054:6;12047:13;;;;;;;;;11436: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;7661:477:10:-;7729:21;7767:1;7753:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7729:40;;7798:4;7780;7785:1;7780:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;7824:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7814:4;7819:1;7814:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;7859:62;7876:4;7891:15;;;;;;;;;;;7909:11;7859:8;:62::i;:::-;7934:15;;;;;;;;;;;:66;;;8015:11;8041:1;8057:4;8084;8104:15;7934:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7718:420;7661: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;8527:1439:10:-;8567:23;8593:24;8611:4;8593:9;:24::i;:::-;8567:50;;8628:25;8700:19;;8678;;8656;;:41;;;;:::i;:::-;:63;;;;:::i;:::-;8628:91;;8763:1;8744:15;:20;:46;;;;8789:1;8768:17;:22;8744:46;8740:59;;;8792:7;;;;8740:59;8831:19;;8813:15;:37;8809:80;;;8870:19;;8852:37;;8809:80;8969:23;9055:1;9035:17;9013:19;;8995:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;8969:87;;9067:26;9096:36;9116:15;9096;:19;;:36;;;;:::i;:::-;9067:65;;9153:25;9181:21;9153:49;;9215:37;9233:18;9215:17;:37::i;:::-;9273:18;9294:44;9320:17;9294:21;:25;;:44;;;;:::i;:::-;9273:65;;9349:23;9375:58;9415:17;9375:35;9390:19;;9375:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;9349:84;;9444:23;9470:58;9510:17;9470:35;9485:19;;9470:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;9444:84;;9539:23;9596:15;9578;9565:10;:28;;;;:::i;:::-;:46;;;;:::i;:::-;9539:72;;9654:1;9632:19;:23;;;;9688:1;9666:19;:23;;;;9722:1;9700:19;:23;;;;9744:16;;;;;;;;;;;9736:34;;:72;9771:36;9791:15;9771;:19;;:36;;;;:::i;:::-;9736:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9859:1;9841:15;:19;:42;;;;;9882:1;9864:15;:19;9841:42;9837:122;;;9900:47;9914:15;9931;9900:13;:47::i;:::-;9837:122;8556:1410;;;;;;;;;8527: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;8146:373:10:-;8229:62;8246:4;8261:15;;;;;;;;;;;8279:11;8229:8;:62::i;:::-;8304:15;;;;;;;;;;;:31;;;8343:9;8376:4;8396:11;8422:1;8438;8454:16;;;;;;;;;;;8485:15;8304:207;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;8146: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://c560371d1cc2a0d7793e9c980b2f4d02ebf589267c6e1bb92ab8ba6b06cf1d2f
Loading...
Loading
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.