Token Nitrogen

 

Overview ERC20

Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
10,000,000 $GAS

Holders:
20 addresses

Transfers:
-

Contract:
0x99f1d2747078f33ff41ebb62714f90adfed5281e0x99F1d2747078F33FF41ebB62714f90AdfeD5281e

Decimals:
9

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Nitrogen

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-08
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.8;


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * C U ON THE MOON
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    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);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

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

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

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

contract DividendDistributor {

    address _mainToken;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    IERC20 TOKEN;
    address WBNB;
    IDEXRouter router;

    address[] public shareholders;
    mapping (address => uint256) public shareholderIndexes;
    mapping (address => uint256) public 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 = 1 hours;
    uint256 public minDistribution = 1000000 * (10 ** 9);
    uint256 public gas = 500000;
    
    uint256 currentIndex;

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

    modifier onlyToken() {
        require(msg.sender == _mainToken || _mainToken == address(0)); _;
    }

    constructor (address routerAddress, address _reflectionToken) {
        router = IDEXRouter(routerAddress);
        TOKEN = IERC20(_reflectionToken);
        WBNB = router.WETH();
        _mainToken = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _gas) external onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        gas = _gas;
    }

    function setShare(address shareholder, uint256 amount) external onlyToken {
        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }
        
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }
        
        totalShares = (totalShares - shares[shareholder].amount) + amount;
        shares[shareholder].amount = amount;
        
        shares[shareholder].totalExcluded = getCumulativeDividends(amount);
    }

    function deposit() external payable {
        uint256 balanceBefore = TOKEN.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(TOKEN);

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

        uint256 amount = TOKEN.balanceOf(address(this)) - balanceBefore;

        totalDividends = totalDividends + amount;
        dividendsPerShare = dividendsPerShare + (dividendsPerShareAccuracyFactor * amount) / totalShares;
    }

    function process() public onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

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

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }
            
            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }
    
    function getClaimTime(address shareholder) external view returns (uint256) {
        if (shareholderClaims[shareholder] + minPeriod <= block.timestamp)
            return 0;
        else
            return (shareholderClaims[shareholder] + minPeriod) - block.timestamp;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }
        
        uint256 unpaidEarnings = getUnpaidEarnings(shareholder);
        if(unpaidEarnings > 0){
            totalDistributed = totalDistributed + unpaidEarnings;
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised + unpaidEarnings;
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
            TOKEN.transfer(shareholder, unpaidEarnings);
        }
    }

    function claimDividend(address shareholder) external onlyToken {
        distributeDividend(shareholder);
    }

    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 - shareholderTotalExcluded;
    }
    
    function getPaidDividends(address shareholder) external view returns (uint256) {
        return shares[shareholder].totalRealised;
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        if(share == 0){ return 0; }
        return (share * dividendsPerShare) / 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();
    }
}

