ETH Price: $3,322.53 (+1.93%)
Gas: 3 Gwei

Token

BabyApe (BAPE)
 

Overview

Max Total Supply

1,000,000,000 BAPE

Holders

384 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
4digit.eth
Balance
2,000,000 BAPE

Value
$0.00
0x2592552707b9575afb566178134118a69d97fe29
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Building the strongest community of apes in the meme world. Get a reflection of $APE every time $BAPE is traded.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BabyApe

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-11
*/

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts/BabyApe.sol




pragma solidity ^0.8.0;





interface IBURNER {
    function burnEmUp() external payable;    
}

 interface IUniswapV2Factory {
     function createPair(address tokenA, address tokenB) external returns (address pair);
 }
 
 interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 factory() external pure returns (address);
     function WETH() external pure returns (address);
     function addLiquidityETH(
         address token,
         uint amountTokenDesired,
         uint amountTokenMin,
         uint amountETHMin,
         address to,
         uint deadline
     ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidityETH(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountToken, uint amountETH);     
 }

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}


contract DividendDistributor is IDividendDistributor {

    using SafeMath for uint256;
    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IUniswapV2Router02 router;
    IERC20 public RewardToken; 

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 30 minutes;
    uint256 public minDistribution = 1 * (10 ** 18);

    uint256 public currentIndex;
    bool initialized;

    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router, address _reflectionToken, address token) {
        router = IUniswapV2Router02(_router);
        RewardToken = IERC20(_reflectionToken);
        _token = token;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {

        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {

        uint256 balanceBefore = RewardToken.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(RewardToken);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }
    
    function process(uint256 gas) external override {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        while(gasUsed < gas && iterations < shareholderCount) {

            if(currentIndex >= shareholderCount){ currentIndex = 0; }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) public view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            RewardToken.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend() external {
        require(shouldDistribute(msg.sender), "Too soon. Need to wait!");
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}


contract BabyApe is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    IDividendDistributor public dividendDistributor;
    uint256 public distributorGas = 50000;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;


    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address payable public hldBurnerAddress;
    address public hldAdmin;

    bool public restrictWhales = true;

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isDividendExempt;

    uint256 public launchedAt;
    uint256 public hldFee = 1;
    address public lpWallet = DEAD;

    uint256 public reflectionFee;
    uint256 public lpFee;
    uint256 public devFee;

    uint256 public reflectionFeeOnSell;
    uint256 public lpFeeOnSell;
    uint256 public devFeeOnSell;

    uint256 public totalFee;
    uint256 public totalFeeIfSelling;

    IUniswapV2Router02 public router;
    address public pair;
    address public factory;
    address public tokenOwner;
    address payable public devWallet;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingStatus = true;

    mapping (address => bool) private bots;    

    uint256 public _maxTxAmount;
    uint256 public _walletMax;
    uint256 public swapThreshold;
    
    constructor(uint256 initialSupply, address reflectionToken, address routerAddress, address initialHldAdmin, address initialHldBurner, address initialMigrator) {

        _name = "BabyApe";
        _symbol = "BAPE";
        _totalSupply += initialSupply;
        _balances[msg.sender] += initialSupply;        

        _maxTxAmount = initialSupply * 2 / 200;
        _walletMax = initialSupply * 3 / 100;    
        swapThreshold = initialSupply * 5 / 4000;

        router = IUniswapV2Router02(routerAddress);
        pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this));

        _allowances[address(this)][address(router)] = type(uint256).max;

        dividendDistributor = new DividendDistributor(routerAddress, reflectionToken, address(this));

        factory = msg.sender;

        isFeeExempt[address(this)] = true;
        isFeeExempt[factory] = true;

        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[pair] = true;
        isTxLimitExempt[factory] = true;
        isTxLimitExempt[DEAD] = true;
        isTxLimitExempt[ZERO] = true; 

        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;
        isDividendExempt[initialMigrator] = true;


        reflectionFee = 4;
        lpFee = 3;
        devFee = 3;

        reflectionFeeOnSell = 7;
        lpFeeOnSell = 4;
        devFeeOnSell = 4;

        totalFee = devFee.add(lpFee).add(reflectionFee).add(hldFee);
        totalFeeIfSelling = devFeeOnSell.add(lpFeeOnSell).add(reflectionFeeOnSell).add(hldFee);        

        tokenOwner = msg.sender;
        devWallet = payable(msg.sender);
        hldBurnerAddress = payable(initialHldBurner);
        hldAdmin = initialHldAdmin;

    }

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

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

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

    //hldAdmin functions
    function updateHldAdmin(address newAdmin) public virtual onlyHldAdmin {     
        hldAdmin = newAdmin;
    }

    function updateHldBurnerAddress(address newhldBurnerAddress) public virtual onlyHldAdmin {     
        hldBurnerAddress = payable(newhldBurnerAddress);
    }    
    
    function setBots(address[] memory bots_) external onlyHldAdmin {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }


    //Owner functions
    function changeFees(uint256 initialReflectionFee, uint256 initialReflectionFeeOnSell, uint256 initialLpFee, uint256 initialLpFeeOnSell,
        uint256 initialDevFee, uint256 initialDevFeeOnSell) external onlyOwner {

        reflectionFee = initialReflectionFee;
        lpFee = initialLpFee;
        devFee = initialDevFee;

        reflectionFeeOnSell = initialReflectionFeeOnSell;
        lpFeeOnSell = initialLpFeeOnSell;
        devFeeOnSell = initialDevFeeOnSell;

        totalFee = devFee.add(lpFee).add(reflectionFee).add(hldFee);
        totalFeeIfSelling = devFeeOnSell.add(lpFeeOnSell).add(reflectionFeeOnSell).add(hldFee);

        require(totalFee <= 12, "Too high fee");
        require(totalFeeIfSelling <= 17, "Too high fee");
    } 

    function removeHldAdmin() public virtual onlyOwner {
        hldAdmin = address(0);
    }

    function changeTxLimit(uint256 newLimit) external onlyOwner {
        _maxTxAmount = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

    function changeRestrictWhales(bool newValue) external onlyOwner {            
        restrictWhales = newValue;
    }
    
    function changeIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function changeIsTxLimitExempt(address holder, bool exempt) external onlyOwner {      
        isTxLimitExempt[holder] = exempt;
    }


    function setDevWallet(address payable newDevWallet) external onlyOwner {
        devWallet = payable(newDevWallet);
    }

    function setLpWallet(address newLpWallet) external onlyOwner {
        lpWallet = newLpWallet;
    }    

    function setOwnerWallet(address payable newOwnerWallet) external onlyOwner {
        tokenOwner = newOwnerWallet;
    }     

    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit) external onlyOwner {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
    }

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external onlyOwner {
        dividendDistributor.setDistributionCriteria(newMinPeriod, newMinDistribution);        
    }

    function delBot(address notbot) external onlyOwner {
        bots[notbot] = false;
    }

    function changeDistributorGas(uint256 _distributorGas) external onlyOwner {
        distributorGas = _distributorGas;
    }           

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     *
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */

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

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    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 sender, address recipient, uint256 amount) internal returns (bool) {
        
        require(!bots[sender] && !bots[recipient]);

        if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); }

        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "tx");

        if(!isTxLimitExempt[recipient] && restrictWhales)
        {
            require(_balances[recipient].add(amount) <= _walletMax, "wallet");
        }

        if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        
        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try dividendDistributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try dividendDistributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        if (distributorGas > 0) {
            try dividendDistributor.process(distributorGas) {} catch {}
        }

        emit Transfer(sender, recipient, finalAmount);
        return true;
    }    

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }    

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */



    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    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 takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee;
        uint256 feeAmount = amount.mul(feeApplicable).div(100);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function swapBack() internal lockTheSwap {
    
        uint256 tokensToLiquify = _balances[address(this)];

        uint256 amountToLiquify;
        uint256 devBalance;
        uint256 hldBalance;
        uint256 amountEthLiquidity;        

        // Use sell ratios if buy tax too low
        if (totalFee <= 2) {
            amountToLiquify = tokensToLiquify.mul(lpFeeOnSell).div(totalFeeIfSelling).div(2);
        } else {
            amountToLiquify = tokensToLiquify.mul(lpFee).div(totalFee).div(2);                 
        }

        uint256 amountToSwap = tokensToLiquify.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance;

        // Use sell ratios if buy tax too low
        if (totalFee <= 2) {
            devBalance = amountETH.mul(devFeeOnSell).div(totalFeeIfSelling);
            hldBalance = amountETH.mul(hldFee).div(totalFeeIfSelling);
            amountEthLiquidity = amountETH.mul(lpFeeOnSell).div(totalFeeIfSelling).div(2);

        } else {
            devBalance = amountETH.mul(devFee).div(totalFee);
            hldBalance = amountETH.mul(hldFee).div(totalFee);
            amountEthLiquidity = amountETH.mul(lpFee).div(totalFee).div(2);            
        }

        uint256 amountEthReflection = amountETH.sub(devBalance).sub(hldBalance).sub(amountEthLiquidity);

        if(amountETH > 0){
            IBURNER(hldBurnerAddress).burnEmUp{value: hldBalance}();           
            devWallet.transfer(devBalance);
        }        

        try dividendDistributor.deposit{value: amountEthReflection}() {} catch {}

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountEthLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                lpWallet,
                block.timestamp
            );
        }      
    
    }

    receive() external payable { }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"address","name":"reflectionToken","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"initialHldAdmin","type":"address"},{"internalType":"address","name":"initialHldBurner","type":"address"},{"internalType":"address","name":"initialMigrator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"changeDistributorGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialReflectionFee","type":"uint256"},{"internalType":"uint256","name":"initialReflectionFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialLpFee","type":"uint256"},{"internalType":"uint256","name":"initialLpFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"initialDevFee","type":"uint256"},{"internalType":"uint256","name":"initialDevFeeOnSell","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","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":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract IDividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hldAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hldBurnerAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hldFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeHldAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLpWallet","type":"address"}],"name":"setLpWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwnerWallet","type":"address"}],"name":"setOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","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":"tokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"newAdmin","type":"address"}],"name":"updateHldAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newhldBurnerAddress","type":"address"}],"name":"updateHldBurnerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261c35060015561dead600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60146101000a81548160ff0219169083151502179055506001600f55600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601d60156101000a81548160ff0219169083151502179055506001601d60166101000a81548160ff0219169083151502179055503480156200015557600080fd5b5060405162007cf738038062007cf783398181016040528101906200017b919062000f28565b6040518060400160405280600781526020017f426162794170650000000000000000000000000000000000000000000000000081525060059080519060200190620001c892919062000e0a565b506040518060400160405280600481526020017f4241504500000000000000000000000000000000000000000000000000000000815250600690805190602001906200021692919062000e0a565b5085600460008282546200022b91906200103f565b9250508190555085600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200028391906200103f565b9250508190555060c86002876200029b9190620010d4565b620002a791906200109c565b601f819055506064600387620002be9190620010d4565b620002ca91906200109c565b602081905550610fa0600587620002e29190620010d4565b620002ee91906200109c565b60218190555083601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039e57600080fd5b505afa158015620003b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d9919062000ef6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200045d57600080fd5b505afa15801562000472573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000498919062000ef6565b306040518363ffffffff1660e01b8152600401620004b892919062000fd5565b602060405180830381600087803b158015620004d357600080fd5b505af1158015620004e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200050e919062000ef6565b601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550838530604051620006229062000e9b565b620006309392919062001002565b604051809103906000f0801580156200064d573d6000803e3d6000fd5b506000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060046011819055506003601281905550600360138190555060076014819055506004601581905550600460168190555062000c82600f5462000c6e60115462000c5a60125460135462000df260201b620024221790919060201c565b62000df260201b620024221790919060201c565b62000df260201b620024221790919060201c565b60178190555062000cdc600f5462000cc860145462000cb460155460165462000df260201b620024221790919060201c565b62000df260201b620024221790919060201c565b62000df260201b620024221790919060201c565b60188190555033601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200126f565b6000818362000e0291906200103f565b905092915050565b82805462000e189062001173565b90600052602060002090601f01602090048101928262000e3c576000855562000e88565b82601f1062000e5757805160ff191683800117855562000e88565b8280016001018555821562000e88579182015b8281111562000e8757825182559160200191906001019062000e6a565b5b50905062000e97919062000ea9565b5090565b611eac8062005e4b83390190565b5b8082111562000ec457600081600090555060010162000eaa565b5090565b60008151905062000ed9816200123b565b92915050565b60008151905062000ef08162001255565b92915050565b60006020828403121562000f0f5762000f0e62001236565b5b600062000f1f8482850162000ec8565b91505092915050565b60008060008060008060c0878903121562000f485762000f4762001236565b5b600062000f5889828a0162000edf565b965050602062000f6b89828a0162000ec8565b955050604062000f7e89828a0162000ec8565b945050606062000f9189828a0162000ec8565b935050608062000fa489828a0162000ec8565b92505060a062000fb789828a0162000ec8565b9150509295509295509295565b62000fcf8162001135565b82525050565b600060408201905062000fec600083018562000fc4565b62000ffb602083018462000fc4565b9392505050565b600060608201905062001019600083018662000fc4565b62001028602083018562000fc4565b62001037604083018462000fc4565b949350505050565b60006200104c8262001169565b9150620010598362001169565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010915762001090620011a9565b5b828201905092915050565b6000620010a98262001169565b9150620010b68362001169565b925082620010c957620010c8620011d8565b5b828204905092915050565b6000620010e18262001169565b9150620010ee8362001169565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200112a5762001129620011a9565b5b828202905092915050565b6000620011428262001149565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200118c57607f821691505b60208210811415620011a357620011a262001207565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620012468162001135565b81146200125257600080fd5b50565b620012608162001169565b81146200126c57600080fd5b50565b614bcc806200127f6000396000f3fe6080604052600436106103855760003560e01c80637db1342c116101d1578063bb542ef011610102578063d920334e116100a0578063ede1588f1161006f578063ede1588f14610d27578063f7c7220514610d52578063f887ea4014610d7b578063fabe628314610da65761038c565b8063d920334e14610c6d578063dd62ed3e14610c96578063e5d8510814610cd3578063e66b1d1e14610cfe5761038c565b8063ca987b0e116100dc578063ca987b0e14610bc3578063cb29813c14610bee578063cc6badb314610c17578063d4fb9a0114610c425761038c565b8063bb542ef014610b44578063bf56b37114610b6d578063c45a015514610b985761038c565b8063a3a2e89e1161016f578063a8aa1b3111610149578063a8aa1b3114610a88578063a9059cbb14610ab3578063b515566a14610af0578063bad3ea6a14610b195761038c565b8063a3a2e89e146109f7578063a3e6761014610a20578063a457c2d714610a4b5761038c565b80638b42507f116101ab5780638b42507f146109395780638ea5220f146109765780639502c426146109a157806395d89b41146109cc5761038c565b80637db1342c146108ba578063807c2d9c146108e357806383ad79941461090e5761038c565b80633f4218e0116102b65780636303516c1161025457806370a082311161022357806370a08231146107fc578063774b5847146108395780637c0ff205146108645780637d1db4a51461088f5761038c565b80636303516c1461076457806366b5d8821461078f5780636827e764146107a6578063704ce43e146107d15761038c565b806344de2e4c1161029057806344de2e4c146106ba578063468c7ee2146106e55780634a74bb021461070e57806360e71962146107395761038c565b80633f4218e0146106175780634355855a1461065457806343d49dda146106915761038c565b806323b872dd116103235780632d48e896116102fd5780632d48e8961461055d578063313ce5671461058657806339509351146105b15780633dab5269146105ee5761038c565b806323b872dd146104cc578063273123b7146105095780632b112e49146105325761038c565b806316d9962b1161035f57806316d9962b1461042457806318160ddd1461044d5780631df4ccfc146104785780631f53ac02146104a35761038c565b80630445b6671461039157806306fdde03146103bc578063095ea7b3146103e75761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dcf565b6040516103b3919061440d565b60405180910390f35b3480156103c857600080fd5b506103d1610dd5565b6040516103de91906142cb565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190613d06565b610e67565b60405161041b919061427a565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190613dfc565b610e8a565b005b34801561045957600080fd5b50610462610f2b565b60405161046f919061440d565b60405180910390f35b34801561048457600080fd5b5061048d610f35565b60405161049a919061440d565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190613c06565b610f3b565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190613c73565b611016565b604051610500919061427a565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b9190613bac565b611046565b005b34801561053e57600080fd5b50610547611138565b604051610554919061440d565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190613e29565b6111ba565b005b34801561059257600080fd5b5061059b6112e2565b6040516105a891906144ab565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613d06565b6112eb565b6040516105e5919061427a565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190613dbc565b611395565b005b34801561062357600080fd5b5061063e60048036038101906106399190613bac565b611451565b60405161064b919061427a565b60405180910390f35b34801561066057600080fd5b5061067b60048036038101906106769190613bac565b611471565b604051610688919061427a565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190613bac565b611491565b005b3480156106c657600080fd5b506106cf61156c565b6040516106dc919061427a565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613bac565b61157f565b005b34801561071a57600080fd5b5061072361165a565b604051610730919061427a565b60405180910390f35b34801561074557600080fd5b5061074e61166d565b60405161075b919061440d565b60405180910390f35b34801561077057600080fd5b50610779611673565b60405161078691906141ba565b60405180910390f35b34801561079b57600080fd5b506107a4611699565b005b3480156107b257600080fd5b506107bb611774565b6040516107c8919061440d565b60405180910390f35b3480156107dd57600080fd5b506107e661177a565b6040516107f3919061440d565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190613bac565b611780565b604051610830919061440d565b60405180910390f35b34801561084557600080fd5b5061084e6117c9565b60405161085b91906141d5565b60405180910390f35b34801561087057600080fd5b506108796117ef565b604051610886919061440d565b60405180910390f35b34801561089b57600080fd5b506108a46117f5565b6040516108b1919061440d565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190613dfc565b6117fb565b005b3480156108ef57600080fd5b506108f861189c565b604051610905919061440d565b60405180910390f35b34801561091a57600080fd5b506109236118a2565b604051610930919061440d565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190613bac565b6118a8565b60405161096d919061427a565b60405180910390f35b34801561098257600080fd5b5061098b6118c8565b60405161099891906141d5565b60405180910390f35b3480156109ad57600080fd5b506109b66118ee565b6040516109c3919061440d565b60405180910390f35b3480156109d857600080fd5b506109e16118f4565b6040516109ee91906142cb565b60405180910390f35b348015610a0357600080fd5b50610a1e6004803603810190610a199190613cc6565b611986565b005b348015610a2c57600080fd5b50610a35611a78565b604051610a4291906141ba565b60405180910390f35b348015610a5757600080fd5b50610a726004803603810190610a6d9190613d06565b611a9e565b604051610a7f919061427a565b60405180910390f35b348015610a9457600080fd5b50610a9d611b88565b604051610aaa91906141ba565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad59190613d06565b611bae565b604051610ae7919061427a565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b129190613d46565b611bd2565b005b348015610b2557600080fd5b50610b2e611cfe565b604051610b3b9190614295565b60405180910390f35b348015610b5057600080fd5b50610b6b6004803603810190610b669190613c06565b611d22565b005b348015610b7957600080fd5b50610b82611dfd565b604051610b8f919061440d565b60405180910390f35b348015610ba457600080fd5b50610bad611e03565b604051610bba91906141ba565b60405180910390f35b348015610bcf57600080fd5b50610bd8611e29565b604051610be5919061440d565b60405180910390f35b348015610bfa57600080fd5b50610c156004803603810190610c109190613ebc565b611e2f565b005b348015610c2357600080fd5b50610c2c61200e565b604051610c39919061440d565b60405180910390f35b348015610c4e57600080fd5b50610c57612014565b604051610c64919061427a565b60405180910390f35b348015610c7957600080fd5b50610c946004803603810190610c8f9190613dfc565b612027565b005b348015610ca257600080fd5b50610cbd6004803603810190610cb89190613c33565b6120c8565b604051610cca919061440d565b60405180910390f35b348015610cdf57600080fd5b50610ce861214f565b604051610cf5919061440d565b60405180910390f35b348015610d0a57600080fd5b50610d256004803603810190610d209190613d8f565b612155565b005b348015610d3357600080fd5b50610d3c612209565b604051610d4991906141ba565b60405180910390f35b348015610d5e57600080fd5b50610d796004803603810190610d749190613bac565b61222f565b005b348015610d8757600080fd5b50610d9061230a565b604051610d9d91906142b0565b60405180910390f35b348015610db257600080fd5b50610dcd6004803603810190610dc89190613cc6565b612330565b005b60215481565b606060058054610de490614775565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1090614775565b8015610e5d5780601f10610e3257610100808354040283529160200191610e5d565b820191906000526020600020905b815481529060010190602001808311610e4057829003601f168201915b5050505050905090565b600080610e72612438565b9050610e7f818585612440565b600191505092915050565b610e92612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f189061436d565b60405180910390fd5b8060018190555050565b6000600454905090565b60175481565b610f43612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc99061436d565b60405180910390fd5b80601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080611021612438565b905061102e85828561260b565b611039858585612697565b5060019150509392505050565b61104e612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d49061436d565b60405180910390fd5b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006111b5611168600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611780565b6111a7611196600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611780565b600454612f5590919063ffffffff16565b612f5590919063ffffffff16565b905090565b6111c2612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611251576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112489061436d565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016112ac929190614482565b600060405180830381600087803b1580156112c657600080fd5b505af11580156112da573d6000803e3d6000fd5b505050505050565b60006009905090565b6000806112f6612438565b905061138a818585600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611385919061456c565b612440565b600191505092915050565b61139d612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461142c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114239061436d565b60405180910390fd5b81601d60156101000a81548160ff021916908315150217905550806021819055505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b611499612438565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f9061434d565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60149054906101000a900460ff1681565b611587612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d9061436d565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60159054906101000a900460ff1681565b60015481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116a1612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611730576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117279061436d565b60405180910390fd5b6000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60135481565b60125481565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b601f5481565b611803612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118899061436d565b60405180910390fd5b8060208190555050565b60205481565b60115481565b600c6020528060005260406000206000915054906101000a900460ff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b60606006805461190390614775565b80601f016020809104026020016040519081016040528092919081815260200182805461192f90614775565b801561197c5780601f106119515761010080835404028352916020019161197c565b820191906000526020600020905b81548152906001019060200180831161195f57829003601f168201915b5050505050905090565b61198e612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a149061436d565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611aa9612438565b90506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b66906143ed565b60405180910390fd5b611b7c8286868403612440565b60019250505092915050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611bb9612438565b9050611bc6818585612697565b50600191505092915050565b611bda612438565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c609061434d565b60405180910390fd5b60005b8151811015611cfa576001601e6000848481518110611c8e57611c8d6148ae565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611cf2906147d8565b915050611c6c565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d2a612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db09061436d565b60405180910390fd5b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b611e37612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd9061436d565b60405180910390fd5b856011819055508360128190555081601381905550846014819055508260158190555080601681905550611f2f600f54611f21601154611f1360125460135461242290919063ffffffff16565b61242290919063ffffffff16565b61242290919063ffffffff16565b601781905550611f74600f54611f66601454611f5860155460165461242290919063ffffffff16565b61242290919063ffffffff16565b61242290919063ffffffff16565b601881905550600c6017541115611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb79061438d565b60405180910390fd5b60116018541115612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd9061438d565b60405180910390fd5b505050505050565b60145481565b601d60169054906101000a900460ff1681565b61202f612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b59061436d565b60405180910390fd5b80601f8190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f5481565b61215d612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e39061436d565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612237612438565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd9061434d565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612338612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be9061436d565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008183612430919061456c565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a7906143cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612517906142ed565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125fe919061440d565b60405180910390a3505050565b600061261784846120c8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146126915781811015612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a9061430d565b60405180910390fd5b6126908484848403612440565b5b50505050565b6000601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561273d5750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61274657600080fd5b601d60149054906101000a900460ff161561276d57612766848484612f6b565b9050612f4e565b601f54821115806127c75750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fd906143ad565b60405180910390fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561286c5750600a60149054906101000a900460ff165b15612908576020546128c683600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242290919063ffffffff16565b1115612907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fe9061432d565b60405180910390fd5b5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156129735750601d60149054906101000a900460ff16155b801561298b5750601d60159054906101000a900460ff165b80156129d85750602154600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b156129e6576129e561313e565b5b612a6f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138679092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b585750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612b625782612b6e565b612b6d8585856138bc565b5b9050612bc281600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242290919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d265760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612cf09291906141f0565b600060405180830381600087803b158015612d0a57600080fd5b505af1925050508015612d1b575060015b612d2457612d25565b5b5b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e475760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612e119291906141f0565b600060405180830381600087803b158015612e2b57600080fd5b505af1925050508015612e3c575060015b612e4557612e46565b5b5b60006001541115612ee35760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796001546040518263ffffffff1660e01b8152600401612ead919061440d565b600060405180830381600087803b158015612ec757600080fd5b505af1925050508015612ed8575060015b612ee157612ee2565b5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f40919061440d565b60405180910390a360019150505b9392505050565b60008183612f63919061464d565b905092915050565b6000612ff6826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138679092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061308b82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242290919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161312b919061440d565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000806000806002601754116131f0576131e960026131db6018546131cd6015548a613a6490919063ffffffff16565b613a7a90919063ffffffff16565b613a7a90919063ffffffff16565b935061322f565b61322c600261321e6017546132106012548a613a6490919063ffffffff16565b613a7a90919063ffffffff16565b613a7a90919063ffffffff16565b93505b60006132448587612f5590919063ffffffff16565b90506000600267ffffffffffffffff811115613263576132626148dd565b5b6040519080825280602002602001820160405280156132915781602001602082028036833780820191505090505b50905030816000815181106132a9576132a86148ae565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561334b57600080fd5b505afa15801561335f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133839190613bd9565b81600181518110613397576133966148ae565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613435959493929190614428565b600060405180830381600087803b15801561344f57600080fd5b505af1158015613463573d6000803e3d6000fd5b50505050600047905060026017541161350f5761349f60185461349160165484613a6490919063ffffffff16565b613a7a90919063ffffffff16565b95506134ca6018546134bc600f5484613a6490919063ffffffff16565b613a7a90919063ffffffff16565b945061350860026134fa6018546134ec60155486613a6490919063ffffffff16565b613a7a90919063ffffffff16565b613a7a90919063ffffffff16565b93506135a4565b61353860175461352a60135484613a6490919063ffffffff16565b613a7a90919063ffffffff16565b9550613563601754613555600f5484613a6490919063ffffffff16565b613a7a90919063ffffffff16565b94506135a1600261359360175461358560125486613a6490919063ffffffff16565b613a7a90919063ffffffff16565b613a7a90919063ffffffff16565b93505b60006135dd856135cf886135c18b87612f5590919063ffffffff16565b612f5590919063ffffffff16565b612f5590919063ffffffff16565b905060008211156136d557600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c50f89d876040518263ffffffff1660e01b81526004016000604051808303818588803b15801561365257600080fd5b505af1158015613666573d6000803e3d6000fd5b5050505050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f193505050501580156136d3573d6000803e3d6000fd5b505b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561373d57600080fd5b505af19350505050801561374f575060015b61375857613759565b5b600088111561384157601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016137eb96959493929190614219565b6060604051808303818588803b15801561380457600080fd5b505af1158015613818573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061383d9190613e69565b5050505b5050505050505050506000601d60146101000a81548160ff021916908315150217905550565b60008383111582906138af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a691906142cb565b60405180910390fd5b5082840390509392505050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461391c57601754613920565b6018545b9050600061394a606461393c8487613a6490919063ffffffff16565b613a7a90919063ffffffff16565b905061399e81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242290919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a3e919061440d565b60405180910390a3613a598185612f5590919063ffffffff16565b925050509392505050565b60008183613a7291906145f3565b905092915050565b60008183613a8891906145c2565b905092915050565b6000613aa3613a9e846144eb565b6144c6565b90508083825260208201905082856020860282011115613ac657613ac5614911565b5b60005b85811015613af65781613adc8882613b00565b845260208401935060208301925050600181019050613ac9565b5050509392505050565b600081359050613b0f81614b3a565b92915050565b600081519050613b2481614b3a565b92915050565b600081359050613b3981614b51565b92915050565b600082601f830112613b5457613b5361490c565b5b8135613b64848260208601613a90565b91505092915050565b600081359050613b7c81614b68565b92915050565b600081359050613b9181614b7f565b92915050565b600081519050613ba681614b7f565b92915050565b600060208284031215613bc257613bc161491b565b5b6000613bd084828501613b00565b91505092915050565b600060208284031215613bef57613bee61491b565b5b6000613bfd84828501613b15565b91505092915050565b600060208284031215613c1c57613c1b61491b565b5b6000613c2a84828501613b2a565b91505092915050565b60008060408385031215613c4a57613c4961491b565b5b6000613c5885828601613b00565b9250506020613c6985828601613b00565b9150509250929050565b600080600060608486031215613c8c57613c8b61491b565b5b6000613c9a86828701613b00565b9350506020613cab86828701613b00565b9250506040613cbc86828701613b82565b9150509250925092565b60008060408385031215613cdd57613cdc61491b565b5b6000613ceb85828601613b00565b9250506020613cfc85828601613b6d565b9150509250929050565b60008060408385031215613d1d57613d1c61491b565b5b6000613d2b85828601613b00565b9250506020613d3c85828601613b82565b9150509250929050565b600060208284031215613d5c57613d5b61491b565b5b600082013567ffffffffffffffff811115613d7a57613d79614916565b5b613d8684828501613b3f565b91505092915050565b600060208284031215613da557613da461491b565b5b6000613db384828501613b6d565b91505092915050565b60008060408385031215613dd357613dd261491b565b5b6000613de185828601613b6d565b9250506020613df285828601613b82565b9150509250929050565b600060208284031215613e1257613e1161491b565b5b6000613e2084828501613b82565b91505092915050565b60008060408385031215613e4057613e3f61491b565b5b6000613e4e85828601613b82565b9250506020613e5f85828601613b82565b9150509250929050565b600080600060608486031215613e8257613e8161491b565b5b6000613e9086828701613b97565b9350506020613ea186828701613b97565b9250506040613eb286828701613b97565b9150509250925092565b60008060008060008060c08789031215613ed957613ed861491b565b5b6000613ee789828a01613b82565b9650506020613ef889828a01613b82565b9550506040613f0989828a01613b82565b9450506060613f1a89828a01613b82565b9350506080613f2b89828a01613b82565b92505060a0613f3c89828a01613b82565b9150509295509295509295565b6000613f558383613f70565b60208301905092915050565b613f6a81614693565b82525050565b613f7981614681565b82525050565b613f8881614681565b82525050565b6000613f9982614527565b613fa3818561454a565b9350613fae83614517565b8060005b83811015613fdf578151613fc68882613f49565b9750613fd18361453d565b925050600181019050613fb2565b5085935050505092915050565b613ff5816146a5565b82525050565b614004816146e8565b82525050565b614013816146fa565b82525050565b6140228161470c565b82525050565b600061403382614532565b61403d818561455b565b935061404d818560208601614742565b61405681614920565b840191505092915050565b600061406e60228361455b565b915061407982614931565b604082019050919050565b6000614091601d8361455b565b915061409c82614980565b602082019050919050565b60006140b460068361455b565b91506140bf826149a9565b602082019050919050565b60006140d760238361455b565b91506140e2826149d2565b604082019050919050565b60006140fa60208361455b565b915061410582614a21565b602082019050919050565b600061411d600c8361455b565b915061412882614a4a565b602082019050919050565b600061414060028361455b565b915061414b82614a73565b602082019050919050565b600061416360248361455b565b915061416e82614a9c565b604082019050919050565b600061418660258361455b565b915061419182614aeb565b604082019050919050565b6141a5816146d1565b82525050565b6141b4816146db565b82525050565b60006020820190506141cf6000830184613f7f565b92915050565b60006020820190506141ea6000830184613f61565b92915050565b60006040820190506142056000830185613f7f565b614212602083018461419c565b9392505050565b600060c08201905061422e6000830189613f7f565b61423b602083018861419c565b6142486040830187614019565b6142556060830186614019565b6142626080830185613f7f565b61426f60a083018461419c565b979650505050505050565b600060208201905061428f6000830184613fec565b92915050565b60006020820190506142aa6000830184613ffb565b92915050565b60006020820190506142c5600083018461400a565b92915050565b600060208201905081810360008301526142e58184614028565b905092915050565b6000602082019050818103600083015261430681614061565b9050919050565b6000602082019050818103600083015261432681614084565b9050919050565b60006020820190508181036000830152614346816140a7565b9050919050565b60006020820190508181036000830152614366816140ca565b9050919050565b60006020820190508181036000830152614386816140ed565b9050919050565b600060208201905081810360008301526143a681614110565b9050919050565b600060208201905081810360008301526143c681614133565b9050919050565b600060208201905081810360008301526143e681614156565b9050919050565b6000602082019050818103600083015261440681614179565b9050919050565b6000602082019050614422600083018461419c565b92915050565b600060a08201905061443d600083018861419c565b61444a6020830187614019565b818103604083015261445c8186613f8e565b905061446b6060830185613f7f565b614478608083018461419c565b9695505050505050565b6000604082019050614497600083018561419c565b6144a4602083018461419c565b9392505050565b60006020820190506144c060008301846141ab565b92915050565b60006144d06144e1565b90506144dc82826147a7565b919050565b6000604051905090565b600067ffffffffffffffff821115614506576145056148dd565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614577826146d1565b9150614582836146d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145b7576145b6614821565b5b828201905092915050565b60006145cd826146d1565b91506145d8836146d1565b9250826145e8576145e7614850565b5b828204905092915050565b60006145fe826146d1565b9150614609836146d1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561464257614641614821565b5b828202905092915050565b6000614658826146d1565b9150614663836146d1565b92508282101561467657614675614821565b5b828203905092915050565b600061468c826146b1565b9050919050565b600061469e826146b1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006146f38261471e565b9050919050565b60006147058261471e565b9050919050565b6000614717826146d1565b9050919050565b600061472982614730565b9050919050565b600061473b826146b1565b9050919050565b60005b83811015614760578082015181840152602081019050614745565b8381111561476f576000848401525b50505050565b6000600282049050600182168061478d57607f821691505b602082108114156147a1576147a061487f565b5b50919050565b6147b082614920565b810181811067ffffffffffffffff821117156147cf576147ce6148dd565b5b80604052505050565b60006147e3826146d1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561481657614815614821565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f77616c6c65740000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520686c64416460008201527f6d696e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6f2068696768206665650000000000000000000000000000000000000000600082015250565b7f7478000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b614b4381614681565b8114614b4e57600080fd5b50565b614b5a81614693565b8114614b6557600080fd5b50565b614b71816146a5565b8114614b7c57600080fd5b50565b614b88816146d1565b8114614b9357600080fd5b5056fea2646970667358221220135895538d26f829705e5b2a3d165d8e35ff043fe75e402864a6a991ac9e703764736f6c6343000807003360806040526ec097ce7bc90715b34b9f1000000000600b55610708600c55670de0b6b3a7640000600d553480156200003657600080fd5b5060405162001eac38038062001eac83398181016040528101906200005c91906200013e565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620001ed565b6000815190506200013881620001d3565b92915050565b6000806000606084860312156200015a5762000159620001ce565b5b60006200016a8682870162000127565b93505060206200017d8682870162000127565b9250506040620001908682870162000127565b9150509250925092565b6000620001a782620001ae565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001de816200019a565b8114620001ea57600080fd5b50565b611caf80620001fd6000396000f3fe6080604052600436106100fe5760003560e01c8063997664d711610095578063efca2eed11610064578063efca2eed1461031a578063f0fc6bca14610345578063f1e9f1e51461035c578063ffb2c47914610387578063ffd49c84146103b0576100fe565b8063997664d71461027b578063ce7c2ac2146102a6578063d0e30db0146102e5578063e2d2e219146102ef576100fe565b80632d48e896116100d15780632d48e896146101bf5780633a98ef39146101e85780634fab0ae8146102135780638c21cd521461023e576100fe565b806311ce023d1461010357806314b6ca961461012e57806326987b601461015757806328fd319814610182575b600080fd5b34801561010f57600080fd5b506101186103db565b6040516101259190611891565b60405180910390f35b34801561013a57600080fd5b50610155600480360381019061015091906115b1565b6103e1565b005b34801561016357600080fd5b5061016c6106a0565b6040516101799190611891565b60405180910390f35b34801561018e57600080fd5b506101a960048036038101906101a49190611557565b6106a6565b6040516101b69190611891565b60405180910390f35b3480156101cb57600080fd5b506101e660048036038101906101e19190611678565b6107c0565b005b3480156101f457600080fd5b506101fd61082a565b60405161020a9190611891565b60405180910390f35b34801561021f57600080fd5b50610228610830565b6040516102359190611891565b60405180910390f35b34801561024a57600080fd5b5061026560048036038101906102609190611557565b610836565b60405161027291906117ef565b60405180910390f35b34801561028757600080fd5b506102906108a3565b60405161029d9190611891565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190611557565b6108a9565b6040516102dc939291906118ac565b60405180910390f35b6102ed6108d3565b005b3480156102fb57600080fd5b50610304610d40565b6040516103119190611891565b60405180910390f35b34801561032657600080fd5b5061032f610d46565b60405161033c9190611891565b60405180910390f35b34801561035157600080fd5b5061035a610d4c565b005b34801561036857600080fd5b50610371610d9f565b60405161037e919061180a565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a9919061161e565b610dc5565b005b3480156103bc57600080fd5b506103c5610f01565b6040516103d29190611891565b60405180910390f35b600b5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461043957600080fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154111561048e5761048d82610f07565b5b6000811180156104e057506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104f3576104ee826111ae565b610555565b60008114801561054557506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b15610554576105538261125d565b5b5b6105be816105b0600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460075461146490919063ffffffff16565b61147a90919063ffffffff16565b60078190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610656600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611490565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600e5481565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106fb57600090506107bb565b6000610748600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611490565b90506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116107a3576000925050506107bb565b6107b6818361146490919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461081857600080fd5b81600c8190555080600d819055505050565b60075481565b600d5481565b600042600c54600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610886919061192d565b10801561089c5750600d5461089a836106a6565b115b9050919050565b60085481565b60066020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461092b57600080fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161098891906117ab565b60206040518083038186803b1580156109a057600080fd5b505afa1580156109b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d8919061164b565b90506000600267ffffffffffffffff8111156109f7576109f6611bd7565b5b604051908082528060200260200182016040528015610a255781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610a9057600080fd5b505afa158015610aa4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac89190611584565b81600081518110610adc57610adb611ba8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610b4d57610b4c611ba8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610bea9493929190611825565b6000604051808303818588803b158015610c0357600080fd5b505af1158015610c17573d6000803e3d6000fd5b50505050506000610cdb83600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c7d91906117ab565b60206040518083038186803b158015610c9557600080fd5b505afa158015610ca9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccd919061164b565b61146490919063ffffffff16565b9050610cf28160085461147a90919063ffffffff16565b600881905550610d35610d24600754610d1684600b546114c290919063ffffffff16565b6114d890919063ffffffff16565b600a5461147a90919063ffffffff16565b600a81905550505050565b600a5481565b60095481565b610d5533610836565b610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b90611871565b60405180910390fd5b610d9d33610f07565b565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060038054905090506000811415610dde5750610efe565b60008060005a90505b8482108015610df557508383105b15610ef95783600e5410610e0c576000600e819055505b610e556003600e5481548110610e2557610e24611ba8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610836565b15610ea457610ea36003600e5481548110610e7357610e72611ba8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f07565b5b610ec9610eba5a8361146490919063ffffffff16565b8361147a90919063ffffffff16565b91505a9050600e6000815480929190610ee190611ad2565b91905055508280610ef190611ad2565b935050610de7565b505050505b50565b600c5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610f57576111ab565b6000610f62826106a6565b905060008111156111a957610f828160095461147a90919063ffffffff16565b600981905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610fe59291906117c6565b602060405180830381600087803b158015610fff57600080fd5b505af1158015611013573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103791906115f1565b5042600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110d181600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461147a90919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611162600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611490565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600380549050600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360016003805490506112719190611a0e565b8154811061128257611281611ba8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611300576112ff611ba8565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460046000600360016003805490506113a09190611a0e565b815481106113b1576113b0611ba8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600380548061142c5761142b611b79565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600081836114729190611a0e565b905092915050565b60008183611488919061192d565b905092915050565b60006114bb600b546114ad600a54856114c290919063ffffffff16565b6114d890919063ffffffff16565b9050919050565b600081836114d091906119b4565b905092915050565b600081836114e69190611983565b905092915050565b6000813590506114fd81611c34565b92915050565b60008151905061151281611c34565b92915050565b60008151905061152781611c4b565b92915050565b60008135905061153c81611c62565b92915050565b60008151905061155181611c62565b92915050565b60006020828403121561156d5761156c611c06565b5b600061157b848285016114ee565b91505092915050565b60006020828403121561159a57611599611c06565b5b60006115a884828501611503565b91505092915050565b600080604083850312156115c8576115c7611c06565b5b60006115d6858286016114ee565b92505060206115e78582860161152d565b9150509250929050565b60006020828403121561160757611606611c06565b5b600061161584828501611518565b91505092915050565b60006020828403121561163457611633611c06565b5b60006116428482850161152d565b91505092915050565b60006020828403121561166157611660611c06565b5b600061166f84828501611542565b91505092915050565b6000806040838503121561168f5761168e611c06565b5b600061169d8582860161152d565b92505060206116ae8582860161152d565b9150509250929050565b60006116c483836116d0565b60208301905092915050565b6116d981611a42565b82525050565b6116e881611a42565b82525050565b60006116f9826118f3565b611703818561190b565b935061170e836118e3565b8060005b8381101561173f57815161172688826116b8565b9750611731836118fe565b925050600181019050611712565b5085935050505092915050565b61175581611a54565b82525050565b61176481611a8a565b82525050565b61177381611a9c565b82525050565b600061178660178361191c565b915061179182611c0b565b602082019050919050565b6117a581611a80565b82525050565b60006020820190506117c060008301846116df565b92915050565b60006040820190506117db60008301856116df565b6117e8602083018461179c565b9392505050565b6000602082019050611804600083018461174c565b92915050565b600060208201905061181f600083018461175b565b92915050565b600060808201905061183a600083018761176a565b818103602083015261184c81866116ee565b905061185b60408301856116df565b611868606083018461179c565b95945050505050565b6000602082019050818103600083015261188a81611779565b9050919050565b60006020820190506118a6600083018461179c565b92915050565b60006060820190506118c1600083018661179c565b6118ce602083018561179c565b6118db604083018461179c565b949350505050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061193882611a80565b915061194383611a80565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561197857611977611b1b565b5b828201905092915050565b600061198e82611a80565b915061199983611a80565b9250826119a9576119a8611b4a565b5b828204905092915050565b60006119bf82611a80565b91506119ca83611a80565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611a0357611a02611b1b565b5b828202905092915050565b6000611a1982611a80565b9150611a2483611a80565b925082821015611a3757611a36611b1b565b5b828203905092915050565b6000611a4d82611a60565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611a9582611aae565b9050919050565b6000611aa782611a80565b9050919050565b6000611ab982611ac0565b9050919050565b6000611acb82611a60565b9050919050565b6000611add82611a80565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b1057611b0f611b1b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b7f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000600082015250565b611c3d81611a42565b8114611c4857600080fd5b50565b611c5481611a54565b8114611c5f57600080fd5b50565b611c6b81611a80565b8114611c7657600080fd5b5056fea2646970667358221220ae27217c1cf73bad50e87002fc8adab6da2711a1ff164f519a3d1c1ec9682c5864736f6c634300080700330000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000004d224452801aced8b2f0aebe155379bb5d5943810000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000719183de756077eea0b389abea18f64b5caa1727000000000000000000000000f9859ab850a8cc66ff33001798baca257b64bcf50000000000000000000000007a830370a246f0025b2dcb2aafeccb7865d1e4f8

