ETH Price: $3,256.58 (+0.08%)
Gas: 1 Gwei

Token

HOARDCHAIN (HRDC)
 

Overview

Max Total Supply

10,000,000,000 HRDC

Holders

48

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
50,000,000 HRDC

Value
$0.00
0x4fddb61cafb902bb37c25a519cce3049162ec374
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:
HOARDCHAIN

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.17;
// 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 swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    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 HOARDCHAIN is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = 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 _isExcludedFromRewards;
    string private _name;
    string private _symbol;
    uint8 private _decimals = 9;
    uint256 private _tTotal = 10000000000 * 10 ** _decimals;
    bool inSwap;
    bool public swapEnabled = true;
    bool public tradingOpen = false;
    uint256 public ethPriceToSwap = 200000000000000000; //.2 ETH
    uint256 public _maxWalletAmount = 150000001 * 10 ** _decimals;
    uint256 private gasForProcessing = 50000;
    event SendDividends(uint256 EthAmount);
    uint256 private minimumTokenBalanceForDividends = 50000000 * 10 ** _decimals;
    address public devAddress = 0x7Ff3871f9Dc681643D24E601BB571313a0Aa410C;
    struct TaxFees {
        uint256 buyFee;
        uint256 sellFee;
    }

    uint256 public devPercentage = 100;

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

    constructor(string memory name_, string memory symbol_, address[] memory excludeAddresses) {
        _name = name_;
        _symbol = symbol_;
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)];
        for(uint256 i=0; i < excludeAddresses.length;i++) {
            _isExcludedFromFee[excludeAddresses[i]] = true;
        }
        _isExcludedFromRewards[owner()] = true;

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedFromRewards[uniswapV2Pair] = true;
        _isExcludedFromRewards[address(this)] = true;
        taxFees = TaxFees(98, 98);
        dividendTracker = new DividendTracker("HOARDCHAIN TRACKER", "HRDCT", address(this));
        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 setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10 ** 9;
    }

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

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

    function setDevPercentage(uint256 percentage) external onlyOwner {
        devPercentage = percentage;
    }

    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 setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        ethPriceToSwap = ethPriceToSwap_;
    }

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

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

    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 setSwapEnabled(bool _enabled) public onlyOwner {
        swapEnabled = _enabled;
    }

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

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

    receive() external payable {}

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

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }
    
    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");
        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()) {
            require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");
        }
        if (from == uniswapV2Pair) {
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        if (from != uniswapV2Pair && to == uniswapV2Pair) {//if sell
            //only tax if tokens are going back to Uniswap
            isSell = true;
            sellTaxTokens();
        }
        if (from != uniswapV2Pair && to != uniswapV2Pair) {
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        // _tokenTransfer(from, to, amount, takeFees, isSell, true);
          _tokenTransfer(from, to, amount, takeFees, isSell);
    }

    function sendEth() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

    function extractERC20Tokens(address contractAddress) external {
        IERC20 erc20Token = IERC20(contractAddress);
        uint256 balance = erc20Token.balanceOf(address(this));
        erc20Token.transfer(owner(), balance);
    }

    function claimTokens() external {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            if (!inSwap && swapEnabled) {
                swapTokensForEth(contractTokenBalance);
            }
        }
    }

    function sellTaxTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            uint256 tokenAmount = getTokenAmountByEthPrice();
            if (contractTokenBalance >= tokenAmount && !inSwap && swapEnabled) {
                //send eth to wallets investment and dev
                distributeShares(tokenAmount);
            }
        }
    }

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

    function getGasForProcessing() public view returns(uint256) {
        return gasForProcessing;
    }
    function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
        swapTokensForEth(balanceToShareTokens);
        uint256 ethBalance = address(this).balance;
        uint256 devEth = ethBalance.mul(devPercentage).div(100).div(2);
        uint256 hoardEth = ethBalance.sub(devEth);

        if(devEth > 0) {
            payable(devAddress).transfer(devEth);
        }

        if(hoardEth > 0) {
            sendEthDividends(hoardEth);
        }
    }

    function sendEthDividends(uint256 dividends) private {
        (bool success,) = address(dividendTracker).call{value : dividends}("");
        if (success) {
            emit SendDividends(dividends);
        }
    }

    function removeEthFromContract() external onlyOwner {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

    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) private {
        uint256 taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0;
        if (takeFees && isSell) {
            taxAmount = amount.mul(taxFees.sellFee).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);
        try dividendTracker.calculateDividend(sender, recipient) {} 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;
    string private _symbol;
    uint8 private _decimals = 9;
    uint256 public totalDividendsDistributed;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    
    HOARDCHAIN public hoardChain;

    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);
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor);
    IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IERC20 public hoardToken = IERC20(0x461B71cff4d4334BbA09489acE4b5Dc1A1813445); //HOARD Mainnet

    constructor(string memory name_, string memory symbol_, address hoardChainContract) {
        _name = name_;
        _symbol = symbol_;
        hoardChain = HOARDCHAIN(payable(hoardChainContract));
    }

    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) public {
        uint256 balance = hoardChain.balanceOf(account);
        if (!hoardChain.isExcludedFromRewards(account)) {
            if (balance >= hoardChain.getMinimumTokenBalanceForDividends()) {
                _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 updateTokenBalances(address[] memory accounts) external {
        uint256 index = 0;
        while (index < accounts.length) {
            setTokenBalance(accounts[index]);
            index += 1;
        }
    }

    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 excludeFromDividends(address account) external onlyOwner {
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function distributeDividends() public payable {
        require(totalSupply() > 0);
        uint256 initialBalance = hoardToken.balanceOf(address(this));
        swapEthForHoard(msg.value);
        uint256 newBalance = hoardToken.balanceOf(address(this)).sub(initialBalance);
        if (newBalance > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (newBalance).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, newBalance);
            totalDividendsDistributed = totalDividendsDistributed.add(newBalance);
        }
    }

    function swapEthForHoard(uint256 ethAmount) public {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(hoardToken);

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : ethAmount}(
            0, // accept any amount of Ethereum
            path,
            address(this),
            block.timestamp
        );
    }

    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);
            hoardToken.transfer(user, _withdrawableDividend);
            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 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 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 calculateDividend(address sender, address recipient) external {
        setTokenBalance(sender);
        setTokenBalance(recipient);
        (uint256 iterations, uint256 claims, uint256 lastIndex) = process(hoardChain.getGasForProcessing());
        emit ProcessedDividendTracker(iterations, claims, lastIndex, true, hoardChain.getGasForProcessing(), tx.origin);
    }

    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 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 sendEth() external {
        uint256 ethBalance = address(this).balance;
        payable(owner()).transfer(ethBalance);
    }

    function extractERC20Tokens(address contractAddress) external {
        IERC20 erc20Token = IERC20(contractAddress);
        uint256 balance = erc20Token.balanceOf(address(this));
        erc20Token.transfer(owner(), balance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address[]","name":"excludeAddresses","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendDividends","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":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract DividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethPriceToSwap","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":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"extractERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getGasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumTokenBalanceForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenAmountByEthPrice","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":"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":"removeEthFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setDevPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinTokenBalForDividends","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","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"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a60006101000a81548160ff021916908360ff160217905550600a60009054906101000a900460ff16600a620000d5919062000abd565b6402540be400620000e7919062000b0e565b600b556001600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506702c68af0bb140000600d55600a60009054906101000a900460ff16600a6200014a919062000abd565b6308f0d1816200015b919062000b0e565b600e5561c350600f55600a60009054906101000a900460ff16600a62000182919062000abd565b6302faf08062000193919062000b0e565b601055737ff3871f9dc681643d24e601bb571313a0aa410c601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064601255348015620001fd57600080fd5b506040516200ba1b3803806200ba1b833981810160405281019062000223919062000e2c565b600062000235620008e460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508260089081620002e4919062001126565b508160099081620002f6919062001126565b50600b54600360006200030e620008e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016006600062000362620008ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90505060005b815181101562000496576001600660008484815181106200042757620004266200120d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806200048d906200123c565b91505062000401565b50600160076000620004ad620008ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200056c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000592919062001289565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200061c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000642919062001289565b6040518363ffffffff1660e01b815260040162000661929190620012cc565b6020604051808303816000875af115801562000681573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006a7919062001289565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060405180604001604052806062815260200160628152506014600082015181600001556020820151816001015590505030604051620007f89062000915565b620008049190620013aa565b604051809103906000f08015801562000821573d6000803e3d6000fd5b50601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000872620008e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620008d3919062001402565b60405180910390a35050506200141f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b615aa88062005f7383390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620009b15780860481111562000989576200098862000923565b5b6001851615620009995780820291505b8081029050620009a98562000952565b945062000969565b94509492505050565b600082620009cc576001905062000a9f565b81620009dc576000905062000a9f565b8160018114620009f5576002811462000a005762000a36565b600191505062000a9f565b60ff84111562000a155762000a1462000923565b5b8360020a91508482111562000a2f5762000a2e62000923565b5b5062000a9f565b5060208310610133831016604e8410600b841016171562000a705782820a90508381111562000a6a5762000a6962000923565b5b62000a9f565b62000a7f84848460016200095f565b9250905081840481111562000a995762000a9862000923565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000aca8262000aa6565b915062000ad78362000ab0565b925062000b067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620009ba565b905092915050565b600062000b1b8262000aa6565b915062000b288362000aa6565b925082820262000b388162000aa6565b9150828204841483151762000b525762000b5162000923565b5b5092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000bc28262000b77565b810181811067ffffffffffffffff8211171562000be45762000be362000b88565b5b80604052505050565b600062000bf962000b59565b905062000c07828262000bb7565b919050565b600067ffffffffffffffff82111562000c2a5762000c2962000b88565b5b62000c358262000b77565b9050602081019050919050565b60005b8381101562000c6257808201518184015260208101905062000c45565b60008484015250505050565b600062000c8562000c7f8462000c0c565b62000bed565b90508281526020810184848401111562000ca45762000ca362000b72565b5b62000cb184828562000c42565b509392505050565b600082601f83011262000cd15762000cd062000b6d565b5b815162000ce384826020860162000c6e565b91505092915050565b600067ffffffffffffffff82111562000d0a5762000d0962000b88565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d4d8262000d20565b9050919050565b62000d5f8162000d40565b811462000d6b57600080fd5b50565b60008151905062000d7f8162000d54565b92915050565b600062000d9c62000d968462000cec565b62000bed565b9050808382526020820190506020840283018581111562000dc25762000dc162000d1b565b5b835b8181101562000def578062000dda888262000d6e565b84526020840193505060208101905062000dc4565b5050509392505050565b600082601f83011262000e115762000e1062000b6d565b5b815162000e2384826020860162000d85565b91505092915050565b60008060006060848603121562000e485762000e4762000b63565b5b600084015167ffffffffffffffff81111562000e695762000e6862000b68565b5b62000e778682870162000cb9565b935050602084015167ffffffffffffffff81111562000e9b5762000e9a62000b68565b5b62000ea98682870162000cb9565b925050604084015167ffffffffffffffff81111562000ecd5762000ecc62000b68565b5b62000edb8682870162000df9565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f3857607f821691505b60208210810362000f4e5762000f4d62000ef0565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000fb87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000f79565b62000fc4868362000f79565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620010076200100162000ffb8462000aa6565b62000fdc565b62000aa6565b9050919050565b6000819050919050565b620010238362000fe6565b6200103b62001032826200100e565b84845462000f86565b825550505050565b600090565b6200105262001043565b6200105f81848462001018565b505050565b5b8181101562001087576200107b60008262001048565b60018101905062001065565b5050565b601f821115620010d657620010a08162000f54565b620010ab8462000f69565b81016020851015620010bb578190505b620010d3620010ca8562000f69565b83018262001064565b50505b505050565b600082821c905092915050565b6000620010fb60001984600802620010db565b1980831691505092915050565b6000620011168383620010e8565b9150826002028217905092915050565b620011318262000ee5565b67ffffffffffffffff8111156200114d576200114c62000b88565b5b62001159825462000f1f565b620011668282856200108b565b600060209050601f8311600181146200119e576000841562001189578287015190505b62001195858262001108565b86555062001205565b601f198416620011ae8662000f54565b60005b82811015620011d857848901518255600182019150602085019450602081019050620011b1565b86831015620011f85784890151620011f4601f891682620010e8565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000620012498262000aa6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200127e576200127d62000923565b5b600182019050919050565b600060208284031215620012a257620012a162000b63565b5b6000620012b28482850162000d6e565b91505092915050565b620012c68162000d40565b82525050565b6000604082019050620012e36000830185620012bb565b620012f26020830184620012bb565b9392505050565b600082825260208201905092915050565b7f484f415244434841494e20545241434b45520000000000000000000000000000600082015250565b600062001342601283620012f9565b91506200134f826200130a565b602082019050919050565b7f4852444354000000000000000000000000000000000000000000000000000000600082015250565b600062001392600583620012f9565b91506200139f826200135a565b602082019050919050565b60006060820190508181036000830152620013c58162001333565b90508181036020830152620013da8162001383565b9050620013eb6040830184620012bb565b92915050565b620013fc8162000aa6565b82525050565b6000602082019050620014196000830184620013f1565b92915050565b614b44806200142f6000396000f3fe6080604052600436106102765760003560e01c806363373b871161014f57806397995706116100c1578063c3a438241161007a578063c3a438241461093a578063dd62ed3e14610965578063e01af92c146109a2578063e7dad4f9146109cb578063f2fde38b14610a08578063ffb54a9914610a315761027d565b806397995706146108185780639b0e2e8614610843578063a457c2d71461086c578063a9059cbb146108a9578063b2abbbc4146108e6578063bdd4f29f1461090f5761027d565b806371cd56af1161011357806371cd56af1461071e57806381230a831461074757806385d4787b14610770578063871c128d146107995780638da5cb5b146107c257806395d89b41146107ed5761027d565b806363373b871461064b5780636c0a24eb146106745780636ddd17131461069f57806370a08231146106ca578063715018a6146107075761027d565b80632c1f5216116101e8578063441d801f116101ac578063441d801f1461054f57806348c54b9d1461057857806349bd5a5e1461058f5780635342acb4146105ba57806354a5df1f146105f75780635ebf4db9146106225761027d565b80632c1f5216146104685780632f4a7e5114610493578063313ce567146104bc57806339509351146104e75780633ad10ef6146105245761027d565b80630e8322731161023a5780630e832273146103585780631694505e1461039557806318160ddd146103c057806323b872dd146103eb57806327a14fc214610428578063280d3821146104515761027d565b8063056278d31461028257806306e99fef146102ad57806306fdde03146102c4578063095ea7b3146102ef5780630ddc09761461032c5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a5c565b6040516102a491906135b5565b60405180910390f35b3480156102b957600080fd5b506102c2610a66565b005b3480156102d057600080fd5b506102d9610b51565b6040516102e69190613660565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190613720565b610be3565b604051610323919061377b565b60405180910390f35b34801561033857600080fd5b50610341610c01565b60405161034f929190613796565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a91906137bf565b610c13565b60405161038c919061377b565b60405180910390f35b3480156103a157600080fd5b506103aa610c69565b6040516103b7919061384b565b60405180910390f35b3480156103cc57600080fd5b506103d5610c8f565b6040516103e291906135b5565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190613866565b610c99565b60405161041f919061377b565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a91906138b9565b610d72565b005b34801561045d57600080fd5b50610466610e20565b005b34801561047457600080fd5b5061047d610f0b565b60405161048a9190613919565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b591906138b9565b610f31565b005b3480156104c857600080fd5b506104d1610fd0565b6040516104de9190613950565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613720565b610fe7565b60405161051b919061377b565b60405180910390f35b34801561053057600080fd5b5061053961109a565b604051610546919061397a565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190613a26565b6110c0565b005b34801561058457600080fd5b5061058d611165565b005b34801561059b57600080fd5b506105a46111b7565b6040516105b1919061397a565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc91906137bf565b6111dd565b6040516105ee919061377b565b60405180910390f35b34801561060357600080fd5b5061060c611233565b60405161061991906135b5565b60405180910390f35b34801561062e57600080fd5b50610649600480360381019061064491906138b9565b611239565b005b34801561065757600080fd5b50610672600480360381019061066d91906137bf565b6112fe565b005b34801561068057600080fd5b5061068961140c565b60405161069691906135b5565b60405180910390f35b3480156106ab57600080fd5b506106b4611412565b6040516106c1919061377b565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec91906137bf565b611425565b6040516106fe91906135b5565b60405180910390f35b34801561071357600080fd5b5061071c61146e565b005b34801561072a57600080fd5b5061074560048036038101906107409190613a26565b6115c1565b005b34801561075357600080fd5b5061076e60048036038101906107699190613a86565b611666565b005b34801561077c57600080fd5b5061079760048036038101906107929190613c04565b611713565b005b3480156107a557600080fd5b506107c060048036038101906107bb91906138b9565b6117b6565b005b3480156107ce57600080fd5b506107d7611899565b6040516107e4919061397a565b60405180910390f35b3480156107f957600080fd5b506108026118c2565b60405161080f9190613660565b60405180910390f35b34801561082457600080fd5b5061082d611954565b60405161083a91906135b5565b60405180910390f35b34801561084f57600080fd5b5061086a60048036038101906108659190613c04565b611b97565b005b34801561087857600080fd5b50610893600480360381019061088e9190613720565b611c3a565b6040516108a0919061377b565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190613720565b611d07565b6040516108dd919061377b565b60405180910390f35b3480156108f257600080fd5b5061090d600480360381019061090891906138b9565b611d25565b005b34801561091b57600080fd5b50610924611dc4565b60405161093191906135b5565b60405180910390f35b34801561094657600080fd5b5061094f611dce565b60405161095c91906135b5565b60405180910390f35b34801561097157600080fd5b5061098c60048036038101906109879190613c4d565b611dd4565b60405161099991906135b5565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c49190613c8d565b611e5b565b005b3480156109d757600080fd5b506109f260048036038101906109ed91906137bf565b611f0d565b6040516109ff919061377b565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a91906137bf565b611f63565b005b348015610a3d57600080fd5b50610a46612124565b604051610a53919061377b565b60405180910390f35b6000600f54905090565b610a6e612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af290613d06565b60405180910390fd5b6000479050610b08611899565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b4d573d6000803e3d6000fd5b5050565b606060088054610b6090613d55565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8c90613d55565b8015610bd95780601f10610bae57610100808354040283529160200191610bd9565b820191906000526020600020905b815481529060010190602001808311610bbc57829003601f168201915b5050505050905090565b6000610bf7610bf0612137565b848461213f565b6001905092915050565b60148060000154908060010154905082565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000610ca6848484612308565b610d6784610cb2612137565b610d6285604051806060016040528060288152602001614ac260289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d18612137565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129329092919063ffffffff16565b61213f565b600190509392505050565b610d7a612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613d06565b60405180910390fd5b633b9aca0081610e179190613db5565b600e8190555050565b610e28612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90613d06565b60405180910390fd5b6000479050610ec2611899565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f07573d6000803e3d6000fd5b5050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f39612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90613d06565b60405180910390fd5b8060128190555050565b6000600a60009054906101000a900460ff16905090565b6000611090610ff4612137565b8461108b8560046000611005612137565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299690919063ffffffff16565b61213f565b6001905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110c8612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90613d06565b60405180910390fd5b6111608383836129f4565b505050565b600061117030611425565b905060008111156111b457600c60009054906101000a900460ff161580156111a45750600c60019054906101000a900460ff165b156111b3576111b281612a9f565b5b5b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b611241612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590613d06565b60405180910390fd5b600a60009054906101000a900460ff16600a6112ea9190613f2a565b816112f59190613db5565b60108190555050565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161133e919061397a565b602060405180830381865afa15801561135b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137f9190613f8a565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6113a5611899565b836040518363ffffffff1660e01b81526004016113c3929190613fb7565b6020604051808303816000875af11580156113e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114069190613ff5565b50505050565b600e5481565b600c60019054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611476612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90613d06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115c9612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90613d06565b60405180910390fd5b611661838383612ce2565b505050565b61166e612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613d06565b60405180910390fd5b81601460000181905550806014600101819055505050565b61171b612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90613d06565b60405180910390fd5b6117b3816001612d8d565b50565b6117be612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184290613d06565b60405180910390fd5b600f54810361188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690614094565b60405180910390fd5b80600f8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600980546118d190613d55565b80601f01602080910402602001604051908101604052809291908181526020018280546118fd90613d55565b801561194a5780601f1061191f5761010080835404028352916020019161194a565b820191906000526020600020905b81548152906001019060200180831161192d57829003601f168201915b5050505050905090565b600080600267ffffffffffffffff81111561197257611971613ac6565b5b6040519080825280602002602001820160405280156119a05781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3491906140c9565b81600081518110611a4857611a476140f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611a9757611a966140f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600d54836040518363ffffffff1660e01b8152600401611b309291906141e3565b600060405180830381865afa158015611b4d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611b7691906142d6565b600181518110611b8957611b886140f6565b5b602002602001015191505090565b611b9f612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390613d06565b60405180910390fd5b611c37816000612d8d565b50565b6000611cfd611c47612137565b84611cf885604051806060016040528060258152602001614aea6025913960046000611c71612137565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129329092919063ffffffff16565b61213f565b6001905092915050565b6000611d1b611d14612137565b8484612308565b6001905092915050565b611d2d612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190613d06565b60405180910390fd5b80600d8190555050565b6000601054905090565b60125481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e63612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee790613d06565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611f6b612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef90613d06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90614391565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60029054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a590614423565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361221d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612214906144b5565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122fb91906135b5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90614547565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd906145d9565b60405180910390fd5b60008111612429576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124209061466b565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124d05750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561250f57506124df611899565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561254e575061251e611899565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050600061256d8461255f87611425565b61299690919063ffffffff16565b9050612577611899565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156125e557506125b5611899565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156126ce57600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561268e5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c4906146fd565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361276957600e54811115612768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275f9061478f565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156128145750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156128265760019250612825612e84565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156128d25750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561291d57600e5481111561291c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129139061478f565b60405180910390fd5b5b61292a8686868587612eef565b505050505050565b600083831115829061297a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129719190613660565b60405180910390fd5b506000838561298991906147af565b9050809150509392505050565b60008082846129a591906147e3565b9050838110156129ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e190614863565b60405180910390fd5b8091505092915050565b60005b83839050811015612a99576000848483818110612a1757612a166140f6565b5b9050602002016020810190612a2c91906137bf565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080612a9190614883565b9150506129f7565b50505050565b6000600267ffffffffffffffff811115612abc57612abb613ac6565b5b604051908082528060200260200182016040528015612aea5781602001602082028036833780820191505090505b5090503081600081518110612b0257612b016140f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd91906140c9565b81600181518110612be157612be06140f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c4830600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461213f565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612cac959493929190614906565b600060405180830381600087803b158015612cc657600080fd5b505af1158015612cda573d6000803e3d6000fd5b505050505050565b60005b83839050811015612d87576000848483818110612d0557612d046140f6565b5b9050602002016020810190612d1a91906137bf565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080612d7f90614883565b915050612ce5565b50505050565b60005b8251811015612e7f576000838281518110612dae57612dad6140f6565b5b602002602001015190508215612e1b576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612e6b565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080612e7790614883565b915050612d90565b505050565b6000612e8f30611425565b90506000811115612eec576000612ea4611954565b9050808210158015612ec35750600c60009054906101000a900460ff16155b8015612edb5750600c60019054906101000a900460ff165b15612eea57612ee981613235565b5b505b50565b600082612efd576000612f29565b612f286064612f1a6014600001548761335b90919063ffffffff16565b6133d590919063ffffffff16565b5b9050828015612f355750815b15612f6857612f656064612f576014600101548761335b90919063ffffffff16565b6133d590919063ffffffff16565b90505b6000612f7d828661341f90919063ffffffff16565b9050612fd185600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061306681600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299690919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130fb82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299690919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161319b91906135b5565b60405180910390a3601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369d9ec8f88886040518363ffffffff1660e01b8152600401613200929190614960565b600060405180830381600087803b15801561321a57600080fd5b505af192505050801561322b575060015b5050505050505050565b6001600c60006101000a81548160ff02191690831515021790555061325981612a9f565b6000479050600061329b600261328d606461327f6012548761335b90919063ffffffff16565b6133d590919063ffffffff16565b6133d590919063ffffffff16565b905060006132b2828461341f90919063ffffffff16565b9050600082111561332757601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613325573d6000803e3d6000fd5b505b600081111561333a5761333981613469565b5b5050506000600c60006101000a81548160ff02191690831515021790555050565b600080830361336d57600090506133cf565b6000828461337b9190613db5565b905082848261338a91906149b8565b146133ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c190614a5b565b60405180910390fd5b809150505b92915050565b600061341783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613539565b905092915050565b600061346183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612932565b905092915050565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516134b190614aac565b60006040518083038185875af1925050503d80600081146134ee576040519150601f19603f3d011682016040523d82523d6000602084013e6134f3565b606091505b505090508015613535577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b18260405161352c91906135b5565b60405180910390a15b5050565b60008083118290613580576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135779190613660565b60405180910390fd5b506000838561358f91906149b8565b9050809150509392505050565b6000819050919050565b6135af8161359c565b82525050565b60006020820190506135ca60008301846135a6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561360a5780820151818401526020810190506135ef565b60008484015250505050565b6000601f19601f8301169050919050565b6000613632826135d0565b61363c81856135db565b935061364c8185602086016135ec565b61365581613616565b840191505092915050565b6000602082019050818103600083015261367a8184613627565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136c182613696565b9050919050565b6136d1816136b6565b81146136dc57600080fd5b50565b6000813590506136ee816136c8565b92915050565b6136fd8161359c565b811461370857600080fd5b50565b60008135905061371a816136f4565b92915050565b600080604083850312156137375761373661368c565b5b6000613745858286016136df565b92505060206137568582860161370b565b9150509250929050565b60008115159050919050565b61377581613760565b82525050565b6000602082019050613790600083018461376c565b92915050565b60006040820190506137ab60008301856135a6565b6137b860208301846135a6565b9392505050565b6000602082840312156137d5576137d461368c565b5b60006137e3848285016136df565b91505092915050565b6000819050919050565b600061381161380c61380784613696565b6137ec565b613696565b9050919050565b6000613823826137f6565b9050919050565b600061383582613818565b9050919050565b6138458161382a565b82525050565b6000602082019050613860600083018461383c565b92915050565b60008060006060848603121561387f5761387e61368c565b5b600061388d868287016136df565b935050602061389e868287016136df565b92505060406138af8682870161370b565b9150509250925092565b6000602082840312156138cf576138ce61368c565b5b60006138dd8482850161370b565b91505092915050565b60006138f1826137f6565b9050919050565b6000613903826138e6565b9050919050565b613913816138f8565b82525050565b600060208201905061392e600083018461390a565b92915050565b600060ff82169050919050565b61394a81613934565b82525050565b60006020820190506139656000830184613941565b92915050565b613974816136b6565b82525050565b600060208201905061398f600083018461396b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126139ba576139b9613995565b5b8235905067ffffffffffffffff8111156139d7576139d661399a565b5b6020830191508360208202830111156139f3576139f261399f565b5b9250929050565b613a0381613760565b8114613a0e57600080fd5b50565b600081359050613a20816139fa565b92915050565b600080600060408486031215613a3f57613a3e61368c565b5b600084013567ffffffffffffffff811115613a5d57613a5c613691565b5b613a69868287016139a4565b93509350506020613a7c86828701613a11565b9150509250925092565b60008060408385031215613a9d57613a9c61368c565b5b6000613aab8582860161370b565b9250506020613abc8582860161370b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613afe82613616565b810181811067ffffffffffffffff82111715613b1d57613b1c613ac6565b5b80604052505050565b6000613b30613682565b9050613b3c8282613af5565b919050565b600067ffffffffffffffff821115613b5c57613b5b613ac6565b5b602082029050602081019050919050565b6000613b80613b7b84613b41565b613b26565b90508083825260208201905060208402830185811115613ba357613ba261399f565b5b835b81811015613bcc5780613bb888826136df565b845260208401935050602081019050613ba5565b5050509392505050565b600082601f830112613beb57613bea613995565b5b8135613bfb848260208601613b6d565b91505092915050565b600060208284031215613c1a57613c1961368c565b5b600082013567ffffffffffffffff811115613c3857613c37613691565b5b613c4484828501613bd6565b91505092915050565b60008060408385031215613c6457613c6361368c565b5b6000613c72858286016136df565b9250506020613c83858286016136df565b9150509250929050565b600060208284031215613ca357613ca261368c565b5b6000613cb184828501613a11565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613cf06020836135db565b9150613cfb82613cba565b602082019050919050565b60006020820190508181036000830152613d1f81613ce3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d6d57607f821691505b602082108103613d8057613d7f613d26565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dc08261359c565b9150613dcb8361359c565b9250828202613dd98161359c565b91508282048414831517613df057613def613d86565b5b5092915050565b60008160011c9050919050565b6000808291508390505b6001851115613e4e57808604811115613e2a57613e29613d86565b5b6001851615613e395780820291505b8081029050613e4785613df7565b9450613e0e565b94509492505050565b600082613e675760019050613f23565b81613e755760009050613f23565b8160018114613e8b5760028114613e9557613ec4565b6001915050613f23565b60ff841115613ea757613ea6613d86565b5b8360020a915084821115613ebe57613ebd613d86565b5b50613f23565b5060208310610133831016604e8410600b8410161715613ef95782820a905083811115613ef457613ef3613d86565b5b613f23565b613f068484846001613e04565b92509050818404811115613f1d57613f1c613d86565b5b81810290505b9392505050565b6000613f358261359c565b9150613f4083613934565b9250613f6d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613e57565b905092915050565b600081519050613f84816136f4565b92915050565b600060208284031215613fa057613f9f61368c565b5b6000613fae84828501613f75565b91505092915050565b6000604082019050613fcc600083018561396b565b613fd960208301846135a6565b9392505050565b600081519050613fef816139fa565b92915050565b60006020828403121561400b5761400a61368c565b5b600061401984828501613fe0565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b600061407e602c836135db565b915061408982614022565b604082019050919050565b600060208201905081810360008301526140ad81614071565b9050919050565b6000815190506140c3816136c8565b92915050565b6000602082840312156140df576140de61368c565b5b60006140ed848285016140b4565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61415a816136b6565b82525050565b600061416c8383614151565b60208301905092915050565b6000602082019050919050565b600061419082614125565b61419a8185614130565b93506141a583614141565b8060005b838110156141d65781516141bd8882614160565b97506141c883614178565b9250506001810190506141a9565b5085935050505092915050565b60006040820190506141f860008301856135a6565b818103602083015261420a8184614185565b90509392505050565b600067ffffffffffffffff82111561422e5761422d613ac6565b5b602082029050602081019050919050565b600061425261424d84614213565b613b26565b905080838252602082019050602084028301858111156142755761427461399f565b5b835b8181101561429e578061428a8882613f75565b845260208401935050602081019050614277565b5050509392505050565b600082601f8301126142bd576142bc613995565b5b81516142cd84826020860161423f565b91505092915050565b6000602082840312156142ec576142eb61368c565b5b600082015167ffffffffffffffff81111561430a57614309613691565b5b614316848285016142a8565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061437b6026836135db565b91506143868261431f565b604082019050919050565b600060208201905081810360008301526143aa8161436e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061440d6024836135db565b9150614418826143b1565b604082019050919050565b6000602082019050818103600083015261443c81614400565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061449f6022836135db565b91506144aa82614443565b604082019050919050565b600060208201905081810360008301526144ce81614492565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145316025836135db565b915061453c826144d5565b604082019050919050565b6000602082019050818103600083015261456081614524565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145c36023836135db565b91506145ce82614567565b604082019050919050565b600060208201905081810360008301526145f2816145b6565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006146556029836135db565b9150614660826145f9565b604082019050919050565b6000602082019050818103600083015261468481614648565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b60006146e7602f836135db565b91506146f28261468b565b604082019050919050565b60006020820190508181036000830152614716816146da565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006147796025836135db565b91506147848261471d565b604082019050919050565b600060208201905081810360008301526147a88161476c565b9050919050565b60006147ba8261359c565b91506147c58361359c565b92508282039050818111156147dd576147dc613d86565b5b92915050565b60006147ee8261359c565b91506147f98361359c565b925082820190508082111561481157614810613d86565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061484d601b836135db565b915061485882614817565b602082019050919050565b6000602082019050818103600083015261487c81614840565b9050919050565b600061488e8261359c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148c0576148bf613d86565b5b600182019050919050565b6000819050919050565b60006148f06148eb6148e6846148cb565b6137ec565b61359c565b9050919050565b614900816148d5565b82525050565b600060a08201905061491b60008301886135a6565b61492860208301876148f7565b818103604083015261493a8186614185565b9050614949606083018561396b565b61495660808301846135a6565b9695505050505050565b6000604082019050614975600083018561396b565b614982602083018461396b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149c38261359c565b91506149ce8361359c565b9250826149de576149dd614989565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a456021836135db565b9150614a50826149e9565b604082019050919050565b60006020820190508181036000830152614a7481614a38565b9050919050565b600081905092915050565b50565b6000614a96600083614a7b565b9150614aa182614a86565b600082019050919050565b6000614ab782614a89565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122045a0b19311bd393f8e82594aa4b00d496f262dd0b69854836241b7aa97f54a4964736f6c6343000811003360806040526009600a60006101000a81548160ff021916908360ff1602179055506040516200002e9062000295565b604051809103906000f0801580156200004b573d6000803e3d6000fd5b50600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e10601055737a250d5630b4cf539739df2c5dacb4c659f2488d601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073461b71cff4d4334bba09489ace4b5dc1a1813445601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200014957600080fd5b5060405162005aa838038062005aa883398181016040528101906200016f91906200049b565b6000620001816200028d60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350826008908162000230919062000780565b50816009908162000242919062000780565b5080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000867565b600033905090565b610b088062004fa083390190565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200030c82620002c1565b810181811067ffffffffffffffff821117156200032e576200032d620002d2565b5b80604052505050565b600062000343620002a3565b905062000351828262000301565b919050565b600067ffffffffffffffff821115620003745762000373620002d2565b5b6200037f82620002c1565b9050602081019050919050565b60005b83811015620003ac5780820151818401526020810190506200038f565b60008484015250505050565b6000620003cf620003c98462000356565b62000337565b905082815260208101848484011115620003ee57620003ed620002bc565b5b620003fb8482856200038c565b509392505050565b600082601f8301126200041b576200041a620002b7565b5b81516200042d848260208601620003b8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004638262000436565b9050919050565b620004758162000456565b81146200048157600080fd5b50565b60008151905062000495816200046a565b92915050565b600080600060608486031215620004b757620004b6620002ad565b5b600084015167ffffffffffffffff811115620004d857620004d7620002b2565b5b620004e68682870162000403565b935050602084015167ffffffffffffffff8111156200050a5762000509620002b2565b5b620005188682870162000403565b92505060406200052b8682870162000484565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200058857607f821691505b6020821081036200059e576200059d62000540565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005c9565b620006148683620005c9565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006616200065b62000655846200062c565b62000636565b6200062c565b9050919050565b6000819050919050565b6200067d8362000640565b620006956200068c8262000668565b848454620005d6565b825550505050565b600090565b620006ac6200069d565b620006b981848462000672565b505050565b5b81811015620006e157620006d5600082620006a2565b600181019050620006bf565b5050565b601f8211156200073057620006fa81620005a4565b6200070584620005b9565b8101602085101562000715578190505b6200072d6200072485620005b9565b830182620006be565b50505b505050565b600082821c905092915050565b6000620007556000198460080262000735565b1980831691505092915050565b600062000770838362000742565b9150826002028217905092915050565b6200078b8262000535565b67ffffffffffffffff811115620007a757620007a6620002d2565b5b620007b382546200056f565b620007c0828285620006e5565b600060209050601f831160018114620007f85760008415620007e3578287015190505b620007ef858262000762565b8655506200085f565b601f1984166200080886620005a4565b60005b8281101562000832578489015182556001820191506020850194506020810190506200080b565b868310156200085257848901516200084e601f89168262000742565b8355505b6001600288020188555050505b505050505050565b61472980620008776000396000f3fe6080604052600436106102345760003560e01c80636a4740021161012e578063a8b9d240116100ab578063e7841ec01161006f578063e7841ec01461087f578063e98030c7146108aa578063f2fde38b146108d3578063fbcbc0f1146108fc578063ffb2c4791461094057610243565b8063a8b9d24014610760578063a9059cbb1461079d578063aafd847a146107da578063d6a48dd114610817578063dd62ed3e1461084257610243565b806385a6b3ae116100f257806385a6b3ae146106655780638da5cb5b1461069057806391b89fba146106bb57806395d89b41146106f8578063a457c2d71461072357610243565b80636a474002146105925780636f2789ec146105a957806370a08231146105d4578063715018a614610611578063804974ea1461062857610243565b806327ce0147116101bc5780633974d3b1116101805780633974d3b1146104c55780634b1727ff146104ee5780634f1379db1461051757806363373b871461054057806369d9ec8f1461056957610243565b806327ce0147146103cc5780633009a60914610409578063313ce5671461043457806331e79db01461045f578063395093511461048857610243565b8063095ea7b311610203578063095ea7b3146102bf57806309bbedde146102fc57806318160ddd14610327578063226cfa3d1461035257806323b872dd1461038f57610243565b806303c833021461024857806306e99fef1461025257806306fdde0314610269578063070f36db1461029457610243565b366102435761024161097f565b005b600080fd5b61025061097f565b005b34801561025e57600080fd5b50610267610bb5565b005b34801561027557600080fd5b5061027e610c0b565b60405161028b919061352f565b60405180910390f35b3480156102a057600080fd5b506102a9610c9d565b6040516102b691906135d0565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613673565b610cc3565b6040516102f391906136ce565b60405180910390f35b34801561030857600080fd5b50610311610ce1565b60405161031e91906136f8565b60405180910390f35b34801561033357600080fd5b5061033c610d79565b60405161034991906136f8565b60405180910390f35b34801561035e57600080fd5b5061037960048036038101906103749190613713565b610d83565b60405161038691906136f8565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190613740565b610d9b565b6040516103c391906136ce565b60405180910390f35b3480156103d857600080fd5b506103f360048036038101906103ee9190613713565b610de8565b60405161040091906136f8565b60405180910390f35b34801561041557600080fd5b5061041e610e8b565b60405161042b91906136f8565b60405180910390f35b34801561044057600080fd5b50610449610e91565b60405161045691906137af565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613713565b610ea8565b005b34801561049457600080fd5b506104af60048036038101906104aa9190613673565b61101b565b6040516104bc91906136ce565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190613713565b6110ce565b005b3480156104fa57600080fd5b5061051560048036038101906105109190613912565b61149c565b005b34801561052357600080fd5b5061053e6004803603810190610539919061395b565b6114e3565b005b34801561054c57600080fd5b5061056760048036038101906105629190613713565b61171a565b005b34801561057557600080fd5b50610590600480360381019061058b9190613988565b611828565b005b34801561059e57600080fd5b506105a76119cd565b005b3480156105b557600080fd5b506105be6119d9565b6040516105cb91906136f8565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f69190613713565b6119df565b60405161060891906136f8565b60405180910390f35b34801561061d57600080fd5b50610626611a28565b005b34801561063457600080fd5b5061064f600480360381019061064a9190613713565b611b7b565b60405161065c91906136f8565b60405180910390f35b34801561067157600080fd5b5061067a611bc4565b60405161068791906136f8565b60405180910390f35b34801561069c57600080fd5b506106a5611bca565b6040516106b291906139d7565b60405180910390f35b3480156106c757600080fd5b506106e260048036038101906106dd9190613713565b611bf3565b6040516106ef91906136f8565b60405180910390f35b34801561070457600080fd5b5061070d611c05565b60405161071a919061352f565b60405180910390f35b34801561072f57600080fd5b5061074a60048036038101906107459190613673565b611c97565b60405161075791906136ce565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190613713565b611d64565b60405161079491906136f8565b60405180910390f35b3480156107a957600080fd5b506107c460048036038101906107bf9190613673565b611dc7565b6040516107d191906136ce565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc9190613713565b611e13565b60405161080e91906136f8565b60405180910390f35b34801561082357600080fd5b5061082c611e5c565b6040516108399190613a25565b60405180910390f35b34801561084e57600080fd5b5061086960048036038101906108649190613988565b611e82565b60405161087691906136f8565b60405180910390f35b34801561088b57600080fd5b50610894611f09565b6040516108a191906136f8565b60405180910390f35b3480156108b657600080fd5b506108d160048036038101906108cc919061395b565b611f13565b005b3480156108df57600080fd5b506108fa60048036038101906108f59190613713565b61207a565b005b34801561090857600080fd5b50610923600480360381019061091e9190613713565b61223b565b604051610937989796959493929190613a59565b60405180910390f35b34801561094c57600080fd5b506109676004803603810190610962919061395b565b612549565b60405161097693929190613ad7565b60405180910390f35b6000610989610d79565b1161099357600080fd5b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109f091906139d7565b602060405180830381865afa158015610a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a319190613b23565b9050610a3c346114e3565b6000610aec82601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a9d91906139d7565b602060405180830381865afa158015610aba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ade9190613b23565b61284490919063ffffffff16565b90506000811115610bb157610b41610b02610d79565b610b267001000000000000000000000000000000008461288e90919063ffffffff16565b610b309190613bae565b60015461290890919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651182604051610b8d91906136f8565b60405180910390a2610baa81600b5461290890919063ffffffff16565b600b819055505b5050565b6000479050610bc2611bca565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c07573d6000803e3d6000fd5b5050565b606060088054610c1a90613c0e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4690613c0e565b8015610c935780601f10610c6857610100808354040283529160200191610c93565b820191906000526020600020905b815481529060010190602001808311610c7657829003601f168201915b5050505050905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610cd7610cd0612966565b848461296e565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d749190613b23565b905090565b6000600754905090565b600f6020528060005260406000206000915090505481565b600080610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd490613cb1565b60405180910390fd5b600190509392505050565b6000700100000000000000000000000000000000610e7a610e75600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e67610e62610e51886119df565b60015461288e90919063ffffffff16565b612b37565b612b5490919063ffffffff16565b612b9f565b610e849190613bae565b9050919050565b600e5481565b6000600a60009054906101000a900460ff16905090565b610eb0612966565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3490613d1d565b60405180910390fd5b610f48816000612bb6565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b8152600401610fa391906139d7565b600060405180830381600087803b158015610fbd57600080fd5b505af1158015610fd1573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b60006110c4611028612966565b846110bf8560066000611039612966565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290890919063ffffffff16565b61296e565b6001905092915050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161112b91906139d7565b602060405180830381865afa158015611148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116c9190613b23565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b81526004016111c991906139d7565b602060405180830381865afa1580156111e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120a9190613d69565b6113e157600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bdd4f29f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561127b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129f9190613b23565b8110611343576112af8282612bb6565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b815260040161130c929190613d96565b600060405180830381600087803b15801561132657600080fd5b505af115801561133a573d6000803e3d6000fd5b505050506113dc565b61134e826000612bb6565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016113a991906139d7565b600060405180830381600087803b1580156113c357600080fd5b505af11580156113d7573d6000803e3d6000fd5b505050505b61148c565b60006113ec836119df565b111561148b576113fd826000612bb6565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b815260040161145891906139d7565b600060405180830381600087803b15801561147257600080fd5b505af1158015611486573d6000803e3d6000fd5b505050505b5b611497826001612c23565b505050565b60005b81518110156114df576114cb8282815181106114be576114bd613dbf565b5b60200260200101516110ce565b6001816114d89190613dee565b905061149f565b5050565b6000600267ffffffffffffffff811115611500576114ff6137cf565b5b60405190808252806020026020018201604052801561152e5781602001602082028036833780820191505090505b509050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561159e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c29190613e37565b816000815181106115d6576115d5613dbf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061164757611646613dbf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b81526004016116e49493929190613f5d565b6000604051808303818588803b1580156116fd57600080fd5b505af1158015611711573d6000803e3d6000fd5b50505050505050565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161175a91906139d7565b602060405180830381865afa158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b9190613b23565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6117c1611bca565b836040518363ffffffff1660e01b81526004016117df929190613d96565b6020604051808303816000875af11580156117fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118229190613d69565b50505050565b611831826110ce565b61183a816110ce565b60008060006118d8600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663056278d36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d39190613b23565b612549565b9250925092503273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663056278d36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561198a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ae9190613b23565b6040516119be9493929190613fa9565b60405180910390a35050505050565b6119d633612d80565b50565b60105481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a30612966565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab490613d1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611bfe82611d64565b9050919050565b606060098054611c1490613c0e565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4090613c0e565b8015611c8d5780601f10611c6257610100808354040283529160200191611c8d565b820191906000526020600020905b815481529060010190602001808311611c7057829003601f168201915b5050505050905090565b6000611d5a611ca4612966565b84611d55856040518060600160405280602581526020016146cf6025913960066000611cce612966565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f2f9092919063ffffffff16565b61296e565b6001905092915050565b6000611dc0600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611db284610de8565b61284490919063ffffffff16565b9050919050565b600080611e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0090613cb1565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600e54905090565b611f1b612966565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90613d1d565b60405180910390fd5b610e108110158015611fbd5750620151808111155b611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff390614060565b60405180910390fd5b6010548103612040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612037906140f2565b60405180910390fd5b601054817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060108190555050565b612082612966565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461210f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210690613d1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361217e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217590614184565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b81526004016122a591906139d7565b602060405180830381865afa1580156122c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e691906141d0565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95506000871261249b57600e5487111561233957612332600e5488612f9390919063ffffffff16565b955061249a565b6000600e54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cf9190613b23565b116123db576000612481565b612480600e54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561244e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124729190613b23565b61284490919063ffffffff16565b5b90506124968189612b5490919063ffffffff16565b9650505b5b6124a488611d64565b94506124af88610de8565b9350600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054925060008311612502576000612518565b6125176010548461290890919063ffffffff16565b5b915042821161252857600061253c565b61253b428361284490919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e09190613b23565b9050600081036125fc57600080600e549350935093505061283d565b6000600e5490506000805a90506000805b898410801561261b57508582105b1561282457848061262b906141fd565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561269b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bf9190613b23565b85106126ca57600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b815260040161272791906136f8565b602060405180830381865afa158015612744573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127689190613e37565b90506127b2600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fde565b156127d7576127c2816001612c23565b156127d65781806127d2906141fd565b9250505b5b82806127e2906141fd565b93505060005a90508085111561281a57612817612808828761284490919063ffffffff16565b8761290890919063ffffffff16565b95505b809450505061260d565b84600e819055508181600e549850985098505050505050505b9193909250565b600061288683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f2f565b905092915050565b60008083036128a05760009050612902565b600082846128ae9190614245565b90508284826128bd9190613bae565b146128fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f4906142f9565b60405180910390fd5b809150505b92915050565b60008082846129179190613dee565b90508381101561295c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295390614365565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d4906143f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4390614489565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b2a91906136f8565b60405180910390a3505050565b6000808290506000811215612b4b57600080fd5b80915050919050565b6000808284612b6391906144a9565b905060008312158015612b765750838112155b80612b8c5750600083128015612b8b57508381125b5b612b9557600080fd5b8091505092915050565b600080821215612bae57600080fd5b819050919050565b6000612bc1836119df565b905080821115612bf2576000612be0828461284490919063ffffffff16565b9050612bec8482613011565b50612c1e565b80821015612c1d576000612c0f838361284490919063ffffffff16565b9050612c1b848261324b565b505b5b505050565b600080612c2f84612d80565b90506000811115612d74576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612c91818361290890919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09284604051612d6191906136f8565b60405180910390a3600192505050612d7a565b60009150505b92915050565b600080612d8c83611d64565b90506000811115612f2457612de981600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290890919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d82604051612e7291906136f8565b60405180910390a2601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401612ed792919061450e565b6020604051808303816000875af1158015612ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1a9190613d69565b5080915050612f2a565b60009150505b919050565b6000838311158290612f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6e919061352f565b60405180910390fd5b5060008385612f869190614537565b9050809150509392505050565b6000808284612fa2919061456b565b905060008312158015612fb55750838113155b80612fcb5750600083128015612fca57508381135b5b612fd457600080fd5b8091505092915050565b600042821115612ff1576000905061300c565b601054613007834261284490919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613077906145fa565b60405180910390fd5b6130958160075461290890919063ffffffff16565b6007819055506130ed81600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290890919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161318e91906136f8565b60405180910390a36132046131b66131b18360015461288e90919063ffffffff16565b612b37565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f9390919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b19061468c565b60405180910390fd5b613326816040518060600160405280602281526020016146ad60229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f2f9092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061337e8160075461284490919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133e291906136f8565b60405180910390a361345861340a6134058360015461288e90919063ffffffff16565b612b37565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5490919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134d95780820151818401526020810190506134be565b60008484015250505050565b6000601f19601f8301169050919050565b60006135018261349f565b61350b81856134aa565b935061351b8185602086016134bb565b613524816134e5565b840191505092915050565b6000602082019050818103600083015261354981846134f6565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061359661359161358c84613551565b613571565b613551565b9050919050565b60006135a88261357b565b9050919050565b60006135ba8261359d565b9050919050565b6135ca816135af565b82525050565b60006020820190506135e560008301846135c1565b92915050565b6000604051905090565b600080fd5b600080fd5b600061360a82613551565b9050919050565b61361a816135ff565b811461362557600080fd5b50565b60008135905061363781613611565b92915050565b6000819050919050565b6136508161363d565b811461365b57600080fd5b50565b60008135905061366d81613647565b92915050565b6000806040838503121561368a576136896135f5565b5b600061369885828601613628565b92505060206136a98582860161365e565b9150509250929050565b60008115159050919050565b6136c8816136b3565b82525050565b60006020820190506136e360008301846136bf565b92915050565b6136f28161363d565b82525050565b600060208201905061370d60008301846136e9565b92915050565b600060208284031215613729576137286135f5565b5b600061373784828501613628565b91505092915050565b600080600060608486031215613759576137586135f5565b5b600061376786828701613628565b935050602061377886828701613628565b92505060406137898682870161365e565b9150509250925092565b600060ff82169050919050565b6137a981613793565b82525050565b60006020820190506137c460008301846137a0565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613807826134e5565b810181811067ffffffffffffffff82111715613826576138256137cf565b5b80604052505050565b60006138396135eb565b905061384582826137fe565b919050565b600067ffffffffffffffff821115613865576138646137cf565b5b602082029050602081019050919050565b600080fd5b600061388e6138898461384a565b61382f565b905080838252602082019050602084028301858111156138b1576138b0613876565b5b835b818110156138da57806138c68882613628565b8452602084019350506020810190506138b3565b5050509392505050565b600082601f8301126138f9576138f86137ca565b5b813561390984826020860161387b565b91505092915050565b600060208284031215613928576139276135f5565b5b600082013567ffffffffffffffff811115613946576139456135fa565b5b613952848285016138e4565b91505092915050565b600060208284031215613971576139706135f5565b5b600061397f8482850161365e565b91505092915050565b6000806040838503121561399f5761399e6135f5565b5b60006139ad85828601613628565b92505060206139be85828601613628565b9150509250929050565b6139d1816135ff565b82525050565b60006020820190506139ec60008301846139c8565b92915050565b60006139fd8261357b565b9050919050565b6000613a0f826139f2565b9050919050565b613a1f81613a04565b82525050565b6000602082019050613a3a6000830184613a16565b92915050565b6000819050919050565b613a5381613a40565b82525050565b600061010082019050613a6f600083018b6139c8565b613a7c602083018a613a4a565b613a896040830189613a4a565b613a9660608301886136e9565b613aa360808301876136e9565b613ab060a08301866136e9565b613abd60c08301856136e9565b613aca60e08301846136e9565b9998505050505050505050565b6000606082019050613aec60008301866136e9565b613af960208301856136e9565b613b0660408301846136e9565b949350505050565b600081519050613b1d81613647565b92915050565b600060208284031215613b3957613b386135f5565b5b6000613b4784828501613b0e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bb98261363d565b9150613bc48361363d565b925082613bd457613bd3613b50565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c2657607f821691505b602082108103613c3957613c38613bdf565b5b50919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b6000613c9b6028836134aa565b9150613ca682613c3f565b604082019050919050565b60006020820190508181036000830152613cca81613c8e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d076020836134aa565b9150613d1282613cd1565b602082019050919050565b60006020820190508181036000830152613d3681613cfa565b9050919050565b613d46816136b3565b8114613d5157600080fd5b50565b600081519050613d6381613d3d565b92915050565b600060208284031215613d7f57613d7e6135f5565b5b6000613d8d84828501613d54565b91505092915050565b6000604082019050613dab60008301856139c8565b613db860208301846136e9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613df98261363d565b9150613e048361363d565b9250828201905080821115613e1c57613e1b613b7f565b5b92915050565b600081519050613e3181613611565b92915050565b600060208284031215613e4d57613e4c6135f5565b5b6000613e5b84828501613e22565b91505092915050565b6000819050919050565b6000613e89613e84613e7f84613e64565b613571565b61363d565b9050919050565b613e9981613e6e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ed4816135ff565b82525050565b6000613ee68383613ecb565b60208301905092915050565b6000602082019050919050565b6000613f0a82613e9f565b613f148185613eaa565b9350613f1f83613ebb565b8060005b83811015613f50578151613f378882613eda565b9750613f4283613ef2565b925050600181019050613f23565b5085935050505092915050565b6000608082019050613f726000830187613e90565b8181036020830152613f848186613eff565b9050613f9360408301856139c8565b613fa060608301846136e9565b95945050505050565b6000608082019050613fbe60008301876136e9565b613fcb60208301866136e9565b613fd860408301856136e9565b613fe560608301846136e9565b95945050505050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b600061404a6033836134aa565b915061405582613fee565b604082019050919050565b600060208201905081810360008301526140798161403d565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b60006140dc6025836134aa565b91506140e782614080565b604082019050919050565b6000602082019050818103600083015261410b816140cf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061416e6026836134aa565b915061417982614112565b604082019050919050565b6000602082019050818103600083015261419d81614161565b9050919050565b6141ad81613a40565b81146141b857600080fd5b50565b6000815190506141ca816141a4565b92915050565b6000602082840312156141e6576141e56135f5565b5b60006141f4848285016141bb565b91505092915050565b60006142088261363d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361423a57614239613b7f565b5b600182019050919050565b60006142508261363d565b915061425b8361363d565b92508282026142698161363d565b915082820484148315176142805761427f613b7f565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006142e36021836134aa565b91506142ee82614287565b604082019050919050565b60006020820190508181036000830152614312816142d6565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061434f601b836134aa565b915061435a82614319565b602082019050919050565b6000602082019050818103600083015261437e81614342565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143e16024836134aa565b91506143ec82614385565b604082019050919050565b60006020820190508181036000830152614410816143d4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144736022836134aa565b915061447e82614417565b604082019050919050565b600060208201905081810360008301526144a281614466565b9050919050565b60006144b482613a40565b91506144bf83613a40565b9250828201905082811215600083121683821260008412151617156144e7576144e6613b7f565b5b92915050565b60006144f88261359d565b9050919050565b614508816144ed565b82525050565b600060408201905061452360008301856144ff565b61453060208301846136e9565b9392505050565b60006145428261363d565b915061454d8361363d565b925082820390508181111561456557614564613b7f565b5b92915050565b600061457682613a40565b915061458183613a40565b92508282039050818112600084121682821360008512151617156145a8576145a7613b7f565b5b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006145e4601f836134aa565b91506145ef826145ae565b602082019050919050565b60006020820190508181036000830152614613816145d7565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006146766021836134aa565b91506146818261461a565b604082019050919050565b600060208201905081810360008301526146a581614669565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220808a643158904282d75ee03c0fead45d9a3a1b80f6db3789a65a112984cc1c4064736f6c63430008110033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b9250828203905081811115610a4e57610a4d6109f1565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212208792efe834fca9d04f7b9775b6848ca8c0d452231842eec5fe976dd1a8b4392764736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a484f415244434841494e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000448524443000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000db5bba727e9e617fa6d8f9ecc805dfa27829bcb4000000000000000000000000e433a7b2ad6c47a6b1e6711f934c6af86f32d7a70000000000000000000000006a50ac98338bed2e28c43592c2468bc88b0f68310000000000000000000000009f1448826757e3e7c984ff8dedc2f62304c6ad2b000000000000000000000000c482e558d3309d7b7bb8e3f2e4d50781d25deb5800000000000000000000000046a52364f331fc0227aa704ee861553a0325f109

Deployed Bytecode

0x6080604052600436106102765760003560e01c806363373b871161014f57806397995706116100c1578063c3a438241161007a578063c3a438241461093a578063dd62ed3e14610965578063e01af92c146109a2578063e7dad4f9146109cb578063f2fde38b14610a08578063ffb54a9914610a315761027d565b806397995706146108185780639b0e2e8614610843578063a457c2d71461086c578063a9059cbb146108a9578063b2abbbc4146108e6578063bdd4f29f1461090f5761027d565b806371cd56af1161011357806371cd56af1461071e57806381230a831461074757806385d4787b14610770578063871c128d146107995780638da5cb5b146107c257806395d89b41146107ed5761027d565b806363373b871461064b5780636c0a24eb146106745780636ddd17131461069f57806370a08231146106ca578063715018a6146107075761027d565b80632c1f5216116101e8578063441d801f116101ac578063441d801f1461054f57806348c54b9d1461057857806349bd5a5e1461058f5780635342acb4146105ba57806354a5df1f146105f75780635ebf4db9146106225761027d565b80632c1f5216146104685780632f4a7e5114610493578063313ce567146104bc57806339509351146104e75780633ad10ef6146105245761027d565b80630e8322731161023a5780630e832273146103585780631694505e1461039557806318160ddd146103c057806323b872dd146103eb57806327a14fc214610428578063280d3821146104515761027d565b8063056278d31461028257806306e99fef146102ad57806306fdde03146102c4578063095ea7b3146102ef5780630ddc09761461032c5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a5c565b6040516102a491906135b5565b60405180910390f35b3480156102b957600080fd5b506102c2610a66565b005b3480156102d057600080fd5b506102d9610b51565b6040516102e69190613660565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190613720565b610be3565b604051610323919061377b565b60405180910390f35b34801561033857600080fd5b50610341610c01565b60405161034f929190613796565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a91906137bf565b610c13565b60405161038c919061377b565b60405180910390f35b3480156103a157600080fd5b506103aa610c69565b6040516103b7919061384b565b60405180910390f35b3480156103cc57600080fd5b506103d5610c8f565b6040516103e291906135b5565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190613866565b610c99565b60405161041f919061377b565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a91906138b9565b610d72565b005b34801561045d57600080fd5b50610466610e20565b005b34801561047457600080fd5b5061047d610f0b565b60405161048a9190613919565b60405180910390f35b34801561049f57600080fd5b506104ba60048036038101906104b591906138b9565b610f31565b005b3480156104c857600080fd5b506104d1610fd0565b6040516104de9190613950565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613720565b610fe7565b60405161051b919061377b565b60405180910390f35b34801561053057600080fd5b5061053961109a565b604051610546919061397a565b60405180910390f35b34801561055b57600080fd5b5061057660048036038101906105719190613a26565b6110c0565b005b34801561058457600080fd5b5061058d611165565b005b34801561059b57600080fd5b506105a46111b7565b6040516105b1919061397a565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc91906137bf565b6111dd565b6040516105ee919061377b565b60405180910390f35b34801561060357600080fd5b5061060c611233565b60405161061991906135b5565b60405180910390f35b34801561062e57600080fd5b50610649600480360381019061064491906138b9565b611239565b005b34801561065757600080fd5b50610672600480360381019061066d91906137bf565b6112fe565b005b34801561068057600080fd5b5061068961140c565b60405161069691906135b5565b60405180910390f35b3480156106ab57600080fd5b506106b4611412565b6040516106c1919061377b565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec91906137bf565b611425565b6040516106fe91906135b5565b60405180910390f35b34801561071357600080fd5b5061071c61146e565b005b34801561072a57600080fd5b5061074560048036038101906107409190613a26565b6115c1565b005b34801561075357600080fd5b5061076e60048036038101906107699190613a86565b611666565b005b34801561077c57600080fd5b5061079760048036038101906107929190613c04565b611713565b005b3480156107a557600080fd5b506107c060048036038101906107bb91906138b9565b6117b6565b005b3480156107ce57600080fd5b506107d7611899565b6040516107e4919061397a565b60405180910390f35b3480156107f957600080fd5b506108026118c2565b60405161080f9190613660565b60405180910390f35b34801561082457600080fd5b5061082d611954565b60405161083a91906135b5565b60405180910390f35b34801561084f57600080fd5b5061086a60048036038101906108659190613c04565b611b97565b005b34801561087857600080fd5b50610893600480360381019061088e9190613720565b611c3a565b6040516108a0919061377b565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190613720565b611d07565b6040516108dd919061377b565b60405180910390f35b3480156108f257600080fd5b5061090d600480360381019061090891906138b9565b611d25565b005b34801561091b57600080fd5b50610924611dc4565b60405161093191906135b5565b60405180910390f35b34801561094657600080fd5b5061094f611dce565b60405161095c91906135b5565b60405180910390f35b34801561097157600080fd5b5061098c60048036038101906109879190613c4d565b611dd4565b60405161099991906135b5565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c49190613c8d565b611e5b565b005b3480156109d757600080fd5b506109f260048036038101906109ed91906137bf565b611f0d565b6040516109ff919061377b565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a91906137bf565b611f63565b005b348015610a3d57600080fd5b50610a46612124565b604051610a53919061377b565b60405180910390f35b6000600f54905090565b610a6e612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af290613d06565b60405180910390fd5b6000479050610b08611899565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b4d573d6000803e3d6000fd5b5050565b606060088054610b6090613d55565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8c90613d55565b8015610bd95780601f10610bae57610100808354040283529160200191610bd9565b820191906000526020600020905b815481529060010190602001808311610bbc57829003601f168201915b5050505050905090565b6000610bf7610bf0612137565b848461213f565b6001905092915050565b60148060000154908060010154905082565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b54905090565b6000610ca6848484612308565b610d6784610cb2612137565b610d6285604051806060016040528060288152602001614ac260289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d18612137565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129329092919063ffffffff16565b61213f565b600190509392505050565b610d7a612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613d06565b60405180910390fd5b633b9aca0081610e179190613db5565b600e8190555050565b610e28612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90613d06565b60405180910390fd5b6000479050610ec2611899565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f07573d6000803e3d6000fd5b5050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f39612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90613d06565b60405180910390fd5b8060128190555050565b6000600a60009054906101000a900460ff16905090565b6000611090610ff4612137565b8461108b8560046000611005612137565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299690919063ffffffff16565b61213f565b6001905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110c8612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c90613d06565b60405180910390fd5b6111608383836129f4565b505050565b600061117030611425565b905060008111156111b457600c60009054906101000a900460ff161580156111a45750600c60019054906101000a900460ff165b156111b3576111b281612a9f565b5b5b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600d5481565b611241612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c590613d06565b60405180910390fd5b600a60009054906101000a900460ff16600a6112ea9190613f2a565b816112f59190613db5565b60108190555050565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161133e919061397a565b602060405180830381865afa15801561135b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137f9190613f8a565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6113a5611899565b836040518363ffffffff1660e01b81526004016113c3929190613fb7565b6020604051808303816000875af11580156113e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114069190613ff5565b50505050565b600e5481565b600c60019054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611476612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fa90613d06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115c9612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d90613d06565b60405180910390fd5b611661838383612ce2565b505050565b61166e612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f290613d06565b60405180910390fd5b81601460000181905550806014600101819055505050565b61171b612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90613d06565b60405180910390fd5b6117b3816001612d8d565b50565b6117be612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184290613d06565b60405180910390fd5b600f54810361188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690614094565b60405180910390fd5b80600f8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600980546118d190613d55565b80601f01602080910402602001604051908101604052809291908181526020018280546118fd90613d55565b801561194a5780601f1061191f5761010080835404028352916020019161194a565b820191906000526020600020905b81548152906001019060200180831161192d57829003601f168201915b5050505050905090565b600080600267ffffffffffffffff81111561197257611971613ac6565b5b6040519080825280602002602001820160405280156119a05781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3491906140c9565b81600081518110611a4857611a476140f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110611a9757611a966140f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f600d54836040518363ffffffff1660e01b8152600401611b309291906141e3565b600060405180830381865afa158015611b4d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611b7691906142d6565b600181518110611b8957611b886140f6565b5b602002602001015191505090565b611b9f612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2390613d06565b60405180910390fd5b611c37816000612d8d565b50565b6000611cfd611c47612137565b84611cf885604051806060016040528060258152602001614aea6025913960046000611c71612137565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129329092919063ffffffff16565b61213f565b6001905092915050565b6000611d1b611d14612137565b8484612308565b6001905092915050565b611d2d612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190613d06565b60405180910390fd5b80600d8190555050565b6000601054905090565b60125481565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e63612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee790613d06565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611f6b612137565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ff8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fef90613d06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205e90614391565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60029054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a590614423565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361221d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612214906144b5565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122fb91906135b5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236e90614547565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd906145d9565b60405180910390fd5b60008111612429576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124209061466b565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124d05750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561250f57506124df611899565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561254e575061251e611899565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b9050600061256d8461255f87611425565b61299690919063ffffffff16565b9050612577611899565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156125e557506125b5611899565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156126ce57600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561268e5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c4906146fd565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361276957600e54811115612768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275f9061478f565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156128145750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b156128265760019250612825612e84565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156128d25750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561291d57600e5481111561291c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129139061478f565b60405180910390fd5b5b61292a8686868587612eef565b505050505050565b600083831115829061297a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129719190613660565b60405180910390fd5b506000838561298991906147af565b9050809150509392505050565b60008082846129a591906147e3565b9050838110156129ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e190614863565b60405180910390fd5b8091505092915050565b60005b83839050811015612a99576000848483818110612a1757612a166140f6565b5b9050602002016020810190612a2c91906137bf565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080612a9190614883565b9150506129f7565b50505050565b6000600267ffffffffffffffff811115612abc57612abb613ac6565b5b604051908082528060200260200182016040528015612aea5781602001602082028036833780820191505090505b5090503081600081518110612b0257612b016140f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd91906140c9565b81600181518110612be157612be06140f6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c4830600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461213f565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612cac959493929190614906565b600060405180830381600087803b158015612cc657600080fd5b505af1158015612cda573d6000803e3d6000fd5b505050505050565b60005b83839050811015612d87576000848483818110612d0557612d046140f6565b5b9050602002016020810190612d1a91906137bf565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080612d7f90614883565b915050612ce5565b50505050565b60005b8251811015612e7f576000838281518110612dae57612dad6140f6565b5b602002602001015190508215612e1b576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612e6b565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b508080612e7790614883565b915050612d90565b505050565b6000612e8f30611425565b90506000811115612eec576000612ea4611954565b9050808210158015612ec35750600c60009054906101000a900460ff16155b8015612edb5750600c60019054906101000a900460ff165b15612eea57612ee981613235565b5b505b50565b600082612efd576000612f29565b612f286064612f1a6014600001548761335b90919063ffffffff16565b6133d590919063ffffffff16565b5b9050828015612f355750815b15612f6857612f656064612f576014600101548761335b90919063ffffffff16565b6133d590919063ffffffff16565b90505b6000612f7d828661341f90919063ffffffff16565b9050612fd185600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461341f90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061306681600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299690919063ffffffff16565b600360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130fb82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299690919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161319b91906135b5565b60405180910390a3601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369d9ec8f88886040518363ffffffff1660e01b8152600401613200929190614960565b600060405180830381600087803b15801561321a57600080fd5b505af192505050801561322b575060015b5050505050505050565b6001600c60006101000a81548160ff02191690831515021790555061325981612a9f565b6000479050600061329b600261328d606461327f6012548761335b90919063ffffffff16565b6133d590919063ffffffff16565b6133d590919063ffffffff16565b905060006132b2828461341f90919063ffffffff16565b9050600082111561332757601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613325573d6000803e3d6000fd5b505b600081111561333a5761333981613469565b5b5050506000600c60006101000a81548160ff02191690831515021790555050565b600080830361336d57600090506133cf565b6000828461337b9190613db5565b905082848261338a91906149b8565b146133ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c190614a5b565b60405180910390fd5b809150505b92915050565b600061341783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613539565b905092915050565b600061346183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612932565b905092915050565b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516134b190614aac565b60006040518083038185875af1925050503d80600081146134ee576040519150601f19603f3d011682016040523d82523d6000602084013e6134f3565b606091505b505090508015613535577fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b18260405161352c91906135b5565b60405180910390a15b5050565b60008083118290613580576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135779190613660565b60405180910390fd5b506000838561358f91906149b8565b9050809150509392505050565b6000819050919050565b6135af8161359c565b82525050565b60006020820190506135ca60008301846135a6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561360a5780820151818401526020810190506135ef565b60008484015250505050565b6000601f19601f8301169050919050565b6000613632826135d0565b61363c81856135db565b935061364c8185602086016135ec565b61365581613616565b840191505092915050565b6000602082019050818103600083015261367a8184613627565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136c182613696565b9050919050565b6136d1816136b6565b81146136dc57600080fd5b50565b6000813590506136ee816136c8565b92915050565b6136fd8161359c565b811461370857600080fd5b50565b60008135905061371a816136f4565b92915050565b600080604083850312156137375761373661368c565b5b6000613745858286016136df565b92505060206137568582860161370b565b9150509250929050565b60008115159050919050565b61377581613760565b82525050565b6000602082019050613790600083018461376c565b92915050565b60006040820190506137ab60008301856135a6565b6137b860208301846135a6565b9392505050565b6000602082840312156137d5576137d461368c565b5b60006137e3848285016136df565b91505092915050565b6000819050919050565b600061381161380c61380784613696565b6137ec565b613696565b9050919050565b6000613823826137f6565b9050919050565b600061383582613818565b9050919050565b6138458161382a565b82525050565b6000602082019050613860600083018461383c565b92915050565b60008060006060848603121561387f5761387e61368c565b5b600061388d868287016136df565b935050602061389e868287016136df565b92505060406138af8682870161370b565b9150509250925092565b6000602082840312156138cf576138ce61368c565b5b60006138dd8482850161370b565b91505092915050565b60006138f1826137f6565b9050919050565b6000613903826138e6565b9050919050565b613913816138f8565b82525050565b600060208201905061392e600083018461390a565b92915050565b600060ff82169050919050565b61394a81613934565b82525050565b60006020820190506139656000830184613941565b92915050565b613974816136b6565b82525050565b600060208201905061398f600083018461396b565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126139ba576139b9613995565b5b8235905067ffffffffffffffff8111156139d7576139d661399a565b5b6020830191508360208202830111156139f3576139f261399f565b5b9250929050565b613a0381613760565b8114613a0e57600080fd5b50565b600081359050613a20816139fa565b92915050565b600080600060408486031215613a3f57613a3e61368c565b5b600084013567ffffffffffffffff811115613a5d57613a5c613691565b5b613a69868287016139a4565b93509350506020613a7c86828701613a11565b9150509250925092565b60008060408385031215613a9d57613a9c61368c565b5b6000613aab8582860161370b565b9250506020613abc8582860161370b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613afe82613616565b810181811067ffffffffffffffff82111715613b1d57613b1c613ac6565b5b80604052505050565b6000613b30613682565b9050613b3c8282613af5565b919050565b600067ffffffffffffffff821115613b5c57613b5b613ac6565b5b602082029050602081019050919050565b6000613b80613b7b84613b41565b613b26565b90508083825260208201905060208402830185811115613ba357613ba261399f565b5b835b81811015613bcc5780613bb888826136df565b845260208401935050602081019050613ba5565b5050509392505050565b600082601f830112613beb57613bea613995565b5b8135613bfb848260208601613b6d565b91505092915050565b600060208284031215613c1a57613c1961368c565b5b600082013567ffffffffffffffff811115613c3857613c37613691565b5b613c4484828501613bd6565b91505092915050565b60008060408385031215613c6457613c6361368c565b5b6000613c72858286016136df565b9250506020613c83858286016136df565b9150509250929050565b600060208284031215613ca357613ca261368c565b5b6000613cb184828501613a11565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613cf06020836135db565b9150613cfb82613cba565b602082019050919050565b60006020820190508181036000830152613d1f81613ce3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d6d57607f821691505b602082108103613d8057613d7f613d26565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dc08261359c565b9150613dcb8361359c565b9250828202613dd98161359c565b91508282048414831517613df057613def613d86565b5b5092915050565b60008160011c9050919050565b6000808291508390505b6001851115613e4e57808604811115613e2a57613e29613d86565b5b6001851615613e395780820291505b8081029050613e4785613df7565b9450613e0e565b94509492505050565b600082613e675760019050613f23565b81613e755760009050613f23565b8160018114613e8b5760028114613e9557613ec4565b6001915050613f23565b60ff841115613ea757613ea6613d86565b5b8360020a915084821115613ebe57613ebd613d86565b5b50613f23565b5060208310610133831016604e8410600b8410161715613ef95782820a905083811115613ef457613ef3613d86565b5b613f23565b613f068484846001613e04565b92509050818404811115613f1d57613f1c613d86565b5b81810290505b9392505050565b6000613f358261359c565b9150613f4083613934565b9250613f6d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613e57565b905092915050565b600081519050613f84816136f4565b92915050565b600060208284031215613fa057613f9f61368c565b5b6000613fae84828501613f75565b91505092915050565b6000604082019050613fcc600083018561396b565b613fd960208301846135a6565b9392505050565b600081519050613fef816139fa565b92915050565b60006020828403121561400b5761400a61368c565b5b600061401984828501613fe0565b91505092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b600061407e602c836135db565b915061408982614022565b604082019050919050565b600060208201905081810360008301526140ad81614071565b9050919050565b6000815190506140c3816136c8565b92915050565b6000602082840312156140df576140de61368c565b5b60006140ed848285016140b4565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61415a816136b6565b82525050565b600061416c8383614151565b60208301905092915050565b6000602082019050919050565b600061419082614125565b61419a8185614130565b93506141a583614141565b8060005b838110156141d65781516141bd8882614160565b97506141c883614178565b9250506001810190506141a9565b5085935050505092915050565b60006040820190506141f860008301856135a6565b818103602083015261420a8184614185565b90509392505050565b600067ffffffffffffffff82111561422e5761422d613ac6565b5b602082029050602081019050919050565b600061425261424d84614213565b613b26565b905080838252602082019050602084028301858111156142755761427461399f565b5b835b8181101561429e578061428a8882613f75565b845260208401935050602081019050614277565b5050509392505050565b600082601f8301126142bd576142bc613995565b5b81516142cd84826020860161423f565b91505092915050565b6000602082840312156142ec576142eb61368c565b5b600082015167ffffffffffffffff81111561430a57614309613691565b5b614316848285016142a8565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061437b6026836135db565b91506143868261431f565b604082019050919050565b600060208201905081810360008301526143aa8161436e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061440d6024836135db565b9150614418826143b1565b604082019050919050565b6000602082019050818103600083015261443c81614400565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061449f6022836135db565b91506144aa82614443565b604082019050919050565b600060208201905081810360008301526144ce81614492565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145316025836135db565b915061453c826144d5565b604082019050919050565b6000602082019050818103600083015261456081614524565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145c36023836135db565b91506145ce82614567565b604082019050919050565b600060208201905081810360008301526145f2816145b6565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006146556029836135db565b9150614660826145f9565b604082019050919050565b6000602082019050818103600083015261468481614648565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b60006146e7602f836135db565b91506146f28261468b565b604082019050919050565b60006020820190508181036000830152614716816146da565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006147796025836135db565b91506147848261471d565b604082019050919050565b600060208201905081810360008301526147a88161476c565b9050919050565b60006147ba8261359c565b91506147c58361359c565b92508282039050818111156147dd576147dc613d86565b5b92915050565b60006147ee8261359c565b91506147f98361359c565b925082820190508082111561481157614810613d86565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061484d601b836135db565b915061485882614817565b602082019050919050565b6000602082019050818103600083015261487c81614840565b9050919050565b600061488e8261359c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148c0576148bf613d86565b5b600182019050919050565b6000819050919050565b60006148f06148eb6148e6846148cb565b6137ec565b61359c565b9050919050565b614900816148d5565b82525050565b600060a08201905061491b60008301886135a6565b61492860208301876148f7565b818103604083015261493a8186614185565b9050614949606083018561396b565b61495660808301846135a6565b9695505050505050565b6000604082019050614975600083018561396b565b614982602083018461396b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149c38261359c565b91506149ce8361359c565b9250826149de576149dd614989565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a456021836135db565b9150614a50826149e9565b604082019050919050565b60006020820190508181036000830152614a7481614a38565b9050919050565b600081905092915050565b50565b6000614a96600083614a7b565b9150614aa182614a86565b600082019050919050565b6000614ab782614a89565b915081905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122045a0b19311bd393f8e82594aa4b00d496f262dd0b69854836241b7aa97f54a4964736f6c63430008110033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a484f415244434841494e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000448524443000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000db5bba727e9e617fa6d8f9ecc805dfa27829bcb4000000000000000000000000e433a7b2ad6c47a6b1e6711f934c6af86f32d7a70000000000000000000000006a50ac98338bed2e28c43592c2468bc88b0f68310000000000000000000000009f1448826757e3e7c984ff8dedc2f62304c6ad2b000000000000000000000000c482e558d3309d7b7bb8e3f2e4d50781d25deb5800000000000000000000000046a52364f331fc0227aa704ee861553a0325f109

-----Decoded View---------------
Arg [0] : name_ (string): HOARDCHAIN
Arg [1] : symbol_ (string): HRDC
Arg [2] : excludeAddresses (address[]): 0xdb5BBa727E9E617Fa6D8F9ecc805DFa27829BCB4,0xe433a7B2Ad6C47a6B1E6711f934C6aF86f32D7a7,0x6a50AC98338BED2e28c43592c2468bc88B0f6831,0x9f1448826757e3e7c984FF8deDC2f62304C6Ad2b,0xC482E558d3309d7b7Bb8e3f2E4D50781D25dEB58,0x46A52364F331fC0227aA704Ee861553A0325f109

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 484f415244434841494e00000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 4852444300000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [8] : 000000000000000000000000db5bba727e9e617fa6d8f9ecc805dfa27829bcb4
Arg [9] : 000000000000000000000000e433a7b2ad6c47a6b1e6711f934c6af86f32d7a7
Arg [10] : 0000000000000000000000006a50ac98338bed2e28c43592c2468bc88b0f6831
Arg [11] : 0000000000000000000000009f1448826757e3e7c984ff8dedc2f62304c6ad2b
Arg [12] : 000000000000000000000000c482e558d3309d7b7bb8e3f2e4d50781d25deb58
Arg [13] : 00000000000000000000000046a52364f331fc0227aa704ee861553a0325f109


Deployed Bytecode Sourcemap

19385:12944:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29945:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28615:147;;;;;;;;;;;;;:::i;:::-;;21847:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22680:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20875:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;24270:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19603:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22124:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22849:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23673:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30773:161;;;;;;;;;;;;;:::i;:::-;;20904:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24152:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22033:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23170:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20614:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23818:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29014:273;;;;;;;;;;;;;:::i;:::-;;19716:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26706:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20305:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26180:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28770:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20371:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20230:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22227:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17745:148;;;;;;;;;;;;;:::i;:::-;;23987:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25030:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25305:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29728:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17109:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21938:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26423:275;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25441:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23396:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22354:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24656:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26040:132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20773:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22529:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25935:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25188:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18048:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20267:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29945:102;29996:7;30023:16;;30016:23;;29945:102;:::o;28615:147::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28664:18:::1;28685:21;28664:42;;28725:7;:5;:7::i;:::-;28717:25;;:37;28743:10;28717:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28653:109;28615:147::o:0;21847:83::-;21884:13;21917:5;21910:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21847:83;:::o;22680:161::-;22755:4;22772:39;22781:12;:10;:12::i;:::-;22795:7;22804:6;22772:8;:39::i;:::-;22829:4;22822:11;;22680:161;;;;:::o;20875:22::-;;;;;;;;;;;;;;:::o;24270:126::-;24336:4;24360:22;:28;24383:4;24360:28;;;;;;;;;;;;;;;;;;;;;;;;;24353:35;;24270:126;;;:::o;19603:106::-;;;;;;;;;;;;;:::o;22124:95::-;22177:7;22204;;22197:14;;22124:95;:::o;22849:313::-;22947:4;22964:36;22974:6;22982:9;22993:6;22964:9;:36::i;:::-;23011:121;23020:6;23028:12;:10;:12::i;:::-;23042:89;23080:6;23042:89;;;;;;;;;;;;;;;;;:11;:19;23054:6;23042:19;;;;;;;;;;;;;;;:33;23062:12;:10;:12::i;:::-;23042:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23011:8;:121::i;:::-;23150:4;23143:11;;22849:313;;;;;:::o;23673:137::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23795:7:::1;23777:15;:25;;;;:::i;:::-;23758:16;:44;;;;23673:137:::0;:::o;30773:161::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30836:18:::1;30857:21;30836:42;;30897:7;:5;:7::i;:::-;30889:25;;:37;30915:10;30889:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30825:109;30773:161::o:0;20904:38::-;;;;;;;;;;;;;:::o;24152:110::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24244:10:::1;24228:13;:26;;;;24152:110:::0;:::o;22033:83::-;22074:5;22099:9;;;;;;;;;;;22092:16;;22033:83;:::o;23170:218::-;23258:4;23275:83;23284:12;:10;:12::i;:::-;23298:7;23307:50;23346:10;23307:11;:25;23319:12;:10;:12::i;:::-;23307:25;;;;;;;;;;;;;;;:34;23333:7;23307:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23275:8;:83::i;:::-;23376:4;23369:11;;23170:218;;;;:::o;20614:70::-;;;;;;;;;;;;;:::o;23818:161::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23930:41:::1;23943:9;;23954:16;23930:12;:41::i;:::-;23818:161:::0;;;:::o;29014:273::-;29057:28;29088:24;29106:4;29088:9;:24::i;:::-;29057:55;;29150:1;29127:20;:24;29123:157;;;29173:6;;;;;;;;;;;29172:7;:22;;;;;29183:11;;;;;;;;;;;29172:22;29168:101;;;29215:38;29232:20;29215:16;:38::i;:::-;29168:101;29123:157;29046:241;29014:273::o;19716:41::-;;;;;;;;;;;;;:::o;26706:124::-;26771:4;26795:18;:27;26814:7;26795:27;;;;;;;;;;;;;;;;;;;;;;;;;26788:34;;26706:124;;;:::o;20305:50::-;;;;:::o;26180:198::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26360:9:::1;;;;;;;;;;;26354:2;:15;;;;:::i;:::-;26324:26;:46;;;;:::i;:::-;26290:31;:80;;;;26180:198:::0;:::o;28770:236::-;28843:17;28870:15;28843:43;;28897:15;28915:10;:20;;;28944:4;28915:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28897:53;;28961:10;:19;;;28981:7;:5;:7::i;:::-;28990;28961:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28832:174;;28770:236;:::o;20371:61::-;;;;:::o;20230:30::-;;;;;;;;;;;;;:::o;22227:119::-;22293:7;22320:9;:18;22330:7;22320:18;;;;;;;;;;;;;;;;22313:25;;22227:119;;;:::o;17745:148::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17852:1:::1;17815:40;;17836:6;::::0;::::1;;;;;;;;17815:40;;;;;;;;;;;;17883:1;17866:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17745:148::o:0;23987:157::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24097:39:::1;24114:9;;24125:10;24097:16;:39::i;:::-;23987:157:::0;;;:::o;25030:150::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25130:6:::1;25113:7;:14;;:23;;;;25165:7;25147;:15;;:25;;;;25030:150:::0;;:::o;25305:128::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25389:36:::1;25409:9;25420:4;25389:19;:36::i;:::-;25305:128:::0;:::o;29728:209::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29826:16:::1;;29814:8;:28:::0;29806:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;29921:8;29902:16;:27;;;;29728:209:::0;:::o;17109:79::-;17147:7;17174:6;;;;;;;;;;;17167:13;;17109:79;:::o;21938:87::-;21977:13;22010:7;22003:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21938:87;:::o;26423:275::-;26480:7;26501:21;26539:1;26525:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26501:40;;26562:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26552:4;26557:1;26552:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26613:4;26595;26600:1;26595:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26636:15;;;;;;;;;;;:29;;;26666:14;;26682:4;26636:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26688:1;26636:54;;;;;;;;:::i;:::-;;;;;;;;26629:61;;;26423:275;:::o;25441:131::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25527:37:::1;25547:9;25558:5;25527:19;:37::i;:::-;25441:131:::0;:::o;23396:269::-;23489:4;23506:129;23515:12;:10;:12::i;:::-;23529:7;23538:96;23577:15;23538:96;;;;;;;;;;;;;;;;;:11;:25;23550:12;:10;:12::i;:::-;23538:25;;;;;;;;;;;;;;;:34;23564:7;23538:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;23506:8;:129::i;:::-;23653:4;23646:11;;23396:269;;;;:::o;22354:167::-;22432:4;22449:42;22459:12;:10;:12::i;:::-;22473:9;22484:6;22449:9;:42::i;:::-;22509:4;22502:11;;22354:167;;;;:::o;24656:122::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24755:15:::1;24738:14;:32;;;;24656:122:::0;:::o;26040:132::-;26106:7;26133:31;;26126:38;;26040:132;:::o;20773:34::-;;;;:::o;22529:143::-;22610:7;22637:11;:18;22649:5;22637:18;;;;;;;;;;;;;;;:27;22656:7;22637:27;;;;;;;;;;;;;;;;22630:34;;22529:143;;;;:::o;25935:97::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26016:8:::1;26002:11;;:22;;;;;;;;;;;;;;;;;;25935:97:::0;:::o;25188:109::-;25249:4;25273:10;:16;25284:4;25273:16;;;;;;;;;;;;;;;;;;;;;;;;;25266:23;;25188:109;;;:::o;18048:244::-;17331:12;:10;:12::i;:::-;17321:22;;:6;;;;;;;;;;:22;;;17313:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18157:1:::1;18137:22;;:8;:22;;::::0;18129:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18247:8;18218:38;;18239:6;::::0;::::1;;;;;;;;18218:38;;;;;;;;;;;;18276:8;18267:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18048:244:::0;:::o;20267:31::-;;;;;;;;;;;;;:::o;9597:98::-;9650:7;9677:10;9670:17;;9597:98;:::o;26842:337::-;26952:1;26935:19;;:5;:19;;;26927:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27033:1;27014:21;;:7;:21;;;27006:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27117:6;27087:11;:18;27099:5;27087:18;;;;;;;;;;;;;;;:27;27106:7;27087:27;;;;;;;;;;;;;;;:36;;;;27155:7;27139:32;;27148:5;27139:32;;;27164:6;27139:32;;;;;;:::i;:::-;;;;;;;;26842:337;;;:::o;27187:1420::-;27291:1;27275:18;;:4;:18;;;27267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27368:1;27354:16;;:2;:16;;;27346:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27438:1;27429:6;:10;27421:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27496:11;27526:13;27543:18;:24;27562:4;27543:24;;;;;;;;;;;;;;;;;;;;;;;;;27542:25;:52;;;;;27572:18;:22;27591:2;27572:22;;;;;;;;;;;;;;;;;;;;;;;;;27571:23;27542:52;:71;;;;;27606:7;:5;:7::i;:::-;27598:15;;:4;:15;;;;27542:71;:88;;;;;27623:7;:5;:7::i;:::-;27617:13;;:2;:13;;;;27542:88;27526:104;;27641:21;27665:25;27683:6;27665:13;27675:2;27665:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;27641:49;;27802:7;:5;:7::i;:::-;27794:15;;:4;:15;;;;:32;;;;;27819:7;:5;:7::i;:::-;27813:13;;:2;:13;;;;27794:32;27790:161;;;27852:10;:16;27863:4;27852:16;;;;;;;;;;;;;;;;;;;;;;;;;27851:17;:36;;;;;27873:10;:14;27884:2;27873:14;;;;;;;;;;;;;;;;;;;;;;;;;27872:15;27851:36;27843:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;27790:161;27973:13;;;;;;;;;;;27965:21;;:4;:21;;;27961:137;;28028:16;;28011:13;:33;;28003:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27961:137;28120:13;;;;;;;;;;;28112:21;;:4;:21;;;;:44;;;;;28143:13;;;;;;;;;;;28137:19;;:2;:19;;;28112:44;28108:189;;;28251:4;28242:13;;28270:15;:13;:15::i;:::-;28108:189;28319:13;;;;;;;;;;;28311:21;;:4;:21;;;;:44;;;;;28342:13;;;;;;;;;;;28336:19;;:2;:19;;;;28311:44;28307:160;;;28397:16;;28380:13;:33;;28372:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;28307:160;28549:50;28564:4;28570:2;28574:6;28582:8;28592:6;28549:14;:50::i;:::-;27256:1351;;;27187:1420;;;:::o;5928:192::-;6014:7;6047:1;6042;:6;;6050:12;6034:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6074:9;6090:1;6086;:5;;;;:::i;:::-;6074:17;;6111:1;6104:8;;;5928:192;;;;;:::o;5025:181::-;5083:7;5103:9;5119:1;5115;:5;;;;:::i;:::-;5103:17;;5144:1;5139;:6;;5131:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5197:1;5190:8;;;5025:181;;;;:::o;24786:236::-;24873:9;24868:147;24892:9;;:16;;24888:1;:20;24868:147;;;24930:12;24945:9;;24955:1;24945:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24930:27;;24999:4;24972:18;:24;24991:4;24972:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;24915:100;24910:3;;;;;:::i;:::-;;;;24868:147;;;;24786:236;;;:::o;30942:585::-;31068:21;31106:1;31092:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31068:40;;31137:4;31119;31124:1;31119:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31163:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31153:4;31158:1;31153:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31196:62;31213:4;31228:15;;;;;;;;;;;31246:11;31196:8;:62::i;:::-;31295:15;;;;;;;;;;;:66;;;31376:11;31402:1;31446:4;31473;31493:15;31295:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30997:530;30942:585;:::o;24404:244::-;24495:9;24490:151;24514:9;;:16;;24510:1;:20;24490:151;;;24552:12;24567:9;;24577:1;24567:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24552:27;;24625:4;24594:22;:28;24617:4;24594:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24537:104;24532:3;;;;;:::i;:::-;;;;24490:151;;;;24404:244;;;:::o;25580:347::-;25675:9;25670:250;25694:9;:16;25690:1;:20;25670:250;;;25732:12;25747:9;25757:1;25747:12;;;;;;;;:::i;:::-;;;;;;;;25732:27;;25778:7;25774:135;;;25825:4;25806:10;:16;25817:4;25806:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;25774:135;;;25877:10;:16;25888:4;25877:16;;;;;;;;;;;;;;;;25870:23;;;;;;;;;;;25774:135;25717:203;25712:3;;;;;:::i;:::-;;;;25670:250;;;;25580:347;;:::o;29295:425::-;29339:28;29370:24;29388:4;29370:9;:24::i;:::-;29339:55;;29432:1;29409:20;:24;29405:308;;;29450:19;29472:26;:24;:26::i;:::-;29450:48;;29541:11;29517:20;:35;;:46;;;;;29557:6;;;;;;;;;;;29556:7;29517:46;:61;;;;;29567:11;;;;;;;;;;;29517:61;29513:189;;;29657:29;29674:11;29657:16;:29::i;:::-;29513:189;29435:278;29405:308;29328:392;29295:425::o;31608:718::-;31730:17;31750:8;:50;;31799:1;31750:50;;;31761:35;31792:3;31761:26;31772:7;:14;;;31761:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;31750:50;31730:70;;31815:8;:18;;;;;31827:6;31815:18;31811:99;;;31862:36;31894:3;31862:27;31873:7;:15;;;31862:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;31850:48;;31811:99;31920:22;31945:21;31956:9;31945:6;:10;;:21;;;;:::i;:::-;31920:46;;31997:29;32019:6;31997:9;:17;32007:6;31997:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;31977:9;:17;31987:6;31977:17;;;;;;;;;;;;;;;:49;;;;32060:40;32085:14;32060:9;:20;32070:9;32060:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;32037:9;:20;32047:9;32037:20;;;;;;;;;;;;;;;:63;;;;32138:39;32167:9;32138;:24;32156:4;32138:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;32111:9;:24;32129:4;32111:24;;;;;;;;;;;;;;;:66;;;;32210:9;32193:35;;32202:6;32193:35;;;32221:6;32193:35;;;;;;:::i;:::-;;;;;;;;32243:15;;;;;;;;;;;:33;;;32277:6;32285:9;32243:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32239:67;31719:607;;31608:718;;;;;:::o;30053:483::-;19548:4;19539:6;;:13;;;;;;;;;;;;;;;;;;30140:38:::1;30157:20;30140:16;:38::i;:::-;30189:18;30210:21;30189:42;;30242:14;30259:45;30302:1;30259:38;30293:3;30259:29;30274:13;;30259:10;:14;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;:42;;:45;;;;:::i;:::-;30242:62;;30315:16;30334:22;30349:6;30334:10;:14;;:22;;;;:::i;:::-;30315:41;;30381:1;30372:6;:10;30369:78;;;30407:10;;;;;;;;;;;30399:28;;:36;30428:6;30399:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30369:78;30473:1;30462:8;:12;30459:70;;;30491:26;30508:8;30491:16;:26::i;:::-;30459:70;30129:407;;;19584:5:::0;19575:6;;:14;;;;;;;;;;;;;;;;;;30053:483;:::o;6379:471::-;6437:7;6687:1;6682;:6;6678:47;;6712:1;6705:8;;;;6678:47;6737:9;6753:1;6749;:5;;;;:::i;:::-;6737:17;;6782:1;6777;6773;:5;;;;:::i;:::-;:10;6765:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6841:1;6834:8;;;6379:471;;;;;:::o;7326:132::-;7384:7;7411:39;7415:1;7418;7411:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7404:46;;7326:132;;;;:::o;5489:136::-;5547:7;5574:43;5578:1;5581;5574:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5567:50;;5489:136;;;;:::o;30544:221::-;30609:12;30634:15;;;;;;;;;;;30626:29;;30664:9;30626:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30608:70;;;30693:7;30689:69;;;30722:24;30736:9;30722:24;;;;;;:::i;:::-;;;;;;;;30689:69;30597:168;30544:221;:::o;7954:278::-;8040:7;8072:1;8068;:5;8075:12;8060:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8099:9;8115:1;8111;:5;;;;:::i;:::-;8099:17;;8223:1;8216:8;;;7954:278;;;;;:::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:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1784:75::-;1817:6;1850:2;1844:9;1834:19;;1784:75;:::o;1865:117::-;1974:1;1971;1964:12;1988:117;2097:1;2094;2087:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:332::-;3919:4;3957:2;3946:9;3942:18;3934:26;;3970:71;4038:1;4027:9;4023:17;4014:6;3970:71;:::i;:::-;4051:72;4119:2;4108:9;4104:18;4095:6;4051:72;:::i;:::-;3798:332;;;;;:::o;4136:329::-;4195:6;4244:2;4232:9;4223:7;4219:23;4215:32;4212:119;;;4250:79;;:::i;:::-;4212:119;4370:1;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4341:117;4136:329;;;;:::o;4471:60::-;4499:3;4520:5;4513:12;;4471:60;;;:::o;4537:142::-;4587:9;4620:53;4638:34;4647:24;4665:5;4647:24;:::i;:::-;4638:34;:::i;:::-;4620:53;:::i;:::-;4607:66;;4537:142;;;:::o;4685:126::-;4735:9;4768:37;4799:5;4768:37;:::i;:::-;4755:50;;4685:126;;;:::o;4817:152::-;4893:9;4926:37;4957:5;4926:37;:::i;:::-;4913:50;;4817:152;;;:::o;4975:183::-;5088:63;5145:5;5088:63;:::i;:::-;5083:3;5076:76;4975:183;;:::o;5164:274::-;5283:4;5321:2;5310:9;5306:18;5298:26;;5334:97;5428:1;5417:9;5413:17;5404:6;5334:97;:::i;:::-;5164:274;;;;:::o;5444:619::-;5521:6;5529;5537;5586:2;5574:9;5565:7;5561:23;5557:32;5554:119;;;5592:79;;:::i;:::-;5554:119;5712:1;5737:53;5782:7;5773:6;5762:9;5758:22;5737:53;:::i;:::-;5727:63;;5683:117;5839:2;5865:53;5910:7;5901:6;5890:9;5886:22;5865:53;:::i;:::-;5855:63;;5810:118;5967:2;5993:53;6038:7;6029:6;6018:9;6014:22;5993:53;:::i;:::-;5983:63;;5938:118;5444:619;;;;;:::o;6069:329::-;6128:6;6177:2;6165:9;6156:7;6152:23;6148:32;6145:119;;;6183:79;;:::i;:::-;6145:119;6303:1;6328:53;6373:7;6364:6;6353:9;6349:22;6328:53;:::i;:::-;6318:63;;6274:117;6069:329;;;;:::o;6404:134::-;6462:9;6495:37;6526:5;6495:37;:::i;:::-;6482:50;;6404:134;;;:::o;6544:166::-;6626:9;6659:45;6698:5;6659:45;:::i;:::-;6646:58;;6544:166;;;:::o;6716:195::-;6835:69;6898:5;6835:69;:::i;:::-;6830:3;6823:82;6716:195;;:::o;6917:286::-;7042:4;7080:2;7069:9;7065:18;7057:26;;7093:103;7193:1;7182:9;7178:17;7169:6;7093:103;:::i;:::-;6917:286;;;;:::o;7209:86::-;7244:7;7284:4;7277:5;7273:16;7262:27;;7209:86;;;:::o;7301:112::-;7384:22;7400:5;7384:22;:::i;:::-;7379:3;7372:35;7301:112;;:::o;7419:214::-;7508:4;7546:2;7535:9;7531:18;7523:26;;7559:67;7623:1;7612:9;7608:17;7599:6;7559:67;:::i;:::-;7419:214;;;;:::o;7639:118::-;7726:24;7744:5;7726:24;:::i;:::-;7721:3;7714:37;7639:118;;:::o;7763:222::-;7856:4;7894:2;7883:9;7879:18;7871:26;;7907:71;7975:1;7964:9;7960:17;7951:6;7907:71;:::i;:::-;7763:222;;;;:::o;7991:117::-;8100:1;8097;8090:12;8114:117;8223:1;8220;8213:12;8237:117;8346:1;8343;8336:12;8377:568;8450:8;8460:6;8510:3;8503:4;8495:6;8491:17;8487:27;8477:122;;8518:79;;:::i;:::-;8477:122;8631:6;8618:20;8608:30;;8661:18;8653:6;8650:30;8647:117;;;8683:79;;:::i;:::-;8647:117;8797:4;8789:6;8785:17;8773:29;;8851:3;8843:4;8835:6;8831:17;8821:8;8817:32;8814:41;8811:128;;;8858:79;;:::i;:::-;8811:128;8377:568;;;;;:::o;8951:116::-;9021:21;9036:5;9021:21;:::i;:::-;9014:5;9011:32;9001:60;;9057:1;9054;9047:12;9001:60;8951:116;:::o;9073:133::-;9116:5;9154:6;9141:20;9132:29;;9170:30;9194:5;9170:30;:::i;:::-;9073:133;;;;:::o;9212:698::-;9304:6;9312;9320;9369:2;9357:9;9348:7;9344:23;9340:32;9337:119;;;9375:79;;:::i;:::-;9337:119;9523:1;9512:9;9508:17;9495:31;9553:18;9545:6;9542:30;9539:117;;;9575:79;;:::i;:::-;9539:117;9688:80;9760:7;9751:6;9740:9;9736:22;9688:80;:::i;:::-;9670:98;;;;9466:312;9817:2;9843:50;9885:7;9876:6;9865:9;9861:22;9843:50;:::i;:::-;9833:60;;9788:115;9212:698;;;;;:::o;9916:474::-;9984:6;9992;10041:2;10029:9;10020:7;10016:23;10012:32;10009:119;;;10047:79;;:::i;:::-;10009:119;10167:1;10192:53;10237:7;10228:6;10217:9;10213:22;10192:53;:::i;:::-;10182:63;;10138:117;10294:2;10320:53;10365:7;10356:6;10345:9;10341:22;10320:53;:::i;:::-;10310:63;;10265:118;9916:474;;;;;:::o;10396:180::-;10444:77;10441:1;10434:88;10541:4;10538:1;10531:15;10565:4;10562:1;10555:15;10582:281;10665:27;10687:4;10665:27;:::i;:::-;10657:6;10653:40;10795:6;10783:10;10780:22;10759:18;10747:10;10744:34;10741:62;10738:88;;;10806:18;;:::i;:::-;10738:88;10846:10;10842:2;10835:22;10625:238;10582:281;;:::o;10869:129::-;10903:6;10930:20;;:::i;:::-;10920:30;;10959:33;10987:4;10979:6;10959:33;:::i;:::-;10869:129;;;:::o;11004:311::-;11081:4;11171:18;11163:6;11160:30;11157:56;;;11193:18;;:::i;:::-;11157:56;11243:4;11235:6;11231:17;11223:25;;11303:4;11297;11293:15;11285:23;;11004:311;;;:::o;11338:710::-;11434:5;11459:81;11475:64;11532:6;11475:64;:::i;:::-;11459:81;:::i;:::-;11450:90;;11560:5;11589:6;11582:5;11575:21;11623:4;11616:5;11612:16;11605:23;;11676:4;11668:6;11664:17;11656:6;11652:30;11705:3;11697:6;11694:15;11691:122;;;11724:79;;:::i;:::-;11691:122;11839:6;11822:220;11856:6;11851:3;11848:15;11822:220;;;11931:3;11960:37;11993:3;11981:10;11960:37;:::i;:::-;11955:3;11948:50;12027:4;12022:3;12018:14;12011:21;;11898:144;11882:4;11877:3;11873:14;11866:21;;11822:220;;;11826:21;11440:608;;11338:710;;;;;:::o;12071:370::-;12142:5;12191:3;12184:4;12176:6;12172:17;12168:27;12158:122;;12199:79;;:::i;:::-;12158:122;12316:6;12303:20;12341:94;12431:3;12423:6;12416:4;12408:6;12404:17;12341:94;:::i;:::-;12332:103;;12148:293;12071:370;;;;:::o;12447:539::-;12531:6;12580:2;12568:9;12559:7;12555:23;12551:32;12548:119;;;12586:79;;:::i;:::-;12548:119;12734:1;12723:9;12719:17;12706:31;12764:18;12756:6;12753:30;12750:117;;;12786:79;;:::i;:::-;12750:117;12891:78;12961:7;12952:6;12941:9;12937:22;12891:78;:::i;:::-;12881:88;;12677:302;12447:539;;;;:::o;12992:474::-;13060:6;13068;13117:2;13105:9;13096:7;13092:23;13088:32;13085:119;;;13123:79;;:::i;:::-;13085:119;13243:1;13268:53;13313:7;13304:6;13293:9;13289:22;13268:53;:::i;:::-;13258:63;;13214:117;13370:2;13396:53;13441:7;13432:6;13421:9;13417:22;13396:53;:::i;:::-;13386:63;;13341:118;12992:474;;;;;:::o;13472:323::-;13528:6;13577:2;13565:9;13556:7;13552:23;13548:32;13545:119;;;13583:79;;:::i;:::-;13545:119;13703:1;13728:50;13770:7;13761:6;13750:9;13746:22;13728:50;:::i;:::-;13718:60;;13674:114;13472:323;;;;:::o;13801:182::-;13941:34;13937:1;13929:6;13925:14;13918:58;13801:182;:::o;13989:366::-;14131:3;14152:67;14216:2;14211:3;14152:67;:::i;:::-;14145:74;;14228:93;14317:3;14228:93;:::i;:::-;14346:2;14341:3;14337:12;14330:19;;13989:366;;;:::o;14361:419::-;14527:4;14565:2;14554:9;14550:18;14542:26;;14614:9;14608:4;14604:20;14600:1;14589:9;14585:17;14578:47;14642:131;14768:4;14642:131;:::i;:::-;14634:139;;14361:419;;;:::o;14786:180::-;14834:77;14831:1;14824:88;14931:4;14928:1;14921:15;14955:4;14952:1;14945:15;14972:320;15016:6;15053:1;15047:4;15043:12;15033:22;;15100:1;15094:4;15090:12;15121:18;15111:81;;15177:4;15169:6;15165:17;15155:27;;15111:81;15239:2;15231:6;15228:14;15208:18;15205:38;15202:84;;15258:18;;:::i;:::-;15202:84;15023:269;14972:320;;;:::o;15298:180::-;15346:77;15343:1;15336:88;15443:4;15440:1;15433:15;15467:4;15464:1;15457:15;15484:410;15524:7;15547:20;15565:1;15547:20;:::i;:::-;15542:25;;15581:20;15599:1;15581:20;:::i;:::-;15576:25;;15636:1;15633;15629:9;15658:30;15676:11;15658:30;:::i;:::-;15647:41;;15837:1;15828:7;15824:15;15821:1;15818:22;15798:1;15791:9;15771:83;15748:139;;15867:18;;:::i;:::-;15748:139;15532:362;15484:410;;;;:::o;15900:102::-;15942:8;15989:5;15986:1;15982:13;15961:34;;15900:102;;;:::o;16008:848::-;16069:5;16076:4;16100:6;16091:15;;16124:5;16115:14;;16138:712;16159:1;16149:8;16146:15;16138:712;;;16254:4;16249:3;16245:14;16239:4;16236:24;16233:50;;;16263:18;;:::i;:::-;16233:50;16313:1;16303:8;16299:16;16296:451;;;16728:4;16721:5;16717:16;16708:25;;16296:451;16778:4;16772;16768:15;16760:23;;16808:32;16831:8;16808:32;:::i;:::-;16796:44;;16138:712;;;16008:848;;;;;;;:::o;16862:1073::-;16916:5;17107:8;17097:40;;17128:1;17119:10;;17130:5;;17097:40;17156:4;17146:36;;17173:1;17164:10;;17175:5;;17146:36;17242:4;17290:1;17285:27;;;;17326:1;17321:191;;;;17235:277;;17285:27;17303:1;17294:10;;17305:5;;;17321:191;17366:3;17356:8;17353:17;17350:43;;;17373:18;;:::i;:::-;17350:43;17422:8;17419:1;17415:16;17406:25;;17457:3;17450:5;17447:14;17444:40;;;17464:18;;:::i;:::-;17444:40;17497:5;;;17235:277;;17621:2;17611:8;17608:16;17602:3;17596:4;17593:13;17589:36;17571:2;17561:8;17558:16;17553:2;17547:4;17544:12;17540:35;17524:111;17521:246;;;17677:8;17671:4;17667:19;17658:28;;17712:3;17705:5;17702:14;17699:40;;;17719:18;;:::i;:::-;17699:40;17752:5;;17521:246;17792:42;17830:3;17820:8;17814:4;17811:1;17792:42;:::i;:::-;17777:57;;;;17866:4;17861:3;17857:14;17850:5;17847:25;17844:51;;;17875:18;;:::i;:::-;17844:51;17924:4;17917:5;17913:16;17904:25;;16862:1073;;;;;;:::o;17941:281::-;17999:5;18023:23;18041:4;18023:23;:::i;:::-;18015:31;;18067:25;18083:8;18067:25;:::i;:::-;18055:37;;18111:104;18148:66;18138:8;18132:4;18111:104;:::i;:::-;18102:113;;17941:281;;;;:::o;18228:143::-;18285:5;18316:6;18310:13;18301:22;;18332:33;18359:5;18332:33;:::i;:::-;18228:143;;;;:::o;18377:351::-;18447:6;18496:2;18484:9;18475:7;18471:23;18467:32;18464:119;;;18502:79;;:::i;:::-;18464:119;18622:1;18647:64;18703:7;18694:6;18683:9;18679:22;18647:64;:::i;:::-;18637:74;;18593:128;18377:351;;;;:::o;18734:332::-;18855:4;18893:2;18882:9;18878:18;18870:26;;18906:71;18974:1;18963:9;18959:17;18950:6;18906:71;:::i;:::-;18987:72;19055:2;19044:9;19040:18;19031:6;18987:72;:::i;:::-;18734:332;;;;;:::o;19072:137::-;19126:5;19157:6;19151:13;19142:22;;19173:30;19197:5;19173:30;:::i;:::-;19072:137;;;;:::o;19215:345::-;19282:6;19331:2;19319:9;19310:7;19306:23;19302:32;19299:119;;;19337:79;;:::i;:::-;19299:119;19457:1;19482:61;19535:7;19526:6;19515:9;19511:22;19482:61;:::i;:::-;19472:71;;19428:125;19215:345;;;;:::o;19566:231::-;19706:34;19702:1;19694:6;19690:14;19683:58;19775:14;19770:2;19762:6;19758:15;19751:39;19566:231;:::o;19803:366::-;19945:3;19966:67;20030:2;20025:3;19966:67;:::i;:::-;19959:74;;20042:93;20131:3;20042:93;:::i;:::-;20160:2;20155:3;20151:12;20144:19;;19803:366;;;:::o;20175:419::-;20341:4;20379:2;20368:9;20364:18;20356:26;;20428:9;20422:4;20418:20;20414:1;20403:9;20399:17;20392:47;20456:131;20582:4;20456:131;:::i;:::-;20448:139;;20175:419;;;:::o;20600:143::-;20657:5;20688:6;20682:13;20673:22;;20704:33;20731:5;20704:33;:::i;:::-;20600:143;;;;:::o;20749:351::-;20819:6;20868:2;20856:9;20847:7;20843:23;20839:32;20836:119;;;20874:79;;:::i;:::-;20836:119;20994:1;21019:64;21075:7;21066:6;21055:9;21051:22;21019:64;:::i;:::-;21009:74;;20965:128;20749:351;;;;:::o;21106:180::-;21154:77;21151:1;21144:88;21251:4;21248:1;21241:15;21275:4;21272:1;21265:15;21292:114;21359:6;21393:5;21387:12;21377:22;;21292:114;;;:::o;21412:184::-;21511:11;21545:6;21540:3;21533:19;21585:4;21580:3;21576:14;21561:29;;21412:184;;;;:::o;21602:132::-;21669:4;21692:3;21684:11;;21722:4;21717:3;21713:14;21705:22;;21602:132;;;:::o;21740:108::-;21817:24;21835:5;21817:24;:::i;:::-;21812:3;21805:37;21740:108;;:::o;21854:179::-;21923:10;21944:46;21986:3;21978:6;21944:46;:::i;:::-;22022:4;22017:3;22013:14;21999:28;;21854:179;;;;:::o;22039:113::-;22109:4;22141;22136:3;22132:14;22124:22;;22039:113;;;:::o;22188:732::-;22307:3;22336:54;22384:5;22336:54;:::i;:::-;22406:86;22485:6;22480:3;22406:86;:::i;:::-;22399:93;;22516:56;22566:5;22516:56;:::i;:::-;22595:7;22626:1;22611:284;22636:6;22633:1;22630:13;22611:284;;;22712:6;22706:13;22739:63;22798:3;22783:13;22739:63;:::i;:::-;22732:70;;22825:60;22878:6;22825:60;:::i;:::-;22815:70;;22671:224;22658:1;22655;22651:9;22646:14;;22611:284;;;22615:14;22911:3;22904:10;;22312:608;;;22188:732;;;;:::o;22926:483::-;23097:4;23135:2;23124:9;23120:18;23112:26;;23148:71;23216:1;23205:9;23201:17;23192:6;23148:71;:::i;:::-;23266:9;23260:4;23256:20;23251:2;23240:9;23236:18;23229:48;23294:108;23397:4;23388:6;23294:108;:::i;:::-;23286:116;;22926:483;;;;;:::o;23415:311::-;23492:4;23582:18;23574:6;23571:30;23568:56;;;23604:18;;:::i;:::-;23568:56;23654:4;23646:6;23642:17;23634:25;;23714:4;23708;23704:15;23696:23;;23415:311;;;:::o;23749:732::-;23856:5;23881:81;23897:64;23954:6;23897:64;:::i;:::-;23881:81;:::i;:::-;23872:90;;23982:5;24011:6;24004:5;23997:21;24045:4;24038:5;24034:16;24027:23;;24098:4;24090:6;24086:17;24078:6;24074:30;24127:3;24119:6;24116:15;24113:122;;;24146:79;;:::i;:::-;24113:122;24261:6;24244:231;24278:6;24273:3;24270:15;24244:231;;;24353:3;24382:48;24426:3;24414:10;24382:48;:::i;:::-;24377:3;24370:61;24460:4;24455:3;24451:14;24444:21;;24320:155;24304:4;24299:3;24295:14;24288:21;;24244:231;;;24248:21;23862:619;;23749:732;;;;;:::o;24504:385::-;24586:5;24635:3;24628:4;24620:6;24616:17;24612:27;24602:122;;24643:79;;:::i;:::-;24602:122;24753:6;24747:13;24778:105;24879:3;24871:6;24864:4;24856:6;24852:17;24778:105;:::i;:::-;24769:114;;24592:297;24504:385;;;;:::o;24895:554::-;24990:6;25039:2;25027:9;25018:7;25014:23;25010:32;25007:119;;;25045:79;;:::i;:::-;25007:119;25186:1;25175:9;25171:17;25165:24;25216:18;25208:6;25205:30;25202:117;;;25238:79;;:::i;:::-;25202:117;25343:89;25424:7;25415:6;25404:9;25400:22;25343:89;:::i;:::-;25333:99;;25136:306;24895:554;;;;:::o;25455:225::-;25595:34;25591:1;25583:6;25579:14;25572:58;25664:8;25659:2;25651:6;25647:15;25640:33;25455:225;:::o;25686:366::-;25828:3;25849:67;25913:2;25908:3;25849:67;:::i;:::-;25842:74;;25925:93;26014:3;25925:93;:::i;:::-;26043:2;26038:3;26034:12;26027:19;;25686:366;;;:::o;26058:419::-;26224:4;26262:2;26251:9;26247:18;26239:26;;26311:9;26305:4;26301:20;26297:1;26286:9;26282:17;26275:47;26339:131;26465:4;26339:131;:::i;:::-;26331:139;;26058:419;;;:::o;26483:223::-;26623:34;26619:1;26611:6;26607:14;26600:58;26692:6;26687:2;26679:6;26675:15;26668:31;26483:223;:::o;26712:366::-;26854:3;26875:67;26939:2;26934:3;26875:67;:::i;:::-;26868:74;;26951:93;27040:3;26951:93;:::i;:::-;27069:2;27064:3;27060:12;27053:19;;26712:366;;;:::o;27084:419::-;27250:4;27288:2;27277:9;27273:18;27265:26;;27337:9;27331:4;27327:20;27323:1;27312:9;27308:17;27301:47;27365:131;27491:4;27365:131;:::i;:::-;27357:139;;27084:419;;;:::o;27509:221::-;27649:34;27645:1;27637:6;27633:14;27626:58;27718:4;27713:2;27705:6;27701:15;27694:29;27509:221;:::o;27736:366::-;27878:3;27899:67;27963:2;27958:3;27899:67;:::i;:::-;27892:74;;27975:93;28064:3;27975:93;:::i;:::-;28093:2;28088:3;28084:12;28077:19;;27736:366;;;:::o;28108:419::-;28274:4;28312:2;28301:9;28297:18;28289:26;;28361:9;28355:4;28351:20;28347:1;28336:9;28332:17;28325:47;28389:131;28515:4;28389:131;:::i;:::-;28381:139;;28108:419;;;:::o;28533:224::-;28673:34;28669:1;28661:6;28657:14;28650:58;28742:7;28737:2;28729:6;28725:15;28718:32;28533:224;:::o;28763:366::-;28905:3;28926:67;28990:2;28985:3;28926:67;:::i;:::-;28919:74;;29002:93;29091:3;29002:93;:::i;:::-;29120:2;29115:3;29111:12;29104:19;;28763:366;;;:::o;29135:419::-;29301:4;29339:2;29328:9;29324:18;29316:26;;29388:9;29382:4;29378:20;29374:1;29363:9;29359:17;29352:47;29416:131;29542:4;29416:131;:::i;:::-;29408:139;;29135:419;;;:::o;29560:222::-;29700:34;29696:1;29688:6;29684:14;29677:58;29769:5;29764:2;29756:6;29752:15;29745:30;29560:222;:::o;29788:366::-;29930:3;29951:67;30015:2;30010:3;29951:67;:::i;:::-;29944:74;;30027:93;30116:3;30027:93;:::i;:::-;30145:2;30140:3;30136:12;30129:19;;29788:366;;;:::o;30160:419::-;30326:4;30364:2;30353:9;30349:18;30341:26;;30413:9;30407:4;30403:20;30399:1;30388:9;30384:17;30377:47;30441:131;30567:4;30441:131;:::i;:::-;30433:139;;30160:419;;;:::o;30585:228::-;30725:34;30721:1;30713:6;30709:14;30702:58;30794:11;30789:2;30781:6;30777:15;30770:36;30585:228;:::o;30819:366::-;30961:3;30982:67;31046:2;31041:3;30982:67;:::i;:::-;30975:74;;31058:93;31147:3;31058:93;:::i;:::-;31176:2;31171:3;31167:12;31160:19;;30819:366;;;:::o;31191:419::-;31357:4;31395:2;31384:9;31380:18;31372:26;;31444:9;31438:4;31434:20;31430:1;31419:9;31415:17;31408:47;31472:131;31598:4;31472:131;:::i;:::-;31464:139;;31191:419;;;:::o;31616:234::-;31756:34;31752:1;31744:6;31740:14;31733:58;31825:17;31820:2;31812:6;31808:15;31801:42;31616:234;:::o;31856:366::-;31998:3;32019:67;32083:2;32078:3;32019:67;:::i;:::-;32012:74;;32095:93;32184:3;32095:93;:::i;:::-;32213:2;32208:3;32204:12;32197:19;;31856:366;;;:::o;32228:419::-;32394:4;32432:2;32421:9;32417:18;32409:26;;32481:9;32475:4;32471:20;32467:1;32456:9;32452:17;32445:47;32509:131;32635:4;32509:131;:::i;:::-;32501:139;;32228:419;;;:::o;32653:224::-;32793:34;32789:1;32781:6;32777:14;32770:58;32862:7;32857:2;32849:6;32845:15;32838:32;32653:224;:::o;32883:366::-;33025:3;33046:67;33110:2;33105:3;33046:67;:::i;:::-;33039:74;;33122:93;33211:3;33122:93;:::i;:::-;33240:2;33235:3;33231:12;33224:19;;32883:366;;;:::o;33255:419::-;33421:4;33459:2;33448:9;33444:18;33436:26;;33508:9;33502:4;33498:20;33494:1;33483:9;33479:17;33472:47;33536:131;33662:4;33536:131;:::i;:::-;33528:139;;33255:419;;;:::o;33680:194::-;33720:4;33740:20;33758:1;33740:20;:::i;:::-;33735:25;;33774:20;33792:1;33774:20;:::i;:::-;33769:25;;33818:1;33815;33811:9;33803:17;;33842:1;33836:4;33833:11;33830:37;;;33847:18;;:::i;:::-;33830:37;33680:194;;;;:::o;33880:191::-;33920:3;33939:20;33957:1;33939:20;:::i;:::-;33934:25;;33973:20;33991:1;33973:20;:::i;:::-;33968:25;;34016:1;34013;34009:9;34002:16;;34037:3;34034:1;34031:10;34028:36;;;34044:18;;:::i;:::-;34028:36;33880:191;;;;:::o;34077:177::-;34217:29;34213:1;34205:6;34201:14;34194:53;34077:177;:::o;34260:366::-;34402:3;34423:67;34487:2;34482:3;34423:67;:::i;:::-;34416:74;;34499:93;34588:3;34499:93;:::i;:::-;34617:2;34612:3;34608:12;34601:19;;34260:366;;;:::o;34632:419::-;34798:4;34836:2;34825:9;34821:18;34813:26;;34885:9;34879:4;34875:20;34871:1;34860:9;34856:17;34849:47;34913:131;35039:4;34913:131;:::i;:::-;34905:139;;34632:419;;;:::o;35057:233::-;35096:3;35119:24;35137:5;35119:24;:::i;:::-;35110:33;;35165:66;35158:5;35155:77;35152:103;;35235:18;;:::i;:::-;35152:103;35282:1;35275:5;35271:13;35264:20;;35057:233;;;:::o;35296:85::-;35341:7;35370:5;35359:16;;35296:85;;;:::o;35387:158::-;35445:9;35478:61;35496:42;35505:32;35531:5;35505:32;:::i;:::-;35496:42;:::i;:::-;35478:61;:::i;:::-;35465:74;;35387:158;;;:::o;35551:147::-;35646:45;35685:5;35646:45;:::i;:::-;35641:3;35634:58;35551:147;;:::o;35704:831::-;35967:4;36005:3;35994:9;35990:19;35982:27;;36019:71;36087:1;36076:9;36072:17;36063:6;36019:71;:::i;:::-;36100:80;36176:2;36165:9;36161:18;36152:6;36100:80;:::i;:::-;36227:9;36221:4;36217:20;36212:2;36201:9;36197:18;36190:48;36255:108;36358:4;36349:6;36255:108;:::i;:::-;36247:116;;36373:72;36441:2;36430:9;36426:18;36417:6;36373:72;:::i;:::-;36455:73;36523:3;36512:9;36508:19;36499:6;36455:73;:::i;:::-;35704:831;;;;;;;;:::o;36541:332::-;36662:4;36700:2;36689:9;36685:18;36677:26;;36713:71;36781:1;36770:9;36766:17;36757:6;36713:71;:::i;:::-;36794:72;36862:2;36851:9;36847:18;36838:6;36794:72;:::i;:::-;36541:332;;;;;:::o;36879:180::-;36927:77;36924:1;36917:88;37024:4;37021:1;37014:15;37048:4;37045:1;37038:15;37065:185;37105:1;37122:20;37140:1;37122:20;:::i;:::-;37117:25;;37156:20;37174:1;37156:20;:::i;:::-;37151:25;;37195:1;37185:35;;37200:18;;:::i;:::-;37185:35;37242:1;37239;37235:9;37230:14;;37065:185;;;;:::o;37256:220::-;37396:34;37392:1;37384:6;37380:14;37373:58;37465:3;37460:2;37452:6;37448:15;37441:28;37256:220;:::o;37482:366::-;37624:3;37645:67;37709:2;37704:3;37645:67;:::i;:::-;37638:74;;37721:93;37810:3;37721:93;:::i;:::-;37839:2;37834:3;37830:12;37823:19;;37482:366;;;:::o;37854:419::-;38020:4;38058:2;38047:9;38043:18;38035:26;;38107:9;38101:4;38097:20;38093:1;38082:9;38078:17;38071:47;38135:131;38261:4;38135:131;:::i;:::-;38127:139;;37854:419;;;:::o;38279:147::-;38380:11;38417:3;38402:18;;38279:147;;;;:::o;38432:114::-;;:::o;38552:398::-;38711:3;38732:83;38813:1;38808:3;38732:83;:::i;:::-;38725:90;;38824:93;38913:3;38824:93;:::i;:::-;38942:1;38937:3;38933:11;38926:18;;38552:398;;;:::o;38956:379::-;39140:3;39162:147;39305:3;39162:147;:::i;:::-;39155:154;;39326:3;39319:10;;38956:379;;;:::o

Swarm Source

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