/**
 * @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.
 */
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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract Nitrogen is IERC20, Ownable {
    using Address for address;
    
    address WBNB;
    address stableToken = 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Nitrogen";
    string constant _symbol = "$GAS";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 10_000_000 * (10 ** _decimals);
    uint256 public _maxTxAmount = (_totalSupply * 1) / 100;
    uint256 public _maxWalletSize = (_totalSupply * 2) / 100;

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

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

    uint256 liquidityFee = 0;
    uint256 reflectionFee = 0;
    uint256 teamFee = 600;
    uint256 totalFee =600;
    uint256 feeDenominator = 10000;

    uint256 marketingFee = 1;
    uint256 devFee = 1;
    uint256 buybackFee = 4;
    uint256 tFee = marketingFee + devFee + buybackFee;

    address public autoLiquidityReceiver;
    address payable public marketingFeeReceiver;
    address payable public buybackFeeReceiver;
    address payable public devFeeReceiver;

    uint256 targetLiquidity = 200;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address routerAddress = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506;
    mapping (address => bool) liquidityPools;

    address public pair;

    uint256 public launchedAt;
    uint256 public launchedTime;

    DividendDistributor public distributor;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 400;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {
        router = IDEXRouter(routerAddress);
        WBNB = router.WETH();
        pair = IDEXFactory(router.factory()).createPair(address(this), stableToken);
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;
        _allowances[address(this)][stableToken] = type(uint256).max;

        
        distributor = new DividendDistributor(routerAddress, 0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8);

        isFeeExempt[owner()] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;
        isDividendExempt[owner()] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;
        autoLiquidityReceiver = owner();
        marketingFeeReceiver = payable(0x5209e56921dE3CbB114C5B34ebE8833db0a1737C);
        devFeeReceiver = payable(0xC9222db4be1E9581E3e556b9Cd5Ab22964882991);
        buybackFeeReceiver = payable(0x0cD8e1e6b5003448CcC221eA01e5185435208a5f);


        _balances[owner()] = _totalSupply;
        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(_balances[sender] >= amount, "Insufficient balance");
        require(amount > 0, "Zero amount transferred");

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

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) checkWalletLimit(recipient, amount);
        }

        if(!launched() && liquidityPools[recipient]){ require(sender == owner(), "Contract not launched yet."); launch(); }

        _balances[sender] = _balances[sender] - amount;

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount) : amount;
        
        if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(); }
        
        _balances[recipient] = _balances[recipient] + amountReceived;

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

        try distributor.process() {} catch {}

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

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function withdrawStuckToken(address from, address to, uint256 amount) public onlyOwner {
        _basicTransfer(from, to, amount);
    }

    function withdrawStuckETH() public onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee() public view returns (uint256) {
        if(launchedAt + 2 >= block.number){ return feeDenominator - 1; }
        return totalFee;
    }

    function takeFee(address sender, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = (amount * getTotalFee()) / feeDenominator;
        
        _balances[address(this)] = _balances[address(this)] + feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - feeAmount;
    }

    function _swapETHForStableToken(uint256 tokenAmount, address receiver) private {
        address[] memory path = new address[](2);
        path[1] = router.WETH();
        path[2] = stableToken;

        router.swapExactETHForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            path,
            receiver,
            block.timestamp
        );
    }


    function _addLiquidityStableToken(uint256 amountBNBLiquidity, uint256 amountToLiquify) private {
        router.addLiquidity(
            address(this),
            stableToken,
            amountBNBLiquidity,
            amountToLiquify,
            0,
            0,
            autoLiquidityReceiver,
            block.timestamp
        );
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 amountToSwap = swapThreshold;
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = ((amountToSwap * dynamicLiquidityFee) / totalFee) / 2;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = stableToken;
        path[2] = WBNB;
        
        uint256 balanceBefore = address(this).balance;

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

        uint256 amountBNB = address(this).balance - balanceBefore;
        uint256 totalBNBFee = totalFee - dynamicLiquidityFee / 2;

        uint256 amountBNBLiquidity = (amountBNB * dynamicLiquidityFee) / totalBNBFee / 2;
        uint256 amountBNBReflection = (amountBNB * reflectionFee) / totalBNBFee;
        uint256 amountBNBMarketing = (amountBNB * teamFee) / totalBNBFee;

        if (amountBNBReflection > 0)
            try distributor.deposit{value: amountBNBReflection}() {} catch {}

        if(amountToLiquify > 0) {
            uint256 initialBalance = IERC20(stableToken).balanceOf(address(this));

            _swapETHForStableToken(amountBNBLiquidity, address(this));

            uint256 newBalance = IERC20(stableToken).balanceOf(address(this)) - initialBalance;

            _addLiquidityStableToken(amountToLiquify, newBalance);
           
            emit AutoLiquify(amountBNB, amountToLiquify);
        }
        
        if (amountBNBMarketing > 0)
            marketingFeeReceiver.transfer(amountBNBMarketing * marketingFee / tFee );
            buybackFeeReceiver.transfer(amountBNBMarketing * buybackFee / tFee);
            devFeeReceiver.transfer(amountBNBMarketing * devFee / tFee);
    }

    function manualPurchase(uint256 _percent) external onlyOwner {
        uint256 purchase = (address(this).balance * _percent) / 100;
        distributor.deposit{value: purchase}();
    }
    
    function resetShares(address shareholder) external onlyOwner {
        if(!isDividendExempt[shareholder]){ distributor.setShare(shareholder, _balances[shareholder]); }
        else distributor.setShare(shareholder, 0);
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
        launchedTime = block.timestamp;
    }

    function setTxLimit(uint256 numerator, uint256 divisor) external onlyOwner {
        _maxTxAmount = (_totalSupply * numerator) / divisor;
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && divisor <= 10000);
        _maxWalletSize = (_totalSupply * numerator) / divisor;
    }

    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && !liquidityPools[holder] && holder != owner());
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

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

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

    function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _teamFee, uint256 _feeDenominator) external onlyOwner {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        teamFee = _teamFee;
        totalFee = _liquidityFee + _reflectionFee + _teamFee;
        feeDenominator = _feeDenominator;
        require(totalFee <= feeDenominator / 4);
    }

    function setBreakdown(uint256 _marketingFee, uint256 _devFee, uint256 _buybackFee) external onlyOwner {
            marketingFee = _marketingFee;
            devFee = _devFee;
            buybackFee = _buybackFee;
            tFee = _marketingFee + _devFee + _buybackFee;
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external onlyOwner {
        if (autoLiquidityReceiver != DEAD)
            autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = payable(_marketingFeeReceiver);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator) external onlyOwner {
        require(_denominator > 0);
        swapEnabled = _enabled;
        swapThreshold = _totalSupply / _denominator;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 gas) external onlyOwner {
        require(gas < 750000);
        distributor.setDistributionCriteria(_minPeriod, _minDistribution, gas);
    }

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

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return (accuracy * balanceOf(pair)) / getCirculatingSupply();
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }
    
    function getPoolStatistics() external view returns (uint256 totalAmount, uint256 totalClaimed, uint256 holderShares) {
        totalAmount = distributor.totalDividends();
        totalClaimed = distributor.totalDistributed();
        holderShares = distributor.totalShares();
    }
    
    function getWalletStatistics(address wallet) external view returns (uint256 pending, uint256 claimed) {
	    pending = distributor.getUnpaidEarnings(wallet);
	    claimed = distributor.getPaidDividends(wallet);
	}

	function claimDividends() external {
	    distributor.claimDividend(msg.sender);
	    distributor.process();
	}

    event AutoLiquify(uint256 amountBNB, uint256 amountToken);
    //C U ON THE MOON
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolStatistics","outputs":[{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"totalClaimed","type":"uint256"},{"internalType":"uint256","name":"holderShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getWalletStatistics","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"},{"internalType":"uint256","name":"claimed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","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":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percent","type":"uint256"}],"name":"manualPurchase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"resetShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"}],"name":"setBreakdown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273ff970a61a04b1ca14834a43f5de4533ebddb5cc8600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000ee9190620010dc565b62989680620000fe91906200112d565b600555606460016005546200011491906200112d565b620001209190620011bd565b600655606460026005546200013691906200112d565b620001429190620011bd565b6007556000600d556000600e55610258600f55610258601055612710601155600160125560016013556004601455601454601354601254620001859190620011f5565b620001919190620011f5565b60155560c8601a556064601b55731b02da8cb0d097eb8d57a175b88c7d8b47997506601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602260146101000a81548160ff021916908315150217905550610190600554620002209190620011bd565b6023553480156200023057600080fd5b5060006200024362000f0360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d891906200129a565b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000486573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ac91906200129a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016200050a929190620012dd565b6020604051808303816000875af11580156200052a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200055091906200129a565b601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601e6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960006200063f62000f0b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ff970a61a04b1ca14834a43f5de4533ebddb5cc8604051620008a89062000f34565b620008b5929190620012dd565b604051809103906000f080158015620008d2573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60006200092962000f0b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000620009e862000f0b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600062000ac962000f0b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000cf062000f0b60201b60201c565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735209e56921de3cbb114c5b34ebe8833db0a1737c601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c9222db4be1e9581e3e556b9cd5ab22964882991601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730cd8e1e6b5003448ccc221ea01e5185435208a5f601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506005546008600062000e4662000f0b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000e9462000f0b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60055460405162000ef591906200131b565b60405180910390a362001338565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612084806200640283390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000fd05780860481111562000fa85762000fa762000f42565b5b600185161562000fb85780820291505b808102905062000fc88562000f71565b945062000f88565b94509492505050565b60008262000feb5760019050620010be565b8162000ffb5760009050620010be565b81600181146200101457600281146200101f5762001055565b6001915050620010be565b60ff84111562001034576200103362000f42565b5b8360020a9150848211156200104e576200104d62000f42565b5b50620010be565b5060208310610133831016604e8410600b84101617156200108f5782820a90508381111562001089576200108862000f42565b5b620010be565b6200109e848484600162000f7e565b92509050818404811115620010b857620010b762000f42565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620010e982620010c5565b9150620010f683620010cf565b9250620011257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000fd9565b905092915050565b60006200113a82620010c5565b91506200114783620010c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001183576200118262000f42565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620011ca82620010c5565b9150620011d783620010c5565b925082620011ea57620011e96200118e565b5b828204905092915050565b60006200120282620010c5565b91506200120f83620010c5565b92508282019050808211156200122a576200122962000f42565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012628262001235565b9050919050565b620012748162001255565b81146200128057600080fd5b50565b600081519050620012948162001269565b92915050565b600060208284031215620012b357620012b262001230565b5b6000620012c38482850162001283565b91505092915050565b620012d78162001255565b82525050565b6000604082019050620012f46000830185620012cc565b620013036020830184620012cc565b9392505050565b6200131581620010c5565b82525050565b60006020820190506200133260008301846200130a565b92915050565b6150ba80620013486000396000f3fe6080604052600436106102b25760003560e01c80637d1db4a511610175578063bf56b371116100dc578063df20fd4911610095578063f5648a4f1161006f578063f5648a4f14610ab0578063f708a64f14610ac7578063f84ba65d14610af0578063f887ea4014610b19576102b9565b8063df20fd4914610a33578063e96fada214610a5c578063f2fde38b14610a87576102b9565b8063bf56b3711461090d578063bfe1092814610938578063ca33e64c14610963578063d51ed1c81461098e578063dab84ee7146109cb578063dd62ed3e146109f6576102b9565b8063a4b45c001161012e578063a4b45c00146107fd578063a8aa1b3114610826578063a9059cbb14610851578063abe57e701461088e578063ba3194ed146108b7578063bda844c1146108e4576102b9565b80637d1db4a5146106fb57806384b1d1ef14610726578063893d20e8146107515780638da5cb5b1461077c5780638f9a55c0146107a757806395d89b41146107d2576102b9565b8063313ce56711610219578063668038e0116101d2578063668038e0146106115780636ddd1713146106285780636fcba3771461065357806370a082311461067c578063715018a6146106b95780637ae316d0146106d0576102b9565b8063313ce567146105035780633748cba81461052e5780634ad639c714610557578063571ac8b0146105805780635804f1e4146105bd578063658d4b7f146105e8576102b9565b806318160ddd1161026b57806318160ddd146103f55780631faf723b14610420578063201e79911461044957806323b872dd146104725780632b0291b1146104af5780632b112e49146104d8576102b9565b806304215d5a146102be5780630445b667146102fc57806306fdde0314610327578063095ea7b3146103525780630ca61cb11461038f5780631161ae39146103b8576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190614281565b610b44565b6040516102f39291906142c7565b60405180910390f35b34801561030857600080fd5b50610311610c88565b60405161031e91906142f0565b60405180910390f35b34801561033357600080fd5b5061033c610c8e565b604051610349919061439b565b60405180910390f35b34801561035e57600080fd5b50610379600480360381019061037491906143e9565b610ccb565b6040516103869190614444565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b1919061445f565b610dbd565b005b3480156103c457600080fd5b506103df60048036038101906103da91906144b2565b610ef7565b6040516103ec9190614444565b60405180910390f35b34801561040157600080fd5b5061040a610f0c565b60405161041791906142f0565b60405180910390f35b34801561042c57600080fd5b50610447600480360381019061044291906144b2565b610f16565b005b34801561045557600080fd5b50610470600480360381019061046b91906144b2565b610fce565b005b34801561047e57600080fd5b50610499600480360381019061049491906144f2565b611075565b6040516104a69190614444565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d19190614545565b611237565b005b3480156104e457600080fd5b506104ed61136f565b6040516104fa91906142f0565b60405180910390f35b34801561050f57600080fd5b506105186113e3565b604051610525919061458e565b60405180910390f35b34801561053a57600080fd5b506105556004803603810190610550919061445f565b6113ec565b005b34801561056357600080fd5b5061057e60048036038101906105799190614281565b6114b8565b005b34801561058c57600080fd5b506105a760048036038101906105a29190614281565b611705565b6040516105b49190614444565b60405180910390f35b3480156105c957600080fd5b506105d2611738565b6040516105df91906142f0565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a91906145d5565b61173e565b005b34801561061d57600080fd5b5061062661182e565b005b34801561063457600080fd5b5061063d61193f565b60405161064a9190614444565b60405180910390f35b34801561065f57600080fd5b5061067a60048036038101906106759190614615565b611952565b005b34801561068857600080fd5b506106a3600480360381019061069e9190614281565b611a43565b6040516106b091906142f0565b60405180910390f35b3480156106c557600080fd5b506106ce611a8c565b005b3480156106dc57600080fd5b506106e5611bdf565b6040516106f291906142f0565b60405180910390f35b34801561070757600080fd5b50610710611c15565b60405161071d91906142f0565b60405180910390f35b34801561073257600080fd5b5061073b611c1b565b604051610748919061469d565b60405180910390f35b34801561075d57600080fd5b50610766611c41565b60405161077391906146c7565b60405180910390f35b34801561078857600080fd5b50610791611c50565b60405161079e91906146c7565b60405180910390f35b3480156107b357600080fd5b506107bc611c79565b6040516107c991906142f0565b60405180910390f35b3480156107de57600080fd5b506107e7611c7f565b6040516107f4919061439b565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f91906146e2565b611cbc565b005b34801561083257600080fd5b5061083b611e4f565b60405161084891906146c7565b60405180910390f35b34801561085d57600080fd5b50610878600480360381019061087391906143e9565b611e75565b6040516108859190614444565b60405180910390f35b34801561089a57600080fd5b506108b560048036038101906108b091906144b2565b611e8a565b005b3480156108c357600080fd5b506108cc611f5d565b6040516108db93929190614722565b60405180910390f35b3480156108f057600080fd5b5061090b600480360381019061090691906144f2565b612120565b005b34801561091957600080fd5b506109226121c6565b60405161092f91906142f0565b60405180910390f35b34801561094457600080fd5b5061094d6121cc565b60405161095a91906147b8565b60405180910390f35b34801561096f57600080fd5b506109786121f2565b60405161098591906146c7565b60405180910390f35b34801561099a57600080fd5b506109b560048036038101906109b09190614545565b612218565b6040516109c291906142f0565b60405180910390f35b3480156109d757600080fd5b506109e0612269565b6040516109ed919061469d565b60405180910390f35b348015610a0257600080fd5b50610a1d6004803603810190610a1891906146e2565b61228f565b604051610a2a91906142f0565b60405180910390f35b348015610a3f57600080fd5b50610a5a6004803603810190610a5591906147d3565b612316565b005b348015610a6857600080fd5b50610a716123ea565b604051610a7e919061469d565b60405180910390f35b348015610a9357600080fd5b50610aae6004803603810190610aa99190614281565b612410565b005b348015610abc57600080fd5b50610ac56125d1565b005b348015610ad357600080fd5b50610aee6004803603810190610ae991906145d5565b6126af565b005b348015610afc57600080fd5b50610b176004803603810190610b1291906145d5565b6129d7565b005b348015610b2557600080fd5b50610b2e612ac7565b604051610b3b9190614834565b60405180910390f35b600080602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198846040518263ffffffff1660e01b8152600401610ba291906146c7565b602060405180830381865afa158015610bbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be39190614864565b9150602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633cbf8a61846040518263ffffffff1660e01b8152600401610c4091906146c7565b602060405180830381865afa158015610c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c819190614864565b9050915091565b60235481565b60606040518060400160405280600881526020017f4e6974726f67656e000000000000000000000000000000000000000000000000815250905090565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610dab91906142f0565b60405180910390a36001905092915050565b610dc5612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e49906148dd565b60405180910390fd5b620b71b08110610e6157600080fd5b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ca61cb18484846040518463ffffffff1660e01b8152600401610ec093929190614722565b600060405180830381600087803b158015610eda57600080fd5b505af1158015610eee573d6000803e3d6000fd5b50505050505050565b600082610f0383612218565b11905092915050565b6000600554905090565b610f1e612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906148dd565b60405180910390fd5b8082600554610fba919061492c565b610fc491906149b5565b6006819055505050565b610fd6612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105a906148dd565b60405180910390fd5b81601a8190555080601b819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146112235781600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111a291906149e6565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61122e848484612af5565b90509392505050565b61123f612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906148dd565b60405180910390fd5b6000606482476112dc919061492c565b6112e691906149b5565b9050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561135257600080fd5b505af1158015611366573d6000803e3d6000fd5b50505050505050565b600061139c600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a43565b6113c7600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a43565b6113d19190614a1a565b6005546113de91906149e6565b905090565b60006009905090565b6113f4612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611481576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611478906148dd565b60405180910390fd5b8260128190555081601381905550806014819055508082846114a39190614a1a565b6114ad9190614a1a565b601581905550505050565b6114c0612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461154d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611544906148dd565b60405180910390fd5b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661167157602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9682600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161163a929190614a4e565b600060405180830381600087803b15801561165457600080fd5b505af1158015611668573d6000803e3d6000fd5b50505050611702565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968260006040518363ffffffff1660e01b81526004016116cf929190614ab2565b600060405180830381600087803b1580156116e957600080fd5b505af11580156116fd573d6000803e3d6000fd5b505050505b50565b6000611731827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ccb565b9050919050565b60215481565b611746612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca906148dd565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315f7e05e336040518263ffffffff1660e01b815260040161188991906146c7565b600060405180830381600087803b1580156118a357600080fd5b505af11580156118b7573d6000803e3d6000fd5b50505050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c33fb8776040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561192557600080fd5b505af1158015611939573d6000803e3d6000fd5b50505050565b602260149054906101000a900460ff1681565b61195a612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119de906148dd565b60405180910390fd5b83600d8190555082600e8190555081600f81905550818385611a099190614a1a565b611a139190614a1a565b601081905550806011819055506004601154611a2f91906149b5565b6010541115611a3d57600080fd5b50505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a94612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b18906148dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000436002602054611bf19190614a1a565b10611c0c576001601154611c0591906149e6565b9050611c12565b60105490505b90565b60065481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c4b611c50565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075481565b60606040518060400160405280600481526020017f2447415300000000000000000000000000000000000000000000000000000000815250905090565b611cc4612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d48906148dd565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e0a5781601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b80601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611e82338484612af5565b905092915050565b611e92612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f16906148dd565b60405180910390fd5b600081118015611f3157506127108111155b611f3a57600080fd5b8082600554611f49919061492c565b611f5391906149b5565b6007819055505050565b6000806000602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663997664d76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff39190614864565b9250602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663efca2eed6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612062573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120869190614864565b9150602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a98ef396040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121199190614864565b9050909192565b612128612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac906148dd565b60405180910390fd5b6121c0838383613259565b50505050565b60205481565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061222261136f565b61224d601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a43565b83612258919061492c565b61226291906149b5565b9050919050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61231e612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a2906148dd565b60405180910390fd5b600081116123b857600080fd5b81602260146101000a81548160ff021916908315150217905550806005546123e091906149b5565b6023819055505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612418612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249c906148dd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250b90614b4d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125d9612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d906148dd565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156126ac573d6000803e3d6000fd5b50565b6126b7612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b906148dd565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156127ca5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561280957506127d9611c50565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61281257600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561290457602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016128cd929190614ab2565b600060405180830381600087803b1580156128e757600080fd5b505af11580156128fb573d6000803e3d6000fd5b505050506129d3565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016129a0929190614a4e565b600060405180830381600087803b1580156129ba57600080fd5b505af11580156129ce573d6000803e3d6000fd5b505050505b5050565b6129df612aed565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a63906148dd565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b600081600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090614bb9565b60405180910390fd5b60008211612bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb390614c25565b60405180910390fd5b602460009054906101000a900460ff1615612be357612bdc848484613259565b9050613252565b612bed84836133e7565b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c955750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612cf757600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612cf657612cf58383613484565b5b5b612cff61351d565b158015612d555750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612dd857612d62611c50565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc690614c91565b60405180910390fd5b612dd761352a565b5b81600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e2391906149e6565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612e718561353a565b612e7b5782612e86565b612e858584613591565b5b9050612e91846136be565b15612ea9576000831115612ea857612ea76137e8565b5b5b80600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ef49190614a1a565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661305157602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613024929190614a4e565b600060405180830381600087803b15801561303e57600080fd5b505af192505050801561304f575060015b505b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661316b57602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161313e929190614a4e565b600060405180830381600087803b15801561315857600080fd5b505af1925050508015613169575060015b505b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c33fb8776040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131d557600080fd5b505af19250505080156131e6575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161324491906142f0565b60405180910390a360019150505b9392505050565b600081600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132a691906149e6565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133349190614a1a565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133d491906142f0565b60405180910390a3600190509392505050565b600654811115806134415750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347790614cfd565b60405180910390fd5b5050565b600060075490508082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134d79190614a1a565b1115613518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350f90614d8f565b60405180910390fd5b505050565b6000806020541415905090565b4360208190555042602181905550565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60008060115461359f611bdf565b846135aa919061492c565b6135b491906149b5565b905080600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136019190614a1a565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136a191906142f0565b60405180910390a380836136b591906149e6565b91505092915050565b6000601e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137275750602460009054906101000a900460ff16155b801561373f5750602260149054906101000a900460ff165b80156137945750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156137e15750602354600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b9050919050565b6001602460006101000a81548160ff02191690831515021790555060006023549050600061381a601a54601b54610ef7565b61382657600d54613829565b60005b905060006002601054838561383e919061492c565b61384891906149b5565b61385291906149b5565b9050808361386091906149e6565b92506000600367ffffffffffffffff81111561387f5761387e614daf565b5b6040519080825280602002602001820160405280156138ad5781602001602082028036833780820191505090505b50905030816000815181106138c5576138c4614dde565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061393657613935614dde565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816002815181106139a7576139a6614dde565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478660008530426040518663ffffffff1660e01b8152600401613a4a959493929190614ecb565b600060405180830381600087803b158015613a6457600080fd5b505af1158015613a78573d6000803e3d6000fd5b5050505060008147613a8a91906149e6565b90506000600286613a9b91906149b5565b601054613aa891906149e6565b905060006002828885613abb919061492c565b613ac591906149b5565b613acf91906149b5565b9050600082600e5485613ae2919061492c565b613aec91906149b5565b9050600083600f5486613aff919061492c565b613b0991906149b5565b90506000821115613b9257602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b7e57600080fd5b505af193505050508015613b90575060015b505b6000881115613d36576000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613bf891906146c7565b602060405180830381865afa158015613c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c399190614864565b9050613c458430613ef0565b600081600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613ca391906146c7565b602060405180830381865afa158015613cc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce49190614864565b613cee91906149e6565b9050613cfa8a82614126565b7f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506878b604051613d2b9291906142c7565b60405180910390a150505b6000811115613dc357601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60155460125484613d8c919061492c565b613d9691906149b5565b9081150290604051600060405180830381858888f19350505050158015613dc1573d6000803e3d6000fd5b505b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60155460145484613e10919061492c565b613e1a91906149b5565b9081150290604051600060405180830381858888f19350505050158015613e45573d6000803e3d6000fd5b50601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60155460135484613e93919061492c565b613e9d91906149b5565b9081150290604051600060405180830381858888f19350505050158015613ec8573d6000803e3d6000fd5b50505050505050505050506000602460006101000a81548160ff021916908315150217905550565b6000600267ffffffffffffffff811115613f0d57613f0c614daf565b5b604051908082528060200260200182016040528015613f3b5781602001602082028036833780820191505090505b509050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fcf9190614f3a565b81600181518110613fe357613fe2614dde565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160028151811061405457614053614dde565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95848385426040518563ffffffff1660e01b81526004016140ef9493929190614f67565b600060405180830381600087803b15801561410957600080fd5b505af115801561411d573d6000803e3d6000fd5b50505050505050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168585600080601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518963ffffffff1660e01b81526004016141d4989796959493929190614fb3565b6060604051808303816000875af11580156141f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142179190615031565b5050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061424e82614223565b9050919050565b61425e81614243565b811461426957600080fd5b50565b60008135905061427b81614255565b92915050565b6000602082840312156142975761429661421e565b5b60006142a58482850161426c565b91505092915050565b6000819050919050565b6142c1816142ae565b82525050565b60006040820190506142dc60008301856142b8565b6142e960208301846142b8565b9392505050565b600060208201905061430560008301846142b8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561434557808201518184015260208101905061432a565b60008484015250505050565b6000601f19601f8301169050919050565b600061436d8261430b565b6143778185614316565b9350614387818560208601614327565b61439081614351565b840191505092915050565b600060208201905081810360008301526143b58184614362565b905092915050565b6143c6816142ae565b81146143d157600080fd5b50565b6000813590506143e3816143bd565b92915050565b60008060408385031215614400576143ff61421e565b5b600061440e8582860161426c565b925050602061441f858286016143d4565b9150509250929050565b60008115159050919050565b61443e81614429565b82525050565b60006020820190506144596000830184614435565b92915050565b6000806000606084860312156144785761447761421e565b5b6000614486868287016143d4565b9350506020614497868287016143d4565b92505060406144a8868287016143d4565b9150509250925092565b600080604083850312156144c9576144c861421e565b5b60006144d7858286016143d4565b92505060206144e8858286016143d4565b9150509250929050565b60008060006060848603121561450b5761450a61421e565b5b60006145198682870161426c565b935050602061452a8682870161426c565b925050604061453b868287016143d4565b9150509250925092565b60006020828403121561455b5761455a61421e565b5b6000614569848285016143d4565b91505092915050565b600060ff82169050919050565b61458881614572565b82525050565b60006020820190506145a3600083018461457f565b92915050565b6145b281614429565b81146145bd57600080fd5b50565b6000813590506145cf816145a9565b92915050565b600080604083850312156145ec576145eb61421e565b5b60006145fa8582860161426c565b925050602061460b858286016145c0565b9150509250929050565b6000806000806080858703121561462f5761462e61421e565b5b600061463d878288016143d4565b945050602061464e878288016143d4565b935050604061465f878288016143d4565b9250506060614670878288016143d4565b91505092959194509250565b600061468782614223565b9050919050565b6146978161467c565b82525050565b60006020820190506146b2600083018461468e565b92915050565b6146c181614243565b82525050565b60006020820190506146dc60008301846146b8565b92915050565b600080604083850312156146f9576146f861421e565b5b60006147078582860161426c565b92505060206147188582860161426c565b9150509250929050565b600060608201905061473760008301866142b8565b61474460208301856142b8565b61475160408301846142b8565b949350505050565b6000819050919050565b600061477e61477961477484614223565b614759565b614223565b9050919050565b600061479082614763565b9050919050565b60006147a282614785565b9050919050565b6147b281614797565b82525050565b60006020820190506147cd60008301846147a9565b92915050565b600080604083850312156147ea576147e961421e565b5b60006147f8858286016145c0565b9250506020614809858286016143d4565b9150509250929050565b600061481e82614785565b9050919050565b61482e81614813565b82525050565b60006020820190506148496000830184614825565b92915050565b60008151905061485e816143bd565b92915050565b60006020828403121561487a5761487961421e565b5b60006148888482850161484f565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148c7602083614316565b91506148d282614891565b602082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614937826142ae565b9150614942836142ae565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561497b5761497a6148fd565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149c0826142ae565b91506149cb836142ae565b9250826149db576149da614986565b5b828204905092915050565b60006149f1826142ae565b91506149fc836142ae565b9250828203905081811115614a1457614a136148fd565b5b92915050565b6000614a25826142ae565b9150614a30836142ae565b9250828201905080821115614a4857614a476148fd565b5b92915050565b6000604082019050614a6360008301856146b8565b614a7060208301846142b8565b9392505050565b6000819050919050565b6000614a9c614a97614a9284614a77565b614759565b6142ae565b9050919050565b614aac81614a81565b82525050565b6000604082019050614ac760008301856146b8565b614ad46020830184614aa3565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614b37602683614316565b9150614b4282614adb565b604082019050919050565b60006020820190508181036000830152614b6681614b2a565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614ba3601483614316565b9150614bae82614b6d565b602082019050919050565b60006020820190508181036000830152614bd281614b96565b9050919050565b7f5a65726f20616d6f756e74207472616e73666572726564000000000000000000600082015250565b6000614c0f601783614316565b9150614c1a82614bd9565b602082019050919050565b60006020820190508181036000830152614c3e81614c02565b9050919050565b7f436f6e7472616374206e6f74206c61756e63686564207965742e000000000000600082015250565b6000614c7b601a83614316565b9150614c8682614c45565b602082019050919050565b60006020820190508181036000830152614caa81614c6e565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614ce7601183614316565b9150614cf282614cb1565b602082019050919050565b60006020820190508181036000830152614d1681614cda565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206261672060008201527f73697a652e000000000000000000000000000000000000000000000000000000602082015250565b6000614d79602583614316565b9150614d8482614d1d565b604082019050919050565b60006020820190508181036000830152614da881614d6c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e4281614243565b82525050565b6000614e548383614e39565b60208301905092915050565b6000602082019050919050565b6000614e7882614e0d565b614e828185614e18565b9350614e8d83614e29565b8060005b83811015614ebe578151614ea58882614e48565b9750614eb083614e60565b925050600181019050614e91565b5085935050505092915050565b600060a082019050614ee060008301886142b8565b614eed6020830187614aa3565b8181036040830152614eff8186614e6d565b9050614f0e60608301856146b8565b614f1b60808301846142b8565b9695505050505050565b600081519050614f3481614255565b92915050565b600060208284031215614f5057614f4f61421e565b5b6000614f5e84828501614f25565b91505092915050565b6000608082019050614f7c60008301876142b8565b8181036020830152614f8e8186614e6d565b9050614f9d60408301856146b8565b614faa60608301846142b8565b95945050505050565b600061010082019050614fc9600083018b6146b8565b614fd6602083018a6146b8565b614fe360408301896142b8565b614ff060608301886142b8565b614ffd6080830187614aa3565b61500a60a0830186614aa3565b61501760c08301856146b8565b61502460e08301846142b8565b9998505050505050505050565b60008060006060848603121561504a5761504961421e565b5b60006150588682870161484f565b93505060206150698682870161484f565b925050604061507a8682870161484f565b915050925092509256fea2646970667358221220563ec586bde4d5d88b8fa74b4454c22cb94e7bef47608729196707e519b07c1364736f6c6343000810003360806040526ec097ce7bc90715b34b9f1000000000600c55610e10600d5566038d7ea4c68000600e556207a120600f553480156200003c57600080fd5b50604051620020843803806200208483398181016040528101906200006291906200026a565b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000152573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001789190620002b1565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050620002e3565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002328262000205565b9050919050565b620002448162000225565b81146200025057600080fd5b50565b600081519050620002648162000239565b92915050565b6000806040838503121562000284576200028362000200565b5b6000620002948582860162000253565b9250506020620002a78582860162000253565b9150509250929050565b600060208284031215620002ca57620002c962000200565b5b6000620002da8482850162000253565b91505092915050565b611d9180620002f36000396000f3fe60806040526004361061011f5760003560e01c80636ca7c216116100a0578063d0e30db011610064578063d0e30db0146103fd578063d4fda1f214610407578063e2d2e21914610444578063efca2eed1461046f578063ffd49c841461049a5761011f565b80636ca7c21614610314578063997664d71461033f578063ab377daa1461036a578063c33fb877146103a7578063ce7c2ac2146103be5761011f565b806328fd3198116100e757806328fd3198146102075780633a98ef39146102445780633cbf8a611461026f5780634fab0ae8146102ac57806366817df5146102d75761011f565b80630ca61cb11461012457806311ce023d1461014d5780631329f8621461017857806314b6ca96146101b557806315f7e05e146101de575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190611740565b6104c5565b005b34801561015957600080fd5b5061016261058e565b60405161016f91906117a2565b60405180910390f35b34801561018457600080fd5b5061019f600480360381019061019a919061181b565b610594565b6040516101ac91906117a2565b60405180910390f35b3480156101c157600080fd5b506101dc60048036038101906101d79190611848565b610652565b005b3480156101ea57600080fd5b506102056004803603810190610200919061181b565b610918565b005b34801561021357600080fd5b5061022e6004803603810190610229919061181b565b6109d3565b60405161023b91906117a2565b60405180910390f35b34801561025057600080fd5b50610259610ae5565b60405161026691906117a2565b60405180910390f35b34801561027b57600080fd5b506102966004803603810190610291919061181b565b610aeb565b6040516102a391906117a2565b60405180910390f35b3480156102b857600080fd5b506102c1610b37565b6040516102ce91906117a2565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f9919061181b565b610b3d565b60405161030b91906117a2565b60405180910390f35b34801561032057600080fd5b50610329610b55565b60405161033691906117a2565b60405180910390f35b34801561034b57600080fd5b50610354610b5b565b60405161036191906117a2565b60405180910390f35b34801561037657600080fd5b50610391600480360381019061038c9190611888565b610b61565b60405161039e91906118c4565b60405180910390f35b3480156103b357600080fd5b506103bc610ba0565b005b3480156103ca57600080fd5b506103e560048036038101906103e0919061181b565b610d7d565b6040516103f4939291906118df565b60405180910390f35b610405610da7565b005b34801561041357600080fd5b5061042e6004803603810190610429919061181b565b6110fe565b60405161043b91906117a2565b60405180910390f35b34801561045057600080fd5b50610459611116565b60405161046691906117a2565b60405180910390f35b34801561047b57600080fd5b5061048461111c565b60405161049191906117a2565b60405180910390f35b3480156104a657600080fd5b506104af611122565b6040516104bc91906117a2565b60405180910390f35b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061056b5750600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61057457600080fd5b82600d8190555081600e8190555080600f81905550505050565b600c5481565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546105e49190611945565b116105f2576000905061064d565b42600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106409190611945565b61064a9190611979565b90505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806106f85750600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61070157600080fd5b60008111801561075357506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156107665761076182611128565b6107c8565b6000811480156107b857506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156107c7576107c6826111d7565b5b5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154111561081d5761081c826113de565b5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461086e9190611979565b6108789190611945565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506108ce81611663565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109be5750600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6109c757600080fd5b6109d0816113de565b50565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610a275760009050610ae0565b6000610a74600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611663565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050808211610acf57600092505050610ae0565b8082610adb9190611979565b925050505b919050565b60085481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b600e5481565b60066020528060005260406000206000915090505481565b600f5481565b60095481565b60048181548110610b7157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c465750600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610c4f57600080fd5b6000600480549050905060008103610c675750610d7b565b6000805a905060005b600f5483108015610c8057508381105b15610d76578360105410610c975760006010819055505b610ce0600460105481548110610cb057610caf6119ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611698565b15610d2f57610d2e600460105481548110610cfe57610cfd6119ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166113de565b5b5a82610d3b9190611979565b83610d469190611945565b92505a915060106000815480929190610d5e906119dc565b91905055508080610d6e906119dc565b915050610c70565b505050505b565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e0491906118c4565b602060405180830381865afa158015610e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e459190611a39565b90506000600267ffffffffffffffff811115610e6457610e63611a66565b5b604051908082528060200260200182016040528015610e925781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110610ecc57610ecb6119ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610f3d57610f3c6119ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610fda9493929190611b98565b6000604051808303818588803b158015610ff357600080fd5b505af1158015611007573d6000803e3d6000fd5b5050505050600082600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161106a91906118c4565b602060405180830381865afa158015611087573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ab9190611a39565b6110b59190611979565b9050806009546110c59190611945565b60098190555060085481600c546110dc9190611be4565b6110e69190611c6d565b600b546110f39190611945565b600b81905550505050565b60056020528060005260406000206000915090505481565b600b5481565b600a5481565b600d5481565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506111eb9190611979565b815481106111fc576111fb6119ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548154811061127a576112796119ad565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560006004600160048054905061131a9190611979565b8154811061132b5761132a6119ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060048054806113a6576113a5611c9e565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315611660576000611434826109d3565b9050600081111561165e5780600a5461144d9190611945565b600a8190555042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546114e59190611945565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611576600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611663565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611619929190611ccd565b6020604051808303816000875af1158015611638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165c9190611d2e565b505b505b50565b60008082036116755760009050611693565b600c54600b54836116869190611be4565b6116909190611c6d565b90505b919050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116e89190611945565b1080156116fe5750600e546116fc836109d3565b115b9050919050565b600080fd5b6000819050919050565b61171d8161170a565b811461172857600080fd5b50565b60008135905061173a81611714565b92915050565b60008060006060848603121561175957611758611705565b5b60006117678682870161172b565b93505060206117788682870161172b565b92505060406117898682870161172b565b9150509250925092565b61179c8161170a565b82525050565b60006020820190506117b76000830184611793565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117e8826117bd565b9050919050565b6117f8816117dd565b811461180357600080fd5b50565b600081359050611815816117ef565b92915050565b60006020828403121561183157611830611705565b5b600061183f84828501611806565b91505092915050565b6000806040838503121561185f5761185e611705565b5b600061186d85828601611806565b925050602061187e8582860161172b565b9150509250929050565b60006020828403121561189e5761189d611705565b5b60006118ac8482850161172b565b91505092915050565b6118be816117dd565b82525050565b60006020820190506118d960008301846118b5565b92915050565b60006060820190506118f46000830186611793565b6119016020830185611793565b61190e6040830184611793565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006119508261170a565b915061195b8361170a565b925082820190508082111561197357611972611916565b5b92915050565b60006119848261170a565b915061198f8361170a565b92508282039050818111156119a7576119a6611916565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006119e78261170a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a1957611a18611916565b5b600182019050919050565b600081519050611a3381611714565b92915050565b600060208284031215611a4f57611a4e611705565b5b6000611a5d84828501611a24565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b6000819050919050565b6000611ac4611abf611aba84611a95565b611a9f565b61170a565b9050919050565b611ad481611aa9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611b0f816117dd565b82525050565b6000611b218383611b06565b60208301905092915050565b6000602082019050919050565b6000611b4582611ada565b611b4f8185611ae5565b9350611b5a83611af6565b8060005b83811015611b8b578151611b728882611b15565b9750611b7d83611b2d565b925050600181019050611b5e565b5085935050505092915050565b6000608082019050611bad6000830187611acb565b8181036020830152611bbf8186611b3a565b9050611bce60408301856118b5565b611bdb6060830184611793565b95945050505050565b6000611bef8261170a565b9150611bfa8361170a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611c3357611c32611916565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611c788261170a565b9150611c838361170a565b925082611c9357611c92611c3e565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000604082019050611ce260008301856118b5565b611cef6020830184611793565b9392505050565b60008115159050919050565b611d0b81611cf6565b8114611d1657600080fd5b50565b600081519050611d2881611d02565b92915050565b600060208284031215611d4457611d43611705565b5b6000611d5284828501611d19565b9150509291505056fea2646970667358221220899b4e7063385a41fbf9bf4f5ede73fc49f924d466150af497ee78c391331f3664736f6c63430008100033