Deployed Bytecode

0x6080604052600436106103855760003560e01c80637db1342c116101d1578063bb542ef011610102578063d920334e116100a0578063ede1588f1161006f578063ede1588f14610d27578063f7c7220514610d52578063f887ea4014610d7b578063fabe628314610da65761038c565b8063d920334e14610c6d578063dd62ed3e14610c96578063e5d8510814610cd3578063e66b1d1e14610cfe5761038c565b8063ca987b0e116100dc578063ca987b0e14610bc3578063cb29813c14610bee578063cc6badb314610c17578063d4fb9a0114610c425761038c565b8063bb542ef014610b44578063bf56b37114610b6d578063c45a015514610b985761038c565b8063a3a2e89e1161016f578063a8aa1b3111610149578063a8aa1b3114610a88578063a9059cbb14610ab3578063b515566a14610af0578063bad3ea6a14610b195761038c565b8063a3a2e89e146109f7578063a3e6761014610a20578063a457c2d714610a4b5761038c565b80638b42507f116101ab5780638b42507f146109395780638ea5220f146109765780639502c426146109a157806395d89b41146109cc5761038c565b80637db1342c146108ba578063807c2d9c146108e357806383ad79941461090e5761038c565b80633f4218e0116102b65780636303516c1161025457806370a082311161022357806370a08231146107fc578063774b5847146108395780637c0ff205146108645780637d1db4a51461088f5761038c565b80636303516c1461076457806366b5d8821461078f5780636827e764146107a6578063704ce43e146107d15761038c565b806344de2e4c1161029057806344de2e4c146106ba578063468c7ee2146106e55780634a74bb021461070e57806360e71962146107395761038c565b80633f4218e0146106175780634355855a1461065457806343d49dda146106915761038c565b806323b872dd116103235780632d48e896116102fd5780632d48e8961461055d578063313ce5671461058657806339509351146105b15780633dab5269146105ee5761038c565b806323b872dd146104cc578063273123b7146105095780632b112e49146105325761038c565b806316d9962b1161035f57806316d9962b1461042457806318160ddd1461044d5780631df4ccfc146104785780631f53ac02146104a35761038c565b80630445b6671461039157806306fdde03146103bc578063095ea7b3146103e75761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dcf565b6040516103b3919061440d565b60405180910390f35b3480156103c857600080fd5b506103d1610dd5565b6040516103de91906142cb565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190613d06565b610e67565b60405161041b919061427a565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190613dfc565b610e8a565b005b34801561045957600080fd5b50610462610f2b565b60405161046f919061440d565b60405180910390f35b34801561048457600080fd5b5061048d610f35565b60405161049a919061440d565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190613c06565b610f3b565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190613c73565b611016565b604051610500919061427a565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b9190613bac565b611046565b005b34801561053e57600080fd5b50610547611138565b604051610554919061440d565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190613e29565b6111ba565b005b34801561059257600080fd5b5061059b6112e2565b6040516105a891906144ab565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613d06565b6112eb565b6040516105e5919061427a565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190613dbc565b611395565b005b34801561062357600080fd5b5061063e60048036038101906106399190613bac565b611451565b60405161064b919061427a565b60405180910390f35b34801561066057600080fd5b5061067b60048036038101906106769190613bac565b611471565b604051610688919061427a565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190613bac565b611491565b005b3480156106c657600080fd5b506106cf61156c565b6040516106dc919061427a565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613bac565b61157f565b005b34801561071a57600080fd5b5061072361165a565b604051610730919061427a565b60405180910390f35b34801561074557600080fd5b5061074e61166d565b60405161075b919061440d565b60405180910390f35b34801561077057600080fd5b50610779611673565b60405161078691906141ba565b60405180910390f35b34801561079b57600080fd5b506107a4611699565b005b3480156107b257600080fd5b506107bb611774565b6040516107c8919061440d565b60405180910390f35b3480156107dd57600080fd5b506107e661177a565b6040516107f3919061440d565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e9190613bac565b611780565b604051610830919061440d565b60405180910390f35b34801561084557600080fd5b5061084e6117c9565b60405161085b91906141d5565b60405180910390f35b34801561087057600080fd5b506108796117ef565b604051610886919061440d565b60405180910390f35b34801561089b57600080fd5b506108a46117f5565b6040516108b1919061440d565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc9190613dfc565b6117fb565b005b3480156108ef57600080fd5b506108f861189c565b604051610905919061440d565b60405180910390f35b34801561091a57600080fd5b506109236118a2565b604051610930919061440d565b60405180910390f35b34801561094557600080fd5b50610960600480360381019061095b9190613bac565b6118a8565b60405161096d919061427a565b60405180910390f35b34801561098257600080fd5b5061098b6118c8565b60405161099891906141d5565b60405180910390f35b3480156109ad57600080fd5b506109b66118ee565b6040516109c3919061440d565b60405180910390f35b3480156109d857600080fd5b506109e16118f4565b6040516109ee91906142cb565b60405180910390f35b348015610a0357600080fd5b50610a1e6004803603810190610a199190613cc6565b611986565b005b348015610a2c57600080fd5b50610a35611a78565b604051610a4291906141ba565b60405180910390f35b348015610a5757600080fd5b50610a726004803603810190610a6d9190613d06565b611a9e565b604051610a7f919061427a565b60405180910390f35b348015610a9457600080fd5b50610a9d611b88565b604051610aaa91906141ba565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad59190613d06565b611bae565b604051610ae7919061427a565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b129190613d46565b611bd2565b005b348015610b2557600080fd5b50610b2e611cfe565b604051610b3b9190614295565b60405180910390f35b348015610b5057600080fd5b50610b6b6004803603810190610b669190613c06565b611d22565b005b348015610b7957600080fd5b50610b82611dfd565b604051610b8f919061440d565b60405180910390f35b348015610ba457600080fd5b50610bad611e03565b604051610bba91906141ba565b60405180910390f35b348015610bcf57600080fd5b50610bd8611e29565b604051610be5919061440d565b60405180910390f35b348015610bfa57600080fd5b50610c156004803603810190610c109190613ebc565b611e2f565b005b348015610c2357600080fd5b50610c2c61200e565b604051610c39919061440d565b60405180910390f35b348015610c4e57600080fd5b50610c57612014565b604051610c64919061427a565b60405180910390f35b348015610c7957600080fd5b50610c946004803603810190610c8f9190613dfc565b612027565b005b348015610ca257600080fd5b50610cbd6004803603810190610cb89190613c33565b6120c8565b604051610cca919061440d565b60405180910390f35b348015610cdf57600080fd5b50610ce861214f565b604051610cf5919061440d565b60405180910390f35b348015610d0a57600080fd5b50610d256004803603810190610d209190613d8f565b612155565b005b348015610d3357600080fd5b50610d3c612209565b604051610d4991906141ba565b60405180910390f35b348015610d5e57600080fd5b50610d796004803603810190610d749190613bac565b61222f565b005b348015610d8757600080fd5b50610d9061230a565b604051610d9d91906142b0565b60405180910390f35b348015610db257600080fd5b50610dcd6004803603810190610dc89190613cc6565b612330565b005b60215481565b606060058054610de490614775565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1090614775565b8015610e5d5780601f10610e3257610100808354040283529160200191610e5d565b820191906000526020600020905b815481529060010190602001808311610e4057829003601f168201915b5050505050905090565b600080610e72612438565b9050610e7f818585612440565b600191505092915050565b610e92612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f189061436d565b60405180910390fd5b8060018190555050565b6000600454905090565b60175481565b610f43612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc99061436d565b60405180910390fd5b80601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080611021612438565b905061102e85828561260b565b611039858585612697565b5060019150509392505050565b61104e612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d49061436d565b60405180910390fd5b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006111b5611168600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611780565b6111a7611196600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611780565b600454612f5590919063ffffffff16565b612f5590919063ffffffff16565b905090565b6111c2612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611251576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112489061436d565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016112ac929190614482565b600060405180830381600087803b1580156112c657600080fd5b505af11580156112da573d6000803e3d6000fd5b505050505050565b60006009905090565b6000806112f6612438565b905061138a818585600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611385919061456c565b612440565b600191505092915050565b61139d612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461142c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114239061436d565b60405180910390fd5b81601d60156101000a81548160ff021916908315150217905550806021819055505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915054906101000a900460ff1681565b611499612438565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f9061434d565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60149054906101000a900460ff1681565b611587612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160d9061436d565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60159054906101000a900460ff1681565b60015481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116a1612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611730576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117279061436d565b60405180910390fd5b6000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60135481565b60125481565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b601f5481565b611803612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118899061436d565b60405180910390fd5b8060208190555050565b60205481565b60115481565b600c6020528060005260406000206000915054906101000a900460ff1681565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b60606006805461190390614775565b80601f016020809104026020016040519081016040528092919081815260200182805461192f90614775565b801561197c5780601f106119515761010080835404028352916020019161197c565b820191906000526020600020905b81548152906001019060200180831161195f57829003601f168201915b5050505050905090565b61198e612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a149061436d565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611aa9612438565b90506000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b66906143ed565b60405180910390fd5b611b7c8286868403612440565b60019250505092915050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611bb9612438565b9050611bc6818585612697565b50600191505092915050565b611bda612438565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c609061434d565b60405180910390fd5b60005b8151811015611cfa576001601e6000848481518110611c8e57611c8d6148ae565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611cf2906147d8565b915050611c6c565b5050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d2a612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db09061436d565b60405180910390fd5b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b611e37612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebd9061436d565b60405180910390fd5b856011819055508360128190555081601381905550846014819055508260158190555080601681905550611f2f600f54611f21601154611f1360125460135461242290919063ffffffff16565b61242290919063ffffffff16565b61242290919063ffffffff16565b601781905550611f74600f54611f66601454611f5860155460165461242290919063ffffffff16565b61242290919063ffffffff16565b61242290919063ffffffff16565b601881905550600c6017541115611fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb79061438d565b60405180910390fd5b60116018541115612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd9061438d565b60405180910390fd5b505050505050565b60145481565b601d60169054906101000a900460ff1681565b61202f612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b59061436d565b60405180910390fd5b80601f8190555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f5481565b61215d612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e39061436d565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612237612438565b73ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd9061434d565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612338612438565b73ffffffffffffffffffffffffffffffffffffffff16601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be9061436d565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008183612430919061456c565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a7906143cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612520576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612517906142ed565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125fe919061440d565b60405180910390a3505050565b600061261784846120c8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146126915781811015612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a9061430d565b60405180910390fd5b6126908484848403612440565b5b50505050565b6000601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561273d5750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61274657600080fd5b601d60149054906101000a900460ff161561276d57612766848484612f6b565b9050612f4e565b601f54821115806127c75750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fd906143ad565b60405180910390fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561286c5750600a60149054906101000a900460ff165b15612908576020546128c683600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242290919063ffffffff16565b1115612907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fe9061432d565b60405180910390fd5b5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156129735750601d60149054906101000a900460ff16155b801561298b5750601d60159054906101000a900460ff165b80156129d85750602154600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b156129e6576129e561313e565b5b612a6f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138679092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b585750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612b625782612b6e565b612b6d8585856138bc565b5b9050612bc281600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242290919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d265760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612cf09291906141f0565b600060405180830381600087803b158015612d0a57600080fd5b505af1925050508015612d1b575060015b612d2457612d25565b5b5b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e475760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612e119291906141f0565b600060405180830381600087803b158015612e2b57600080fd5b505af1925050508015612e3c575060015b612e4557612e46565b5b5b60006001541115612ee35760008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796001546040518263ffffffff1660e01b8152600401612ead919061440d565b600060405180830381600087803b158015612ec757600080fd5b505af1925050508015612ed8575060015b612ee157612ee2565b5b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612f40919061440d565b60405180910390a360019150505b9392505050565b60008183612f63919061464d565b905092915050565b6000612ff6826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138679092919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061308b82600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242290919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161312b919061440d565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000806000806002601754116131f0576131e960026131db6018546131cd6015548a613a6490919063ffffffff16565b613a7a90919063ffffffff16565b613a7a90919063ffffffff16565b935061322f565b61322c600261321e6017546132106012548a613a6490919063ffffffff16565b613a7a90919063ffffffff16565b613a7a90919063ffffffff16565b93505b60006132448587612f5590919063ffffffff16565b90506000600267ffffffffffffffff811115613263576132626148dd565b5b6040519080825280602002602001820160405280156132915781602001602082028036833780820191505090505b50905030816000815181106132a9576132a86148ae565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561334b57600080fd5b505afa15801561335f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133839190613bd9565b81600181518110613397576133966148ae565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613435959493929190614428565b600060405180830381600087803b15801561344f57600080fd5b505af1158015613463573d6000803e3d6000fd5b50505050600047905060026017541161350f5761349f60185461349160165484613a6490919063ffffffff16565b613a7a90919063ffffffff16565b95506134ca6018546134bc600f5484613a6490919063ffffffff16565b613a7a90919063ffffffff16565b945061350860026134fa6018546134ec60155486613a6490919063ffffffff16565b613a7a90919063ffffffff16565b613a7a90919063ffffffff16565b93506135a4565b61353860175461352a60135484613a6490919063ffffffff16565b613a7a90919063ffffffff16565b9550613563601754613555600f5484613a6490919063ffffffff16565b613a7a90919063ffffffff16565b94506135a1600261359360175461358560125486613a6490919063ffffffff16565b613a7a90919063ffffffff16565b613a7a90919063ffffffff16565b93505b60006135dd856135cf886135c18b87612f5590919063ffffffff16565b612f5590919063ffffffff16565b612f5590919063ffffffff16565b905060008211156136d557600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630c50f89d876040518263ffffffff1660e01b81526004016000604051808303818588803b15801561365257600080fd5b505af1158015613666573d6000803e3d6000fd5b5050505050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f193505050501580156136d3573d6000803e3d6000fd5b505b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561373d57600080fd5b505af19350505050801561374f575060015b61375857613759565b5b600088111561384157601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016137eb96959493929190614219565b6060604051808303818588803b15801561380457600080fd5b505af1158015613818573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061383d9190613e69565b5050505b5050505050505050506000601d60146101000a81548160ff021916908315150217905550565b60008383111582906138af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a691906142cb565b60405180910390fd5b5082840390509392505050565b6000808373ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461391c57601754613920565b6018545b9050600061394a606461393c8487613a6490919063ffffffff16565b613a7a90919063ffffffff16565b905061399e81600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461242290919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a3e919061440d565b60405180910390a3613a598185612f5590919063ffffffff16565b925050509392505050565b60008183613a7291906145f3565b905092915050565b60008183613a8891906145c2565b905092915050565b6000613aa3613a9e846144eb565b6144c6565b90508083825260208201905082856020860282011115613ac657613ac5614911565b5b60005b85811015613af65781613adc8882613b00565b845260208401935060208301925050600181019050613ac9565b5050509392505050565b600081359050613b0f81614b3a565b92915050565b600081519050613b2481614b3a565b92915050565b600081359050613b3981614b51565b92915050565b600082601f830112613b5457613b5361490c565b5b8135613b64848260208601613a90565b91505092915050565b600081359050613b7c81614b68565b92915050565b600081359050613b9181614b7f565b92915050565b600081519050613ba681614b7f565b92915050565b600060208284031215613bc257613bc161491b565b5b6000613bd084828501613b00565b91505092915050565b600060208284031215613bef57613bee61491b565b5b6000613bfd84828501613b15565b91505092915050565b600060208284031215613c1c57613c1b61491b565b5b6000613c2a84828501613b2a565b91505092915050565b60008060408385031215613c4a57613c4961491b565b5b6000613c5885828601613b00565b9250506020613c6985828601613b00565b9150509250929050565b600080600060608486031215613c8c57613c8b61491b565b5b6000613c9a86828701613b00565b9350506020613cab86828701613b00565b9250506040613cbc86828701613b82565b9150509250925092565b60008060408385031215613cdd57613cdc61491b565b5b6000613ceb85828601613b00565b9250506020613cfc85828601613b6d565b9150509250929050565b60008060408385031215613d1d57613d1c61491b565b5b6000613d2b85828601613b00565b9250506020613d3c85828601613b82565b9150509250929050565b600060208284031215613d5c57613d5b61491b565b5b600082013567ffffffffffffffff811115613d7a57613d79614916565b5b613d8684828501613b3f565b91505092915050565b600060208284031215613da557613da461491b565b5b6000613db384828501613b6d565b91505092915050565b60008060408385031215613dd357613dd261491b565b5b6000613de185828601613b6d565b9250506020613df285828601613b82565b9150509250929050565b600060208284031215613e1257613e1161491b565b5b6000613e2084828501613b82565b91505092915050565b60008060408385031215613e4057613e3f61491b565b5b6000613e4e85828601613b82565b9250506020613e5f85828601613b82565b9150509250929050565b600080600060608486031215613e8257613e8161491b565b5b6000613e9086828701613b97565b9350506020613ea186828701613b97565b9250506040613eb286828701613b97565b9150509250925092565b60008060008060008060c08789031215613ed957613ed861491b565b5b6000613ee789828a01613b82565b9650506020613ef889828a01613b82565b9550506040613f0989828a01613b82565b9450506060613f1a89828a01613b82565b9350506080613f2b89828a01613b82565b92505060a0613f3c89828a01613b82565b9150509295509295509295565b6000613f558383613f70565b60208301905092915050565b613f6a81614693565b82525050565b613f7981614681565b82525050565b613f8881614681565b82525050565b6000613f9982614527565b613fa3818561454a565b9350613fae83614517565b8060005b83811015613fdf578151613fc68882613f49565b9750613fd18361453d565b925050600181019050613fb2565b5085935050505092915050565b613ff5816146a5565b82525050565b614004816146e8565b82525050565b614013816146fa565b82525050565b6140228161470c565b82525050565b600061403382614532565b61403d818561455b565b935061404d818560208601614742565b61405681614920565b840191505092915050565b600061406e60228361455b565b915061407982614931565b604082019050919050565b6000614091601d8361455b565b915061409c82614980565b602082019050919050565b60006140b460068361455b565b91506140bf826149a9565b602082019050919050565b60006140d760238361455b565b91506140e2826149d2565b604082019050919050565b60006140fa60208361455b565b915061410582614a21565b602082019050919050565b600061411d600c8361455b565b915061412882614a4a565b602082019050919050565b600061414060028361455b565b915061414b82614a73565b602082019050919050565b600061416360248361455b565b915061416e82614a9c565b604082019050919050565b600061418660258361455b565b915061419182614aeb565b604082019050919050565b6141a5816146d1565b82525050565b6141b4816146db565b82525050565b60006020820190506141cf6000830184613f7f565b92915050565b60006020820190506141ea6000830184613f61565b92915050565b60006040820190506142056000830185613f7f565b614212602083018461419c565b9392505050565b600060c08201905061422e6000830189613f7f565b61423b602083018861419c565b6142486040830187614019565b6142556060830186614019565b6142626080830185613f7f565b61426f60a083018461419c565b979650505050505050565b600060208201905061428f6000830184613fec565b92915050565b60006020820190506142aa6000830184613ffb565b92915050565b60006020820190506142c5600083018461400a565b92915050565b600060208201905081810360008301526142e58184614028565b905092915050565b6000602082019050818103600083015261430681614061565b9050919050565b6000602082019050818103600083015261432681614084565b9050919050565b60006020820190508181036000830152614346816140a7565b9050919050565b60006020820190508181036000830152614366816140ca565b9050919050565b60006020820190508181036000830152614386816140ed565b9050919050565b600060208201905081810360008301526143a681614110565b9050919050565b600060208201905081810360008301526143c681614133565b9050919050565b600060208201905081810360008301526143e681614156565b9050919050565b6000602082019050818103600083015261440681614179565b9050919050565b6000602082019050614422600083018461419c565b92915050565b600060a08201905061443d600083018861419c565b61444a6020830187614019565b818103604083015261445c8186613f8e565b905061446b6060830185613f7f565b614478608083018461419c565b9695505050505050565b6000604082019050614497600083018561419c565b6144a4602083018461419c565b9392505050565b60006020820190506144c060008301846141ab565b92915050565b60006144d06144e1565b90506144dc82826147a7565b919050565b6000604051905090565b600067ffffffffffffffff821115614506576145056148dd565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614577826146d1565b9150614582836146d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145b7576145b6614821565b5b828201905092915050565b60006145cd826146d1565b91506145d8836146d1565b9250826145e8576145e7614850565b5b828204905092915050565b60006145fe826146d1565b9150614609836146d1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561464257614641614821565b5b828202905092915050565b6000614658826146d1565b9150614663836146d1565b92508282101561467657614675614821565b5b828203905092915050565b600061468c826146b1565b9050919050565b600061469e826146b1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006146f38261471e565b9050919050565b60006147058261471e565b9050919050565b6000614717826146d1565b9050919050565b600061472982614730565b9050919050565b600061473b826146b1565b9050919050565b60005b83811015614760578082015181840152602081019050614745565b8381111561476f576000848401525b50505050565b6000600282049050600182168061478d57607f821691505b602082108114156147a1576147a061487f565b5b50919050565b6147b082614920565b810181811067ffffffffffffffff821117156147cf576147ce6148dd565b5b80604052505050565b60006147e3826146d1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561481657614815614821565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f77616c6c65740000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520686c64416460008201527f6d696e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6f2068696768206665650000000000000000000000000000000000000000600082015250565b7f7478000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b614b4381614681565b8114614b4e57600080fd5b50565b614b5a81614693565b8114614b6557600080fd5b50565b614b71816146a5565b8114614b7c57600080fd5b50565b614b88816146d1565b8114614b9357600080fd5b5056fea2646970667358221220135895538d26f829705e5b2a3d165d8e35ff043fe75e402864a6a991ac9e703764736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000004d224452801aced8b2f0aebe155379bb5d5943810000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000719183de756077eea0b389abea18f64b5caa1727000000000000000000000000f9859ab850a8cc66ff33001798baca257b64bcf50000000000000000000000007a830370a246f0025b2dcb2aafeccb7865d1e4f8

