ETH Price: $2,328.72 (+1.74%)

Token

SHIBDUTY (SOD)
 

Overview

Max Total Supply

1,000,000,000,000,000 SOD

Holders

274

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
176,954,362,577 SOD

Value
$0.00
0x1f029fcf24ef3ebf8d188daffcd4ab09b68ce97e
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
ShibDuty

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.12;
// SPDX-License-Identifier: Unlicensed
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);
}



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != - 1 || a != MIN_INT256);
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? - a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}
/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

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

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

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


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * 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);
            }
        }
    }
}

/**
 * @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;
    }

}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

contract ShibDuty is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    mapping(address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private isExchangeWallet;
    mapping (address => bool) private _isExcludedFromRewards;
    string private _name = "SHIBDUTY";
    string private _symbol = "SOD";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 1000000000000000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool isTaxFreeTransfer = false;
    uint256 public _maxBuyAmount = 5000000000000 * 10** _decimals;
    uint256 public ethPriceToSwap = 300000000000000000; //.3 ETH
    uint public ethSellAmount = 1000000000000000000;  //1 ETH
    uint256 public _maxWalletAmount = 25000000000000 * 10** _decimals;
    address public buyBackAddress = 0x86970E60C1ca5B157EBa31A4774199d10FbDE929;
    address public marketingAddress = 0x2ac47c24042154e87c64d41f98130D6a16e4D5d9;
    address public devAddress = 0x73281e23f36A5A0a0709a4dc7214053d31056f5A;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    uint256 public gasForProcessing = 50000;
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic,uint256 gas, address indexed processor);
    event SendDividends(uint256 EthAmount);
    
    struct Distribution {
        uint256 devTeam;
        uint256 marketing;
        uint256 dividend;
        uint256 buyBack;
    }

    struct TaxFees {
        uint256 buyFee;
        uint256 sellFee;
        uint256 largeSellFee;
    }

    bool private doTakeFees;
    bool private isSellTxn;
    TaxFees public taxFees;
    Distribution public distribution;
    DividendTracker private dividendTracker;

    constructor () {
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[buyBackAddress] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromFee[devAddress] = true;
        _isExcludedFromRewards[marketingAddress] = true;
        _isExcludedFromRewards[_msgSender()] = true;
        _isExcludedFromRewards[owner()] = true;
        _isExcludedFromRewards[buyBackAddress] = true;
        _isExcludedFromRewards[devAddress] = true;
        _isExcludedFromRewards[deadWallet] = true;

        taxFees = TaxFees(6,10,25);
        distribution = Distribution(30, 20, 30, 20);
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }


    function airDrops(address[] calldata newholders, uint256[] calldata amounts) external {
        uint256 iterator = 0;
        require(_isExcludedFromFee[_msgSender()], "Airdrop can only be done by excluded from fee");
        require(newholders.length == amounts.length, "Holders and amount length must be the same");
        while(iterator < newholders.length){
            _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false, false, false);
            iterator += 1;
        }
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10**9;
    }

    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

    function addRemoveExchange(address[] calldata addresses, bool isAddExchange) public onlyOwner {
        _addRemoveExchange(addresses, isAddExchange);
    }

    function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner {
        addRemoveRewards(addresses, isExcluded);
    }

    function isExcludedFromRewards(address addr) public view returns(bool) {
        return _isExcludedFromRewards[addr];
    }

    function addRemoveRewards(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromRewards[addr] = flag;
        }
    }

    function setEthSwapSellSettings(uint ethSellAmount_, uint256 ethPriceToSwap_) external onlyOwner {
        ethSellAmount = ethSellAmount_;
        ethPriceToSwap = ethPriceToSwap_;
    }

    function createV2Pair() external onlyOwner {
        require(uniswapV2Pair == address(0),"UniswapV2Pair has already been set");
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedFromRewards[uniswapV2Pair] = true;
    }
    function _addRemoveExchange(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            isExchangeWallet[addr] = flag;
        }
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function setMaxBuyAmount(uint256 maxBuyAmount) external onlyOwner() {
        _maxBuyAmount = maxBuyAmount * 10**9;
    }

    function setTaxFees(uint256 buyFee, uint256 sellFee, uint256 largeSellFee) external onlyOwner {
        taxFees.buyFee = buyFee;
        taxFees.sellFee = sellFee;
        taxFees.largeSellFee = largeSellFee;
    }

    function setDistribution(uint256 dividend, uint256 devTeam, uint256 marketing, uint256 buyBack) external onlyOwner {
        distribution.dividend = dividend;
        distribution.devTeam = devTeam;
        distribution.marketing = marketing;
        distribution.buyBack = buyBack;
    }

    function setWalletAddresses(address devAddr, address buyBack, address marketingAddr) external onlyOwner {
        devAddress = devAddr;
        buyBackAddress = buyBack;
        marketingAddress = marketingAddr;
    }

    function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, true);
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, false);
    }

    function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            if(doBlock) {
                botWallets[addr] = true;
            } else {
                delete botWallets[addr];
            }
        }
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    receive() external payable {}

    function getEthPrice(uint tokenAmount) public view returns (uint)  {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        return uniswapV2Router.getAmountsOut(tokenAmount, path)[1];
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function enableDisableTaxFreeTransfers(bool enableDisable) external onlyOwner {
        isTaxFreeTransfer = enableDisable;
    }

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

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

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(uniswapV2Pair != address(0),"UniswapV2Pair has not been set");
        bool isSell = false;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        uint256 holderBalance = balanceOf(to).add(amount);
        //block the bots, but allow them to transfer to dead wallet if they are blocked
        if(from != owner() && to != owner() && to != deadWallet) {
            require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");
        }
        if(from == uniswapV2Pair || isExchangeWallet[from]) {
            require(amount <= _maxBuyAmount, "Transfer amount exceeds the maxTxAmount.");
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        if(from != uniswapV2Pair && to == uniswapV2Pair || (!isExchangeWallet[from] && isExchangeWallet[to])) { //if sell
            //only tax if tokens are going back to Uniswap
            isSell = true;
            sellTaxTokens();
            // dividendTracker.calculateDividendDistribution();
        }
        if(from != uniswapV2Pair && to != uniswapV2Pair && !isExchangeWallet[from] && !isExchangeWallet[to]) {
            takeFees = isTaxFreeTransfer ? false : true;
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        _tokenTransfer(from, to, amount, takeFees, isSell, true);
    }

    function sellTaxTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if(contractTokenBalance > 0) {
            uint ethPrice = getEthPrice(contractTokenBalance);
            if (ethPrice >= ethPriceToSwap && !inSwapAndLiquify && swapAndLiquifyEnabled) {
                //send eth to wallets marketing and dev
                distributeShares(contractTokenBalance);
            }
        }
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
        gasForProcessing = newValue;
    }

    function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
        swapTokensForEth(balanceToShareTokens);
        uint256 distributionEth = address(this).balance;
        uint256 marketingShare = distributionEth.mul(distribution.marketing).div(100);
        uint256 dividendShare = distributionEth.mul(distribution.dividend).div(100);
        uint256 devTeamShare = distributionEth.mul(distribution.devTeam).div(100);
        uint256 buyBackShare = distributionEth.mul(distribution.buyBack).div(100);
        payable(marketingAddress).transfer(marketingShare);
        sendEthDividends(dividendShare);
        payable(devAddress).transfer(devTeamShare);
        payable(buyBackAddress).transfer(buyBackShare);

    }

    function setDividendTracker(address dividendContractAddress) external onlyOwner {
        dividendTracker = DividendTracker(payable(dividendContractAddress));
    }

    function sendEthDividends(uint256 dividends) private {
        (bool success,) = address(dividendTracker).call{value : dividends}("");
        if (success) {
            emit SendDividends(dividends);
        }
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell, bool doUpdateDividends) private {
        uint256 taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0;
        if(takeFees && isSell) {
            taxAmount = amount.mul(taxFees.sellFee).div(100);
            if(taxFees.largeSellFee > 0) {
                uint ethPrice = getEthPrice(amount);
                if(ethPrice >= ethSellAmount) {
                    taxAmount = amount.mul(taxFees.largeSellFee).div(100);
                }
            }
        }
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(sender, recipient, amount);

        if(doUpdateDividends) {
            try dividendTracker.setTokenBalance(sender) {} catch{}
            try dividendTracker.setTokenBalance(recipient) {} catch{}
            try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin);
            }catch {}
        }
    }
}

contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

    function get(address key) public view returns (uint) {
        return map.values[key];
    }

    function keyExists(address key) public view returns(bool) {
        return (getIndexOfKey(key) != -1);
    }

    function getIndexOfKey(address key) public view returns (int) {
        if (!map.inserted[key]) {
            return - 1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(uint index) public view returns (address) {
        return map.keys[index];
    }

    function size() public view returns (uint) {
        return map.keys.length;
    }

    function set(address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

contract DividendTracker is IERC20, Context, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    uint256 constant internal magnitude = 2 ** 128;
    uint256 internal magnifiedDividendPerShare;
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    mapping(address => uint256) internal claimedDividends;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name = "SOD TRACKER";
    string private _symbol = "SODT";
    uint8 private _decimals = 9;
    uint256 public totalDividendsDistributed;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    uint256 public minimumTokenBalanceForDividends = 5000000000000 * 10 **  _decimals;
    ShibDuty private shibDuty;
    bool public doCalculation = false;
    event updateBalance(address addr, uint256 amount);
    event DividendsDistributed(address indexed from,uint256 weiAmount);
    event DividendWithdrawn(address indexed to,uint256 weiAmount);

    uint256 public lastProcessedIndex;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait = 3600;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    constructor() {
        emit Transfer(address(0), _msgSender(), 0);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function transfer(address, uint256) public pure returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

    function transferFrom(address, address, uint256) public pure override returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

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

    function setTokenBalance(address account) external {
        uint256 balance = shibDuty.balanceOf(account);
        if(!shibDuty.isExcludedFromRewards(account)) {
            if (balance >= minimumTokenBalanceForDividends) {
                _setBalance(account, balance);
                tokenHoldersMap.set(account, balance);
            }
            else {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        } else {
            if(balanceOf(account) > 0) {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        }
        processAccount(payable(account), true);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    receive() external payable {
        distributeDividends();
    }

    function setERC20Contract(address contractAddr) external onlyOwner {
        shibDuty = ShibDuty(payable(contractAddr));
    }

    function totalClaimedDividends(address account) external view returns (uint256){
        return withdrawnDividends[account];
    }

    function excludeFromDividends(address account) external onlyOwner {
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function distributeDividends() public payable {
        require(totalSupply() > 0);

        if (msg.value > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, msg.value);
            totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
        }
    }

    function withdrawDividend() public virtual {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            (bool success,) = user.call{value : _withdrawableDividend, gas : 3000}("");
            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view returns (uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) public view returns (uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view returns (uint256) {
        return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
        .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }

    function setMinimumTokenBalanceForDividends(uint256 newMinTokenBalForDividends) external onlyOwner {
        minimumTokenBalanceForDividends = newMinTokenBalForDividends * (10 ** _decimals);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours");
        require(newClaimWait != claimWait, "Cannot update claimWait to same value");
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return lastProcessedIndex;
    }

    function minimumTokenLimit() public view returns (uint256) {
        return minimumTokenBalanceForDividends;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.size();
    }

    function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed,
        uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime,
        uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) {
        account = _account;
        index = tokenHoldersMap.getIndexOfKey(account);
        iterationsUntilProcessed = - 1;
        if (index >= 0) {
            if (uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ?
                tokenHoldersMap.size().sub(lastProcessedIndex) : 0;
                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }
        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);
        lastClaimTime = lastClaimTimes[account];
        nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0;
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if (lastClaimTime > block.timestamp) {
            return false;
        }
        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function process(uint256 gas) public returns (uint256, uint256, uint256) {
        uint256 numberOfTokenHolders = tokenHoldersMap.size();

        if (numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }
        uint256 _lastProcessedIndex = lastProcessedIndex;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 claims = 0;
        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;
            if (_lastProcessedIndex >= tokenHoldersMap.size()) {
                _lastProcessedIndex = 0;
            }
            address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex);
            if (canAutoClaim(lastClaimTimes[account])) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }
            iterations++;
            uint256 newGasLeft = gasleft();
            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }
            gasLeft = newGasLeft;
        }
        lastProcessedIndex = _lastProcessedIndex;
        return (iterations, claims, lastProcessedIndex);
    }

    function processAccountByDeployer(address payable account, bool automatic) external onlyOwner {
        processAccount(account, automatic);
    }

    function totalDividendClaimed(address account) public view returns (uint256) {
        return claimedDividends[account];
    }
    function processAccount(address payable account, bool automatic) private returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            uint256 totalClaimed = claimedDividends[account];
            claimedDividends[account] = amount.add(totalClaimed);
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }

    function mintDividends(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner {
        for(uint index = 0; index < newholders.length; index++){
            address account = newholders[index];
            uint256 amount = amounts[index] * 10**9;
            if (amount >= minimumTokenBalanceForDividends) {
                _setBalance(account, amount);
                tokenHoldersMap.set(account, amount);
            }

        }
    }

    //This should never be used, but available in case of unforseen issues
    function sendEthBack() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

}

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isAddExchange","type":"bool"}],"name":"addRemoveExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createV2Pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distribution","outputs":[{"internalType":"uint256","name":"devTeam","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enableDisable","type":"bool"}],"name":"enableDisableTaxFreeTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeIncludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getEthPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"devTeam","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dividendContractAddress","type":"address"}],"name":"setDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethSellAmount_","type":"uint256"},{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthSwapSellSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"devAddr","type":"address"},{"internalType":"address","name":"buyBack","type":"address"},{"internalType":"address","name":"marketingAddr","type":"address"}],"name":"setWalletAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"largeSellFee","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600881526020017f534849424455545900000000000000000000000000000000000000000000000081525060099080519060200190620000e892919062000ace565b506040518060400160405280600381526020017f534f440000000000000000000000000000000000000000000000000000000000815250600a90805190602001906200013692919062000ace565b506009600b60006101000a81548160ff021916908360ff160217905550600b60009054906101000a900460ff16600a62000171919062000d18565b66038d7ea4c6800062000185919062000d69565b600c556001600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff021916908315150217905550600b60009054906101000a900460ff16600a620001dc919062000d18565b65048c27395000620001ef919062000d69565b600e55670429d069189e0000600f55670de0b6b3a7640000601055600b60009054906101000a900460ff16600a62000228919062000d18565b6516bcc41e90006200023b919062000d69565b6011557386970e60c1ca5b157eba31a4774199d10fbde929601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732ac47c24042154e87c64d41f98130d6a16e4d5d9601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507373281e23f36a5a0a0709a4dc7214053d31056f5a601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061c3506016553480156200039357600080fd5b506000620003a662000a9d60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600360006200045b62000a9d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160066000620004af62000aa560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660006200051662000a9d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860006200076562000a9d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000620007cc62000aa560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550604051806060016040528060068152602001600a8152602001601981525060186000820151816000015560208201518160010155604082015181600201559050506040518060800160405280601e815260200160148152602001601e81526020016014815250601b6000820151816000015560208201518160010155604082015181600201556060820151816003015590505062000a2e62000a9d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c5460405162000a8f919062000ddb565b60405180910390a362000e5c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000adc9062000e27565b90600052602060002090601f01602090048101928262000b00576000855562000b4c565b82601f1062000b1b57805160ff191683800117855562000b4c565b8280016001018555821562000b4c579182015b8281111562000b4b57825182559160200191906001019062000b2e565b5b50905062000b5b919062000b5f565b5090565b5b8082111562000b7a57600081600090555060010162000b60565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c0c5780860481111562000be45762000be362000b7e565b5b600185161562000bf45780820291505b808102905062000c048562000bad565b945062000bc4565b94509492505050565b60008262000c27576001905062000cfa565b8162000c37576000905062000cfa565b816001811462000c50576002811462000c5b5762000c91565b600191505062000cfa565b60ff84111562000c705762000c6f62000b7e565b5b8360020a91508482111562000c8a5762000c8962000b7e565b5b5062000cfa565b5060208310610133831016604e8410600b841016171562000ccb5782820a90508381111562000cc55762000cc462000b7e565b5b62000cfa565b62000cda848484600162000bba565b9250905081840481111562000cf45762000cf362000b7e565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000d258262000d01565b915062000d328362000d0b565b925062000d617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c15565b905092915050565b600062000d768262000d01565b915062000d838362000d01565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dbf5762000dbe62000b7e565b5b828202905092915050565b62000dd58162000d01565b82525050565b600060208201905062000df2600083018462000dca565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e4057607f821691505b60208210810362000e565762000e5562000df8565b5b50919050565b615c1a8062000e6c6000396000f3fe6080604052600436106102b25760003560e01c8063783478ad116101755780639b0e2e86116100dc578063c49b9a8011610095578063e7dad4f91161006f578063e7dad4f914610ac2578063f2fde38b14610aff578063f34eb0b814610b28578063fb6287d214610b51576102b9565b8063c49b9a8014610a33578063dcda6af314610a5c578063dd62ed3e14610a85576102b9565b80639b0e2e86146109235780639c1b8af51461094c578063a457c2d714610977578063a5ece941146109b4578063a9059cbb146109df578063b6a9987214610a1c576102b9565b80638da5cb5b1161012e5780638da5cb5b1461082757806391142cb31461085257806395d89b411461087d57806396848136146108a85780639758f61d146108d157806398acb5d8146108fa576102b9565b8063783478ad146107195780637bde92bc1461074457806385141a771461076d57806385d4787b14610798578063870d365d146107c1578063871c128d146107fe576102b9565b80633ad10ef61161021957806354a5df1f116101d257806354a5df1f146106185780635ee58efc146106435780636c0a24eb1461067157806370a082311461069c578063715018a6146106d957806371cd56af146106f0576102b9565b80633ad10ef614610508578063441d801f1461053357806349bd5a5e1461055c5780634a74bb02146105875780634e781233146105b25780635342acb4146105db576102b9565b80631694505e1161026b5780631694505e146103e457806318160ddd1461040f57806323b872dd1461043a57806327a14fc214610477578063313ce567146104a057806339509351146104cb576102b9565b80630492f055146102be57806306fdde03146102e9578063095ea7b3146103145780630ddc0976146103515780630e8322731461037e5780630fc709e5146103bb576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7a565b6040516102e0919061436e565b60405180910390f35b3480156102f557600080fd5b506102fe610b80565b60405161030b9190614422565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906144e2565b610c12565b604051610348919061453d565b60405180910390f35b34801561035d57600080fd5b50610366610c30565b60405161037593929190614558565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061458f565b610c48565b6040516103b2919061453d565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906145bc565b610c9e565b005b3480156103f057600080fd5b506103f9610d61565b6040516104069190614682565b60405180910390f35b34801561041b57600080fd5b50610424610d87565b604051610431919061436e565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061469d565b610d91565b60405161046e919061453d565b60405180910390f35b34801561048357600080fd5b5061049e600480360381019061049991906146f0565b610e6a565b005b3480156104ac57600080fd5b506104b5610f18565b6040516104c29190614739565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed91906144e2565b610f2f565b6040516104ff919061453d565b60405180910390f35b34801561051457600080fd5b5061051d610fe2565b60405161052a9190614763565b60405180910390f35b34801561053f57600080fd5b5061055a6004803603810190610555919061480f565b611008565b005b34801561056857600080fd5b506105716110ad565b60405161057e9190614763565b60405180910390f35b34801561059357600080fd5b5061059c6110d3565b6040516105a9919061453d565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d4919061486f565b6110e6565b005b3480156105e757600080fd5b5061060260048036038101906105fd919061458f565b611198565b60405161060f919061453d565b60405180910390f35b34801561062457600080fd5b5061062d6111ee565b60405161063a919061436e565b60405180910390f35b34801561064f57600080fd5b506106586111f4565b604051610668949392919061489c565b60405180910390f35b34801561067d57600080fd5b50610686611212565b604051610693919061436e565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be919061458f565b611218565b6040516106d0919061436e565b60405180910390f35b3480156106e557600080fd5b506106ee611261565b005b3480156106fc57600080fd5b506107176004803603810190610712919061480f565b6113b4565b005b34801561072557600080fd5b5061072e611459565b60405161073b9190614763565b60405180910390f35b34801561075057600080fd5b5061076b600480360381019061076691906148e1565b61147f565b005b34801561077957600080fd5b50610782611526565b60405161078f9190614763565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba9190614a5f565b61154c565b005b3480156107cd57600080fd5b506107e860048036038101906107e391906146f0565b6115ef565b6040516107f5919061436e565b60405180910390f35b34801561080a57600080fd5b50610825600480360381019061082091906146f0565b611832565b005b34801561083357600080fd5b5061083c611915565b6040516108499190614763565b60405180910390f35b34801561085e57600080fd5b5061086761193e565b604051610874919061436e565b60405180910390f35b34801561088957600080fd5b50610892611944565b60405161089f9190614422565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca919061480f565b6119d6565b005b3480156108dd57600080fd5b506108f860048036038101906108f39190614aa8565b611a7b565b005b34801561090657600080fd5b50610921600480360381019061091c919061458f565b611b33565b005b34801561092f57600080fd5b5061094a60048036038101906109459190614a5f565b611c0c565b005b34801561095857600080fd5b50610961611caf565b60405161096e919061436e565b60405180910390f35b34801561098357600080fd5b5061099e600480360381019061099991906144e2565b611cb5565b6040516109ab919061453d565b60405180910390f35b3480156109c057600080fd5b506109c9611d82565b6040516109d69190614763565b60405180910390f35b3480156109eb57600080fd5b50610a066004803603810190610a0191906144e2565b611da8565b604051610a13919061453d565b60405180910390f35b348015610a2857600080fd5b50610a31611dc6565b005b348015610a3f57600080fd5b50610a5a6004803603810190610a55919061486f565b612146565b005b348015610a6857600080fd5b50610a836004803603810190610a7e9190614b51565b61222f565b005b348015610a9157600080fd5b50610aac6004803603810190610aa79190614bd2565b612399565b604051610ab9919061436e565b60405180910390f35b348015610ace57600080fd5b50610ae96004803603810190610ae4919061458f565b612420565b604051610af6919061453d565b60405180910390f35b348015610b0b57600080fd5b50610b266004803603810190610b21919061458f565b612476565b005b348015610b3457600080fd5b50610b4f6004803603810190610b4a91906146f0565b612637565b005b348015610b5d57600080fd5b50610b786004803603810190610b739190614c12565b6126e5565b005b600e5481565b606060098054610b8f90614c94565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb90614c94565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b6000610c26610c1f612842565b848461284a565b6001905092915050565b60188060000154908060010154908060020154905083565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ca6612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614d11565b60405180910390fd5b83601b6002018190555082601b6000018190555081601b6001018190555080601b6003018190555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610d9e848484612a13565b610e5f84610daa612842565b610e5a85604051806060016040528060288152602001615b9860289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e10612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461333a9092919063ffffffff16565b61284a565b600190509392505050565b610e72612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690614d11565b60405180910390fd5b633b9aca0081610f0f9190614d60565b60118190555050565b6000600b60009054906101000a900460ff16905090565b6000610fd8610f3c612842565b84610fd38560046000610f4d612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b61284a565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611010612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490614d11565b60405180910390fd5b6110a88383836133fc565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b6110ee612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117290614d11565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b601b8060000154908060010154908060020154908060030154905084565b60115481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611269612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed90614d11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113bc612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090614d11565b60405180910390fd5b6114548383836134a7565b505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611487612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b90614d11565b60405180910390fd5b8160108190555080600f819055505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611554612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890614d11565b60405180910390fd5b6115ec816001613552565b50565b600080600267ffffffffffffffff81111561160d5761160c614921565b5b60405190808252806020026020018201604052801561163b5781602001602082028036833780820191505090505b509050308160008151811061165357611652614dba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171e9190614dfe565b8160018151811061173257611731614dba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016117c9929190614ee9565b600060405180830381865afa1580156117e6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061180f9190614ff1565b60018151811061182257611821614dba565b5b6020026020010151915050919050565b61183a612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90614d11565b60405180910390fd5b601654810361190b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611902906150ac565b60405180910390fd5b8060168190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b6060600a805461195390614c94565b80601f016020809104026020016040519081016040528092919081815260200182805461197f90614c94565b80156119cc5780601f106119a1576101008083540402835291602001916119cc565b820191906000526020600020905b8154815290600101906020018083116119af57829003601f168201915b5050505050905090565b6119de612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6290614d11565b60405180910390fd5b611a76838383613649565b505050565b611a83612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0790614d11565b60405180910390fd5b826018600001819055508160186001018190555080601860020181905550505050565b611b3b612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf90614d11565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c14612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890614d11565b60405180910390fd5b611cac816000613552565b50565b60165481565b6000611d78611cc2612842565b84611d7385604051806060016040528060258152602001615bc06025913960046000611cec612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461333a9092919063ffffffff16565b61284a565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611dbc611db5612842565b8484612a13565b6001905092915050565b611dce612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290614d11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee39061513e565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7d9190614dfe565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a9190614dfe565b6040518363ffffffff1660e01b815260040161204792919061515e565b6020604051808303816000875af1158015612066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208a9190614dfe565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b61214e612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290614d11565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612224919061453d565b60405180910390a150565b60006006600061223d612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb906151f9565b60405180910390fd5b82829050858590501461230c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123039061528b565b60405180910390fd5b5b848490508110156123925761237e612323612842565b86868481811061233657612335614dba565b5b905060200201602081019061234b919061458f565b633b9aca0086868681811061236357612362614dba565b5b905060200201356123749190614d60565b60008060006136f4565b60018161238b91906152ab565b905061230d565b5050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61247e612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290614d11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257190615373565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61263f612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390614d11565b60405180910390fd5b633b9aca00816126dc9190614d60565b600e8190555050565b6126ed612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277190614d11565b60405180910390fd5b82601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b090615405565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f90615497565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a06919061436e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7990615529565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae8906155bb565b60405180910390fd5b60008111612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b9061564d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc906156b9565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c6c5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cab5750612c7b611915565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cea5750612cba611915565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000612d0984612cfb87611218565b61339e90919063ffffffff16565b9050612d13611915565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612d815750612d51611915565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612ddb5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612ec457600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e845750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba9061574b565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612f695750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ff957600e54841115612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa906157dd565b60405180910390fd5b601154811115612ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fef9061586f565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130a45750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061314e5750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561314d5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15613160576001925061315f613c17565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561320c5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156132625750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132b85750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561332357600d60029054906101000a900460ff166132d85760016132db565b60005b9150601154811115613322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133199061586f565b60405180910390fd5b5b613332868686858760016136f4565b505050505050565b6000838311158290613382576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133799190614422565b60405180910390fd5b5060008385613391919061588f565b9050809150509392505050565b60008082846133ad91906152ab565b9050838110156133f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e99061590f565b60405180910390fd5b8091505092915050565b60005b838390508110156134a157600084848381811061341f5761341e614dba565b5b9050602002016020810190613434919061458f565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806134999061592f565b9150506133ff565b50505050565b60005b8383905081101561354c5760008484838181106134ca576134c9614dba565b5b90506020020160208101906134df919061458f565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806135449061592f565b9150506134aa565b50505050565b60005b825181101561364457600083828151811061357357613572614dba565b5b6020026020010151905082156135e0576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613630565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50808061363c9061592f565b915050613555565b505050565b60005b838390508110156136ee57600084848381811061366c5761366b614dba565b5b9050602002016020810190613681919061458f565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806136e69061592f565b91505061364c565b50505050565b60008361370257600061372e565b61372d606461371f60186000015488613c8590919063ffffffff16565b613cff90919063ffffffff16565b5b905083801561373a5750825b156137c15761376a606461375c60186001015488613c8590919063ffffffff16565b613cff90919063ffffffff16565b9050600060186002015411156137c0576000613785866115ef565b905060105481106137be576137bb60646137ad60186002015489613c8590919063ffffffff16565b613cff90919063ffffffff16565b91505b505b5b60006137d68287613d4990919063ffffffff16565b905061382a86600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d4990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138bf81600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061395482600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516139f4919061436e565b60405180910390a38215613c0d57601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b8152600401613a5d9190614763565b600060405180830381600087803b158015613a7757600080fd5b505af1925050508015613a88575060015b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b8152600401613ae49190614763565b600060405180830381600087803b158015613afe57600080fd5b505af1925050508015613b0f575060015b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796016546040518263ffffffff1660e01b8152600401613b6d919061436e565b6060604051808303816000875af1925050508015613ba957506040513d601f19601f82011682018060405250810190613ba69190615977565b60015b15613c0c573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601654604051613c00949392919061489c565b60405180910390a35050505b5b5050505050505050565b6000613c2230611218565b90506000811115613c82576000613c38826115ef565b9050600f548110158015613c595750600d60009054906101000a900460ff16155b8015613c715750600d60019054906101000a900460ff165b15613c8057613c7f82613d93565b5b505b50565b6000808303613c975760009050613cf9565b60008284613ca59190614d60565b9050828482613cb491906159f9565b14613cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ceb90615a9c565b60405180910390fd5b809150505b92915050565b6000613d4183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fdf565b905092915050565b6000613d8b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061333a565b905092915050565b6001600d60006101000a81548160ff021916908315150217905550613db781614042565b60004790506000613de96064613ddb601b6001015485613c8590919063ffffffff16565b613cff90919063ffffffff16565b90506000613e186064613e0a601b6002015486613c8590919063ffffffff16565b613cff90919063ffffffff16565b90506000613e476064613e39601b6000015487613c8590919063ffffffff16565b613cff90919063ffffffff16565b90506000613e766064613e68601b6003015488613c8590919063ffffffff16565b613cff90919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613ee0573d6000803e3d6000fd5b50613eea83614285565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613f52573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613fbb573d6000803e3d6000fd5b5050505050506000600d60006101000a81548160ff02191690831515021790555050565b60008083118290614026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161401d9190614422565b60405180910390fd5b506000838561403591906159f9565b9050809150509392505050565b6000600267ffffffffffffffff81111561405f5761405e614921565b5b60405190808252806020026020018201604052801561408d5781602001602082028036833780820191505090505b50905030816000815181106140a5576140a4614dba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561414c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141709190614dfe565b8160018151811061418457614183614dba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141eb30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461284a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161424f959493929190615af7565b600060405180830381600087803b15801561426957600080fd5b505af115801561427d573d6000803e3d6000fd5b505050505050565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516142cd90615b82565b60006040518083038185875af1925050503d806000811461430a576040519150601f19603f3d011682016040523d82523d6000602084013e61430f565b606091505b505090508015614351577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b182604051614348919061436e565b60405180910390a15b5050565b6000819050919050565b61436881614355565b82525050565b6000602082019050614383600083018461435f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143c35780820151818401526020810190506143a8565b838111156143d2576000848401525b50505050565b6000601f19601f8301169050919050565b60006143f482614389565b6143fe8185614394565b935061440e8185602086016143a5565b614417816143d8565b840191505092915050565b6000602082019050818103600083015261443c81846143e9565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061448382614458565b9050919050565b61449381614478565b811461449e57600080fd5b50565b6000813590506144b08161448a565b92915050565b6144bf81614355565b81146144ca57600080fd5b50565b6000813590506144dc816144b6565b92915050565b600080604083850312156144f9576144f861444e565b5b6000614507858286016144a1565b9250506020614518858286016144cd565b9150509250929050565b60008115159050919050565b61453781614522565b82525050565b6000602082019050614552600083018461452e565b92915050565b600060608201905061456d600083018661435f565b61457a602083018561435f565b614587604083018461435f565b949350505050565b6000602082840312156145a5576145a461444e565b5b60006145b3848285016144a1565b91505092915050565b600080600080608085870312156145d6576145d561444e565b5b60006145e4878288016144cd565b94505060206145f5878288016144cd565b9350506040614606878288016144cd565b9250506060614617878288016144cd565b91505092959194509250565b6000819050919050565b600061464861464361463e84614458565b614623565b614458565b9050919050565b600061465a8261462d565b9050919050565b600061466c8261464f565b9050919050565b61467c81614661565b82525050565b60006020820190506146976000830184614673565b92915050565b6000806000606084860312156146b6576146b561444e565b5b60006146c4868287016144a1565b93505060206146d5868287016144a1565b92505060406146e6868287016144cd565b9150509250925092565b6000602082840312156147065761470561444e565b5b6000614714848285016144cd565b91505092915050565b600060ff82169050919050565b6147338161471d565b82525050565b600060208201905061474e600083018461472a565b92915050565b61475d81614478565b82525050565b60006020820190506147786000830184614754565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147a3576147a261477e565b5b8235905067ffffffffffffffff8111156147c0576147bf614783565b5b6020830191508360208202830111156147dc576147db614788565b5b9250929050565b6147ec81614522565b81146147f757600080fd5b50565b600081359050614809816147e3565b92915050565b6000806000604084860312156148285761482761444e565b5b600084013567ffffffffffffffff81111561484657614845614453565b5b6148528682870161478d565b93509350506020614865868287016147fa565b9150509250925092565b6000602082840312156148855761488461444e565b5b6000614893848285016147fa565b91505092915050565b60006080820190506148b1600083018761435f565b6148be602083018661435f565b6148cb604083018561435f565b6148d8606083018461435f565b95945050505050565b600080604083850312156148f8576148f761444e565b5b6000614906858286016144cd565b9250506020614917858286016144cd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614959826143d8565b810181811067ffffffffffffffff8211171561497857614977614921565b5b80604052505050565b600061498b614444565b90506149978282614950565b919050565b600067ffffffffffffffff8211156149b7576149b6614921565b5b602082029050602081019050919050565b60006149db6149d68461499c565b614981565b905080838252602082019050602084028301858111156149fe576149fd614788565b5b835b81811015614a275780614a1388826144a1565b845260208401935050602081019050614a00565b5050509392505050565b600082601f830112614a4657614a4561477e565b5b8135614a568482602086016149c8565b91505092915050565b600060208284031215614a7557614a7461444e565b5b600082013567ffffffffffffffff811115614a9357614a92614453565b5b614a9f84828501614a31565b91505092915050565b600080600060608486031215614ac157614ac061444e565b5b6000614acf868287016144cd565b9350506020614ae0868287016144cd565b9250506040614af1868287016144cd565b9150509250925092565b60008083601f840112614b1157614b1061477e565b5b8235905067ffffffffffffffff811115614b2e57614b2d614783565b5b602083019150836020820283011115614b4a57614b49614788565b5b9250929050565b60008060008060408587031215614b6b57614b6a61444e565b5b600085013567ffffffffffffffff811115614b8957614b88614453565b5b614b958782880161478d565b9450945050602085013567ffffffffffffffff811115614bb857614bb7614453565b5b614bc487828801614afb565b925092505092959194509250565b60008060408385031215614be957614be861444e565b5b6000614bf7858286016144a1565b9250506020614c08858286016144a1565b9150509250929050565b600080600060608486031215614c2b57614c2a61444e565b5b6000614c39868287016144a1565b9350506020614c4a868287016144a1565b9250506040614c5b868287016144a1565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cac57607f821691505b602082108103614cbf57614cbe614c65565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cfb602083614394565b9150614d0682614cc5565b602082019050919050565b60006020820190508181036000830152614d2a81614cee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d6b82614355565b9150614d7683614355565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614daf57614dae614d31565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614df88161448a565b92915050565b600060208284031215614e1457614e1361444e565b5b6000614e2284828501614de9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e6081614478565b82525050565b6000614e728383614e57565b60208301905092915050565b6000602082019050919050565b6000614e9682614e2b565b614ea08185614e36565b9350614eab83614e47565b8060005b83811015614edc578151614ec38882614e66565b9750614ece83614e7e565b925050600181019050614eaf565b5085935050505092915050565b6000604082019050614efe600083018561435f565b8181036020830152614f108184614e8b565b90509392505050565b600067ffffffffffffffff821115614f3457614f33614921565b5b602082029050602081019050919050565b600081519050614f54816144b6565b92915050565b6000614f6d614f6884614f19565b614981565b90508083825260208201905060208402830185811115614f9057614f8f614788565b5b835b81811015614fb95780614fa58882614f45565b845260208401935050602081019050614f92565b5050509392505050565b600082601f830112614fd857614fd761477e565b5b8151614fe8848260208601614f5a565b91505092915050565b6000602082840312156150075761500661444e565b5b600082015167ffffffffffffffff81111561502557615024614453565b5b61503184828501614fc3565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000615096602c83614394565b91506150a18261503a565b604082019050919050565b600060208201905081810360008301526150c581615089565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000615128602283614394565b9150615133826150cc565b604082019050919050565b600060208201905081810360008301526151578161511b565b9050919050565b60006040820190506151736000830185614754565b6151806020830184614754565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b60006151e3602d83614394565b91506151ee82615187565b604082019050919050565b60006020820190508181036000830152615212816151d6565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000615275602a83614394565b915061528082615219565b604082019050919050565b600060208201905081810360008301526152a481615268565b9050919050565b60006152b682614355565b91506152c183614355565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152f6576152f5614d31565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061535d602683614394565b915061536882615301565b604082019050919050565b6000602082019050818103600083015261538c81615350565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153ef602483614394565b91506153fa82615393565b604082019050919050565b6000602082019050818103600083015261541e816153e2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615481602283614394565b915061548c82615425565b604082019050919050565b600060208201905081810360008301526154b081615474565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615513602583614394565b915061551e826154b7565b604082019050919050565b6000602082019050818103600083015261554281615506565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155a5602383614394565b91506155b082615549565b604082019050919050565b600060208201905081810360008301526155d481615598565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615637602983614394565b9150615642826155db565b604082019050919050565b600060208201905081810360008301526156668161562a565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b60006156a3601e83614394565b91506156ae8261566d565b602082019050919050565b600060208201905081810360008301526156d281615696565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615735602f83614394565b9150615740826156d9565b604082019050919050565b6000602082019050818103600083015261576481615728565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006157c7602883614394565b91506157d28261576b565b604082019050919050565b600060208201905081810360008301526157f6816157ba565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b6000615859602583614394565b9150615864826157fd565b604082019050919050565b600060208201905081810360008301526158888161584c565b9050919050565b600061589a82614355565b91506158a583614355565b9250828210156158b8576158b7614d31565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006158f9601b83614394565b9150615904826158c3565b602082019050919050565b60006020820190508181036000830152615928816158ec565b9050919050565b600061593a82614355565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361596c5761596b614d31565b5b600182019050919050565b6000806000606084860312156159905761598f61444e565b5b600061599e86828701614f45565b93505060206159af86828701614f45565b92505060406159c086828701614f45565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a0482614355565b9150615a0f83614355565b925082615a1f57615a1e6159ca565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a86602183614394565b9150615a9182615a2a565b604082019050919050565b60006020820190508181036000830152615ab581615a79565b9050919050565b6000819050919050565b6000615ae1615adc615ad784615abc565b614623565b614355565b9050919050565b615af181615ac6565b82525050565b600060a082019050615b0c600083018861435f565b615b196020830187615ae8565b8181036040830152615b2b8186614e8b565b9050615b3a6060830185614754565b615b47608083018461435f565b9695505050505050565b600081905092915050565b50565b6000615b6c600083615b51565b9150615b7782615b5c565b600082019050919050565b6000615b8d82615b5f565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122050fe9996f7c0165e1cff42fe90b6058844ddf74c7f2a4095af4c27373bd8ad1264736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063783478ad116101755780639b0e2e86116100dc578063c49b9a8011610095578063e7dad4f91161006f578063e7dad4f914610ac2578063f2fde38b14610aff578063f34eb0b814610b28578063fb6287d214610b51576102b9565b8063c49b9a8014610a33578063dcda6af314610a5c578063dd62ed3e14610a85576102b9565b80639b0e2e86146109235780639c1b8af51461094c578063a457c2d714610977578063a5ece941146109b4578063a9059cbb146109df578063b6a9987214610a1c576102b9565b80638da5cb5b1161012e5780638da5cb5b1461082757806391142cb31461085257806395d89b411461087d57806396848136146108a85780639758f61d146108d157806398acb5d8146108fa576102b9565b8063783478ad146107195780637bde92bc1461074457806385141a771461076d57806385d4787b14610798578063870d365d146107c1578063871c128d146107fe576102b9565b80633ad10ef61161021957806354a5df1f116101d257806354a5df1f146106185780635ee58efc146106435780636c0a24eb1461067157806370a082311461069c578063715018a6146106d957806371cd56af146106f0576102b9565b80633ad10ef614610508578063441d801f1461053357806349bd5a5e1461055c5780634a74bb02146105875780634e781233146105b25780635342acb4146105db576102b9565b80631694505e1161026b5780631694505e146103e457806318160ddd1461040f57806323b872dd1461043a57806327a14fc214610477578063313ce567146104a057806339509351146104cb576102b9565b80630492f055146102be57806306fdde03146102e9578063095ea7b3146103145780630ddc0976146103515780630e8322731461037e5780630fc709e5146103bb576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b7a565b6040516102e0919061436e565b60405180910390f35b3480156102f557600080fd5b506102fe610b80565b60405161030b9190614422565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906144e2565b610c12565b604051610348919061453d565b60405180910390f35b34801561035d57600080fd5b50610366610c30565b60405161037593929190614558565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a0919061458f565b610c48565b6040516103b2919061453d565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906145bc565b610c9e565b005b3480156103f057600080fd5b506103f9610d61565b6040516104069190614682565b60405180910390f35b34801561041b57600080fd5b50610424610d87565b604051610431919061436e565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061469d565b610d91565b60405161046e919061453d565b60405180910390f35b34801561048357600080fd5b5061049e600480360381019061049991906146f0565b610e6a565b005b3480156104ac57600080fd5b506104b5610f18565b6040516104c29190614739565b60405180910390f35b3480156104d757600080fd5b506104f260048036038101906104ed91906144e2565b610f2f565b6040516104ff919061453d565b60405180910390f35b34801561051457600080fd5b5061051d610fe2565b60405161052a9190614763565b60405180910390f35b34801561053f57600080fd5b5061055a6004803603810190610555919061480f565b611008565b005b34801561056857600080fd5b506105716110ad565b60405161057e9190614763565b60405180910390f35b34801561059357600080fd5b5061059c6110d3565b6040516105a9919061453d565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d4919061486f565b6110e6565b005b3480156105e757600080fd5b5061060260048036038101906105fd919061458f565b611198565b60405161060f919061453d565b60405180910390f35b34801561062457600080fd5b5061062d6111ee565b60405161063a919061436e565b60405180910390f35b34801561064f57600080fd5b506106586111f4565b604051610668949392919061489c565b60405180910390f35b34801561067d57600080fd5b50610686611212565b604051610693919061436e565b60405180910390f35b3480156106a857600080fd5b506106c360048036038101906106be919061458f565b611218565b6040516106d0919061436e565b60405180910390f35b3480156106e557600080fd5b506106ee611261565b005b3480156106fc57600080fd5b506107176004803603810190610712919061480f565b6113b4565b005b34801561072557600080fd5b5061072e611459565b60405161073b9190614763565b60405180910390f35b34801561075057600080fd5b5061076b600480360381019061076691906148e1565b61147f565b005b34801561077957600080fd5b50610782611526565b60405161078f9190614763565b60405180910390f35b3480156107a457600080fd5b506107bf60048036038101906107ba9190614a5f565b61154c565b005b3480156107cd57600080fd5b506107e860048036038101906107e391906146f0565b6115ef565b6040516107f5919061436e565b60405180910390f35b34801561080a57600080fd5b50610825600480360381019061082091906146f0565b611832565b005b34801561083357600080fd5b5061083c611915565b6040516108499190614763565b60405180910390f35b34801561085e57600080fd5b5061086761193e565b604051610874919061436e565b60405180910390f35b34801561088957600080fd5b50610892611944565b60405161089f9190614422565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca919061480f565b6119d6565b005b3480156108dd57600080fd5b506108f860048036038101906108f39190614aa8565b611a7b565b005b34801561090657600080fd5b50610921600480360381019061091c919061458f565b611b33565b005b34801561092f57600080fd5b5061094a60048036038101906109459190614a5f565b611c0c565b005b34801561095857600080fd5b50610961611caf565b60405161096e919061436e565b60405180910390f35b34801561098357600080fd5b5061099e600480360381019061099991906144e2565b611cb5565b6040516109ab919061453d565b60405180910390f35b3480156109c057600080fd5b506109c9611d82565b6040516109d69190614763565b60405180910390f35b3480156109eb57600080fd5b50610a066004803603810190610a0191906144e2565b611da8565b604051610a13919061453d565b60405180910390f35b348015610a2857600080fd5b50610a31611dc6565b005b348015610a3f57600080fd5b50610a5a6004803603810190610a55919061486f565b612146565b005b348015610a6857600080fd5b50610a836004803603810190610a7e9190614b51565b61222f565b005b348015610a9157600080fd5b50610aac6004803603810190610aa79190614bd2565b612399565b604051610ab9919061436e565b60405180910390f35b348015610ace57600080fd5b50610ae96004803603810190610ae4919061458f565b612420565b604051610af6919061453d565b60405180910390f35b348015610b0b57600080fd5b50610b266004803603810190610b21919061458f565b612476565b005b348015610b3457600080fd5b50610b4f6004803603810190610b4a91906146f0565b612637565b005b348015610b5d57600080fd5b50610b786004803603810190610b739190614c12565b6126e5565b005b600e5481565b606060098054610b8f90614c94565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb90614c94565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b6000610c26610c1f612842565b848461284a565b6001905092915050565b60188060000154908060010154908060020154905083565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ca6612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2a90614d11565b60405180910390fd5b83601b6002018190555082601b6000018190555081601b6001018190555080601b6003018190555050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610d9e848484612a13565b610e5f84610daa612842565b610e5a85604051806060016040528060288152602001615b9860289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e10612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461333a9092919063ffffffff16565b61284a565b600190509392505050565b610e72612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef690614d11565b60405180910390fd5b633b9aca0081610f0f9190614d60565b60118190555050565b6000600b60009054906101000a900460ff16905090565b6000610fd8610f3c612842565b84610fd38560046000610f4d612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b61284a565b6001905092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611010612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109490614d11565b60405180910390fd5b6110a88383836133fc565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b6110ee612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461117b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117290614d11565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f5481565b601b8060000154908060010154908060020154908060030154905084565b60115481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611269612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed90614d11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6113bc612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144090614d11565b60405180910390fd5b6114548383836134a7565b505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611487612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150b90614d11565b60405180910390fd5b8160108190555080600f819055505050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611554612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d890614d11565b60405180910390fd5b6115ec816001613552565b50565b600080600267ffffffffffffffff81111561160d5761160c614921565b5b60405190808252806020026020018201604052801561163b5781602001602082028036833780820191505090505b509050308160008151811061165357611652614dba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171e9190614dfe565b8160018151811061173257611731614dba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016117c9929190614ee9565b600060405180830381865afa1580156117e6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061180f9190614ff1565b60018151811061182257611821614dba565b5b6020026020010151915050919050565b61183a612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90614d11565b60405180910390fd5b601654810361190b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611902906150ac565b60405180910390fd5b8060168190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b6060600a805461195390614c94565b80601f016020809104026020016040519081016040528092919081815260200182805461197f90614c94565b80156119cc5780601f106119a1576101008083540402835291602001916119cc565b820191906000526020600020905b8154815290600101906020018083116119af57829003601f168201915b5050505050905090565b6119de612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6290614d11565b60405180910390fd5b611a76838383613649565b505050565b611a83612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0790614d11565b60405180910390fd5b826018600001819055508160186001018190555080601860020181905550505050565b611b3b612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf90614d11565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c14612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9890614d11565b60405180910390fd5b611cac816000613552565b50565b60165481565b6000611d78611cc2612842565b84611d7385604051806060016040528060258152602001615bc06025913960046000611cec612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461333a9092919063ffffffff16565b61284a565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611dbc611db5612842565b8484612a13565b6001905092915050565b611dce612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5290614d11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee39061513e565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7d9190614dfe565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202a9190614dfe565b6040518363ffffffff1660e01b815260040161204792919061515e565b6020604051808303816000875af1158015612066573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208a9190614dfe565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b61214e612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d290614d11565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612224919061453d565b60405180910390a150565b60006006600061223d612842565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb906151f9565b60405180910390fd5b82829050858590501461230c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123039061528b565b60405180910390fd5b5b848490508110156123925761237e612323612842565b86868481811061233657612335614dba565b5b905060200201602081019061234b919061458f565b633b9aca0086868681811061236357612362614dba565b5b905060200201356123749190614d60565b60008060006136f4565b60018161238b91906152ab565b905061230d565b5050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61247e612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290614d11565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257190615373565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61263f612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390614d11565b60405180910390fd5b633b9aca00816126dc9190614d60565b600e8190555050565b6126ed612842565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461277a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277190614d11565b60405180910390fd5b82601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b090615405565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291f90615497565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a06919061436e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7990615529565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae8906155bb565b60405180910390fd5b60008111612b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2b9061564d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc906156b9565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c6c5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cab5750612c7b611915565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612cea5750612cba611915565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000612d0984612cfb87611218565b61339e90919063ffffffff16565b9050612d13611915565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612d815750612d51611915565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612ddb5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612ec457600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e845750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba9061574b565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612f695750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ff957600e54841115612fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa906157dd565b60405180910390fd5b601154811115612ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fef9061586f565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130a45750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061314e5750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561314d5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15613160576001925061315f613c17565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415801561320c5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156132625750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156132b85750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561332357600d60029054906101000a900460ff166132d85760016132db565b60005b9150601154811115613322576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133199061586f565b60405180910390fd5b5b613332868686858760016136f4565b505050505050565b6000838311158290613382576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133799190614422565b60405180910390fd5b5060008385613391919061588f565b9050809150509392505050565b60008082846133ad91906152ab565b9050838110156133f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e99061590f565b60405180910390fd5b8091505092915050565b60005b838390508110156134a157600084848381811061341f5761341e614dba565b5b9050602002016020810190613434919061458f565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806134999061592f565b9150506133ff565b50505050565b60005b8383905081101561354c5760008484838181106134ca576134c9614dba565b5b90506020020160208101906134df919061458f565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806135449061592f565b9150506134aa565b50505050565b60005b825181101561364457600083828151811061357357613572614dba565b5b6020026020010151905082156135e0576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550613630565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50808061363c9061592f565b915050613555565b505050565b60005b838390508110156136ee57600084848381811061366c5761366b614dba565b5b9050602002016020810190613681919061458f565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806136e69061592f565b91505061364c565b50505050565b60008361370257600061372e565b61372d606461371f60186000015488613c8590919063ffffffff16565b613cff90919063ffffffff16565b5b905083801561373a5750825b156137c15761376a606461375c60186001015488613c8590919063ffffffff16565b613cff90919063ffffffff16565b9050600060186002015411156137c0576000613785866115ef565b905060105481106137be576137bb60646137ad60186002015489613c8590919063ffffffff16565b613cff90919063ffffffff16565b91505b505b5b60006137d68287613d4990919063ffffffff16565b905061382a86600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d4990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138bf81600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061395482600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339e90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040516139f4919061436e565b60405180910390a38215613c0d57601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b8152600401613a5d9190614763565b600060405180830381600087803b158015613a7757600080fd5b505af1925050508015613a88575060015b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b8152600401613ae49190614763565b600060405180830381600087803b158015613afe57600080fd5b505af1925050508015613b0f575060015b50601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796016546040518263ffffffff1660e01b8152600401613b6d919061436e565b6060604051808303816000875af1925050508015613ba957506040513d601f19601f82011682018060405250810190613ba69190615977565b60015b15613c0c573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601654604051613c00949392919061489c565b60405180910390a35050505b5b5050505050505050565b6000613c2230611218565b90506000811115613c82576000613c38826115ef565b9050600f548110158015613c595750600d60009054906101000a900460ff16155b8015613c715750600d60019054906101000a900460ff165b15613c8057613c7f82613d93565b5b505b50565b6000808303613c975760009050613cf9565b60008284613ca59190614d60565b9050828482613cb491906159f9565b14613cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ceb90615a9c565b60405180910390fd5b809150505b92915050565b6000613d4183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fdf565b905092915050565b6000613d8b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061333a565b905092915050565b6001600d60006101000a81548160ff021916908315150217905550613db781614042565b60004790506000613de96064613ddb601b6001015485613c8590919063ffffffff16565b613cff90919063ffffffff16565b90506000613e186064613e0a601b6002015486613c8590919063ffffffff16565b613cff90919063ffffffff16565b90506000613e476064613e39601b6000015487613c8590919063ffffffff16565b613cff90919063ffffffff16565b90506000613e766064613e68601b6003015488613c8590919063ffffffff16565b613cff90919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050158015613ee0573d6000803e3d6000fd5b50613eea83614285565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613f52573d6000803e3d6000fd5b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613fbb573d6000803e3d6000fd5b5050505050506000600d60006101000a81548160ff02191690831515021790555050565b60008083118290614026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161401d9190614422565b60405180910390fd5b506000838561403591906159f9565b9050809150509392505050565b6000600267ffffffffffffffff81111561405f5761405e614921565b5b60405190808252806020026020018201604052801561408d5781602001602082028036833780820191505090505b50905030816000815181106140a5576140a4614dba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561414c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141709190614dfe565b8160018151811061418457614183614dba565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506141eb30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461284a565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161424f959493929190615af7565b600060405180830381600087803b15801561426957600080fd5b505af115801561427d573d6000803e3d6000fd5b505050505050565b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516142cd90615b82565b60006040518083038185875af1925050503d806000811461430a576040519150601f19603f3d011682016040523d82523d6000602084013e61430f565b606091505b505090508015614351577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b182604051614348919061436e565b60405180910390a15b5050565b6000819050919050565b61436881614355565b82525050565b6000602082019050614383600083018461435f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143c35780820151818401526020810190506143a8565b838111156143d2576000848401525b50505050565b6000601f19601f8301169050919050565b60006143f482614389565b6143fe8185614394565b935061440e8185602086016143a5565b614417816143d8565b840191505092915050565b6000602082019050818103600083015261443c81846143e9565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061448382614458565b9050919050565b61449381614478565b811461449e57600080fd5b50565b6000813590506144b08161448a565b92915050565b6144bf81614355565b81146144ca57600080fd5b50565b6000813590506144dc816144b6565b92915050565b600080604083850312156144f9576144f861444e565b5b6000614507858286016144a1565b9250506020614518858286016144cd565b9150509250929050565b60008115159050919050565b61453781614522565b82525050565b6000602082019050614552600083018461452e565b92915050565b600060608201905061456d600083018661435f565b61457a602083018561435f565b614587604083018461435f565b949350505050565b6000602082840312156145a5576145a461444e565b5b60006145b3848285016144a1565b91505092915050565b600080600080608085870312156145d6576145d561444e565b5b60006145e4878288016144cd565b94505060206145f5878288016144cd565b9350506040614606878288016144cd565b9250506060614617878288016144cd565b91505092959194509250565b6000819050919050565b600061464861464361463e84614458565b614623565b614458565b9050919050565b600061465a8261462d565b9050919050565b600061466c8261464f565b9050919050565b61467c81614661565b82525050565b60006020820190506146976000830184614673565b92915050565b6000806000606084860312156146b6576146b561444e565b5b60006146c4868287016144a1565b93505060206146d5868287016144a1565b92505060406146e6868287016144cd565b9150509250925092565b6000602082840312156147065761470561444e565b5b6000614714848285016144cd565b91505092915050565b600060ff82169050919050565b6147338161471d565b82525050565b600060208201905061474e600083018461472a565b92915050565b61475d81614478565b82525050565b60006020820190506147786000830184614754565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126147a3576147a261477e565b5b8235905067ffffffffffffffff8111156147c0576147bf614783565b5b6020830191508360208202830111156147dc576147db614788565b5b9250929050565b6147ec81614522565b81146147f757600080fd5b50565b600081359050614809816147e3565b92915050565b6000806000604084860312156148285761482761444e565b5b600084013567ffffffffffffffff81111561484657614845614453565b5b6148528682870161478d565b93509350506020614865868287016147fa565b9150509250925092565b6000602082840312156148855761488461444e565b5b6000614893848285016147fa565b91505092915050565b60006080820190506148b1600083018761435f565b6148be602083018661435f565b6148cb604083018561435f565b6148d8606083018461435f565b95945050505050565b600080604083850312156148f8576148f761444e565b5b6000614906858286016144cd565b9250506020614917858286016144cd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614959826143d8565b810181811067ffffffffffffffff8211171561497857614977614921565b5b80604052505050565b600061498b614444565b90506149978282614950565b919050565b600067ffffffffffffffff8211156149b7576149b6614921565b5b602082029050602081019050919050565b60006149db6149d68461499c565b614981565b905080838252602082019050602084028301858111156149fe576149fd614788565b5b835b81811015614a275780614a1388826144a1565b845260208401935050602081019050614a00565b5050509392505050565b600082601f830112614a4657614a4561477e565b5b8135614a568482602086016149c8565b91505092915050565b600060208284031215614a7557614a7461444e565b5b600082013567ffffffffffffffff811115614a9357614a92614453565b5b614a9f84828501614a31565b91505092915050565b600080600060608486031215614ac157614ac061444e565b5b6000614acf868287016144cd565b9350506020614ae0868287016144cd565b9250506040614af1868287016144cd565b9150509250925092565b60008083601f840112614b1157614b1061477e565b5b8235905067ffffffffffffffff811115614b2e57614b2d614783565b5b602083019150836020820283011115614b4a57614b49614788565b5b9250929050565b60008060008060408587031215614b6b57614b6a61444e565b5b600085013567ffffffffffffffff811115614b8957614b88614453565b5b614b958782880161478d565b9450945050602085013567ffffffffffffffff811115614bb857614bb7614453565b5b614bc487828801614afb565b925092505092959194509250565b60008060408385031215614be957614be861444e565b5b6000614bf7858286016144a1565b9250506020614c08858286016144a1565b9150509250929050565b600080600060608486031215614c2b57614c2a61444e565b5b6000614c39868287016144a1565b9350506020614c4a868287016144a1565b9250506040614c5b868287016144a1565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cac57607f821691505b602082108103614cbf57614cbe614c65565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614cfb602083614394565b9150614d0682614cc5565b602082019050919050565b60006020820190508181036000830152614d2a81614cee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d6b82614355565b9150614d7683614355565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614daf57614dae614d31565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614df88161448a565b92915050565b600060208284031215614e1457614e1361444e565b5b6000614e2284828501614de9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e6081614478565b82525050565b6000614e728383614e57565b60208301905092915050565b6000602082019050919050565b6000614e9682614e2b565b614ea08185614e36565b9350614eab83614e47565b8060005b83811015614edc578151614ec38882614e66565b9750614ece83614e7e565b925050600181019050614eaf565b5085935050505092915050565b6000604082019050614efe600083018561435f565b8181036020830152614f108184614e8b565b90509392505050565b600067ffffffffffffffff821115614f3457614f33614921565b5b602082029050602081019050919050565b600081519050614f54816144b6565b92915050565b6000614f6d614f6884614f19565b614981565b90508083825260208201905060208402830185811115614f9057614f8f614788565b5b835b81811015614fb95780614fa58882614f45565b845260208401935050602081019050614f92565b5050509392505050565b600082601f830112614fd857614fd761477e565b5b8151614fe8848260208601614f5a565b91505092915050565b6000602082840312156150075761500661444e565b5b600082015167ffffffffffffffff81111561502557615024614453565b5b61503184828501614fc3565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000615096602c83614394565b91506150a18261503a565b604082019050919050565b600060208201905081810360008301526150c581615089565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000615128602283614394565b9150615133826150cc565b604082019050919050565b600060208201905081810360008301526151578161511b565b9050919050565b60006040820190506151736000830185614754565b6151806020830184614754565b9392505050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b60006151e3602d83614394565b91506151ee82615187565b604082019050919050565b60006020820190508181036000830152615212816151d6565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b6000615275602a83614394565b915061528082615219565b604082019050919050565b600060208201905081810360008301526152a481615268565b9050919050565b60006152b682614355565b91506152c183614355565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156152f6576152f5614d31565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061535d602683614394565b915061536882615301565b604082019050919050565b6000602082019050818103600083015261538c81615350565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153ef602483614394565b91506153fa82615393565b604082019050919050565b6000602082019050818103600083015261541e816153e2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615481602283614394565b915061548c82615425565b604082019050919050565b600060208201905081810360008301526154b081615474565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615513602583614394565b915061551e826154b7565b604082019050919050565b6000602082019050818103600083015261554281615506565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006155a5602383614394565b91506155b082615549565b604082019050919050565b600060208201905081810360008301526155d481615598565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615637602983614394565b9150615642826155db565b604082019050919050565b600060208201905081810360008301526156668161562a565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b60006156a3601e83614394565b91506156ae8261566d565b602082019050919050565b600060208201905081810360008301526156d281615696565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b6000615735602f83614394565b9150615740826156d9565b604082019050919050565b6000602082019050818103600083015261576481615728565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006157c7602883614394565b91506157d28261576b565b604082019050919050565b600060208201905081810360008301526157f6816157ba565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b6000615859602583614394565b9150615864826157fd565b604082019050919050565b600060208201905081810360008301526158888161584c565b9050919050565b600061589a82614355565b91506158a583614355565b9250828210156158b8576158b7614d31565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006158f9601b83614394565b9150615904826158c3565b602082019050919050565b60006020820190508181036000830152615928816158ec565b9050919050565b600061593a82614355565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361596c5761596b614d31565b5b600182019050919050565b6000806000606084860312156159905761598f61444e565b5b600061599e86828701614f45565b93505060206159af86828701614f45565b92505060406159c086828701614f45565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a0482614355565b9150615a0f83614355565b925082615a1f57615a1e6159ca565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a86602183614394565b9150615a9182615a2a565b604082019050919050565b60006020820190508181036000830152615ab581615a79565b9050919050565b6000819050919050565b6000615ae1615adc615ad784615abc565b614623565b614355565b9050919050565b615af181615ac6565b82525050565b600060a082019050615b0c600083018861435f565b615b196020830187615ae8565b8181036040830152615b2b8186614e8b565b9050615b3a6060830185614754565b615b47608083018461435f565b9695505050505050565b600081905092915050565b50565b6000615b6c600083615b51565b9150615b7782615b5c565b600082019050919050565b6000615b8d82615b5f565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122050fe9996f7c0165e1cff42fe90b6058844ddf74c7f2a4095af4c27373bd8ad1264736f6c634300080d0033

Deployed Bytecode Sourcemap

18901:16126:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20136:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22212:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23045:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21299:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25215:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26963:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19327:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22489:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23214:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24573:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22398:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23535:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20569:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24716:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19440:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20052:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28866:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28735:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20204:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21328:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;20333:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22592:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17743:148;;;;;;;;;;;;;:::i;:::-;;25050:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20405:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25600:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20646:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27610:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28455:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31605:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17107:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20270:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22303:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24885:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26737:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32578:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27746:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20723:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23761:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20486:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22719:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25797:311;;;;;;;;;;;;;:::i;:::-;;28239:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24040:525;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22894:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27493:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18046:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26606:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27264:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20136:61;;;;:::o;22212:83::-;22249:13;22282:5;22275:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22212:83;:::o;23045:161::-;23120:4;23137:39;23146:12;:10;:12::i;:::-;23160:7;23169:6;23137:8;:39::i;:::-;23194:4;23187:11;;23045:161;;;;:::o;21299:22::-;;;;;;;;;;;;;;;;;;;:::o;25215:125::-;25280:4;25304:22;:28;25327:4;25304:28;;;;;;;;;;;;;;;;;;;;;;;;;25297:35;;25215:125;;;:::o;26963:293::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27113:8:::1;27089:12;:21;;:32;;;;27155:7;27132:12;:20;;:30;;;;27198:9;27173:12;:22;;:34;;;;27241:7;27218:12;:20;;:30;;;;26963:293:::0;;;;:::o;19327:106::-;;;;;;;;;;;;;:::o;22489:95::-;22542:7;22569;;22562:14;;22489:95;:::o;23214:313::-;23312:4;23329:36;23339:6;23347:9;23358:6;23329:9;:36::i;:::-;23376:121;23385:6;23393:12;:10;:12::i;:::-;23407:89;23445:6;23407:89;;;;;;;;;;;;;;;;;:11;:19;23419:6;23407:19;;;;;;;;;;;;;;;:33;23427:12;:10;:12::i;:::-;23407:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23376:8;:121::i;:::-;23515:4;23508:11;;23214:313;;;;;:::o;24573:135::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24695:5:::1;24677:15;:23;;;;:::i;:::-;24658:16;:42;;;;24573:135:::0;:::o;22398:83::-;22439:5;22464:9;;;;;;;;;;;22457:16;;22398:83;:::o;23535:218::-;23623:4;23640:83;23649:12;:10;:12::i;:::-;23663:7;23672:50;23711:10;23672:11;:25;23684:12;:10;:12::i;:::-;23672:25;;;;;;;;;;;;;;;:34;23698:7;23672:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23640:8;:83::i;:::-;23741:4;23734:11;;23535:218;;;;:::o;20569:70::-;;;;;;;;;;;;;:::o;24716:161::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24828:41:::1;24841:9;;24852:16;24828:12;:41::i;:::-;24716:161:::0;;;:::o;19440:41::-;;;;;;;;;;;;;:::o;20052:40::-;;;;;;;;;;;;;:::o;28866:130::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28975:13:::1;28955:17;;:33;;;;;;;;;;;;;;;;;;28866:130:::0;:::o;28735:123::-;28799:4;28823:18;:27;28842:7;28823:27;;;;;;;;;;;;;;;;;;;;;;;;;28816:34;;28735:123;;;:::o;20204:50::-;;;;:::o;21328:32::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;20333:65::-;;;;:::o;22592:119::-;22658:7;22685:9;:18;22695:7;22685:18;;;;;;;;;;;;;;;;22678:25;;22592:119;;;:::o;17743:148::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17850:1:::1;17813:40;;17834:6;::::0;::::1;;;;;;;;17813:40;;;;;;;;;;;;17881:1;17864:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17743:148::o:0;25050:157::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25160:39:::1;25177:9;;25188:10;25160:16;:39::i;:::-;25050:157:::0;;;:::o;20405:74::-;;;;;;;;;;;;;:::o;25600:189::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25724:14:::1;25708:13;:30;;;;25766:15;25749:14;:32;;;;25600:189:::0;;:::o;20646:70::-;;;;;;;;;;;;;:::o;27610:128::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27694:36:::1;27714:9;27725:4;27694:19;:36::i;:::-;27610:128:::0;:::o;28455:272::-;28515:4;28533:21;28571:1;28557:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28533:40;;28602:4;28584;28589:1;28584:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28628:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28618:4;28623:1;28618:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28668:15;;;;;;;;;;;:29;;;28698:11;28711:4;28668:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28717:1;28668:51;;;;;;;;:::i;:::-;;;;;;;;28661:58;;;28455:272;;;:::o;31605:209::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31703:16:::1;;31691:8;:28:::0;31683:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31798:8;31779:16;:27;;;;31605:209:::0;:::o;17107:79::-;17145:7;17172:6;;;;;;;;;;;17165:13;;17107:79;:::o;20270:47::-;;;;:::o;22303:87::-;22342:13;22375:7;22368:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22303:87;:::o;24885:157::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24990:44:::1;25009:9;;25020:13;24990:18;:44::i;:::-;24885:157:::0;;;:::o;26737:218::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26859:6:::1;26842:7;:14;;:23;;;;26894:7;26876;:15;;:25;;;;26935:12;26912:7;:20;;:35;;;;26737:218:::0;;;:::o;32578:166::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32711:23:::1;32669:15;;:67;;;;;;;;;;;;;;;;;;32578:166:::0;:::o;27746:131::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27832:37:::1;27852:9;27863:5;27832:19;:37::i;:::-;27746:131:::0;:::o;20723:39::-;;;;:::o;23761:269::-;23854:4;23871:129;23880:12;:10;:12::i;:::-;23894:7;23903:96;23942:15;23903:96;;;;;;;;;;;;;;;;;:11;:25;23915:12;:10;:12::i;:::-;23903:25;;;;;;;;;;;;;;;:34;23929:7;23903:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;23871:8;:129::i;:::-;24018:4;24011:11;;23761:269;;;;:::o;20486:76::-;;;;;;;;;;;;;:::o;22719:167::-;22797:4;22814:42;22824:12;:10;:12::i;:::-;22838:9;22849:6;22814:9;:42::i;:::-;22874:4;22867:11;;22719:167;;;;:::o;25797:311::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25884:1:::1;25859:27;;:13;;;;;;;;;;;:27;;;25851:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25969:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25951:55;;;26015:4;26022:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25951:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25935:13;;:110;;;;;;;;;;;;;;;;;;26096:4;26056:22;:37;26079:13;;;;;;;;;;;26056:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;25797:311::o:0;28239:171::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28340:8:::1;28316:21;;:32;;;;;;;;;;;;;;;;;;28364:38;28393:8;28364:38;;;;;;:::i;:::-;;;;;;;;28239:171:::0;:::o;24040:525::-;24137:16;24176:18;:32;24195:12;:10;:12::i;:::-;24176:32;;;;;;;;;;;;;;;;;;;;;;;;;24168:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24298:7;;:14;;24277:10;;:17;;:35;24269:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;24370:188;24387:10;;:17;;24376:8;:28;24370:188;;;24420:98;24435:12;:10;:12::i;:::-;24449:10;;24460:8;24449:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24491:5;24471:7;;24479:8;24471:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;24498:5;24505;24512;24420:14;:98::i;:::-;24545:1;24533:13;;;;;:::i;:::-;;;24370:188;;;24126:439;24040:525;;;;:::o;22894:143::-;22975:7;23002:11;:18;23014:5;23002:18;;;;;;;;;;;;;;;:27;23021:7;23002:27;;;;;;;;;;;;;;;;22995:34;;22894:143;;;;:::o;27493:109::-;27554:4;27578:10;:16;27589:4;27578:16;;;;;;;;;;;;;;;;;;;;;;;;;27571:23;;27493:109;;;:::o;18046:244::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18155:1:::1;18135:22;;:8;:22;;::::0;18127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18245:8;18216:38;;18237:6;::::0;::::1;;;;;;;;18216:38;;;;;;;;;;;;18274:8;18265:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18046:244:::0;:::o;26606:123::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26716:5:::1;26701:12;:20;;;;:::i;:::-;26685:13;:36;;;;26606:123:::0;:::o;27264:221::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27392:7:::1;27379:10;;:20;;;;;;;;;;;;;;;;;;27427:7;27410:14;;:24;;;;;;;;;;;;;;;;;;27464:13;27445:16;;:32;;;;;;;;;;;;;;;;;;27264:221:::0;;;:::o;9599:98::-;9652:7;9679:10;9672:17;;9599:98;:::o;29004:337::-;29114:1;29097:19;;:5;:19;;;29089:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29195:1;29176:21;;:7;:21;;;29168:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29279:6;29249:11;:18;29261:5;29249:18;;;;;;;;;;;;;;;:27;29268:7;29249:27;;;;;;;;;;;;;;;:36;;;;29317:7;29301:32;;29310:5;29301:32;;;29326:6;29301:32;;;;;;:::i;:::-;;;;;;;;29004:337;;;:::o;29349:1796::-;29453:1;29437:18;;:4;:18;;;29429:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29530:1;29516:16;;:2;:16;;;29508:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29600:1;29591:6;:10;29583:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29691:1;29666:27;;:13;;;;;;;;;;;:27;;;29658:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29738:11;29768:13;29785:18;:24;29804:4;29785:24;;;;;;;;;;;;;;;;;;;;;;;;;29784:25;:52;;;;;29814:18;:22;29833:2;29814:22;;;;;;;;;;;;;;;;;;;;;;;;;29813:23;29784:52;:71;;;;;29848:7;:5;:7::i;:::-;29840:15;;:4;:15;;;;29784:71;:88;;;;;29865:7;:5;:7::i;:::-;29859:13;;:2;:13;;;;29784:88;29768:104;;29883:21;29907:25;29925:6;29907:13;29917:2;29907:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;29883:49;;30043:7;:5;:7::i;:::-;30035:15;;:4;:15;;;;:32;;;;;30060:7;:5;:7::i;:::-;30054:13;;:2;:13;;;;30035:32;:52;;;;;30077:10;;;;;;;;;;;30071:16;;:2;:16;;;;30035:52;30032:180;;;30113:10;:16;30124:4;30113:16;;;;;;;;;;;;;;;;;;;;;;;;;30112:17;:36;;;;;30134:10;:14;30145:2;30134:14;;;;;;;;;;;;;;;;;;;;;;;;;30133:15;30112:36;30104:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;30032:180;30233:13;;;;;;;;;;;30225:21;;:4;:21;;;:47;;;;30250:16;:22;30267:4;30250:22;;;;;;;;;;;;;;;;;;;;;;;;;30225:47;30222:253;;;30307:13;;30297:6;:23;;30289:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30405:16;;30388:13;:33;;30380:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;30222:253;30496:13;;;;;;;;;;;30488:21;;:4;:21;;;;:44;;;;;30519:13;;;;;;;;;;;30513:19;;:2;:19;;;30488:44;:97;;;;30538:16;:22;30555:4;30538:22;;;;;;;;;;;;;;;;;;;;;;;;;30537:23;:47;;;;;30564:16;:20;30581:2;30564:20;;;;;;;;;;;;;;;;;;;;;;;;;30537:47;30488:97;30485:307;;;30681:4;30672:13;;30700:15;:13;:15::i;:::-;30485:307;30813:13;;;;;;;;;;;30805:21;;:4;:21;;;;:44;;;;;30836:13;;;;;;;;;;;30830:19;;:2;:19;;;;30805:44;:71;;;;;30854:16;:22;30871:4;30854:22;;;;;;;;;;;;;;;;;;;;;;;;;30853:23;30805:71;:96;;;;;30881:16;:20;30898:2;30881:20;;;;;;;;;;;;;;;;;;;;;;;;;30880:21;30805:96;30802:269;;;30929:17;;;;;;;;;;;:32;;30957:4;30929:32;;;30949:5;30929:32;30918:43;;31001:16;;30984:13;:33;;30976:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;30802:269;31081:56;31096:4;31102:2;31106:6;31114:8;31124:6;31132:4;31081:14;:56::i;:::-;29418:1727;;;29349:1796;;;:::o;5930:192::-;6016:7;6049:1;6044;:6;;6052:12;6036:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6076:9;6092:1;6088;:5;;;;:::i;:::-;6076:17;;6113:1;6106:8;;;5930:192;;;;;:::o;5027:181::-;5085:7;5105:9;5121:1;5117;:5;;;;:::i;:::-;5105:17;;5146:1;5141;:6;;5133:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5199:1;5192:8;;;5027:181;;;;:::o;26362:236::-;26449:9;26444:147;26468:9;;:16;;26464:1;:20;26444:147;;;26506:12;26521:9;;26531:1;26521:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26506:27;;26575:4;26548:18;:24;26567:4;26548:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;26491:100;26486:3;;;;;:::i;:::-;;;;26444:147;;;;26362:236;;;:::o;25348:244::-;25439:9;25434:151;25458:9;;:16;;25454:1;:20;25434:151;;;25496:12;25511:9;;25521:1;25511:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25496:27;;25569:4;25538:22;:28;25561:4;25538:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;25481:104;25476:3;;;;;:::i;:::-;;;;25434:151;;;;25348:244;;;:::o;27885:346::-;27980:9;27975:249;27999:9;:16;27995:1;:20;27975:249;;;28037:12;28052:9;28062:1;28052:12;;;;;;;;:::i;:::-;;;;;;;;28037:27;;28082:7;28079:134;;;28129:4;28110:10;:16;28121:4;28110:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;28079:134;;;28181:10;:16;28192:4;28181:16;;;;;;;;;;;;;;;;28174:23;;;;;;;;;;;28079:134;28022:202;28017:3;;;;;:::i;:::-;;;;27975:249;;;;27885:346;;:::o;26114:240::-;26207:9;26202:145;26226:9;;:16;;26222:1;:20;26202:145;;;26264:12;26279:9;;26289:1;26279:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26264:27;;26331:4;26306:16;:22;26323:4;26306:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26249:98;26244:3;;;;;:::i;:::-;;;;26202:145;;;;26114:240;;;:::o;33651:1373::-;33797:17;33817:8;:50;;33866:1;33817:50;;;33828:35;33859:3;33828:26;33839:7;:14;;;33828:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;33817:50;33797:70;;33881:8;:18;;;;;33893:6;33881:18;33878:355;;;33928:36;33960:3;33928:27;33939:7;:15;;;33928:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;33916:48;;34005:1;33982:7;:20;;;:24;33979:243;;;34027:13;34043:19;34055:6;34043:11;:19::i;:::-;34027:35;;34096:13;;34084:8;:25;34081:126;;34146:41;34183:3;34146:32;34157:7;:20;;;34146:6;:10;;:32;;;;:::i;:::-;:36;;:41;;;;:::i;:::-;34134:53;;34081:126;34008:214;33979:243;33878:355;34243:22;34268:21;34279:9;34268:6;:10;;:21;;;;:::i;:::-;34243:46;;34320:29;34342:6;34320:9;:17;34330:6;34320:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;34300:9;:17;34310:6;34300:17;;;;;;;;;;;;;;;:49;;;;34383:40;34408:14;34383:9;:20;34393:9;34383:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;34360:9;:20;34370:9;34360:20;;;;;;;;;;;;;;;:63;;;;34461:39;34490:9;34461;:24;34479:4;34461:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;34434:9;:24;34452:4;34434:24;;;;;;;;;;;;;;;:66;;;;34533:9;34516:35;;34525:6;34516:35;;;34544:6;34516:35;;;;;;:::i;:::-;;;;;;;;34567:17;34564:453;;;34605:15;;;;;;;;;;;:31;;;34637:6;34605:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34601:54;34673:15;;;;;;;;;;;:31;;;34705:9;34673:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34669:57;34744:15;;;;;;;;;;;:23;;;34768:16;;34744:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34740:266;;;34972:9;34883:99;;34948:4;34883:99;;;34908:10;34920:6;34928:18;34954:16;;34883:99;;;;;;;;;:::i;:::-;;;;;;;;34786:212;;;34740:266;34564:453;33786:1238;;33651:1373;;;;;;:::o;31153:444::-;31197:28;31228:24;31246:4;31228:9;:24::i;:::-;31197:55;;31289:1;31266:20;:24;31263:327;;;31307:13;31323:33;31335:20;31323:11;:33::i;:::-;31307:49;;31387:14;;31375:8;:26;;:47;;;;;31406:16;;;;;;;;;;;31405:17;31375:47;:72;;;;;31426:21;;;;;;;;;;;31375:72;31371:208;;;31525:38;31542:20;31525:16;:38::i;:::-;31371:208;31292:298;31263:327;31186:411;31153:444::o;6381:471::-;6439:7;6689:1;6684;:6;6680:47;;6714:1;6707:8;;;;6680:47;6739:9;6755:1;6751;:5;;;;:::i;:::-;6739:17;;6784:1;6779;6775;:5;;;;:::i;:::-;:10;6767:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6843:1;6836:8;;;6381:471;;;;;:::o;7328:132::-;7386:7;7413:39;7417:1;7420;7413:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7406:46;;7328:132;;;;:::o;5491:136::-;5549:7;5576:43;5580:1;5583;5576:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5569:50;;5491:136;;;;:::o;31822:748::-;19262:4;19243:16;;:23;;;;;;;;;;;;;;;;;;31909:38:::1;31926:20;31909:16;:38::i;:::-;31958:23;31984:21;31958:47;;32016:22;32041:52;32089:3;32041:43;32061:12;:22;;;32041:15;:19;;:43;;;;:::i;:::-;:47;;:52;;;;:::i;:::-;32016:77;;32104:21;32128:51;32175:3;32128:42;32148:12;:21;;;32128:15;:19;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;32104:75;;32190:20;32213:50;32259:3;32213:41;32233:12;:20;;;32213:15;:19;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;32190:73;;32274:20;32297:50;32343:3;32297:41;32317:12;:20;;;32297:15;:19;;:41;;;;:::i;:::-;:45;;:50;;;;:::i;:::-;32274:73;;32366:16;;;;;;;;;;;32358:34;;:50;32393:14;32358:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32419:31;32436:13;32419:16;:31::i;:::-;32469:10;;;;;;;;;;;32461:28;;:42;32490:12;32461:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;32522:14;;;;;;;;;;;32514:32;;:46;32547:12;32514:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31898:672;;;;;19308:5:::0;19289:16;;:24;;;;;;;;;;;;;;;;;;31822:748;:::o;7956:278::-;8042:7;8074:1;8070;:5;8077:12;8062:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8101:9;8117:1;8113;:5;;;;:::i;:::-;8101:17;;8225:1;8218:8;;;7956:278;;;;;:::o;32985:585::-;33111:21;33149:1;33135:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33111:40;;33180:4;33162;33167:1;33162:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33206:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33196:4;33201:1;33196:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33239:62;33256:4;33271:15;;;;;;;;;;;33289:11;33239:8;:62::i;:::-;33338:15;;;;;;;;;;;:66;;;33419:11;33445:1;33489:4;33516;33536:15;33338:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33040:530;32985:585;:::o;32752:221::-;32817:12;32842:15;;;;;;;;;;;32834:29;;32872:9;32834:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32816:70;;;32901:7;32897:69;;;32930:24;32944:9;32930:24;;;;;;:::i;:::-;;;;;;;;32897:69;32805:168;32752:221;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:442::-;3995:4;4033:2;4022:9;4018:18;4010:26;;4046:71;4114:1;4103:9;4099:17;4090:6;4046:71;:::i;:::-;4127:72;4195:2;4184:9;4180:18;4171:6;4127:72;:::i;:::-;4209;4277:2;4266:9;4262:18;4253:6;4209:72;:::i;:::-;3846:442;;;;;;:::o;4294:329::-;4353:6;4402:2;4390:9;4381:7;4377:23;4373:32;4370:119;;;4408:79;;:::i;:::-;4370:119;4528:1;4553:53;4598:7;4589:6;4578:9;4574:22;4553:53;:::i;:::-;4543:63;;4499:117;4294:329;;;;:::o;4629:765::-;4715:6;4723;4731;4739;4788:3;4776:9;4767:7;4763:23;4759:33;4756:120;;;4795:79;;:::i;:::-;4756:120;4915:1;4940:53;4985:7;4976:6;4965:9;4961:22;4940:53;:::i;:::-;4930:63;;4886:117;5042:2;5068:53;5113:7;5104:6;5093:9;5089:22;5068:53;:::i;:::-;5058:63;;5013:118;5170:2;5196:53;5241:7;5232:6;5221:9;5217:22;5196:53;:::i;:::-;5186:63;;5141:118;5298:2;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5269:118;4629:765;;;;;;;:::o;5400:60::-;5428:3;5449:5;5442:12;;5400:60;;;:::o;5466:142::-;5516:9;5549:53;5567:34;5576:24;5594:5;5576:24;:::i;:::-;5567:34;:::i;:::-;5549:53;:::i;:::-;5536:66;;5466:142;;;:::o;5614:126::-;5664:9;5697:37;5728:5;5697:37;:::i;:::-;5684:50;;5614:126;;;:::o;5746:152::-;5822:9;5855:37;5886:5;5855:37;:::i;:::-;5842:50;;5746:152;;;:::o;5904:183::-;6017:63;6074:5;6017:63;:::i;:::-;6012:3;6005:76;5904:183;;:::o;6093:274::-;6212:4;6250:2;6239:9;6235:18;6227:26;;6263:97;6357:1;6346:9;6342:17;6333:6;6263:97;:::i;:::-;6093:274;;;;:::o;6373:619::-;6450:6;6458;6466;6515:2;6503:9;6494:7;6490:23;6486:32;6483:119;;;6521:79;;:::i;:::-;6483:119;6641:1;6666:53;6711:7;6702:6;6691:9;6687:22;6666:53;:::i;:::-;6656:63;;6612:117;6768:2;6794:53;6839:7;6830:6;6819:9;6815:22;6794:53;:::i;:::-;6784:63;;6739:118;6896:2;6922:53;6967:7;6958:6;6947:9;6943:22;6922:53;:::i;:::-;6912:63;;6867:118;6373:619;;;;;:::o;6998:329::-;7057:6;7106:2;7094:9;7085:7;7081:23;7077:32;7074:119;;;7112:79;;:::i;:::-;7074:119;7232:1;7257:53;7302:7;7293:6;7282:9;7278:22;7257:53;:::i;:::-;7247:63;;7203:117;6998:329;;;;:::o;7333:86::-;7368:7;7408:4;7401:5;7397:16;7386:27;;7333:86;;;:::o;7425:112::-;7508:22;7524:5;7508:22;:::i;:::-;7503:3;7496:35;7425:112;;:::o;7543:214::-;7632:4;7670:2;7659:9;7655:18;7647:26;;7683:67;7747:1;7736:9;7732:17;7723:6;7683:67;:::i;:::-;7543:214;;;;:::o;7763:118::-;7850:24;7868:5;7850:24;:::i;:::-;7845:3;7838:37;7763:118;;:::o;7887:222::-;7980:4;8018:2;8007:9;8003:18;7995:26;;8031:71;8099:1;8088:9;8084:17;8075:6;8031:71;:::i;:::-;7887:222;;;;:::o;8115:117::-;8224:1;8221;8214:12;8238:117;8347:1;8344;8337:12;8361:117;8470:1;8467;8460:12;8501:568;8574:8;8584:6;8634:3;8627:4;8619:6;8615:17;8611:27;8601:122;;8642:79;;:::i;:::-;8601:122;8755:6;8742:20;8732:30;;8785:18;8777:6;8774:30;8771:117;;;8807:79;;:::i;:::-;8771:117;8921:4;8913:6;8909:17;8897:29;;8975:3;8967:4;8959:6;8955:17;8945:8;8941:32;8938:41;8935:128;;;8982:79;;:::i;:::-;8935:128;8501:568;;;;;:::o;9075:116::-;9145:21;9160:5;9145:21;:::i;:::-;9138:5;9135:32;9125:60;;9181:1;9178;9171:12;9125:60;9075:116;:::o;9197:133::-;9240:5;9278:6;9265:20;9256:29;;9294:30;9318:5;9294:30;:::i;:::-;9197:133;;;;:::o;9336:698::-;9428:6;9436;9444;9493:2;9481:9;9472:7;9468:23;9464:32;9461:119;;;9499:79;;:::i;:::-;9461:119;9647:1;9636:9;9632:17;9619:31;9677:18;9669:6;9666:30;9663:117;;;9699:79;;:::i;:::-;9663:117;9812:80;9884:7;9875:6;9864:9;9860:22;9812:80;:::i;:::-;9794:98;;;;9590:312;9941:2;9967:50;10009:7;10000:6;9989:9;9985:22;9967:50;:::i;:::-;9957:60;;9912:115;9336:698;;;;;:::o;10040:323::-;10096:6;10145:2;10133:9;10124:7;10120:23;10116:32;10113:119;;;10151:79;;:::i;:::-;10113:119;10271:1;10296:50;10338:7;10329:6;10318:9;10314:22;10296:50;:::i;:::-;10286:60;;10242:114;10040:323;;;;:::o;10369:553::-;10546:4;10584:3;10573:9;10569:19;10561:27;;10598:71;10666:1;10655:9;10651:17;10642:6;10598:71;:::i;:::-;10679:72;10747:2;10736:9;10732:18;10723:6;10679:72;:::i;:::-;10761;10829:2;10818:9;10814:18;10805:6;10761:72;:::i;:::-;10843;10911:2;10900:9;10896:18;10887:6;10843:72;:::i;:::-;10369:553;;;;;;;:::o;10928:474::-;10996:6;11004;11053:2;11041:9;11032:7;11028:23;11024:32;11021:119;;;11059:79;;:::i;:::-;11021:119;11179:1;11204:53;11249:7;11240:6;11229:9;11225:22;11204:53;:::i;:::-;11194:63;;11150:117;11306:2;11332:53;11377:7;11368:6;11357:9;11353:22;11332:53;:::i;:::-;11322:63;;11277:118;10928:474;;;;;:::o;11408:180::-;11456:77;11453:1;11446:88;11553:4;11550:1;11543:15;11577:4;11574:1;11567:15;11594:281;11677:27;11699:4;11677:27;:::i;:::-;11669:6;11665:40;11807:6;11795:10;11792:22;11771:18;11759:10;11756:34;11753:62;11750:88;;;11818:18;;:::i;:::-;11750:88;11858:10;11854:2;11847:22;11637:238;11594:281;;:::o;11881:129::-;11915:6;11942:20;;:::i;:::-;11932:30;;11971:33;11999:4;11991:6;11971:33;:::i;:::-;11881:129;;;:::o;12016:311::-;12093:4;12183:18;12175:6;12172:30;12169:56;;;12205:18;;:::i;:::-;12169:56;12255:4;12247:6;12243:17;12235:25;;12315:4;12309;12305:15;12297:23;;12016:311;;;:::o;12350:710::-;12446:5;12471:81;12487:64;12544:6;12487:64;:::i;:::-;12471:81;:::i;:::-;12462:90;;12572:5;12601:6;12594:5;12587:21;12635:4;12628:5;12624:16;12617:23;;12688:4;12680:6;12676:17;12668:6;12664:30;12717:3;12709:6;12706:15;12703:122;;;12736:79;;:::i;:::-;12703:122;12851:6;12834:220;12868:6;12863:3;12860:15;12834:220;;;12943:3;12972:37;13005:3;12993:10;12972:37;:::i;:::-;12967:3;12960:50;13039:4;13034:3;13030:14;13023:21;;12910:144;12894:4;12889:3;12885:14;12878:21;;12834:220;;;12838:21;12452:608;;12350:710;;;;;:::o;13083:370::-;13154:5;13203:3;13196:4;13188:6;13184:17;13180:27;13170:122;;13211:79;;:::i;:::-;13170:122;13328:6;13315:20;13353:94;13443:3;13435:6;13428:4;13420:6;13416:17;13353:94;:::i;:::-;13344:103;;13160:293;13083:370;;;;:::o;13459:539::-;13543:6;13592:2;13580:9;13571:7;13567:23;13563:32;13560:119;;;13598:79;;:::i;:::-;13560:119;13746:1;13735:9;13731:17;13718:31;13776:18;13768:6;13765:30;13762:117;;;13798:79;;:::i;:::-;13762:117;13903:78;13973:7;13964:6;13953:9;13949:22;13903:78;:::i;:::-;13893:88;;13689:302;13459:539;;;;:::o;14004:619::-;14081:6;14089;14097;14146:2;14134:9;14125:7;14121:23;14117:32;14114:119;;;14152:79;;:::i;:::-;14114:119;14272:1;14297:53;14342:7;14333:6;14322:9;14318:22;14297:53;:::i;:::-;14287:63;;14243:117;14399:2;14425:53;14470:7;14461:6;14450:9;14446:22;14425:53;:::i;:::-;14415:63;;14370:118;14527:2;14553:53;14598:7;14589:6;14578:9;14574:22;14553:53;:::i;:::-;14543:63;;14498:118;14004:619;;;;;:::o;14646:568::-;14719:8;14729:6;14779:3;14772:4;14764:6;14760:17;14756:27;14746:122;;14787:79;;:::i;:::-;14746:122;14900:6;14887:20;14877:30;;14930:18;14922:6;14919:30;14916:117;;;14952:79;;:::i;:::-;14916:117;15066:4;15058:6;15054:17;15042:29;;15120:3;15112:4;15104:6;15100:17;15090:8;15086:32;15083:41;15080:128;;;15127:79;;:::i;:::-;15080:128;14646:568;;;;;:::o;15220:934::-;15342:6;15350;15358;15366;15415:2;15403:9;15394:7;15390:23;15386:32;15383:119;;;15421:79;;:::i;:::-;15383:119;15569:1;15558:9;15554:17;15541:31;15599:18;15591:6;15588:30;15585:117;;;15621:79;;:::i;:::-;15585:117;15734:80;15806:7;15797:6;15786:9;15782:22;15734:80;:::i;:::-;15716:98;;;;15512:312;15891:2;15880:9;15876:18;15863:32;15922:18;15914:6;15911:30;15908:117;;;15944:79;;:::i;:::-;15908:117;16057:80;16129:7;16120:6;16109:9;16105:22;16057:80;:::i;:::-;16039:98;;;;15834:313;15220:934;;;;;;;:::o;16160:474::-;16228:6;16236;16285:2;16273:9;16264:7;16260:23;16256:32;16253:119;;;16291:79;;:::i;:::-;16253:119;16411:1;16436:53;16481:7;16472:6;16461:9;16457:22;16436:53;:::i;:::-;16426:63;;16382:117;16538:2;16564:53;16609:7;16600:6;16589:9;16585:22;16564:53;:::i;:::-;16554:63;;16509:118;16160:474;;;;;:::o;16640:619::-;16717:6;16725;16733;16782:2;16770:9;16761:7;16757:23;16753:32;16750:119;;;16788:79;;:::i;:::-;16750:119;16908:1;16933:53;16978:7;16969:6;16958:9;16954:22;16933:53;:::i;:::-;16923:63;;16879:117;17035:2;17061:53;17106:7;17097:6;17086:9;17082:22;17061:53;:::i;:::-;17051:63;;17006:118;17163:2;17189:53;17234:7;17225:6;17214:9;17210:22;17189:53;:::i;:::-;17179:63;;17134:118;16640:619;;;;;:::o;17265:180::-;17313:77;17310:1;17303:88;17410:4;17407:1;17400:15;17434:4;17431:1;17424:15;17451:320;17495:6;17532:1;17526:4;17522:12;17512:22;;17579:1;17573:4;17569:12;17600:18;17590:81;;17656:4;17648:6;17644:17;17634:27;;17590:81;17718:2;17710:6;17707:14;17687:18;17684:38;17681:84;;17737:18;;:::i;:::-;17681:84;17502:269;17451:320;;;:::o;17777:182::-;17917:34;17913:1;17905:6;17901:14;17894:58;17777:182;:::o;17965:366::-;18107:3;18128:67;18192:2;18187:3;18128:67;:::i;:::-;18121:74;;18204:93;18293:3;18204:93;:::i;:::-;18322:2;18317:3;18313:12;18306:19;;17965:366;;;:::o;18337:419::-;18503:4;18541:2;18530:9;18526:18;18518:26;;18590:9;18584:4;18580:20;18576:1;18565:9;18561:17;18554:47;18618:131;18744:4;18618:131;:::i;:::-;18610:139;;18337:419;;;:::o;18762:180::-;18810:77;18807:1;18800:88;18907:4;18904:1;18897:15;18931:4;18928:1;18921:15;18948:348;18988:7;19011:20;19029:1;19011:20;:::i;:::-;19006:25;;19045:20;19063:1;19045:20;:::i;:::-;19040:25;;19233:1;19165:66;19161:74;19158:1;19155:81;19150:1;19143:9;19136:17;19132:105;19129:131;;;19240:18;;:::i;:::-;19129:131;19288:1;19285;19281:9;19270:20;;18948:348;;;;:::o;19302:180::-;19350:77;19347:1;19340:88;19447:4;19444:1;19437:15;19471:4;19468:1;19461:15;19488:143;19545:5;19576:6;19570:13;19561:22;;19592:33;19619:5;19592:33;:::i;:::-;19488:143;;;;:::o;19637:351::-;19707:6;19756:2;19744:9;19735:7;19731:23;19727:32;19724:119;;;19762:79;;:::i;:::-;19724:119;19882:1;19907:64;19963:7;19954:6;19943:9;19939:22;19907:64;:::i;:::-;19897:74;;19853:128;19637:351;;;;:::o;19994:114::-;20061:6;20095:5;20089:12;20079:22;;19994:114;;;:::o;20114:184::-;20213:11;20247:6;20242:3;20235:19;20287:4;20282:3;20278:14;20263:29;;20114:184;;;;:::o;20304:132::-;20371:4;20394:3;20386:11;;20424:4;20419:3;20415:14;20407:22;;20304:132;;;:::o;20442:108::-;20519:24;20537:5;20519:24;:::i;:::-;20514:3;20507:37;20442:108;;:::o;20556:179::-;20625:10;20646:46;20688:3;20680:6;20646:46;:::i;:::-;20724:4;20719:3;20715:14;20701:28;;20556:179;;;;:::o;20741:113::-;20811:4;20843;20838:3;20834:14;20826:22;;20741:113;;;:::o;20890:732::-;21009:3;21038:54;21086:5;21038:54;:::i;:::-;21108:86;21187:6;21182:3;21108:86;:::i;:::-;21101:93;;21218:56;21268:5;21218:56;:::i;:::-;21297:7;21328:1;21313:284;21338:6;21335:1;21332:13;21313:284;;;21414:6;21408:13;21441:63;21500:3;21485:13;21441:63;:::i;:::-;21434:70;;21527:60;21580:6;21527:60;:::i;:::-;21517:70;;21373:224;21360:1;21357;21353:9;21348:14;;21313:284;;;21317:14;21613:3;21606:10;;21014:608;;;20890:732;;;;:::o;21628:483::-;21799:4;21837:2;21826:9;21822:18;21814:26;;21850:71;21918:1;21907:9;21903:17;21894:6;21850:71;:::i;:::-;21968:9;21962:4;21958:20;21953:2;21942:9;21938:18;21931:48;21996:108;22099:4;22090:6;21996:108;:::i;:::-;21988:116;;21628:483;;;;;:::o;22117:311::-;22194:4;22284:18;22276:6;22273:30;22270:56;;;22306:18;;:::i;:::-;22270:56;22356:4;22348:6;22344:17;22336:25;;22416:4;22410;22406:15;22398:23;;22117:311;;;:::o;22434:143::-;22491:5;22522:6;22516:13;22507:22;;22538:33;22565:5;22538:33;:::i;:::-;22434:143;;;;:::o;22600:732::-;22707:5;22732:81;22748:64;22805:6;22748:64;:::i;:::-;22732:81;:::i;:::-;22723:90;;22833:5;22862:6;22855:5;22848:21;22896:4;22889:5;22885:16;22878:23;;22949:4;22941:6;22937:17;22929:6;22925:30;22978:3;22970:6;22967:15;22964:122;;;22997:79;;:::i;:::-;22964:122;23112:6;23095:231;23129:6;23124:3;23121:15;23095:231;;;23204:3;23233:48;23277:3;23265:10;23233:48;:::i;:::-;23228:3;23221:61;23311:4;23306:3;23302:14;23295:21;;23171:155;23155:4;23150:3;23146:14;23139:21;;23095:231;;;23099:21;22713:619;;22600:732;;;;;:::o;23355:385::-;23437:5;23486:3;23479:4;23471:6;23467:17;23463:27;23453:122;;23494:79;;:::i;:::-;23453:122;23604:6;23598:13;23629:105;23730:3;23722:6;23715:4;23707:6;23703:17;23629:105;:::i;:::-;23620:114;;23443:297;23355:385;;;;:::o;23746:554::-;23841:6;23890:2;23878:9;23869:7;23865:23;23861:32;23858:119;;;23896:79;;:::i;:::-;23858:119;24037:1;24026:9;24022:17;24016:24;24067:18;24059:6;24056:30;24053:117;;;24089:79;;:::i;:::-;24053:117;24194:89;24275:7;24266:6;24255:9;24251:22;24194:89;:::i;:::-;24184:99;;23987:306;23746:554;;;;:::o;24306:231::-;24446:34;24442:1;24434:6;24430:14;24423:58;24515:14;24510:2;24502:6;24498:15;24491:39;24306:231;:::o;24543:366::-;24685:3;24706:67;24770:2;24765:3;24706:67;:::i;:::-;24699:74;;24782:93;24871:3;24782:93;:::i;:::-;24900:2;24895:3;24891:12;24884:19;;24543:366;;;:::o;24915:419::-;25081:4;25119:2;25108:9;25104:18;25096:26;;25168:9;25162:4;25158:20;25154:1;25143:9;25139:17;25132:47;25196:131;25322:4;25196:131;:::i;:::-;25188:139;;24915:419;;;:::o;25340:221::-;25480:34;25476:1;25468:6;25464:14;25457:58;25549:4;25544:2;25536:6;25532:15;25525:29;25340:221;:::o;25567:366::-;25709:3;25730:67;25794:2;25789:3;25730:67;:::i;:::-;25723:74;;25806:93;25895:3;25806:93;:::i;:::-;25924:2;25919:3;25915:12;25908:19;;25567:366;;;:::o;25939:419::-;26105:4;26143:2;26132:9;26128:18;26120:26;;26192:9;26186:4;26182:20;26178:1;26167:9;26163:17;26156:47;26220:131;26346:4;26220:131;:::i;:::-;26212:139;;25939:419;;;:::o;26364:332::-;26485:4;26523:2;26512:9;26508:18;26500:26;;26536:71;26604:1;26593:9;26589:17;26580:6;26536:71;:::i;:::-;26617:72;26685:2;26674:9;26670:18;26661:6;26617:72;:::i;:::-;26364:332;;;;;:::o;26702:232::-;26842:34;26838:1;26830:6;26826:14;26819:58;26911:15;26906:2;26898:6;26894:15;26887:40;26702:232;:::o;26940:366::-;27082:3;27103:67;27167:2;27162:3;27103:67;:::i;:::-;27096:74;;27179:93;27268:3;27179:93;:::i;:::-;27297:2;27292:3;27288:12;27281:19;;26940:366;;;:::o;27312:419::-;27478:4;27516:2;27505:9;27501:18;27493:26;;27565:9;27559:4;27555:20;27551:1;27540:9;27536:17;27529:47;27593:131;27719:4;27593:131;:::i;:::-;27585:139;;27312:419;;;:::o;27737:229::-;27877:34;27873:1;27865:6;27861:14;27854:58;27946:12;27941:2;27933:6;27929:15;27922:37;27737:229;:::o;27972:366::-;28114:3;28135:67;28199:2;28194:3;28135:67;:::i;:::-;28128:74;;28211:93;28300:3;28211:93;:::i;:::-;28329:2;28324:3;28320:12;28313:19;;27972:366;;;:::o;28344:419::-;28510:4;28548:2;28537:9;28533:18;28525:26;;28597:9;28591:4;28587:20;28583:1;28572:9;28568:17;28561:47;28625:131;28751:4;28625:131;:::i;:::-;28617:139;;28344:419;;;:::o;28769:305::-;28809:3;28828:20;28846:1;28828:20;:::i;:::-;28823:25;;28862:20;28880:1;28862:20;:::i;:::-;28857:25;;29016:1;28948:66;28944:74;28941:1;28938:81;28935:107;;;29022:18;;:::i;:::-;28935:107;29066:1;29063;29059:9;29052:16;;28769:305;;;;:::o;29080:225::-;29220:34;29216:1;29208:6;29204:14;29197:58;29289:8;29284:2;29276:6;29272:15;29265:33;29080:225;:::o;29311:366::-;29453:3;29474:67;29538:2;29533:3;29474:67;:::i;:::-;29467:74;;29550:93;29639:3;29550:93;:::i;:::-;29668:2;29663:3;29659:12;29652:19;;29311:366;;;:::o;29683:419::-;29849:4;29887:2;29876:9;29872:18;29864:26;;29936:9;29930:4;29926:20;29922:1;29911:9;29907:17;29900:47;29964:131;30090:4;29964:131;:::i;:::-;29956:139;;29683:419;;;:::o;30108:223::-;30248:34;30244:1;30236:6;30232:14;30225:58;30317:6;30312:2;30304:6;30300:15;30293:31;30108:223;:::o;30337:366::-;30479:3;30500:67;30564:2;30559:3;30500:67;:::i;:::-;30493:74;;30576:93;30665:3;30576:93;:::i;:::-;30694:2;30689:3;30685:12;30678:19;;30337:366;;;:::o;30709:419::-;30875:4;30913:2;30902:9;30898:18;30890:26;;30962:9;30956:4;30952:20;30948:1;30937:9;30933:17;30926:47;30990:131;31116:4;30990:131;:::i;:::-;30982:139;;30709:419;;;:::o;31134:221::-;31274:34;31270:1;31262:6;31258:14;31251:58;31343:4;31338:2;31330:6;31326:15;31319:29;31134:221;:::o;31361:366::-;31503:3;31524:67;31588:2;31583:3;31524:67;:::i;:::-;31517:74;;31600:93;31689:3;31600:93;:::i;:::-;31718:2;31713:3;31709:12;31702:19;;31361:366;;;:::o;31733:419::-;31899:4;31937:2;31926:9;31922:18;31914:26;;31986:9;31980:4;31976:20;31972:1;31961:9;31957:17;31950:47;32014:131;32140:4;32014:131;:::i;:::-;32006:139;;31733:419;;;:::o;32158:224::-;32298:34;32294:1;32286:6;32282:14;32275:58;32367:7;32362:2;32354:6;32350:15;32343:32;32158:224;:::o;32388:366::-;32530:3;32551:67;32615:2;32610:3;32551:67;:::i;:::-;32544:74;;32627:93;32716:3;32627:93;:::i;:::-;32745:2;32740:3;32736:12;32729:19;;32388:366;;;:::o;32760:419::-;32926:4;32964:2;32953:9;32949:18;32941:26;;33013:9;33007:4;33003:20;32999:1;32988:9;32984:17;32977:47;33041:131;33167:4;33041:131;:::i;:::-;33033:139;;32760:419;;;:::o;33185:222::-;33325:34;33321:1;33313:6;33309:14;33302:58;33394:5;33389:2;33381:6;33377:15;33370:30;33185:222;:::o;33413:366::-;33555:3;33576:67;33640:2;33635:3;33576:67;:::i;:::-;33569:74;;33652:93;33741:3;33652:93;:::i;:::-;33770:2;33765:3;33761:12;33754:19;;33413:366;;;:::o;33785:419::-;33951:4;33989:2;33978:9;33974:18;33966:26;;34038:9;34032:4;34028:20;34024:1;34013:9;34009:17;34002:47;34066:131;34192:4;34066:131;:::i;:::-;34058:139;;33785:419;;;:::o;34210:228::-;34350:34;34346:1;34338:6;34334:14;34327:58;34419:11;34414:2;34406:6;34402:15;34395:36;34210:228;:::o;34444:366::-;34586:3;34607:67;34671:2;34666:3;34607:67;:::i;:::-;34600:74;;34683:93;34772:3;34683:93;:::i;:::-;34801:2;34796:3;34792:12;34785:19;;34444:366;;;:::o;34816:419::-;34982:4;35020:2;35009:9;35005:18;34997:26;;35069:9;35063:4;35059:20;35055:1;35044:9;35040:17;35033:47;35097:131;35223:4;35097:131;:::i;:::-;35089:139;;34816:419;;;:::o;35241:180::-;35381:32;35377:1;35369:6;35365:14;35358:56;35241:180;:::o;35427:366::-;35569:3;35590:67;35654:2;35649:3;35590:67;:::i;:::-;35583:74;;35666:93;35755:3;35666:93;:::i;:::-;35784:2;35779:3;35775:12;35768:19;;35427:366;;;:::o;35799:419::-;35965:4;36003:2;35992:9;35988:18;35980:26;;36052:9;36046:4;36042:20;36038:1;36027:9;36023:17;36016:47;36080:131;36206:4;36080:131;:::i;:::-;36072:139;;35799:419;;;:::o;36224:234::-;36364:34;36360:1;36352:6;36348:14;36341:58;36433:17;36428:2;36420:6;36416:15;36409:42;36224:234;:::o;36464:366::-;36606:3;36627:67;36691:2;36686:3;36627:67;:::i;:::-;36620:74;;36703:93;36792:3;36703:93;:::i;:::-;36821:2;36816:3;36812:12;36805:19;;36464:366;;;:::o;36836:419::-;37002:4;37040:2;37029:9;37025:18;37017:26;;37089:9;37083:4;37079:20;37075:1;37064:9;37060:17;37053:47;37117:131;37243:4;37117:131;:::i;:::-;37109:139;;36836:419;;;:::o;37261:227::-;37401:34;37397:1;37389:6;37385:14;37378:58;37470:10;37465:2;37457:6;37453:15;37446:35;37261:227;:::o;37494:366::-;37636:3;37657:67;37721:2;37716:3;37657:67;:::i;:::-;37650:74;;37733:93;37822:3;37733:93;:::i;:::-;37851:2;37846:3;37842:12;37835:19;;37494:366;;;:::o;37866:419::-;38032:4;38070:2;38059:9;38055:18;38047:26;;38119:9;38113:4;38109:20;38105:1;38094:9;38090:17;38083:47;38147:131;38273:4;38147:131;:::i;:::-;38139:139;;37866:419;;;:::o;38291:224::-;38431:34;38427:1;38419:6;38415:14;38408:58;38500:7;38495:2;38487:6;38483:15;38476:32;38291:224;:::o;38521:366::-;38663:3;38684:67;38748:2;38743:3;38684:67;:::i;:::-;38677:74;;38760:93;38849:3;38760:93;:::i;:::-;38878:2;38873:3;38869:12;38862:19;;38521:366;;;:::o;38893:419::-;39059:4;39097:2;39086:9;39082:18;39074:26;;39146:9;39140:4;39136:20;39132:1;39121:9;39117:17;39110:47;39174:131;39300:4;39174:131;:::i;:::-;39166:139;;38893:419;;;:::o;39318:191::-;39358:4;39378:20;39396:1;39378:20;:::i;:::-;39373:25;;39412:20;39430:1;39412:20;:::i;:::-;39407:25;;39451:1;39448;39445:8;39442:34;;;39456:18;;:::i;:::-;39442:34;39501:1;39498;39494:9;39486:17;;39318:191;;;;:::o;39515:177::-;39655:29;39651:1;39643:6;39639:14;39632:53;39515:177;:::o;39698:366::-;39840:3;39861:67;39925:2;39920:3;39861:67;:::i;:::-;39854:74;;39937:93;40026:3;39937:93;:::i;:::-;40055:2;40050:3;40046:12;40039:19;;39698:366;;;:::o;40070:419::-;40236:4;40274:2;40263:9;40259:18;40251:26;;40323:9;40317:4;40313:20;40309:1;40298:9;40294:17;40287:47;40351:131;40477:4;40351:131;:::i;:::-;40343:139;;40070:419;;;:::o;40495:233::-;40534:3;40557:24;40575:5;40557:24;:::i;:::-;40548:33;;40603:66;40596:5;40593:77;40590:103;;40673:18;;:::i;:::-;40590:103;40720:1;40713:5;40709:13;40702:20;;40495:233;;;:::o;40734:663::-;40822:6;40830;40838;40887:2;40875:9;40866:7;40862:23;40858:32;40855:119;;;40893:79;;:::i;:::-;40855:119;41013:1;41038:64;41094:7;41085:6;41074:9;41070:22;41038:64;:::i;:::-;41028:74;;40984:128;41151:2;41177:64;41233:7;41224:6;41213:9;41209:22;41177:64;:::i;:::-;41167:74;;41122:129;41290:2;41316:64;41372:7;41363:6;41352:9;41348:22;41316:64;:::i;:::-;41306:74;;41261:129;40734:663;;;;;:::o;41403:180::-;41451:77;41448:1;41441:88;41548:4;41545:1;41538:15;41572:4;41569:1;41562:15;41589:185;41629:1;41646:20;41664:1;41646:20;:::i;:::-;41641:25;;41680:20;41698:1;41680:20;:::i;:::-;41675:25;;41719:1;41709:35;;41724:18;;:::i;:::-;41709:35;41766:1;41763;41759:9;41754:14;;41589:185;;;;:::o;41780:220::-;41920:34;41916:1;41908:6;41904:14;41897:58;41989:3;41984:2;41976:6;41972:15;41965:28;41780:220;:::o;42006:366::-;42148:3;42169:67;42233:2;42228:3;42169:67;:::i;:::-;42162:74;;42245:93;42334:3;42245:93;:::i;:::-;42363:2;42358:3;42354:12;42347:19;;42006:366;;;:::o;42378:419::-;42544:4;42582:2;42571:9;42567:18;42559:26;;42631:9;42625:4;42621:20;42617:1;42606:9;42602:17;42595:47;42659:131;42785:4;42659:131;:::i;:::-;42651:139;;42378:419;;;:::o;42803:85::-;42848:7;42877:5;42866:16;;42803:85;;;:::o;42894:158::-;42952:9;42985:61;43003:42;43012:32;43038:5;43012:32;:::i;:::-;43003:42;:::i;:::-;42985:61;:::i;:::-;42972:74;;42894:158;;;:::o;43058:147::-;43153:45;43192:5;43153:45;:::i;:::-;43148:3;43141:58;43058:147;;:::o;43211:831::-;43474:4;43512:3;43501:9;43497:19;43489:27;;43526:71;43594:1;43583:9;43579:17;43570:6;43526:71;:::i;:::-;43607:80;43683:2;43672:9;43668:18;43659:6;43607:80;:::i;:::-;43734:9;43728:4;43724:20;43719:2;43708:9;43704:18;43697:48;43762:108;43865:4;43856:6;43762:108;:::i;:::-;43754:116;;43880:72;43948:2;43937:9;43933:18;43924:6;43880:72;:::i;:::-;43962:73;44030:3;44019:9;44015:19;44006:6;43962:73;:::i;:::-;43211:831;;;;;;;;:::o;44048:147::-;44149:11;44186:3;44171:18;;44048:147;;;;:::o;44201:114::-;;:::o;44321:398::-;44480:3;44501:83;44582:1;44577:3;44501:83;:::i;:::-;44494:90;;44593:93;44682:3;44593:93;:::i;:::-;44711:1;44706:3;44702:11;44695:18;;44321:398;;;:::o;44725:379::-;44909:3;44931:147;45074:3;44931:147;:::i;:::-;44924:154;;45095:3;45088:10;;44725:379;;;:::o

Swarm Source

ipfs://50fe9996f7c0165e1cff42fe90b6058844ddf74c7f2a4095af4c27373bd8ad12
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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