Deployed ByteCode Sourcemap

18989:15682:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34244:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;20758:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22533:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22939:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33235:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33785:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22281:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30819:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33045:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23457:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29797:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33475:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22375:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32239:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29997:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23163:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20638:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31570:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34465:114;;;;;;;;;;;;;:::i;:::-;;20721:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31832:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22687:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18435:148;;;;;;;;;;;;;:::i;:::-;;26248:161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19468:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20246:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22610:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17794:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19529:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22452:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32529:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20578:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23293:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30976:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33947:285;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25440:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20606:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20674:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20153:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33621:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20294:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22798:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32821:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20196:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18738:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25586:115;;;;;;;;;;;;;:::i;:::-;;31186:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31697:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20425:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34244:216;34312:15;34329;34364:11;;;;;;;;;;;:29;;;34394:6;34364:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34354:47;;34419:11;;;;;;;;;;;:28;;;34448:6;34419:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34409:46;;34244:216;;;:::o;20758:49::-;;;;:::o;22533:71::-;22572:13;22596:5;;;;;;;;;;;;;;;;;22589:12;;22533:71;:::o;22939:216::-;23014:4;23066:6;23031:11;:23;23043:10;23031:23;;;;;;;;;;;;;;;:32;23055:7;23031:32;;;;;;;;;;;;;;;:41;;;;23109:7;23088:37;;23097:10;23088:37;;;23118:6;23088:37;;;;;;:::i;:::-;;;;;;;;23143:4;23136:11;;22939:216;;;;:::o;33235:232::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33371:6:::1;33365:3;:12;33357:21;;;::::0;::::1;;33389:11;;;;;;;;;;;:35;;;33425:10;33437:16;33455:3;33389:70;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33235:232:::0;;;:::o;33785:150::-;33865:4;33921:6;33889:29;33909:8;33889:19;:29::i;:::-;:38;33882:45;;33785:150;;;;:::o;22281:88::-;22336:7;22354:12;;22347:19;;22281:88;:::o;30819:145::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30949:7:::1;30936:9;30921:12;;:24;;;;:::i;:::-;30920:36;;;;:::i;:::-;30905:12;:51;;;;30819:145:::0;;:::o;33045:182::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33160:7:::1;33142:15;:25;;;;33207:12;33178:26;:41;;;;33045:182:::0;;:::o;23457:341::-;23557:4;23612:17;23577:11;:19;23589:6;23577:19;;;;;;;;;;;;;;;:31;23597:10;23577:31;;;;;;;;;;;;;;;;:52;23574:157;;23713:6;23679:11;:19;23691:6;23679:19;;;;;;;;;;;;;;;:31;23699:10;23679:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;23645:11;:19;23657:6;23645:19;;;;;;;;;;;;;;;:31;23665:10;23645:31;;;;;;;;;;;;;;;:74;;;;23574:157;23750:40;23764:6;23772:9;23783:6;23750:13;:40::i;:::-;23743:47;;23457:341;;;;;:::o;29797:188::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29869:16:::1;29925:3;29913:8;29889:21;:32;;;;:::i;:::-;29888:40;;;;:::i;:::-;29869:59;;29939:11;;;;;;;;;;;:19;;;29966:8;29939:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;29858:127;29797:188:::0;:::o;33475:138::-;33528:7;33589:15;33599:4;;;;;;;;;;;33589:9;:15::i;:::-;33571;33581:4;;;;;;;;;;;33571:9;:15::i;:::-;:33;;;;:::i;:::-;33555:12;;:50;;;;:::i;:::-;33548:57;;33475:138;:::o;22375:71::-;22418:5;19398:1;22427:16;;22375:71;:::o;32239:282::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32371:13:::1;32356:12;:28;;;;32408:7;32399:6;:16;;;;32443:11;32430:10;:24;;;;32502:11;32492:7;32476:13;:23;;;;:::i;:::-;:37;;;;:::i;:::-;32469:4;:44;;;;32239:282:::0;;;:::o;29997:227::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30073:16:::1;:29;30090:11;30073:29;;;;;;;;;;;;;;;;;;;;;;;;;30069:147;;30105:11;;;;;;;;;;;:20;;;30126:11;30139:9;:22;30149:11;30139:22;;;;;;;;;;;;;;;;30105:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30069:147;;;30180:11;;;;;;;;;;;:20;;;30201:11;30214:1;30180:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30069:147;29997:227:::0;:::o;23163:122::-;23218:4;23242:35;23250:7;23259:17;23242:7;:35::i;:::-;23235:42;;23163:122;;;:::o;20638:27::-;;;;:::o;31570:119::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31675:6:::1;31653:11;:19;31665:6;31653:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;31570:119:::0;;:::o;34465:114::-;34508:11;;;;;;;;;;;:25;;;34534:10;34508:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34553:11;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34465:114::o;20721:30::-;;;;;;;;;;;;;:::o;31832:399::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31984:13:::1;31969:12;:28;;;;32024:14;32008:13;:30;;;;32059:8;32049:7;:18;;;;32122:8;32105:14;32089:13;:30;;;;:::i;:::-;:41;;;;:::i;:::-;32078:8;:52;;;;32158:15;32141:14;:32;;;;32221:1;32204:14;;:18;;;;:::i;:::-;32192:8;;:30;;32184:39;;;::::0;::::1;;31832:399:::0;;;;:::o;22687:105::-;22753:7;22771:9;:18;22781:7;22771:18;;;;;;;;;;;;;;;;22764:25;;22687:105;;;:::o;18435:148::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18542:1:::1;18505:40;;18526:6;::::0;::::1;;;;;;;;18505:40;;;;;;;;;;;;18573:1;18556:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;18435:148::o:0;26248:161::-;26292:7;26333:12;26328:1;26315:10;;:14;;;;:::i;:::-;:30;26312:64;;26372:1;26355:14;;:18;;;;:::i;:::-;26348:25;;;;26312:64;26393:8;;26386:15;;26248:161;;:::o;19468:54::-;;;;:::o;20246:41::-;;;;;;;;;;;;;:::o;22610:71::-;22653:7;22671;:5;:7::i;:::-;22664:14;;22610:71;:::o;17794:79::-;17832:7;17859:6;;;;;;;;;;;17852:13;;17794:79;:::o;19529:56::-;;;;:::o;22452:75::-;22493:13;22517:7;;;;;;;;;;;;;;;;;22510:14;;22452:75;:::o;32529:284::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32676:4:::1;;;;;;;;;;;32651:29;;:21;;;;;;;;;;;:29;;;32647:94;;32719:22;32695:21;;:46;;;;;;;;;;;;;;;;;;32647:94;32783:21;32752:20;;:53;;;;;;;;;;;;;;;;;;32529:284:::0;;:::o;20578:19::-;;;;;;;;;;;;;:::o;23293:156::-;23373:4;23397:44;23411:10;23423:9;23434:6;23397:13;:44::i;:::-;23390:51;;23293:156;;;;:::o;30976:202::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31084:1:::1;31074:7;:11;:31;;;;;31100:5;31089:7;:16;;31074:31;31066:40;;;::::0;::::1;;31163:7;31150:9;31135:12;;:24;;;;:::i;:::-;31134:36;;;;:::i;:::-;31117:14;:53;;;;30976:202:::0;;:::o;33947:285::-;33999:19;34020:20;34042;34089:11;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34075:42;;34143:11;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34128:45;;34199:11;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34184:40;;33947:285;;;:::o;25440:138::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25538:32:::1;25553:4;25559:2;25563:6;25538:14;:32::i;:::-;;25440:138:::0;;;:::o;20606:25::-;;;;:::o;20674:38::-;;;;;;;;;;;;;:::o;20153:36::-;;;;;;;;;;;;;:::o;33621:156::-;33689:7;33747:22;:20;:22::i;:::-;33728:15;33738:4;;;;;;;;;;;33728:9;:15::i;:::-;33717:8;:26;;;;:::i;:::-;33716:53;;;;:::i;:::-;33709:60;;33621:156;;;:::o;20294:37::-;;;;;;;;;;;;;:::o;22798:133::-;22882:7;22900:11;:19;22912:6;22900:19;;;;;;;;;;;;;;;:28;22920:7;22900:28;;;;;;;;;;;;;;;;22893:35;;22798:133;;;;:::o;32821:216::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32940:1:::1;32925:12;:16;32917:25;;;::::0;::::1;;32967:8;32953:11;;:22;;;;;;;;;;;;;;;;;;33017:12;33002;;:27;;;;:::i;:::-;32986:13;:43;;;;32821:216:::0;;:::o;20196:43::-;;;;;;;;;;;;;:::o;18738:244::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18847:1:::1;18827:22;;:8;:22;;::::0;18819:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18937:8;18908:38;;18929:6;::::0;::::1;;;;;;;;18908:38;;;;;;;;;;;;18966:8;18957:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18738:244:::0;:::o;25586:115::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25650:10:::1;25642:28;;:51;25671:21;25642:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25586:115::o:0;31186:376::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31300:4:::1;31282:23;;:6;:23;;;;:50;;;;;31310:14;:22;31325:6;31310:22;;;;;;;;;;;;;;;;;;;;;;;;;31309:23;31282:50;:71;;;;;31346:7;:5;:7::i;:::-;31336:17;;:6;:17;;;;31282:71;31274:80;;;::::0;::::1;;31392:6;31365:16;:24;31382:6;31365:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;31412:6;31409:146;;;31434:11;;;;;;;;;;;:20;;;31455:6;31463:1;31434:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31409:146;;;31496:11;;;;;;;;;;;:20;;;31517:6;31525:9;:17;31535:6;31525:17;;;;;;;;;;;;;;;;31496:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;31409:146;31186:376:::0;;:::o;31697:127::-;18016:12;:10;:12::i;:::-;18006:22;;:6;;;;;;;;;;:22;;;17998:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31810:6:::1;31784:15;:23;31800:6;31784:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;31697:127:::0;;:::o;20425:24::-;;;;;;;;;;;;;:::o;6209:107::-;6254:15;6297:10;6282:26;;6209:107;:::o;23806:1314::-;23898:4;23944:6;23923:9;:17;23933:6;23923:17;;;;;;;;;;;;;;;;:27;;23915:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24003:1;23994:6;:10;23986:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;24048:6;;;;;;;;;;;24045:63;;;24064:41;24079:6;24087:9;24098:6;24064:14;:41::i;:::-;24057:48;;;;24045:63;24120:28;24133:6;24141;24120:12;:28::i;:::-;24174:14;:25;24189:9;24174:25;;;;;;;;;;;;;;;;;;;;;;;;;24173:26;:47;;;;;24216:4;;;;;;;;;;;24203:17;;:9;:17;;;;24173:47;24169:148;;;24242:15;:26;24258:9;24242:26;;;;;;;;;;;;;;;;;;;;;;;;;24237:68;;24270:35;24287:9;24298:6;24270:16;:35::i;:::-;24237:68;24169:148;24333:10;:8;:10::i;:::-;24332:11;:40;;;;;24347:14;:25;24362:9;24347:25;;;;;;;;;;;;;;;;;;;;;;;;;24332:40;24329:115;;;24393:7;:5;:7::i;:::-;24383:17;;:6;:17;;;24375:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;24433:8;:6;:8::i;:::-;24329:115;24496:6;24476:9;:17;24486:6;24476:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;24456:9;:17;24466:6;24456:17;;;;;;;;;;;;;;;:46;;;;24515:22;24540:21;24554:6;24540:13;:21::i;:::-;:56;;24590:6;24540:56;;;24564:23;24572:6;24580;24564:7;:23::i;:::-;24540:56;24515:81;;24620:25;24635:9;24620:14;:25::i;:::-;24617:60;;;24661:1;24652:6;:10;24648:26;;;24664:10;:8;:10::i;:::-;24648:26;24617:60;24743:14;24720:9;:20;24730:9;24720:20;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;24697:9;:20;24707:9;24697:20;;;;;;;;;;;;;;;:60;;;;24774:16;:24;24791:6;24774:24;;;;;;;;;;;;;;;;;;;;;;;;;24770:96;;24805:11;;;;;;;;;;;:20;;;24826:6;24834:9;:17;24844:6;24834:17;;;;;;;;;;;;;;;;24805:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24801:63;24770:96;24880:16;:27;24897:9;24880:27;;;;;;;;;;;;;;;;;;;;;;;;;24876:105;;24914:11;;;;;;;;;;;:20;;;24935:9;24946;:20;24956:9;24946:20;;;;;;;;;;;;;;;;24914:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24910:69;24876:105;24997:11;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24993:37;25064:9;25047:43;;25056:6;25047:43;;;25075:14;25047:43;;;;;;:::i;:::-;;;;;;;;25108:4;25101:11;;;23806:1314;;;;;;:::o;25128:300::-;25221:4;25278:6;25258:9;:17;25268:6;25258:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;25238:9;:17;25248:6;25238:17;;;;;;;;;;;;;;;:46;;;;25341:6;25318:9;:20;25328:9;25318:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;25295:9;:20;25305:9;25295:20;;;;;;;;;;;;;;;:52;;;;25380:9;25363:35;;25372:6;25363:35;;;25391:6;25363:35;;;;;;:::i;:::-;;;;;;;;25416:4;25409:11;;25128:300;;;;;:::o;25952:166::-;26049:12;;26039:6;:22;;:49;;;;26065:15;:23;26081:6;26065:23;;;;;;;;;;;;;;;;;;;;;;;;;26039:49;26031:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;25952:166;;:::o;25709:235::-;25795:19;25817:14;;25795:36;;25883:11;25873:6;25850:9;:20;25860:9;25850:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;:44;;25842:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;25784:160;25709:235;;:::o;30601:90::-;30644:4;30682:1;30668:10;;:15;;30661:22;;30601:90;:::o;30699:112::-;30750:12;30737:10;:25;;;;30788:15;30773:12;:30;;;;30699:112::o;26126:114::-;26188:4;26213:11;:19;26225:6;26213:19;;;;;;;;;;;;;;;;;;;;;;;;;26212:20;26205:27;;26126:114;;;:::o;26417:336::-;26484:7;26504:17;26551:14;;26534:13;:11;:13::i;:::-;26525:6;:22;;;;:::i;:::-;26524:41;;;;:::i;:::-;26504:61;;26640:9;26613;:24;26631:4;26613:24;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;26586:9;:24;26604:4;26586:24;;;;;;;;;;;;;;;:63;;;;26690:4;26665:42;;26674:6;26665:42;;;26697:9;26665:42;;;;;;:::i;:::-;;;;;;;;26736:9;26727:6;:18;;;;:::i;:::-;26720:25;;;26417:336;;;;:::o;27521:261::-;27587:4;27612:14;:26;27627:10;27612:26;;;;;;;;;;;;;;;;;;;;;;;;;27611:27;:47;;;;;27652:6;;;;;;;;;;;27651:7;27611:47;:71;;;;;27671:11;;;;;;;;;;;27611:71;:109;;;;;27695:14;:25;27710:9;27695:25;;;;;;;;;;;;;;;;;;;;;;;;;27611:109;:163;;;;;27761:13;;27733:9;:24;27751:4;27733:24;;;;;;;;;;;;;;;;:41;;27611:163;27604:170;;27521:261;;;:::o;27790:1999::-;20863:4;20854:6;;:13;;;;;;;;;;;;;;;;;;27839:20:::1;27862:13;;27839:36;;27886:27;27916:60;27932:15;;27949:26;;27916:15;:60::i;:::-;:79;;27983:12;;27916:79;;;27979:1;27916:79;27886:109;;28006:23;28084:1;28072:8;;28049:19;28034:12;:34;;;;:::i;:::-;28033:47;;;;:::i;:::-;28032:53;;;;:::i;:::-;28006:79;;28112:15;28096:31;;;;;:::i;:::-;;;28140:21;28178:1;28164:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28140:40;;28209:4;28191;28196:1;28191:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;28235:11;;;;;;;;;;;28225:4;28230:1;28225:7;;;;;;;;:::i;:::-;;;;;;;:21;;;;;;;;;::::0;::::1;28267:4;;;;;;;;;;;28257;28262:1;28257:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;28292:21;28316;28292:45;;28350:6;;;;;;;;;;;:57;;;28422:12;28449:1;28465:4;28492;28512:15;28350:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28551:17;28595:13;28571:21;:37;;;;:::i;:::-;28551:57;;28619:19;28674:1;28652:19;:23;;;;:::i;:::-;28641:8;;:34;;;;:::i;:::-;28619:56;;28688:26;28767:1;28753:11;28730:19;28718:9;:31;;;;:::i;:::-;28717:47;;;;:::i;:::-;:51;;;;:::i;:::-;28688:80;;28779:27;28839:11;28822:13;;28810:9;:25;;;;:::i;:::-;28809:41;;;;:::i;:::-;28779:71;;28861:26;28914:11;28903:7;;28891:9;:19;;;;:::i;:::-;28890:35;;;;:::i;:::-;28861:64;;28964:1;28942:19;:23;28938:107;;;28984:11;;;;;;;;;;;:19;;;29011;28984:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;28980:65:::0;28938:107:::1;29078:1;29060:15;:19;29057:435;;;29096:22;29128:11;;;;;;;;;;;29121:29;;;29159:4;29121:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29096:69;;29182:57;29205:18;29233:4;29182:22;:57::i;:::-;29256:18;29324:14;29284:11;;;;;;;;;;;29277:29;;;29315:4;29277:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;;;:::i;:::-;29256:82;;29355:53;29380:15;29397:10;29355:24;:53::i;:::-;29441:39;29453:9;29464:15;29441:39;;;;;;;:::i;:::-;;;;;;;;29081:411;;29057:435;29537:1;29516:18;:22;29512:113;;;29553:20;;;;;;;;;;;:29;;:72;29619:4;;29604:12;;29583:18;:33;;;;:::i;:::-;:40;;;;:::i;:::-;29553:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29512:113;29640:18;;;;;;;;;;;:27;;:67;29702:4;;29689:10;;29668:18;:31;;;;:::i;:::-;:38;;;;:::i;:::-;29640:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;29722:14;;;;;;;;;;;:23;;:59;29776:4;;29767:6;;29746:18;:27;;;;:::i;:::-;:34;;;;:::i;:::-;29722:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;27828:1961;;;;;;;;;;20881:5:::0;20872:6;;:14;;;;;;;;;;;;;;;;;;27790:1999::o;26761:383::-;26851:21;26889:1;26875:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26851:40;;26912:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26902:4;26907:1;26902:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26946:11;;;;;;;;;;;26936:4;26941:1;26936:7;;;;;;;;:::i;:::-;;;;;;;:21;;;;;;;;;;;26970:6;;;;;;;;;;;:57;;;27042:11;27068:4;27087:8;27110:15;26970:166;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26840:304;26761:383;;:::o;27154:359::-;27260:6;;;;;;;;;;;:19;;;27302:4;27322:11;;;;;;;;;;;27348:18;27381:15;27411:1;27427;27443:21;;;;;;;;;;;27479:15;27260:245;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27154:359;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:332::-;1504:4;1542:2;1531:9;1527:18;1519:26;;1555:71;1623:1;1612:9;1608:17;1599:6;1555:71;:::i;:::-;1636:72;1704:2;1693:9;1689:18;1680:6;1636:72;:::i;:::-;1383:332;;;;;:::o;1721:222::-;1814:4;1852:2;1841:9;1837:18;1829:26;;1865:71;1933:1;1922:9;1918:17;1909:6;1865:71;:::i;:::-;1721:222;;;;:::o;1949:99::-;2001:6;2035:5;2029:12;2019:22;;1949:99;;;:::o;2054:169::-;2138:11;2172:6;2167:3;2160:19;2212:4;2207:3;2203:14;2188:29;;2054:169;;;;:::o;2229:246::-;2310:1;2320:113;2334:6;2331:1;2328:13;2320:113;;;2419:1;2414:3;2410:11;2404:18;2400:1;2395:3;2391:11;2384:39;2356:2;2353:1;2349:10;2344:15;;2320:113;;;2467:1;2458:6;2453:3;2449:16;2442:27;2291:184;2229:246;;;:::o;2481:102::-;2522:6;2573:2;2569:7;2564:2;2557:5;2553:14;2549:28;2539:38;;2481:102;;;:::o;2589:377::-;2677:3;2705:39;2738:5;2705:39;:::i;:::-;2760:71;2824:6;2819:3;2760:71;:::i;:::-;2753:78;;2840:65;2898:6;2893:3;2886:4;2879:5;2875:16;2840:65;:::i;:::-;2930:29;2952:6;2930:29;:::i;:::-;2925:3;2921:39;2914:46;;2681:285;2589:377;;;;:::o;2972:313::-;3085:4;3123:2;3112:9;3108:18;3100:26;;3172:9;3166:4;3162:20;3158:1;3147:9;3143:17;3136:47;3200:78;3273:4;3264:6;3200:78;:::i;:::-;3192:86;;2972:313;;;;:::o;3291:122::-;3364:24;3382:5;3364:24;:::i;:::-;3357:5;3354:35;3344:63;;3403:1;3400;3393:12;3344:63;3291:122;:::o;3419:139::-;3465:5;3503:6;3490:20;3481:29;;3519:33;3546:5;3519:33;:::i;:::-;3419:139;;;;:::o;3564:474::-;3632:6;3640;3689:2;3677:9;3668:7;3664:23;3660:32;3657:119;;;3695:79;;:::i;:::-;3657:119;3815:1;3840:53;3885:7;3876:6;3865:9;3861:22;3840:53;:::i;:::-;3830:63;;3786:117;3942:2;3968:53;4013:7;4004:6;3993:9;3989:22;3968:53;:::i;:::-;3958:63;;3913:118;3564:474;;;;;:::o;4044:90::-;4078:7;4121:5;4114:13;4107:21;4096:32;;4044:90;;;:::o;4140:109::-;4221:21;4236:5;4221:21;:::i;:::-;4216:3;4209:34;4140:109;;:::o;4255:210::-;4342:4;4380:2;4369:9;4365:18;4357:26;;4393:65;4455:1;4444:9;4440:17;4431:6;4393:65;:::i;:::-;4255:210;;;;:::o;4471:619::-;4548:6;4556;4564;4613:2;4601:9;4592:7;4588:23;4584:32;4581:119;;;4619:79;;:::i;:::-;4581:119;4739:1;4764:53;4809:7;4800:6;4789:9;4785:22;4764:53;:::i;:::-;4754:63;;4710:117;4866:2;4892:53;4937:7;4928:6;4917:9;4913:22;4892:53;:::i;:::-;4882:63;;4837:118;4994:2;5020:53;5065:7;5056:6;5045:9;5041:22;5020:53;:::i;:::-;5010:63;;4965:118;4471:619;;;;;:::o;5096:474::-;5164:6;5172;5221:2;5209:9;5200:7;5196:23;5192:32;5189:119;;;5227:79;;:::i;:::-;5189:119;5347:1;5372:53;5417:7;5408:6;5397:9;5393:22;5372:53;:::i;:::-;5362:63;;5318:117;5474:2;5500:53;5545:7;5536:6;5525:9;5521:22;5500:53;:::i;:::-;5490:63;;5445:118;5096:474;;;;;:::o;5576:619::-;5653:6;5661;5669;5718:2;5706:9;5697:7;5693:23;5689:32;5686:119;;;5724:79;;:::i;:::-;5686:119;5844:1;5869:53;5914:7;5905:6;5894:9;5890:22;5869:53;:::i;:::-;5859:63;;5815:117;5971:2;5997:53;6042:7;6033:6;6022:9;6018:22;5997:53;:::i;:::-;5987:63;;5942:118;6099:2;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6070:118;5576:619;;;;;:::o;6201:329::-;6260:6;6309:2;6297:9;6288:7;6284:23;6280:32;6277:119;;;6315:79;;:::i;:::-;6277:119;6435:1;6460:53;6505:7;6496:6;6485:9;6481:22;6460:53;:::i;:::-;6450:63;;6406:117;6201:329;;;;:::o;6536:86::-;6571:7;6611:4;6604:5;6600:16;6589:27;;6536:86;;;:::o;6628:112::-;6711:22;6727:5;6711:22;:::i;:::-;6706:3;6699:35;6628:112;;:::o;6746:214::-;6835:4;6873:2;6862:9;6858:18;6850:26;;6886:67;6950:1;6939:9;6935:17;6926:6;6886:67;:::i;:::-;6746:214;;;;:::o;6966:116::-;7036:21;7051:5;7036:21;:::i;:::-;7029:5;7026:32;7016:60;;7072:1;7069;7062:12;7016:60;6966:116;:::o;7088:133::-;7131:5;7169:6;7156:20;7147:29;;7185:30;7209:5;7185:30;:::i;:::-;7088:133;;;;:::o;7227:468::-;7292:6;7300;7349:2;7337:9;7328:7;7324:23;7320:32;7317:119;;;7355:79;;:::i;:::-;7317:119;7475:1;7500:53;7545:7;7536:6;7525:9;7521:22;7500:53;:::i;:::-;7490:63;;7446:117;7602:2;7628:50;7670:7;7661:6;7650:9;7646:22;7628:50;:::i;:::-;7618:60;;7573:115;7227:468;;;;;:::o;7701:765::-;7787:6;7795;7803;7811;7860:3;7848:9;7839:7;7835:23;7831:33;7828:120;;;7867:79;;:::i;:::-;7828:120;7987:1;8012:53;8057:7;8048:6;8037:9;8033:22;8012:53;:::i;:::-;8002:63;;7958:117;8114:2;8140:53;8185:7;8176:6;8165:9;8161:22;8140:53;:::i;:::-;8130:63;;8085:118;8242:2;8268:53;8313:7;8304:6;8293:9;8289:22;8268:53;:::i;:::-;8258:63;;8213:118;8370:2;8396:53;8441:7;8432:6;8421:9;8417:22;8396:53;:::i;:::-;8386:63;;8341:118;7701:765;;;;;;;:::o;8472:104::-;8517:7;8546:24;8564:5;8546:24;:::i;:::-;8535:35;;8472:104;;;:::o;8582:142::-;8685:32;8711:5;8685:32;:::i;:::-;8680:3;8673:45;8582:142;;:::o;8730:254::-;8839:4;8877:2;8866:9;8862:18;8854:26;;8890:87;8974:1;8963:9;8959:17;8950:6;8890:87;:::i;:::-;8730:254;;;;:::o;8990:118::-;9077:24;9095:5;9077:24;:::i;:::-;9072:3;9065:37;8990:118;;:::o;9114:222::-;9207:4;9245:2;9234:9;9230:18;9222:26;;9258:71;9326:1;9315:9;9311:17;9302:6;9258:71;:::i;:::-;9114:222;;;;:::o;9342:474::-;9410:6;9418;9467:2;9455:9;9446:7;9442:23;9438:32;9435:119;;;9473:79;;:::i;:::-;9435:119;9593:1;9618:53;9663:7;9654:6;9643:9;9639:22;9618:53;:::i;:::-;9608:63;;9564:117;9720:2;9746:53;9791:7;9782:6;9771:9;9767:22;9746:53;:::i;:::-;9736:63;;9691:118;9342:474;;;;;:::o;9822:442::-;9971:4;10009:2;9998:9;9994:18;9986:26;;10022:71;10090:1;10079:9;10075:17;10066:6;10022:71;:::i;:::-;10103:72;10171:2;10160:9;10156:18;10147:6;10103:72;:::i;:::-;10185;10253:2;10242:9;10238:18;10229:6;10185:72;:::i;:::-;9822:442;;;;;;:::o;10270:60::-;10298:3;10319:5;10312:12;;10270:60;;;:::o;10336:142::-;10386:9;10419:53;10437:34;10446:24;10464:5;10446:24;:::i;:::-;10437:34;:::i;:::-;10419:53;:::i;:::-;10406:66;;10336:142;;;:::o;10484:126::-;10534:9;10567:37;10598:5;10567:37;:::i;:::-;10554:50;;10484:126;;;:::o;10616:154::-;10694:9;10727:37;10758:5;10727:37;:::i;:::-;10714:50;;10616:154;;;:::o;10776:187::-;10891:65;10950:5;10891:65;:::i;:::-;10886:3;10879:78;10776:187;;:::o;10969:278::-;11090:4;11128:2;11117:9;11113:18;11105:26;;11141:99;11237:1;11226:9;11222:17;11213:6;11141:99;:::i;:::-;10969:278;;;;:::o;11253:468::-;11318:6;11326;11375:2;11363:9;11354:7;11350:23;11346:32;11343:119;;;11381:79;;:::i;:::-;11343:119;11501:1;11526:50;11568:7;11559:6;11548:9;11544:22;11526:50;:::i;:::-;11516:60;;11472:114;11625:2;11651:53;11696:7;11687:6;11676:9;11672:22;11651:53;:::i;:::-;11641:63;;11596:118;11253:468;;;;;:::o;11727:144::-;11795:9;11828:37;11859:5;11828:37;:::i;:::-;11815:50;;11727:144;;;:::o;11877:167::-;11982:55;12031:5;11982:55;:::i;:::-;11977:3;11970:68;11877:167;;:::o;12050:258::-;12161:4;12199:2;12188:9;12184:18;12176:26;;12212:89;12298:1;12287:9;12283:17;12274:6;12212:89;:::i;:::-;12050:258;;;;:::o;12314:143::-;12371:5;12402:6;12396:13;12387:22;;12418:33;12445:5;12418:33;:::i;:::-;12314:143;;;;:::o;12463:351::-;12533:6;12582:2;12570:9;12561:7;12557:23;12553:32;12550:119;;;12588:79;;:::i;:::-;12550:119;12708:1;12733:64;12789:7;12780:6;12769:9;12765:22;12733:64;:::i;:::-;12723:74;;12679:128;12463:351;;;;:::o;12820:182::-;12960:34;12956:1;12948:6;12944:14;12937:58;12820:182;:::o;13008:366::-;13150:3;13171:67;13235:2;13230:3;13171:67;:::i;:::-;13164:74;;13247:93;13336:3;13247:93;:::i;:::-;13365:2;13360:3;13356:12;13349:19;;13008:366;;;:::o;13380:419::-;13546:4;13584:2;13573:9;13569:18;13561:26;;13633:9;13627:4;13623:20;13619:1;13608:9;13604:17;13597:47;13661:131;13787:4;13661:131;:::i;:::-;13653:139;;13380:419;;;:::o;13805:180::-;13853:77;13850:1;13843:88;13950:4;13947:1;13940:15;13974:4;13971:1;13964:15;13991:348;14031:7;14054:20;14072:1;14054:20;:::i;:::-;14049:25;;14088:20;14106:1;14088:20;:::i;:::-;14083:25;;14276:1;14208:66;14204:74;14201:1;14198:81;14193:1;14186:9;14179:17;14175:105;14172:131;;;14283:18;;:::i;:::-;14172:131;14331:1;14328;14324:9;14313:20;;13991:348;;;;:::o;14345:180::-;14393:77;14390:1;14383:88;14490:4;14487:1;14480:15;14514:4;14511:1;14504:15;14531:185;14571:1;14588:20;14606:1;14588:20;:::i;:::-;14583:25;;14622:20;14640:1;14622:20;:::i;:::-;14617:25;;14661:1;14651:35;;14666:18;;:::i;:::-;14651:35;14708:1;14705;14701:9;14696:14;;14531:185;;;;:::o;14722:194::-;14762:4;14782:20;14800:1;14782:20;:::i;:::-;14777:25;;14816:20;14834:1;14816:20;:::i;:::-;14811:25;;14860:1;14857;14853:9;14845:17;;14884:1;14878:4;14875:11;14872:37;;;14889:18;;:::i;:::-;14872:37;14722:194;;;;:::o;14922:191::-;14962:3;14981:20;14999:1;14981:20;:::i;:::-;14976:25;;15015:20;15033:1;15015:20;:::i;:::-;15010:25;;15058:1;15055;15051:9;15044:16;;15079:3;15076:1;15073:10;15070:36;;;15086:18;;:::i;:::-;15070:36;14922:191;;;;:::o;15119:332::-;15240:4;15278:2;15267:9;15263:18;15255:26;;15291:71;15359:1;15348:9;15344:17;15335:6;15291:71;:::i;:::-;15372:72;15440:2;15429:9;15425:18;15416:6;15372:72;:::i;:::-;15119:332;;;;;:::o;15457:85::-;15502:7;15531:5;15520:16;;15457:85;;;:::o;15548:158::-;15606:9;15639:61;15657:42;15666:32;15692:5;15666:32;:::i;:::-;15657:42;:::i;:::-;15639:61;:::i;:::-;15626:74;;15548:158;;;:::o;15712:147::-;15807:45;15846:5;15807:45;:::i;:::-;15802:3;15795:58;15712:147;;:::o;15865:348::-;15994:4;16032:2;16021:9;16017:18;16009:26;;16045:71;16113:1;16102:9;16098:17;16089:6;16045:71;:::i;:::-;16126:80;16202:2;16191:9;16187:18;16178:6;16126:80;:::i;:::-;15865:348;;;;;:::o;16219:225::-;16359:34;16355:1;16347:6;16343:14;16336:58;16428:8;16423:2;16415:6;16411:15;16404:33;16219:225;:::o;16450:366::-;16592:3;16613:67;16677:2;16672:3;16613:67;:::i;:::-;16606:74;;16689:93;16778:3;16689:93;:::i;:::-;16807:2;16802:3;16798:12;16791:19;;16450:366;;;:::o;16822:419::-;16988:4;17026:2;17015:9;17011:18;17003:26;;17075:9;17069:4;17065:20;17061:1;17050:9;17046:17;17039:47;17103:131;17229:4;17103:131;:::i;:::-;17095:139;;16822:419;;;:::o;17247:170::-;17387:22;17383:1;17375:6;17371:14;17364:46;17247:170;:::o;17423:366::-;17565:3;17586:67;17650:2;17645:3;17586:67;:::i;:::-;17579:74;;17662:93;17751:3;17662:93;:::i;:::-;17780:2;17775:3;17771:12;17764:19;;17423:366;;;:::o;17795:419::-;17961:4;17999:2;17988:9;17984:18;17976:26;;18048:9;18042:4;18038:20;18034:1;18023:9;18019:17;18012:47;18076:131;18202:4;18076:131;:::i;:::-;18068:139;;17795:419;;;:::o;18220:173::-;18360:25;18356:1;18348:6;18344:14;18337:49;18220:173;:::o;18399:366::-;18541:3;18562:67;18626:2;18621:3;18562:67;:::i;:::-;18555:74;;18638:93;18727:3;18638:93;:::i;:::-;18756:2;18751:3;18747:12;18740:19;;18399:366;;;:::o;18771:419::-;18937:4;18975:2;18964:9;18960:18;18952:26;;19024:9;19018:4;19014:20;19010:1;18999:9;18995:17;18988:47;19052:131;19178:4;19052:131;:::i;:::-;19044:139;;18771:419;;;:::o;19196:176::-;19336:28;19332:1;19324:6;19320:14;19313:52;19196:176;:::o;19378:366::-;19520:3;19541:67;19605:2;19600:3;19541:67;:::i;:::-;19534:74;;19617:93;19706:3;19617:93;:::i;:::-;19735:2;19730:3;19726:12;19719:19;;19378:366;;;:::o;19750:419::-;19916:4;19954:2;19943:9;19939:18;19931:26;;20003:9;19997:4;19993:20;19989:1;19978:9;19974:17;19967:47;20031:131;20157:4;20031:131;:::i;:::-;20023:139;;19750:419;;;:::o;20175:167::-;20315:19;20311:1;20303:6;20299:14;20292:43;20175:167;:::o;20348:366::-;20490:3;20511:67;20575:2;20570:3;20511:67;:::i;:::-;20504:74;;20587:93;20676:3;20587:93;:::i;:::-;20705:2;20700:3;20696:12;20689:19;;20348:366;;;:::o;20720:419::-;20886:4;20924:2;20913:9;20909:18;20901:26;;20973:9;20967:4;20963:20;20959:1;20948:9;20944:17;20937:47;21001:131;21127:4;21001:131;:::i;:::-;20993:139;;20720:419;;;:::o;21145:224::-;21285:34;21281:1;21273:6;21269:14;21262:58;21354:7;21349:2;21341:6;21337:15;21330:32;21145:224;:::o;21375:366::-;21517:3;21538:67;21602:2;21597:3;21538:67;:::i;:::-;21531:74;;21614:93;21703:3;21614:93;:::i;:::-;21732:2;21727:3;21723:12;21716:19;;21375:366;;;:::o;21747:419::-;21913:4;21951:2;21940:9;21936:18;21928:26;;22000:9;21994:4;21990:20;21986:1;21975:9;21971:17;21964:47;22028:131;22154:4;22028:131;:::i;:::-;22020:139;;21747:419;;;:::o;22172:180::-;22220:77;22217:1;22210:88;22317:4;22314:1;22307:15;22341:4;22338:1;22331:15;22358:180;22406:77;22403:1;22396:88;22503:4;22500:1;22493:15;22527:4;22524:1;22517:15;22544:114;22611:6;22645:5;22639:12;22629:22;;22544:114;;;:::o;22664:184::-;22763:11;22797:6;22792:3;22785:19;22837:4;22832:3;22828:14;22813:29;;22664:184;;;;:::o;22854:132::-;22921:4;22944:3;22936:11;;22974:4;22969:3;22965:14;22957:22;;22854:132;;;:::o;22992:108::-;23069:24;23087:5;23069:24;:::i;:::-;23064:3;23057:37;22992:108;;:::o;23106:179::-;23175:10;23196:46;23238:3;23230:6;23196:46;:::i;:::-;23274:4;23269:3;23265:14;23251:28;;23106:179;;;;:::o;23291:113::-;23361:4;23393;23388:3;23384:14;23376:22;;23291:113;;;:::o;23440:732::-;23559:3;23588:54;23636:5;23588:54;:::i;:::-;23658:86;23737:6;23732:3;23658:86;:::i;:::-;23651:93;;23768:56;23818:5;23768:56;:::i;:::-;23847:7;23878:1;23863:284;23888:6;23885:1;23882:13;23863:284;;;23964:6;23958:13;23991:63;24050:3;24035:13;23991:63;:::i;:::-;23984:70;;24077:60;24130:6;24077:60;:::i;:::-;24067:70;;23923:224;23910:1;23907;23903:9;23898:14;;23863:284;;;23867:14;24163:3;24156:10;;23564:608;;;23440:732;;;;:::o;24178:831::-;24441:4;24479:3;24468:9;24464:19;24456:27;;24493:71;24561:1;24550:9;24546:17;24537:6;24493:71;:::i;:::-;24574:80;24650:2;24639:9;24635:18;24626:6;24574:80;:::i;:::-;24701:9;24695:4;24691:20;24686:2;24675:9;24671:18;24664:48;24729:108;24832:4;24823:6;24729:108;:::i;:::-;24721:116;;24847:72;24915:2;24904:9;24900:18;24891:6;24847:72;:::i;:::-;24929:73;24997:3;24986:9;24982:19;24973:6;24929:73;:::i;:::-;24178:831;;;;;;;;:::o;25015:143::-;25072:5;25103:6;25097:13;25088:22;;25119:33;25146:5;25119:33;:::i;:::-;25015:143;;;;:::o;25164:351::-;25234:6;25283:2;25271:9;25262:7;25258:23;25254:32;25251:119;;;25289:79;;:::i;:::-;25251:119;25409:1;25434:64;25490:7;25481:6;25470:9;25466:22;25434:64;:::i;:::-;25424:74;;25380:128;25164:351;;;;:::o;25521:704::-;25748:4;25786:3;25775:9;25771:19;25763:27;;25800:71;25868:1;25857:9;25853:17;25844:6;25800:71;:::i;:::-;25918:9;25912:4;25908:20;25903:2;25892:9;25888:18;25881:48;25946:108;26049:4;26040:6;25946:108;:::i;:::-;25938:116;;26064:72;26132:2;26121:9;26117:18;26108:6;26064:72;:::i;:::-;26146;26214:2;26203:9;26199:18;26190:6;26146:72;:::i;:::-;25521:704;;;;;;;:::o;26231:1029::-;26536:4;26574:3;26563:9;26559:19;26551:27;;26588:71;26656:1;26645:9;26641:17;26632:6;26588:71;:::i;:::-;26669:72;26737:2;26726:9;26722:18;26713:6;26669:72;:::i;:::-;26751;26819:2;26808:9;26804:18;26795:6;26751:72;:::i;:::-;26833;26901:2;26890:9;26886:18;26877:6;26833:72;:::i;:::-;26915:81;26991:3;26980:9;26976:19;26967:6;26915:81;:::i;:::-;27006;27082:3;27071:9;27067:19;27058:6;27006:81;:::i;:::-;27097:73;27165:3;27154:9;27150:19;27141:6;27097:73;:::i;:::-;27180;27248:3;27237:9;27233:19;27224:6;27180:73;:::i;:::-;26231:1029;;;;;;;;;;;:::o;27266:663::-;27354:6;27362;27370;27419:2;27407:9;27398:7;27394:23;27390:32;27387:119;;;27425:79;;:::i;:::-;27387:119;27545:1;27570:64;27626:7;27617:6;27606:9;27602:22;27570:64;:::i;:::-;27560:74;;27516:128;27683:2;27709:64;27765:7;27756:6;27745:9;27741:22;27709:64;:::i;:::-;27699:74;;27654:129;27822:2;27848:64;27904:7;27895:6;27884:9;27880:22;27848:64;:::i;:::-;27838:74;;27793:129;27266:663;;;;;:::o

Metadata Hash

ipfs://899b4e7063385a41fbf9bf4f5ede73fc49f924d466150af497ee78c391331f36
Loading