-----Decoded View---------------
Arg [0] : initialSupply (uint256): 1000000000000000000
Arg [1] : reflectionToken (address): 0x4d224452801ACEd8B2F0aebE155379bb5D594381
Arg [2] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [3] : initialHldAdmin (address): 0x719183De756077eea0b389aBea18F64B5CAa1727
Arg [4] : initialHldBurner (address): 0xf9859aB850A8cC66Ff33001798BaCa257b64bCf5
Arg [5] : initialMigrator (address): 0x7A830370A246F0025b2dCb2AAfeccb7865D1E4F8

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000de0b6b3a7640000
Arg [1] : 0000000000000000000000004d224452801aced8b2f0aebe155379bb5d594381
Arg [2] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [3] : 000000000000000000000000719183de756077eea0b389abea18f64b5caa1727
Arg [4] : 000000000000000000000000f9859ab850a8cc66ff33001798baca257b64bcf5
Arg [5] : 0000000000000000000000007a830370a246f0025b2dcb2aafeccb7865d1e4f8


Deployed Bytecode Sourcemap

21480:18592:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23087:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28665:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31015:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28309:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29784:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22616:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27411:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31806:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28211:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28453:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27997:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29627:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32510:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27790:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22147:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22253:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25407:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22105:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27542:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22882:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21628:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22375:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26681:91;;;;;;;;;;;;;:::i;:::-;;22476:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22449:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29955:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22027:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22547:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23021:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26890:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23055:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22414:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22198:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22813:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22580:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28884:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27135:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22781:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33253:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22726:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30288:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25704:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21574:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27656:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22311:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22752:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22646:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25906:766;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22506:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22929:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26780:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30544:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22343:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27003:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22073:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25528:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22687:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27265:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23087:28;;;;:::o;28665:100::-;28719:13;28752:5;28745:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28665:100;:::o;31015:201::-;31098:4;31115:13;31131:12;:10;:12::i;:::-;31115:28;;31154:32;31163:5;31170:7;31179:6;31154:8;:32::i;:::-;31204:4;31197:11;;;31015:201;;;;:::o;28309:125::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28411:15:::1;28394:14;:32;;;;28309:125:::0;:::o;29784:108::-;29845:7;29872:12;;29865:19;;29784:108;:::o;22616:23::-;;;;:::o;27411:123::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27513:12:::1;27493:9;;:33;;;;;;;;;;;;;;;;;;27411:123:::0;:::o;31806:295::-;31937:4;31954:15;31972:12;:10;:12::i;:::-;31954:30;;31995:38;32011:4;32017:7;32026:6;31995:15;:38::i;:::-;32044:27;32054:4;32060:2;32064:6;32044:9;:27::i;:::-;;32089:4;32082:11;;;31806:295;;;;;:::o;28211:90::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28288:5:::1;28273:4;:12;28278:6;28273:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;28211:90:::0;:::o;28453:142::-;28506:7;28533:54;28571:15;28581:4;;;;;;;;;;;28571:9;:15::i;:::-;28533:33;28550:15;28560:4;;;;;;;;;;;28550:9;:15::i;:::-;28533:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;28526:61;;28453:142;:::o;27997:206::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28110:19:::1;::::0;::::1;;;;;;;;:43;;;28154:12;28168:18;28110:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27997:206:::0;;:::o;29627:92::-;29685:5;29710:1;29703:8;;29627:92;:::o;32510:240::-;32598:4;32615:13;32631:12;:10;:12::i;:::-;32615:28;;32654:66;32663:5;32670:7;32709:10;32679:11;:18;32691:5;32679:18;;;;;;;;;;;;;;;:27;32698:7;32679:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;32654:8;:66::i;:::-;32738:4;32731:11;;;32510:240;;;;:::o;27790:199::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27924:14:::1;27899:21;;:39;;;;;;;;;;;;;;;;;;27965:16;27949:13;:32;;;;27790:199:::0;;:::o;22147:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;22253:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;25407:113::-;25170:12;:10;:12::i;:::-;25158:24;;:8;;;;;;;;;;;:24;;;25150:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;25504:8:::1;25493;;:19;;;;;;;;;;;;;;;;;;25407:113:::0;:::o;22105:33::-;;;;;;;;;;;;;:::o;27542:102::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27625:11:::1;27614:8;;:22;;;;;;;;;;;;;;;;;;27542:102:::0;:::o;22882:40::-;;;;;;;;;;;;;:::o;21628:37::-;;;;:::o;22375:30::-;;;;;;;;;;;;;:::o;26681:91::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26762:1:::1;26743:8;;:21;;;;;;;;;;;;;;;;;;26681:91::o:0;22476:21::-;;;;:::o;22449:20::-;;;;:::o;29955:127::-;30029:7;30056:9;:18;30066:7;30056:18;;;;;;;;;;;;;;;;30049:25;;29955:127;;;:::o;22027:39::-;;;;;;;;;;;;;:::o;22547:26::-;;;;:::o;23021:27::-;;;;:::o;26890:105::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26979:8:::1;26965:10;:22;;;;26890:105:::0;:::o;23055:25::-;;;;:::o;22414:28::-;;;;:::o;22198:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;22813:32::-;;;;;;;;;;;;;:::o;22580:27::-;;;;:::o;28884:104::-;28940:13;28973:7;28966:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28884:104;:::o;27135:122::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27243:6:::1;27221:11;:19;27233:6;27221:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;27135:122:::0;;:::o;22781:25::-;;;;;;;;;;;;;:::o;33253:438::-;33346:4;33363:13;33379:12;:10;:12::i;:::-;33363:28;;33402:24;33429:11;:18;33441:5;33429:18;;;;;;;;;;;;;;;:27;33448:7;33429:27;;;;;;;;;;;;;;;;33402:54;;33495:15;33475:16;:35;;33467:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33588:60;33597:5;33604:7;33632:15;33613:16;:34;33588:8;:60::i;:::-;33679:4;33672:11;;;;33253:438;;;;:::o;22726:19::-;;;;;;;;;;;;;:::o;30288:193::-;30367:4;30384:13;30400:12;:10;:12::i;:::-;30384:28;;30423;30433:5;30440:2;30444:6;30423:9;:28::i;:::-;;30469:4;30462:11;;;30288:193;;;;:::o;25704:169::-;25170:12;:10;:12::i;:::-;25158:24;;:8;;;;;;;;;;;:24;;;25150:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;25783:6:::1;25778:88;25799:5;:12;25795:1;:16;25778:88;;;25850:4;25833;:14;25838:5;25844:1;25838:8;;;;;;;;:::i;:::-;;;;;;;;25833:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;25813:3;;;;;:::i;:::-;;;;25778:88;;;;25704:169:::0;:::o;21574:47::-;;;;;;;;;;;;:::o;27656:121::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27755:14:::1;27742:10;;:27;;;;;;;;;;;;;;;;;;27656:121:::0;:::o;22311:25::-;;;;:::o;22752:22::-;;;;;;;;;;;;;:::o;22646:32::-;;;;:::o;25906:766::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26151:20:::1;26135:13;:36;;;;26190:12;26182:5;:20;;;;26222:13;26213:6;:22;;;;26270:26;26248:19;:48;;;;26321:18;26307:11;:32;;;;26365:19;26350:12;:34;;;;26408:48;26449:6;;26408:36;26430:13;;26408:17;26419:5;;26408:6;;:10;;:17;;;;:::i;:::-;:21;;:36;;;;:::i;:::-;:40;;:48;;;;:::i;:::-;26397:8;:59;;;;26487:66;26546:6;;26487:54;26521:19;;26487:29;26504:11;;26487:12;;:16;;:29;;;;:::i;:::-;:33;;:54;;;;:::i;:::-;:58;;:66;;;;:::i;:::-;26467:17;:86;;;;26586:2;26574:8;;:14;;26566:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;26645:2;26624:17;;:23;;26616:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25906:766:::0;;;;;;:::o;22506:34::-;;;;:::o;22929:32::-;;;;;;;;;;;;;:::o;26780:102::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26866:8:::1;26851:12;:23;;;;26780:102:::0;:::o;30544:151::-;30633:7;30660:11;:18;30672:5;30660:18;;;;;;;;;;;;;;;:27;30679:7;30660:27;;;;;;;;;;;;;;;;30653:34;;30544:151;;;;:::o;22343:25::-;;;;:::o;27003:120::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27107:8:::1;27090:14;;:25;;;;;;;;;;;;;;;;;;27003:120:::0;:::o;22073:23::-;;;;;;;;;;;;;:::o;25528:160::-;25170:12;:10;:12::i;:::-;25158:24;;:8;;;;;;;;;;;:24;;;25150:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;25660:19:::1;25633:16;;:47;;;;;;;;;;;;;;;;;;25528:160:::0;:::o;22687:32::-;;;;;;;;;;;;;:::o;27265:136::-;25304:12;:10;:12::i;:::-;25290:26;;:10;;;;;;;;;;;:26;;;25282:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27387:6:::1;27361:15;:23;27377:6;27361:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;27265:136:::0;;:::o;7415:98::-;7473:7;7504:1;7500;:5;;;;:::i;:::-;7493:12;;7415:98;;;;:::o;4339:::-;4392:7;4419:10;4412:17;;4339:98;:::o;36211:380::-;36364:1;36347:19;;:5;:19;;;;36339:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36445:1;36426:21;;:7;:21;;;;36418:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36529:6;36499:11;:18;36511:5;36499:18;;;;;;;;;;;;;;;:27;36518:7;36499:27;;;;;;;;;;;;;;;:36;;;;36567:7;36551:32;;36560:5;36551:32;;;36576:6;36551:32;;;;;;:::i;:::-;;;;;;;;36211:380;;;:::o;36878:453::-;37013:24;37040:25;37050:5;37057:7;37040:9;:25::i;:::-;37013:52;;37100:17;37080:16;:37;37076:248;;37162:6;37142:16;:26;;37134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37246:51;37255:5;37262:7;37290:6;37271:16;:25;37246:8;:51::i;:::-;37076:248;37002:329;36878:453;;;:::o;33701:1441::-;33789:4;33825;:12;33830:6;33825:12;;;;;;;;;;;;;;;;;;;;;;;;;33824:13;:33;;;;;33842:4;:15;33847:9;33842:15;;;;;;;;;;;;;;;;;;;;;;;;;33841:16;33824:33;33816:42;;;;;;33874:16;;;;;;;;;;;33871:73;;;33900:41;33915:6;33923:9;33934:6;33900:14;:41::i;:::-;33893:48;;;;33871:73;33974:12;;33964:6;:22;;:49;;;;33990:15;:23;34006:6;33990:23;;;;;;;;;;;;;;;;;;;;;;;;;33964:49;33956:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34037:15;:26;34053:9;34037:26;;;;;;;;;;;;;;;;;;;;;;;;;34036:27;:45;;;;;34067:14;;;;;;;;;;;34036:45;34033:151;;;34151:10;;34115:32;34140:6;34115:9;:20;34125:9;34115:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:46;;34107:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34033:151;34213:4;;;;;;;;;;;34199:18;;:10;:18;;;;:39;;;;;34222:16;;;;;;;;;;;34221:17;34199:39;:64;;;;;34242:21;;;;;;;;;;;34199:64;:109;;;;;34295:13;;34267:9;:24;34285:4;34267:24;;;;;;;;;;;;;;;;:41;;34199:109;34196:128;;;34311:10;:8;:10::i;:::-;34196:128;34356:53;34378:6;34356:53;;;;;;;;;;;;;;;;;:9;:17;34366:6;34356:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;34336:9;:17;34346:6;34336:17;;;;;;;;;;;;;;;:73;;;;34430:19;34453:11;:19;34465:6;34453:19;;;;;;;;;;;;;;;;;;;;;;;;;34452:20;:47;;;;;34477:11;:22;34489:9;34477:22;;;;;;;;;;;;;;;;;;;;;;;;;34476:23;34452:47;:93;;34539:6;34452:93;;;34502:34;34510:6;34518:9;34529:6;34502:7;:34::i;:::-;34452:93;34430:115;;34579:37;34604:11;34579:9;:20;34589:9;34579:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;34556:9;:20;34566:9;34556:20;;;;;;;;;;;;;;;:60;;;;34662:16;:24;34679:6;34662:24;;;;;;;;;;;;;;;;;;;;;;;;;34658:127;;34707:19;;;;;;;;;;:28;;;34736:6;34744:9;:17;34754:6;34744:17;;;;;;;;;;;;;;;;34707:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34703:71;;;;;;34658:127;34801:16;:27;34818:9;34801:27;;;;;;;;;;;;;;;;;;;;;;;;;34797:137;;34849:19;;;;;;;;;;:28;;;34878:9;34889;:20;34899:9;34889:20;;;;;;;;;;;;;;;;34849:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34845:77;;;;;;34797:137;34967:1;34950:14;;:18;34946:109;;;34989:19;;;;;;;;;;:27;;;35017:14;;34989:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34985:59;;;;;;34946:109;35089:9;35072:40;;35081:6;35072:40;;;35100:11;35072:40;;;;;;:::i;:::-;;;;;;;;35130:4;35123:11;;;33701:1441;;;;;;:::o;7796:98::-;7854:7;7885:1;7881;:5;;;;:::i;:::-;7874:12;;7796:98;;;;:::o;35154:330::-;35247:4;35284:53;35306:6;35284:53;;;;;;;;;;;;;;;;;:9;:17;35294:6;35284:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;35264:9;:17;35274:6;35264:17;;;;;;;;;;;;;;;:73;;;;35371:32;35396:6;35371:9;:20;35381:9;35371:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;35348:9;:20;35358:9;35348:20;;;;;;;;;;;;;;;:55;;;;35436:9;35419:35;;35428:6;35419:35;;;35447:6;35419:35;;;;;;:::i;:::-;;;;;;;;35472:4;35465:11;;35154:330;;;;;:::o;37786:2243::-;25048:4;25029:16;;:23;;;;;;;;;;;;;;;;;;37844::::1;37870:9;:24;37888:4;37870:24;;;;;;;;;;;;;;;;37844:50;;37907:23;37941:18:::0;37970::::1;37999:26:::0;38109:1:::1;38097:8;;:13;38093:241;;38145:62;38205:1;38145:55;38182:17;;38145:32;38165:11;;38145:15;:19;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;:59;;:62;;;;:::i;:::-;38127:80;;38093:241;;;38258:47;38303:1;38258:40;38289:8;;38258:26;38278:5;;38258:15;:19;;:26;;;;:::i;:::-;:30;;:40;;;;:::i;:::-;:44;;:47;;;;:::i;:::-;38240:65;;38093:241;38346:20;38369:36;38389:15;38369;:19;;:36;;;;:::i;:::-;38346:59;;38418:21;38456:1;38442:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38418:40;;38487:4;38469;38474:1;38469:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38513:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38503:4;38508:1;38503:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38539:6;;;;;;;;;;;:57;;;38611:12;38638:1;38654:4;38681;38701:15;38539:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38740:17;38760:21;38740:41;;38857:1;38845:8;;:13;38841:508;;38888:50;38920:17;;38888:27;38902:12;;38888:9;:13;;:27;;;;:::i;:::-;:31;;:50;;;;:::i;:::-;38875:63;;38966:44;38992:17;;38966:21;38980:6;;38966:9;:13;;:21;;;;:::i;:::-;:25;;:44;;;;:::i;:::-;38953:57;;39046:56;39100:1;39046:49;39077:17;;39046:26;39060:11;;39046:9;:13;;:26;;;;:::i;:::-;:30;;:49;;;;:::i;:::-;:53;;:56;;;;:::i;:::-;39025:77;;38841:508;;;39150:35;39176:8;;39150:21;39164:6;;39150:9;:13;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;39137:48;;39213:35;39239:8;;39213:21;39227:6;;39213:9;:13;;:21;;;;:::i;:::-;:25;;:35;;;;:::i;:::-;39200:48;;39284:41;39323:1;39284:34;39309:8;;39284:20;39298:5;;39284:9;:13;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;:38;;:41;;;;:::i;:::-;39263:62;;38841:508;39361:27;39391:65;39437:18;39391:41;39421:10;39391:25;39405:10;39391:9;:13;;:25;;;;:::i;:::-;:29;;:41;;;;:::i;:::-;:45;;:65;;;;:::i;:::-;39361:95;;39484:1;39472:9;:13;39469:155;;;39509:16;;;;;;;;;;;39501:34;;;39543:10;39501:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;39582:9;;;;;;;;;;;:18;;:30;39601:10;39582:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39469:155;39648:19;::::0;::::1;;;;;;;;:27;;;39683:19;39648:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;39644:73;;;;;;39750:1;39732:15;:19;39729:281;;;39767:6;;;;;;;;;;;:22;;;39797:18;39843:4;39867:15;39901:1;39921::::0;39941:8:::1;;;;;;;;;;;39968:15;39767:231;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39729:281;37827:2202;;;;;;;;;25094:5:::0;25075:16;;:24;;;;;;;;;;;;;;;;;;37786:2243::o;9694:240::-;9814:7;9872:1;9867;:6;;9875:12;9859:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9914:1;9910;:5;9903:12;;9694:240;;;;;:::o;37339:439::-;37425:7;37455:21;37487:9;37479:17;;:4;;;;;;;;;;;:17;;;:48;;37519:8;;37479:48;;;37499:17;;37479:48;37455:72;;37538:17;37558:34;37588:3;37558:25;37569:13;37558:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;37538:54;;37632:39;37661:9;37632;:24;37650:4;37632:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;37605:9;:24;37623:4;37605:24;;;;;;;;;;;;;;;:66;;;;37712:4;37687:42;;37696:6;37687:42;;;37719:9;37687:42;;;;;;:::i;:::-;;;;;;;;37749:21;37760:9;37749:6;:10;;:21;;;;:::i;:::-;37742:28;;;;37339:439;;;;;:::o;8153:98::-;8211:7;8242:1;8238;:5;;;;:::i;:::-;8231:12;;8153:98;;;;:::o;8552:::-;8610:7;8641:1;8637;:5;;;;:::i;:::-;8630:12;;8552:98;;;;:::o;24:722:1:-;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;1046:155::-;1100:5;1138:6;1125:20;1116:29;;1154:41;1189:5;1154:41;:::i;:::-;1046:155;;;;:::o;1224:370::-;1295:5;1344:3;1337:4;1329:6;1325:17;1321:27;1311:122;;1352:79;;:::i;:::-;1311:122;1469:6;1456:20;1494:94;1584:3;1576:6;1569:4;1561:6;1557:17;1494:94;:::i;:::-;1485:103;;1301:293;1224:370;;;;:::o;1600:133::-;1643:5;1681:6;1668:20;1659:29;;1697:30;1721:5;1697:30;:::i;:::-;1600:133;;;;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:143::-;1941:5;1972:6;1966:13;1957:22;;1988:33;2015:5;1988:33;:::i;:::-;1884:143;;;;:::o;2033:329::-;2092:6;2141:2;2129:9;2120:7;2116:23;2112:32;2109:119;;;2147:79;;:::i;:::-;2109:119;2267:1;2292:53;2337:7;2328:6;2317:9;2313:22;2292:53;:::i;:::-;2282:63;;2238:117;2033:329;;;;:::o;2368:351::-;2438:6;2487:2;2475:9;2466:7;2462:23;2458:32;2455:119;;;2493:79;;:::i;:::-;2455:119;2613:1;2638:64;2694:7;2685:6;2674:9;2670:22;2638:64;:::i;:::-;2628:74;;2584:128;2368:351;;;;:::o;2725:345::-;2792:6;2841:2;2829:9;2820:7;2816:23;2812:32;2809:119;;;2847:79;;:::i;:::-;2809:119;2967:1;2992:61;3045:7;3036:6;3025:9;3021:22;2992:61;:::i;:::-;2982:71;;2938:125;2725:345;;;;:::o;3076:474::-;3144:6;3152;3201:2;3189:9;3180:7;3176:23;3172:32;3169:119;;;3207:79;;:::i;:::-;3169:119;3327:1;3352:53;3397:7;3388:6;3377:9;3373:22;3352:53;:::i;:::-;3342:63;;3298:117;3454:2;3480:53;3525:7;3516:6;3505:9;3501:22;3480:53;:::i;:::-;3470:63;;3425:118;3076:474;;;;;:::o;3556:619::-;3633:6;3641;3649;3698:2;3686:9;3677:7;3673:23;3669:32;3666:119;;;3704:79;;:::i;:::-;3666:119;3824:1;3849:53;3894:7;3885:6;3874:9;3870:22;3849:53;:::i;:::-;3839:63;;3795:117;3951:2;3977:53;4022:7;4013:6;4002:9;3998:22;3977:53;:::i;:::-;3967:63;;3922:118;4079:2;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4050:118;3556:619;;;;;:::o;4181:468::-;4246:6;4254;4303:2;4291:9;4282:7;4278:23;4274:32;4271:119;;;4309:79;;:::i;:::-;4271:119;4429:1;4454:53;4499:7;4490:6;4479:9;4475:22;4454:53;:::i;:::-;4444:63;;4400:117;4556:2;4582:50;4624:7;4615:6;4604:9;4600:22;4582:50;:::i;:::-;4572:60;;4527:115;4181:468;;;;;:::o;4655:474::-;4723:6;4731;4780:2;4768:9;4759:7;4755:23;4751:32;4748:119;;;4786:79;;:::i;:::-;4748:119;4906:1;4931:53;4976:7;4967:6;4956:9;4952:22;4931:53;:::i;:::-;4921:63;;4877:117;5033:2;5059:53;5104:7;5095:6;5084:9;5080:22;5059:53;:::i;:::-;5049:63;;5004:118;4655:474;;;;;:::o;5135:539::-;5219:6;5268:2;5256:9;5247:7;5243:23;5239:32;5236:119;;;5274:79;;:::i;:::-;5236:119;5422:1;5411:9;5407:17;5394:31;5452:18;5444:6;5441:30;5438:117;;;5474:79;;:::i;:::-;5438:117;5579:78;5649:7;5640:6;5629:9;5625:22;5579:78;:::i;:::-;5569:88;;5365:302;5135:539;;;;:::o;5680:323::-;5736:6;5785:2;5773:9;5764:7;5760:23;5756:32;5753:119;;;5791:79;;:::i;:::-;5753:119;5911:1;5936:50;5978:7;5969:6;5958:9;5954:22;5936:50;:::i;:::-;5926:60;;5882:114;5680:323;;;;:::o;6009:468::-;6074:6;6082;6131:2;6119:9;6110:7;6106:23;6102:32;6099:119;;;6137:79;;:::i;:::-;6099:119;6257:1;6282:50;6324:7;6315:6;6304:9;6300:22;6282:50;:::i;:::-;6272:60;;6228:114;6381:2;6407:53;6452:7;6443:6;6432:9;6428:22;6407:53;:::i;:::-;6397:63;;6352:118;6009:468;;;;;:::o;6483:329::-;6542:6;6591:2;6579:9;6570:7;6566:23;6562:32;6559:119;;;6597:79;;:::i;:::-;6559:119;6717:1;6742:53;6787:7;6778:6;6767:9;6763:22;6742:53;:::i;:::-;6732:63;;6688:117;6483:329;;;;:::o;6818:474::-;6886:6;6894;6943:2;6931:9;6922:7;6918:23;6914:32;6911:119;;;6949:79;;:::i;:::-;6911:119;7069:1;7094:53;7139:7;7130:6;7119:9;7115:22;7094:53;:::i;:::-;7084:63;;7040:117;7196:2;7222:53;7267:7;7258:6;7247:9;7243:22;7222:53;:::i;:::-;7212:63;;7167:118;6818:474;;;;;:::o;7298:663::-;7386:6;7394;7402;7451:2;7439:9;7430:7;7426:23;7422:32;7419:119;;;7457:79;;:::i;:::-;7419:119;7577:1;7602:64;7658:7;7649:6;7638:9;7634:22;7602:64;:::i;:::-;7592:74;;7548:128;7715:2;7741:64;7797:7;7788:6;7777:9;7773:22;7741:64;:::i;:::-;7731:74;;7686:129;7854:2;7880:64;7936:7;7927:6;7916:9;7912:22;7880:64;:::i;:::-;7870:74;;7825:129;7298:663;;;;;:::o;7967:1057::-;8071:6;8079;8087;8095;8103;8111;8160:3;8148:9;8139:7;8135:23;8131:33;8128:120;;;8167:79;;:::i;:::-;8128:120;8287:1;8312:53;8357:7;8348:6;8337:9;8333:22;8312:53;:::i;:::-;8302:63;;8258:117;8414:2;8440:53;8485:7;8476:6;8465:9;8461:22;8440:53;:::i;:::-;8430:63;;8385:118;8542:2;8568:53;8613:7;8604:6;8593:9;8589:22;8568:53;:::i;:::-;8558:63;;8513:118;8670:2;8696:53;8741:7;8732:6;8721:9;8717:22;8696:53;:::i;:::-;8686:63;;8641:118;8798:3;8825:53;8870:7;8861:6;8850:9;8846:22;8825:53;:::i;:::-;8815:63;;8769:119;8927:3;8954:53;8999:7;8990:6;8979:9;8975:22;8954:53;:::i;:::-;8944:63;;8898:119;7967:1057;;;;;;;;:::o;9030:179::-;9099:10;9120:46;9162:3;9154:6;9120:46;:::i;:::-;9198:4;9193:3;9189:14;9175:28;;9030:179;;;;:::o;9215:142::-;9318:32;9344:5;9318:32;:::i;:::-;9313:3;9306:45;9215:142;;:::o;9363:108::-;9440:24;9458:5;9440:24;:::i;:::-;9435:3;9428:37;9363:108;;:::o;9477:118::-;9564:24;9582:5;9564:24;:::i;:::-;9559:3;9552:37;9477:118;;:::o;9631:732::-;9750:3;9779:54;9827:5;9779:54;:::i;:::-;9849:86;9928:6;9923:3;9849:86;:::i;:::-;9842:93;;9959:56;10009:5;9959:56;:::i;:::-;10038:7;10069:1;10054:284;10079:6;10076:1;10073:13;10054:284;;;10155:6;10149:13;10182:63;10241:3;10226:13;10182:63;:::i;:::-;10175:70;;10268:60;10321:6;10268:60;:::i;:::-;10258:70;;10114:224;10101:1;10098;10094:9;10089:14;;10054:284;;;10058:14;10354:3;10347:10;;9755:608;;;9631:732;;;;:::o;10369:109::-;10450:21;10465:5;10450:21;:::i;:::-;10445:3;10438:34;10369:109;;:::o;10484:187::-;10599:65;10658:5;10599:65;:::i;:::-;10594:3;10587:78;10484:187;;:::o;10677:183::-;10790:63;10847:5;10790:63;:::i;:::-;10785:3;10778:76;10677:183;;:::o;10866:147::-;10961:45;11000:5;10961:45;:::i;:::-;10956:3;10949:58;10866:147;;:::o;11019:364::-;11107:3;11135:39;11168:5;11135:39;:::i;:::-;11190:71;11254:6;11249:3;11190:71;:::i;:::-;11183:78;;11270:52;11315:6;11310:3;11303:4;11296:5;11292:16;11270:52;:::i;:::-;11347:29;11369:6;11347:29;:::i;:::-;11342:3;11338:39;11331:46;;11111:272;11019:364;;;;:::o;11389:366::-;11531:3;11552:67;11616:2;11611:3;11552:67;:::i;:::-;11545:74;;11628:93;11717:3;11628:93;:::i;:::-;11746:2;11741:3;11737:12;11730:19;;11389:366;;;:::o;11761:::-;11903:3;11924:67;11988:2;11983:3;11924:67;:::i;:::-;11917:74;;12000:93;12089:3;12000:93;:::i;:::-;12118:2;12113:3;12109:12;12102:19;;11761:366;;;:::o;12133:365::-;12275:3;12296:66;12360:1;12355:3;12296:66;:::i;:::-;12289:73;;12371:93;12460:3;12371:93;:::i;:::-;12489:2;12484:3;12480:12;12473:19;;12133:365;;;:::o;12504:366::-;12646:3;12667:67;12731:2;12726:3;12667:67;:::i;:::-;12660:74;;12743:93;12832:3;12743:93;:::i;:::-;12861:2;12856:3;12852:12;12845:19;;12504:366;;;:::o;12876:::-;13018:3;13039:67;13103:2;13098:3;13039:67;:::i;:::-;13032:74;;13115:93;13204:3;13115:93;:::i;:::-;13233:2;13228:3;13224:12;13217:19;;12876:366;;;:::o;13248:::-;13390:3;13411:67;13475:2;13470:3;13411:67;:::i;:::-;13404:74;;13487:93;13576:3;13487:93;:::i;:::-;13605:2;13600:3;13596:12;13589:19;;13248:366;;;:::o;13620:365::-;13762:3;13783:66;13847:1;13842:3;13783:66;:::i;:::-;13776:73;;13858:93;13947:3;13858:93;:::i;:::-;13976:2;13971:3;13967:12;13960:19;;13620:365;;;:::o;13991:366::-;14133:3;14154:67;14218:2;14213:3;14154:67;:::i;:::-;14147:74;;14230:93;14319:3;14230:93;:::i;:::-;14348:2;14343:3;14339:12;14332:19;;13991:366;;;:::o;14363:::-;14505:3;14526:67;14590:2;14585:3;14526:67;:::i;:::-;14519:74;;14602:93;14691:3;14602:93;:::i;:::-;14720:2;14715:3;14711:12;14704:19;;14363:366;;;:::o;14735:118::-;14822:24;14840:5;14822:24;:::i;:::-;14817:3;14810:37;14735:118;;:::o;14859:112::-;14942:22;14958:5;14942:22;:::i;:::-;14937:3;14930:35;14859:112;;:::o;14977:222::-;15070:4;15108:2;15097:9;15093:18;15085:26;;15121:71;15189:1;15178:9;15174:17;15165:6;15121:71;:::i;:::-;14977:222;;;;:::o;15205:254::-;15314:4;15352:2;15341:9;15337:18;15329:26;;15365:87;15449:1;15438:9;15434:17;15425:6;15365:87;:::i;:::-;15205:254;;;;:::o;15465:332::-;15586:4;15624:2;15613:9;15609:18;15601:26;;15637:71;15705:1;15694:9;15690:17;15681:6;15637:71;:::i;:::-;15718:72;15786:2;15775:9;15771:18;15762:6;15718:72;:::i;:::-;15465:332;;;;;:::o;15803:807::-;16052:4;16090:3;16079:9;16075:19;16067:27;;16104:71;16172:1;16161:9;16157:17;16148:6;16104:71;:::i;:::-;16185:72;16253:2;16242:9;16238:18;16229:6;16185:72;:::i;:::-;16267:80;16343:2;16332:9;16328:18;16319:6;16267:80;:::i;:::-;16357;16433:2;16422:9;16418:18;16409:6;16357:80;:::i;:::-;16447:73;16515:3;16504:9;16500:19;16491:6;16447:73;:::i;:::-;16530;16598:3;16587:9;16583:19;16574:6;16530:73;:::i;:::-;15803:807;;;;;;;;;:::o;16616:210::-;16703:4;16741:2;16730:9;16726:18;16718:26;;16754:65;16816:1;16805:9;16801:17;16792:6;16754:65;:::i;:::-;16616:210;;;;:::o;16832:278::-;16953:4;16991:2;16980:9;16976:18;16968:26;;17004:99;17100:1;17089:9;17085:17;17076:6;17004:99;:::i;:::-;16832:278;;;;:::o;17116:274::-;17235:4;17273:2;17262:9;17258:18;17250:26;;17286:97;17380:1;17369:9;17365:17;17356:6;17286:97;:::i;:::-;17116:274;;;;:::o;17396:313::-;17509:4;17547:2;17536:9;17532:18;17524:26;;17596:9;17590:4;17586:20;17582:1;17571:9;17567:17;17560:47;17624:78;17697:4;17688:6;17624:78;:::i;:::-;17616:86;;17396:313;;;;:::o;17715:419::-;17881:4;17919:2;17908:9;17904:18;17896:26;;17968:9;17962:4;17958:20;17954:1;17943:9;17939:17;17932:47;17996:131;18122:4;17996:131;:::i;:::-;17988:139;;17715:419;;;:::o;18140:::-;18306:4;18344:2;18333:9;18329:18;18321:26;;18393:9;18387:4;18383:20;18379:1;18368:9;18364:17;18357:47;18421:131;18547:4;18421:131;:::i;:::-;18413:139;;18140:419;;;:::o;18565:::-;18731:4;18769:2;18758:9;18754:18;18746:26;;18818:9;18812:4;18808:20;18804:1;18793:9;18789:17;18782:47;18846:131;18972:4;18846:131;:::i;:::-;18838:139;;18565:419;;;:::o;18990:::-;19156:4;19194:2;19183:9;19179:18;19171:26;;19243:9;19237:4;19233:20;19229:1;19218:9;19214:17;19207:47;19271:131;19397:4;19271:131;:::i;:::-;19263:139;;18990:419;;;:::o;19415:::-;19581:4;19619:2;19608:9;19604:18;19596:26;;19668:9;19662:4;19658:20;19654:1;19643:9;19639:17;19632:47;19696:131;19822:4;19696:131;:::i;:::-;19688:139;;19415:419;;;:::o;19840:::-;20006:4;20044:2;20033:9;20029:18;20021:26;;20093:9;20087:4;20083:20;20079:1;20068:9;20064:17;20057:47;20121:131;20247:4;20121:131;:::i;:::-;20113:139;;19840:419;;;:::o;20265:::-;20431:4;20469:2;20458:9;20454:18;20446:26;;20518:9;20512:4;20508:20;20504:1;20493:9;20489:17;20482:47;20546:131;20672:4;20546:131;:::i;:::-;20538:139;;20265:419;;;:::o;20690:::-;20856:4;20894:2;20883:9;20879:18;20871:26;;20943:9;20937:4;20933:20;20929:1;20918:9;20914:17;20907:47;20971:131;21097:4;20971:131;:::i;:::-;20963:139;;20690:419;;;:::o;21115:::-;21281:4;21319:2;21308:9;21304:18;21296:26;;21368:9;21362:4;21358:20;21354:1;21343:9;21339:17;21332:47;21396:131;21522:4;21396:131;:::i;:::-;21388:139;;21115:419;;;:::o;21540:222::-;21633:4;21671:2;21660:9;21656:18;21648:26;;21684:71;21752:1;21741:9;21737:17;21728:6;21684:71;:::i;:::-;21540:222;;;;:::o;21768:831::-;22031:4;22069:3;22058:9;22054:19;22046:27;;22083:71;22151:1;22140:9;22136:17;22127:6;22083:71;:::i;:::-;22164:80;22240:2;22229:9;22225:18;22216:6;22164:80;:::i;:::-;22291:9;22285:4;22281:20;22276:2;22265:9;22261:18;22254:48;22319:108;22422:4;22413:6;22319:108;:::i;:::-;22311:116;;22437:72;22505:2;22494:9;22490:18;22481:6;22437:72;:::i;:::-;22519:73;22587:3;22576:9;22572:19;22563:6;22519:73;:::i;:::-;21768:831;;;;;;;;:::o;22605:332::-;22726:4;22764:2;22753:9;22749:18;22741:26;;22777:71;22845:1;22834:9;22830:17;22821:6;22777:71;:::i;:::-;22858:72;22926:2;22915:9;22911:18;22902:6;22858:72;:::i;:::-;22605:332;;;;;:::o;22943:214::-;23032:4;23070:2;23059:9;23055:18;23047:26;;23083:67;23147:1;23136:9;23132:17;23123:6;23083:67;:::i;:::-;22943:214;;;;:::o;23163:129::-;23197:6;23224:20;;:::i;:::-;23214:30;;23253:33;23281:4;23273:6;23253:33;:::i;:::-;23163:129;;;:::o;23298:75::-;23331:6;23364:2;23358:9;23348:19;;23298:75;:::o;23379:311::-;23456:4;23546:18;23538:6;23535:30;23532:56;;;23568:18;;:::i;:::-;23532:56;23618:4;23610:6;23606:17;23598:25;;23678:4;23672;23668:15;23660:23;;23379:311;;;:::o;23696:132::-;23763:4;23786:3;23778:11;;23816:4;23811:3;23807:14;23799:22;;23696:132;;;:::o;23834:114::-;23901:6;23935:5;23929:12;23919:22;;23834:114;;;:::o;23954:99::-;24006:6;24040:5;24034:12;24024:22;;23954:99;;;:::o;24059:113::-;24129:4;24161;24156:3;24152:14;24144:22;;24059:113;;;:::o;24178:184::-;24277:11;24311:6;24306:3;24299:19;24351:4;24346:3;24342:14;24327:29;;24178:184;;;;:::o;24368:169::-;24452:11;24486:6;24481:3;24474:19;24526:4;24521:3;24517:14;24502:29;;24368:169;;;;:::o;24543:305::-;24583:3;24602:20;24620:1;24602:20;:::i;:::-;24597:25;;24636:20;24654:1;24636:20;:::i;:::-;24631:25;;24790:1;24722:66;24718:74;24715:1;24712:81;24709:107;;;24796:18;;:::i;:::-;24709:107;24840:1;24837;24833:9;24826:16;;24543:305;;;;:::o;24854:185::-;24894:1;24911:20;24929:1;24911:20;:::i;:::-;24906:25;;24945:20;24963:1;24945:20;:::i;:::-;24940:25;;24984:1;24974:35;;24989:18;;:::i;:::-;24974:35;25031:1;25028;25024:9;25019:14;;24854:185;;;;:::o;25045:348::-;25085:7;25108:20;25126:1;25108:20;:::i;:::-;25103:25;;25142:20;25160:1;25142:20;:::i;:::-;25137:25;;25330:1;25262:66;25258:74;25255:1;25252:81;25247:1;25240:9;25233:17;25229:105;25226:131;;;25337:18;;:::i;:::-;25226:131;25385:1;25382;25378:9;25367:20;;25045:348;;;;:::o;25399:191::-;25439:4;25459:20;25477:1;25459:20;:::i;:::-;25454:25;;25493:20;25511:1;25493:20;:::i;:::-;25488:25;;25532:1;25529;25526:8;25523:34;;;25537:18;;:::i;:::-;25523:34;25582:1;25579;25575:9;25567:17;;25399:191;;;;:::o;25596:96::-;25633:7;25662:24;25680:5;25662:24;:::i;:::-;25651:35;;25596:96;;;:::o;25698:104::-;25743:7;25772:24;25790:5;25772:24;:::i;:::-;25761:35;;25698:104;;;:::o;25808:90::-;25842:7;25885:5;25878:13;25871:21;25860:32;;25808:90;;;:::o;25904:126::-;25941:7;25981:42;25974:5;25970:54;25959:65;;25904:126;;;:::o;26036:77::-;26073:7;26102:5;26091:16;;26036:77;;;:::o;26119:86::-;26154:7;26194:4;26187:5;26183:16;26172:27;;26119:86;;;:::o;26211:154::-;26289:9;26322:37;26353:5;26322:37;:::i;:::-;26309:50;;26211:154;;;:::o;26371:152::-;26447:9;26480:37;26511:5;26480:37;:::i;:::-;26467:50;;26371:152;;;:::o;26529:121::-;26587:9;26620:24;26638:5;26620:24;:::i;:::-;26607:37;;26529:121;;;:::o;26656:126::-;26706:9;26739:37;26770:5;26739:37;:::i;:::-;26726:50;;26656:126;;;:::o;26788:113::-;26838:9;26871:24;26889:5;26871:24;:::i;:::-;26858:37;;26788:113;;;:::o;26907:307::-;26975:1;26985:113;26999:6;26996:1;26993:13;26985:113;;;27084:1;27079:3;27075:11;27069:18;27065:1;27060:3;27056:11;27049:39;27021:2;27018:1;27014:10;27009:15;;26985:113;;;27116:6;27113:1;27110:13;27107:101;;;27196:1;27187:6;27182:3;27178:16;27171:27;27107:101;26956:258;26907:307;;;:::o;27220:320::-;27264:6;27301:1;27295:4;27291:12;27281:22;;27348:1;27342:4;27338:12;27369:18;27359:81;;27425:4;27417:6;27413:17;27403:27;;27359:81;27487:2;27479:6;27476:14;27456:18;27453:38;27450:84;;;27506:18;;:::i;:::-;27450:84;27271:269;27220:320;;;:::o;27546:281::-;27629:27;27651:4;27629:27;:::i;:::-;27621:6;27617:40;27759:6;27747:10;27744:22;27723:18;27711:10;27708:34;27705:62;27702:88;;;27770:18;;:::i;:::-;27702:88;27810:10;27806:2;27799:22;27589:238;27546:281;;:::o;27833:233::-;27872:3;27895:24;27913:5;27895:24;:::i;:::-;27886:33;;27941:66;27934:5;27931:77;27928:103;;;28011:18;;:::i;:::-;27928:103;28058:1;28051:5;28047:13;28040:20;;27833:233;;;:::o;28072:180::-;28120:77;28117:1;28110:88;28217:4;28214:1;28207:15;28241:4;28238:1;28231:15;28258:180;28306:77;28303:1;28296:88;28403:4;28400:1;28393:15;28427:4;28424:1;28417:15;28444:180;28492:77;28489:1;28482:88;28589:4;28586:1;28579:15;28613:4;28610:1;28603:15;28630:180;28678:77;28675:1;28668:88;28775:4;28772:1;28765:15;28799:4;28796:1;28789:15;28816:180;28864:77;28861:1;28854:88;28961:4;28958:1;28951:15;28985:4;28982:1;28975:15;29002:117;29111:1;29108;29101:12;29125:117;29234:1;29231;29224:12;29248:117;29357:1;29354;29347:12;29371:117;29480:1;29477;29470:12;29494:102;29535:6;29586:2;29582:7;29577:2;29570:5;29566:14;29562:28;29552:38;;29494:102;;;:::o;29602:221::-;29742:34;29738:1;29730:6;29726:14;29719:58;29811:4;29806:2;29798:6;29794:15;29787:29;29602:221;:::o;29829:179::-;29969:31;29965:1;29957:6;29953:14;29946:55;29829:179;:::o;30014:156::-;30154:8;30150:1;30142:6;30138:14;30131:32;30014:156;:::o;30176:222::-;30316:34;30312:1;30304:6;30300:14;30293:58;30385:5;30380:2;30372:6;30368:15;30361:30;30176:222;:::o;30404:182::-;30544:34;30540:1;30532:6;30528:14;30521:58;30404:182;:::o;30592:162::-;30732:14;30728:1;30720:6;30716:14;30709:38;30592:162;:::o;30760:152::-;30900:4;30896:1;30888:6;30884:14;30877:28;30760:152;:::o;30918:223::-;31058:34;31054:1;31046:6;31042:14;31035:58;31127:6;31122:2;31114:6;31110:15;31103:31;30918:223;:::o;31147:224::-;31287:34;31283:1;31275:6;31271:14;31264:58;31356:7;31351:2;31343:6;31339:15;31332:32;31147:224;:::o;31377:122::-;31450:24;31468:5;31450:24;:::i;:::-;31443:5;31440:35;31430:63;;31489:1;31486;31479:12;31430:63;31377:122;:::o;31505:138::-;31586:32;31612:5;31586:32;:::i;:::-;31579:5;31576:43;31566:71;;31633:1;31630;31623:12;31566:71;31505:138;:::o;31649:116::-;31719:21;31734:5;31719:21;:::i;:::-;31712:5;31709:32;31699:60;;31755:1;31752;31745:12;31699:60;31649:116;:::o;31771:122::-;31844:24;31862:5;31844:24;:::i;:::-;31837:5;31834:35;31824:63;;31883:1;31880;31873:12;31824:63;31771:122;:::o

Swarm Source

ipfs://ae27217c1cf73bad50e87002fc8adab6da2711a1ff164f519a3d1c1ec9682c58
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.