Token Good Bridging

Overview ERC20

Price
$0.00 @ 0.000326 AVAX (+1.69%)
Fully Diluted Market Cap
Total Supply:
14,327,880 GB

Holders:
16,480 addresses

Transfers:
-

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

OVERVIEW

Good Bridging token, a fair launch community coin built on Avalanche.

Market

Volume (24H):$3.58
Market Capitalization:$0.00
Circulating Supply:0.00 GB
Market Data Source: Coinmarketcap


Update? Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
1
Trader Joe
0X90842EB834CFD2A1DB0B1512B254A18E4D396215-0XB31F66AA3C1E785363F0875A1B74E27B85FD66C7$0.0044
0.0000003 Btc
$3.59
820.304 0X90842EB834CFD2A1DB0B1512B254A18E4D396215
100.0000%

Contract Source Code Verified (Exact Match)

Contract Name:
GoodBridging

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-25
*/

// File: openzeppelin-solidity/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

        (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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: openzeppelin-solidity/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

// File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

// File: openzeppelin-solidity/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: openzeppelin-solidity/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/GB.sol

/*
 * Copyright © 2020 reflect.finance. ALL RIGHTS RESERVED.
 */

pragma solidity ^0.8.0;






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

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 14.327880 * 10 ** 6 * 10 ** 9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = 'Good Bridging';
    string private _symbol = 'GB';
    uint8 private _decimals = 9;

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        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) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[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 isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function reflect(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    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 sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);       
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee);
    }

    function _getTValues(uint256 tAmount) private pure returns (uint256, uint256) {
        uint256 tFee = tAmount.div(100);
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[{"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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526632e72185c8d0006000196200001b919062000411565b6000196200002a919062000396565b6006556040518060400160405280600d81526020017f476f6f64204272696467696e6700000000000000000000000000000000000000815250600890805190602001906200007a929190620002b8565b506040518060400160405280600281526020017f474200000000000000000000000000000000000000000000000000000000000081525060099080519060200190620000c8929190620002b8565b506009600a60006101000a81548160ff021916908360ff160217905550348015620000f257600080fd5b506200011362000107620001ec60201b60201c565b620001f460201b60201c565b600654600160006200012a620001ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000178620001ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6632e72185c8d000604051620001de919062000379565b60405180910390a3620004d6565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002c690620003db565b90600052602060002090601f016020900481019282620002ea576000855562000336565b82601f106200030557805160ff191683800117855562000336565b8280016001018555821562000336579182015b828111156200033557825182559160200191906001019062000318565b5b50905062000345919062000349565b5090565b5b80821115620003645760008160009055506001016200034a565b5090565b6200037381620003d1565b82525050565b600060208201905062000390600083018462000368565b92915050565b6000620003a382620003d1565b9150620003b083620003d1565b925082821015620003c657620003c562000449565b5b828203905092915050565b6000819050919050565b60006002820490506001821680620003f457607f821691505b602082108114156200040b576200040a620004a7565b5b50919050565b60006200041e82620003d1565b91506200042b83620003d1565b9250826200043e576200043d62000478565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61352c80620004e66000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a9059cbb1161007c578063a9059cbb14610366578063cba0e99614610396578063dd62ed3e146103c6578063f2cc0c18146103f6578063f2fde38b14610412578063f84354f11461042e57610137565b806370a08231146102c0578063715018a6146102f05780638da5cb5b146102fa57806395d89b4114610318578063a457c2d71461033657610137565b806323b872dd116100ff57806323b872dd146101e25780632d83811914610212578063313ce5671461024257806339509351146102605780634549b0391461029057610137565b8063053ab1821461013c57806306fdde0314610158578063095ea7b31461017657806313114a9d146101a657806318160ddd146101c4575b600080fd5b610156600480360381019061015191906129eb565b61044a565b005b6101606105c4565b60405161016d9190612c84565b60405180910390f35b610190600480360381019061018b91906129ab565b610656565b60405161019d9190612c69565b60405180910390f35b6101ae610674565b6040516101bb9190612e06565b60405180910390f35b6101cc61067e565b6040516101d99190612e06565b60405180910390f35b6101fc60048036038101906101f79190612958565b61068d565b6040516102099190612c69565b60405180910390f35b61022c600480360381019061022791906129eb565b610766565b6040516102399190612e06565b60405180910390f35b61024a6107d4565b6040516102579190612e21565b60405180910390f35b61027a600480360381019061027591906129ab565b6107eb565b6040516102879190612c69565b60405180910390f35b6102aa60048036038101906102a59190612a18565b61089e565b6040516102b79190612e06565b60405180910390f35b6102da60048036038101906102d591906128eb565b610925565b6040516102e79190612e06565b60405180910390f35b6102f8610a10565b005b610302610a98565b60405161030f9190612c4e565b60405180910390f35b610320610ac1565b60405161032d9190612c84565b60405180910390f35b610350600480360381019061034b91906129ab565b610b53565b60405161035d9190612c69565b60405180910390f35b610380600480360381019061037b91906129ab565b610c20565b60405161038d9190612c69565b60405180910390f35b6103b060048036038101906103ab91906128eb565b610c3e565b6040516103bd9190612c69565b60405180910390f35b6103e060048036038101906103db9190612918565b610c94565b6040516103ed9190612e06565b60405180910390f35b610410600480360381019061040b91906128eb565b610d1b565b005b61042c600480360381019061042791906128eb565b610fb6565b005b610448600480360381019061044391906128eb565b6110ae565b005b60006104546113e4565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156104e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104da90612de6565b60405180910390fd5b60006104ee836113ec565b50505050905061054681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461144490919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061059e8160065461144490919063ffffffff16565b6006819055506105b98360075461145a90919063ffffffff16565b600781905550505050565b6060600880546105d390612ff5565b80601f01602080910402602001604051908101604052809291908181526020018280546105ff90612ff5565b801561064c5780601f106106215761010080835404028352916020019161064c565b820191906000526020600020905b81548152906001019060200180831161062f57829003601f168201915b5050505050905090565b600061066a6106636113e4565b8484611470565b6001905092915050565b6000600754905090565b60006632e72185c8d000905090565b600061069a84848461163b565b61075b846106a66113e4565b610756856040518060600160405280602881526020016134aa60289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061070c6113e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a529092919063ffffffff16565b611470565b600190509392505050565b60006006548211156107ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a490612cc6565b60405180910390fd5b60006107b7611aa7565b90506107cc8184611ad290919063ffffffff16565b915050919050565b6000600a60009054906101000a900460ff16905090565b60006108946107f86113e4565b8461088f85600360006108096113e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461145a90919063ffffffff16565b611470565b6001905092915050565b60006632e72185c8d0008311156108ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e190612d46565b60405180910390fd5b816109095760006108fa846113ec565b5050505090508091505061091f565b6000610914846113ec565b505050915050809150505b92915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156109c057600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610a0b565b610a08600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610766565b90505b919050565b610a186113e4565b73ffffffffffffffffffffffffffffffffffffffff16610a36610a98565b73ffffffffffffffffffffffffffffffffffffffff1614610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390612d66565b60405180910390fd5b610a966000611ae8565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060098054610ad090612ff5565b80601f0160208091040260200160405190810160405280929190818152602001828054610afc90612ff5565b8015610b495780601f10610b1e57610100808354040283529160200191610b49565b820191906000526020600020905b815481529060010190602001808311610b2c57829003601f168201915b5050505050905090565b6000610c16610b606113e4565b84610c11856040518060600160405280602581526020016134d26025913960036000610b8a6113e4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a529092919063ffffffff16565b611470565b6001905092915050565b6000610c34610c2d6113e4565b848461163b565b6001905092915050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d236113e4565b73ffffffffffffffffffffffffffffffffffffffff16610d41610a98565b73ffffffffffffffffffffffffffffffffffffffff1614610d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8e90612d66565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90612d26565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115610ef857610eb4600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610766565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610fbe6113e4565b73ffffffffffffffffffffffffffffffffffffffff16610fdc610a98565b73ffffffffffffffffffffffffffffffffffffffff1614611032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102990612d66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990612ce6565b60405180910390fd5b6110ab81611ae8565b50565b6110b66113e4565b73ffffffffffffffffffffffffffffffffffffffff166110d4610a98565b73ffffffffffffffffffffffffffffffffffffffff161461112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190612d66565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90612d26565b60405180910390fd5b60005b6005805490508110156113e0578173ffffffffffffffffffffffffffffffffffffffff16600582815481106111f1576111f061312c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113cd576005600160058054905061124c9190612f39565b8154811061125d5761125c61312c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005828154811061129c5761129b61312c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005805480611393576113926130fd565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556113e0565b80806113d890613027565b9150506111b9565b5050565b600033905090565b600080600080600080600061140088611bac565b91509150600061140e611aa7565b905060008060006114208c8686611beb565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b600081836114529190612f39565b905092915050565b600081836114689190612e58565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790612dc6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790612d06565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161162e9190612e06565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290612da6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561171b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171290612ca6565b60405180910390fd5b6000811161175e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175590612d86565b60405180910390fd5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156118015750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561181657611811838383611c49565b611a4d565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156118b95750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156118ce576118c9838383611e9c565b611a4c565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156119725750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611987576119828383836120ef565b611a4b565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611a295750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611a3e57611a398383836122ad565b611a4a565b611a498383836120ef565b5b5b5b5b505050565b6000838311158290611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a919190612c84565b60405180910390fd5b5082840390509392505050565b6000806000611ab4612595565b91509150611acb8183611ad290919063ffffffff16565b9250505090565b60008183611ae09190612eae565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000611bc5606485611ad290919063ffffffff16565b90506000611bdc828661144490919063ffffffff16565b90508082935093505050915091565b600080600080611c04858861285c90919063ffffffff16565b90506000611c1b868861285c90919063ffffffff16565b90506000611c32828461144490919063ffffffff16565b905082818395509550955050505093509350939050565b6000806000806000611c5a866113ec565b94509450945094509450611cb686600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461144490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d4b85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461144490919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611de084600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461145a90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e2d8382612872565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e8a9190612e06565b60405180910390a35050505050505050565b6000806000806000611ead866113ec565b94509450945094509450611f0985600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461144490919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611f9e82600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461145a90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061203384600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461145a90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120808382612872565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120dd9190612e06565b60405180910390a35050505050505050565b6000806000806000612100866113ec565b9450945094509450945061215c85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461144490919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121f184600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461145a90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061223e8382612872565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161229b9190612e06565b60405180910390a35050505050505050565b60008060008060006122be866113ec565b9450945094509450945061231a86600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461144490919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506123af85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461144490919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061244482600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461145a90919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506124d984600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461145a90919063ffffffff16565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506125268382612872565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125839190612e06565b60405180910390a35050505050505050565b6000806000600654905060006632e72185c8d000905060005b600580549050811015612815578260016000600584815481106125d4576125d361312c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806126c2575081600260006005848154811061265a5761265961312c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156126de576006546632e72185c8d00094509450505050612858565b61276e60016000600584815481106126f9576126f861312c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461144490919063ffffffff16565b9250612800600260006005848154811061278b5761278a61312c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361144490919063ffffffff16565b9150808061280d90613027565b9150506125ae565b506128326632e72185c8d000600654611ad290919063ffffffff16565b82101561284f576006546632e72185c8d000935093505050612858565b81819350935050505b9091565b6000818361286a9190612edf565b905092915050565b6128878260065461144490919063ffffffff16565b6006819055506128a28160075461145a90919063ffffffff16565b6007819055505050565b6000813590506128bb81613464565b92915050565b6000813590506128d08161347b565b92915050565b6000813590506128e581613492565b92915050565b6000602082840312156129015761290061315b565b5b600061290f848285016128ac565b91505092915050565b6000806040838503121561292f5761292e61315b565b5b600061293d858286016128ac565b925050602061294e858286016128ac565b9150509250929050565b6000806000606084860312156129715761297061315b565b5b600061297f868287016128ac565b9350506020612990868287016128ac565b92505060406129a1868287016128d6565b9150509250925092565b600080604083850312156129c2576129c161315b565b5b60006129d0858286016128ac565b92505060206129e1858286016128d6565b9150509250929050565b600060208284031215612a0157612a0061315b565b5b6000612a0f848285016128d6565b91505092915050565b60008060408385031215612a2f57612a2e61315b565b5b6000612a3d858286016128d6565b9250506020612a4e858286016128c1565b9150509250929050565b612a6181612f6d565b82525050565b612a7081612f7f565b82525050565b6000612a8182612e3c565b612a8b8185612e47565b9350612a9b818560208601612fc2565b612aa481613160565b840191505092915050565b6000612abc602383612e47565b9150612ac782613171565b604082019050919050565b6000612adf602a83612e47565b9150612aea826131c0565b604082019050919050565b6000612b02602683612e47565b9150612b0d8261320f565b604082019050919050565b6000612b25602283612e47565b9150612b308261325e565b604082019050919050565b6000612b48601b83612e47565b9150612b53826132ad565b602082019050919050565b6000612b6b601f83612e47565b9150612b76826132d6565b602082019050919050565b6000612b8e602083612e47565b9150612b99826132ff565b602082019050919050565b6000612bb1602983612e47565b9150612bbc82613328565b604082019050919050565b6000612bd4602583612e47565b9150612bdf82613377565b604082019050919050565b6000612bf7602483612e47565b9150612c02826133c6565b604082019050919050565b6000612c1a602c83612e47565b9150612c2582613415565b604082019050919050565b612c3981612fab565b82525050565b612c4881612fb5565b82525050565b6000602082019050612c636000830184612a58565b92915050565b6000602082019050612c7e6000830184612a67565b92915050565b60006020820190508181036000830152612c9e8184612a76565b905092915050565b60006020820190508181036000830152612cbf81612aaf565b9050919050565b60006020820190508181036000830152612cdf81612ad2565b9050919050565b60006020820190508181036000830152612cff81612af5565b9050919050565b60006020820190508181036000830152612d1f81612b18565b9050919050565b60006020820190508181036000830152612d3f81612b3b565b9050919050565b60006020820190508181036000830152612d5f81612b5e565b9050919050565b60006020820190508181036000830152612d7f81612b81565b9050919050565b60006020820190508181036000830152612d9f81612ba4565b9050919050565b60006020820190508181036000830152612dbf81612bc7565b9050919050565b60006020820190508181036000830152612ddf81612bea565b9050919050565b60006020820190508181036000830152612dff81612c0d565b9050919050565b6000602082019050612e1b6000830184612c30565b92915050565b6000602082019050612e366000830184612c3f565b92915050565b600081519050919050565b600082825260208201905092915050565b6000612e6382612fab565b9150612e6e83612fab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612ea357612ea2613070565b5b828201905092915050565b6000612eb982612fab565b9150612ec483612fab565b925082612ed457612ed361309f565b5b828204905092915050565b6000612eea82612fab565b9150612ef583612fab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612f2e57612f2d613070565b5b828202905092915050565b6000612f4482612fab565b9150612f4f83612fab565b925082821015612f6257612f61613070565b5b828203905092915050565b6000612f7882612f8b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015612fe0578082015181840152602081019050612fc5565b83811115612fef576000848401525b50505050565b6000600282049050600182168061300d57607f821691505b60208210811415613021576130206130ce565b5b50919050565b600061303282612fab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561306557613064613070565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b61346d81612f6d565b811461347857600080fd5b50565b61348481612f7f565b811461348f57600080fd5b50565b61349b81612fab565b81146134a657600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b440d7ca078ee8ebf2f33ca3920c7136c71ba848dc93f0d66f6e02ece839525964736f6c63430008070033

Deployed ByteCode Sourcemap

22023:10166:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25003:376;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22885:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23797:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24908:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23162:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23966:313;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25829:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23071:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24287:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25387:434;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23265:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21069:103;;;:::i;:::-;;20418:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22976;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24513:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23471:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24790:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23646:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26090:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21327:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26430:478;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25003:376;25055:14;25072:12;:10;:12::i;:::-;25055:29;;25104:11;:19;25116:6;25104:19;;;;;;;;;;;;;;;;;;;;;;;;;25103:20;25095:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25184:15;25207:19;25218:7;25207:10;:19::i;:::-;25183:43;;;;;;25255:28;25275:7;25255;:15;25263:6;25255:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25237:7;:15;25245:6;25237:15;;;;;;;;;;;;;;;:46;;;;25304:20;25316:7;25304;;:11;;:20;;;;:::i;:::-;25294:7;:30;;;;25348:23;25363:7;25348:10;;:14;;:23;;;;:::i;:::-;25335:10;:36;;;;25044:335;;25003:376;:::o;22885:83::-;22922:13;22955:5;22948:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22885:83;:::o;23797:161::-;23872:4;23889:39;23898:12;:10;:12::i;:::-;23912:7;23921:6;23889:8;:39::i;:::-;23946:4;23939:11;;23797:161;;;;:::o;24908:87::-;24950:7;24977:10;;24970:17;;24908:87;:::o;23162:95::-;23215:7;22502:29;23235:14;;23162:95;:::o;23966:313::-;24064:4;24081:36;24091:6;24099:9;24110:6;24081:9;:36::i;:::-;24128:121;24137:6;24145:12;:10;:12::i;:::-;24159:89;24197:6;24159:89;;;;;;;;;;;;;;;;;:11;:19;24171:6;24159:19;;;;;;;;;;;;;;;:33;24179:12;:10;:12::i;:::-;24159:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;24128:8;:121::i;:::-;24267:4;24260:11;;23966:313;;;;;:::o;25829:253::-;25895:7;25934;;25923;:18;;25915:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25999:19;26022:10;:8;:10::i;:::-;25999:33;;26050:24;26062:11;26050:7;:11;;:24;;;;:::i;:::-;26043:31;;;25829:253;;;:::o;23071:83::-;23112:5;23137:9;;;;;;;;;;;23130:16;;23071:83;:::o;24287:218::-;24375:4;24392:83;24401:12;:10;:12::i;:::-;24415:7;24424:50;24463:10;24424:11;:25;24436:12;:10;:12::i;:::-;24424:25;;;;;;;;;;;;;;;:34;24450:7;24424:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;24392:8;:83::i;:::-;24493:4;24486:11;;24287:218;;;;:::o;25387:434::-;25477:7;22502:29;25505:7;:18;;25497:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25575:17;25570:244;;25610:15;25633:19;25644:7;25633:10;:19::i;:::-;25609:43;;;;;;25674:7;25667:14;;;;;25570:244;25716:23;25746:19;25757:7;25746:10;:19::i;:::-;25714:51;;;;;;25787:15;25780:22;;;25387:434;;;;;:::o;23265:198::-;23331:7;23355:11;:20;23367:7;23355:20;;;;;;;;;;;;;;;;;;;;;;;;;23351:49;;;23384:7;:16;23392:7;23384:16;;;;;;;;;;;;;;;;23377:23;;;;23351:49;23418:37;23438:7;:16;23446:7;23438:16;;;;;;;;;;;;;;;;23418:19;:37::i;:::-;23411:44;;23265:198;;;;:::o;21069:103::-;20649:12;:10;:12::i;:::-;20638:23;;:7;:5;:7::i;:::-;:23;;;20630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21134:30:::1;21161:1;21134:18;:30::i;:::-;21069:103::o:0;20418:87::-;20464:7;20491:6;;;;;;;;;;;20484:13;;20418:87;:::o;22976:::-;23015:13;23048:7;23041:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22976:87;:::o;24513:269::-;24606:4;24623:129;24632:12;:10;:12::i;:::-;24646:7;24655:96;24694:15;24655:96;;;;;;;;;;;;;;;;;:11;:25;24667:12;:10;:12::i;:::-;24655:25;;;;;;;;;;;;;;;:34;24681:7;24655:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;24623:8;:129::i;:::-;24770:4;24763:11;;24513:269;;;;:::o;23471:167::-;23549:4;23566:42;23576:12;:10;:12::i;:::-;23590:9;23601:6;23566:9;:42::i;:::-;23626:4;23619:11;;23471:167;;;;:::o;24790:110::-;24848:4;24872:11;:20;24884:7;24872:20;;;;;;;;;;;;;;;;;;;;;;;;;24865:27;;24790:110;;;:::o;23646:143::-;23727:7;23754:11;:18;23766:5;23754:18;;;;;;;;;;;;;;;:27;23773:7;23754:27;;;;;;;;;;;;;;;;23747:34;;23646:143;;;;:::o;26090:332::-;20649:12;:10;:12::i;:::-;20638:23;;:7;:5;:7::i;:::-;:23;;;20630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26172:11:::1;:20;26184:7;26172:20;;;;;;;;;;;;;;;;;;;;;;;;;26171:21;26163:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26257:1;26238:7;:16;26246:7;26238:16;;;;;;;;;;;;;;;;:20;26235:108;;;26294:37;26314:7;:16;26322:7;26314:16;;;;;;;;;;;;;;;;26294:19;:37::i;:::-;26275:7;:16;26283:7;26275:16;;;;;;;;;;;;;;;:56;;;;26235:108;26376:4;26353:11;:20;26365:7;26353:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;26391:9;26406:7;26391:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26090:332:::0;:::o;21327:201::-;20649:12;:10;:12::i;:::-;20638:23;;:7;:5;:7::i;:::-;:23;;;20630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21436:1:::1;21416:22;;:8;:22;;;;21408:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21492:28;21511:8;21492:18;:28::i;:::-;21327:201:::0;:::o;26430:478::-;20649:12;:10;:12::i;:::-;20638:23;;:7;:5;:7::i;:::-;:23;;;20630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26511:11:::1;:20;26523:7;26511:20;;;;;;;;;;;;;;;;;;;;;;;;;26503:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26579:9;26574:327;26598:9;:16;;;;26594:1;:20;26574:327;;;26656:7;26640:23;;:9;26650:1;26640:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;26636:254;;;26699:9;26728:1;26709:9;:16;;;;:20;;;;:::i;:::-;26699:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26684:9;26694:1;26684:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;26768:1;26749:7;:16;26757:7;26749:16;;;;;;;;;;;;;;;:20;;;;26811:5;26788:11;:20;26800:7;26788:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;26835:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;26869:5;;26636:254;26616:3;;;;;:::i;:::-;;;;26574:327;;;;26430:478:::0;:::o;19134:98::-;19187:7;19214:10;19207:17;;19134:98;:::o;30462:411::-;30521:7;30530;30539;30548;30557;30578:23;30603:12;30619:20;30631:7;30619:11;:20::i;:::-;30577:62;;;;30650:19;30673:10;:8;:10::i;:::-;30650:33;;30695:15;30712:23;30737:12;30753:39;30765:7;30774:4;30780:11;30753;:39::i;:::-;30694:98;;;;;;30811:7;30820:15;30837:4;30843:15;30860:4;30803:62;;;;;;;;;;;;;;;;30462:411;;;;;;;:::o;11776:98::-;11834:7;11865:1;11861;:5;;;;:::i;:::-;11854:12;;11776:98;;;;:::o;11395:::-;11453:7;11484:1;11480;:5;;;;:::i;:::-;11473:12;;11395:98;;;;:::o;26916:337::-;27026:1;27009:19;;:5;:19;;;;27001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27107:1;27088:21;;:7;:21;;;;27080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27191:6;27161:11;:18;27173:5;27161:18;;;;;;;;;;;;;;;:27;27180:7;27161:27;;;;;;;;;;;;;;;:36;;;;27229:7;27213:32;;27222:5;27213:32;;;27238:6;27213:32;;;;;;:::i;:::-;;;;;;;;26916:337;;;:::o;27261:931::-;27376:1;27358:20;;:6;:20;;;;27350:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27460:1;27439:23;;:9;:23;;;;27431:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27530:1;27521:6;:10;27513:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27592:11;:19;27604:6;27592:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;27616:11;:22;27628:9;27616:22;;;;;;;;;;;;;;;;;;;;;;;;;27615:23;27592:46;27588:597;;;27655:48;27677:6;27685:9;27696:6;27655:21;:48::i;:::-;27588:597;;;27726:11;:19;27738:6;27726:19;;;;;;;;;;;;;;;;;;;;;;;;;27725:20;:46;;;;;27749:11;:22;27761:9;27749:22;;;;;;;;;;;;;;;;;;;;;;;;;27725:46;27721:464;;;27788:46;27808:6;27816:9;27827:6;27788:19;:46::i;:::-;27721:464;;;27857:11;:19;27869:6;27857:19;;;;;;;;;;;;;;;;;;;;;;;;;27856:20;:47;;;;;27881:11;:22;27893:9;27881:22;;;;;;;;;;;;;;;;;;;;;;;;;27880:23;27856:47;27852:333;;;27920:44;27938:6;27946:9;27957:6;27920:17;:44::i;:::-;27852:333;;;27986:11;:19;27998:6;27986:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;28009:11;:22;28021:9;28009:22;;;;;;;;;;;;;;;;;;;;;;;;;27986:45;27982:203;;;28048:48;28070:6;28078:9;28089:6;28048:21;:48::i;:::-;27982:203;;;28129:44;28147:6;28155:9;28166:6;28129:17;:44::i;:::-;27982:203;27852:333;27721:464;27588:597;27261:931;;;:::o;13674:240::-;13794:7;13852:1;13847;:6;;13855:12;13839:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13894:1;13890;:5;13883:12;;13674:240;;;;;:::o;31454:163::-;31495:7;31516:15;31533;31552:19;:17;:19::i;:::-;31515:56;;;;31589:20;31601:7;31589;:11;;:20;;;;:::i;:::-;31582:27;;;;31454:163;:::o;12532:98::-;12590:7;12621:1;12617;:5;;;;:::i;:::-;12610:12;;12532:98;;;;:::o;21688:191::-;21762:16;21781:6;;;;;;;;;;;21762:25;;21807:8;21798:6;;:17;;;;;;;;;;;;;;;;;;21862:8;21831:40;;21852:8;21831:40;;;;;;;;;;;;21751:128;21688:191;:::o;30881:223::-;30941:7;30950;30970:12;30985:16;30997:3;30985:7;:11;;:16;;;;:::i;:::-;30970:31;;31012:23;31038:17;31050:4;31038:7;:11;;:17;;;;:::i;:::-;31012:43;;31074:15;31091:4;31066:30;;;;;;30881:223;;;:::o;31112:334::-;31207:7;31216;31225;31245:15;31263:24;31275:11;31263:7;:11;;:24;;;;:::i;:::-;31245:42;;31298:12;31313:21;31322:11;31313:4;:8;;:21;;;;:::i;:::-;31298:36;;31345:23;31371:17;31383:4;31371:7;:11;;:17;;;;:::i;:::-;31345:43;;31407:7;31416:15;31433:4;31399:39;;;;;;;;;31112:334;;;;;;;:::o;29197:509::-;29300:15;29317:23;29342:12;29356:23;29381:12;29397:19;29408:7;29397:10;:19::i;:::-;29299:117;;;;;;;;;;29445:28;29465:7;29445;:15;29453:6;29445:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29427:7;:15;29435:6;29427:15;;;;;;;;;;;;;;;:46;;;;29502:28;29522:7;29502;:15;29510:6;29502:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29484:7;:15;29492:6;29484:15;;;;;;;;;;;;;;;:46;;;;29562:39;29585:15;29562:7;:18;29570:9;29562:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29541:7;:18;29549:9;29541:18;;;;;;;;;;;;;;;:60;;;;29615:23;29627:4;29633;29615:11;:23::i;:::-;29671:9;29654:44;;29663:6;29654:44;;;29682:15;29654:44;;;;;;:::i;:::-;;;;;;;;29288:418;;;;;29197:509;;;:::o;28660:529::-;28761:15;28778:23;28803:12;28817:23;28842:12;28858:19;28869:7;28858:10;:19::i;:::-;28760:117;;;;;;;;;;28906:28;28926:7;28906;:15;28914:6;28906:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28888:7;:15;28896:6;28888:15;;;;;;;;;;;;;;;:46;;;;28966:39;28989:15;28966:7;:18;28974:9;28966:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28945:7;:18;28953:9;28945:18;;;;;;;;;;;;;;;:60;;;;29037:39;29060:15;29037:7;:18;29045:9;29037:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29016:7;:18;29024:9;29016:18;;;;;;;;;;;;;;;:60;;;;29098:23;29110:4;29116;29098:11;:23::i;:::-;29154:9;29137:44;;29146:6;29137:44;;;29165:15;29137:44;;;;;;:::i;:::-;;;;;;;;28749:440;;;;;28660:529;;;:::o;28200:452::-;28299:15;28316:23;28341:12;28355:23;28380:12;28396:19;28407:7;28396:10;:19::i;:::-;28298:117;;;;;;;;;;28444:28;28464:7;28444;:15;28452:6;28444:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28426:7;:15;28434:6;28426:15;;;;;;;;;;;;;;;:46;;;;28504:39;28527:15;28504:7;:18;28512:9;28504:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28483:7;:18;28491:9;28483:18;;;;;;;;;;;;;;;:60;;;;28561:23;28573:4;28579;28561:11;:23::i;:::-;28617:9;28600:44;;28609:6;28600:44;;;28628:15;28600:44;;;;;;:::i;:::-;;;;;;;;28287:365;;;;;28200:452;;;:::o;29714:585::-;29817:15;29834:23;29859:12;29873:23;29898:12;29914:19;29925:7;29914:10;:19::i;:::-;29816:117;;;;;;;;;;29962:28;29982:7;29962;:15;29970:6;29962:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29944:7;:15;29952:6;29944:15;;;;;;;;;;;;;;;:46;;;;30019:28;30039:7;30019;:15;30027:6;30019:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30001:7;:15;30009:6;30001:15;;;;;;;;;;;;;;;:46;;;;30079:39;30102:15;30079:7;:18;30087:9;30079:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30058:7;:18;30066:9;30058:18;;;;;;;;;;;;;;;:60;;;;30150:39;30173:15;30150:7;:18;30158:9;30150:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30129:7;:18;30137:9;30129:18;;;;;;;;;;;;;;;:60;;;;30208:23;30220:4;30226;30208:11;:23::i;:::-;30264:9;30247:44;;30256:6;30247:44;;;30275:15;30247:44;;;;;;:::i;:::-;;;;;;;;29805:494;;;;;29714:585;;;:::o;31625:561::-;31675:7;31684;31704:15;31722:7;;31704:25;;31740:15;22502:29;31740:25;;31787:9;31782:289;31806:9;:16;;;;31802:1;:20;31782:289;;;31872:7;31848;:21;31856:9;31866:1;31856:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31848:21;;;;;;;;;;;;;;;;:31;:66;;;;31907:7;31883;:21;31891:9;31901:1;31891:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31883:21;;;;;;;;;;;;;;;;:31;31848:66;31844:97;;;31924:7;;22502:29;31916:25;;;;;;;;;31844:97;31966:34;31978:7;:21;31986:9;31996:1;31986:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31978:21;;;;;;;;;;;;;;;;31966:7;:11;;:34;;;;:::i;:::-;31956:44;;32025:34;32037:7;:21;32045:9;32055:1;32045:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32037:21;;;;;;;;;;;;;;;;32025:7;:11;;:34;;;;:::i;:::-;32015:44;;31824:3;;;;;:::i;:::-;;;;31782:289;;;;32095:20;22502:29;32095:7;;:11;;:20;;;;:::i;:::-;32085:7;:30;32081:61;;;32125:7;;22502:29;32117:25;;;;;;;;32081:61;32161:7;32170;32153:25;;;;;;31625:561;;;:::o;12133:98::-;12191:7;12222:1;12218;:5;;;;:::i;:::-;12211:12;;12133:98;;;;:::o;30307:147::-;30385:17;30397:4;30385:7;;:11;;:17;;;;:::i;:::-;30375:7;:27;;;;30426:20;30441:4;30426:10;;:14;;:20;;;;:::i;:::-;30413:10;:33;;;;30307:147;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;152:133;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;291:139;;;;:::o;436:329::-;495:6;544:2;532:9;523:7;519:23;515:32;512:119;;;550:79;;:::i;:::-;512:119;670:1;695:53;740:7;731:6;720:9;716:22;695:53;:::i;:::-;685:63;;641:117;436:329;;;;:::o;771:474::-;839:6;847;896:2;884:9;875:7;871:23;867:32;864:119;;;902:79;;:::i;:::-;864:119;1022:1;1047:53;1092:7;1083:6;1072:9;1068:22;1047:53;:::i;:::-;1037:63;;993:117;1149:2;1175:53;1220:7;1211:6;1200:9;1196:22;1175:53;:::i;:::-;1165:63;;1120:118;771:474;;;;;:::o;1251:619::-;1328:6;1336;1344;1393:2;1381:9;1372:7;1368:23;1364:32;1361:119;;;1399:79;;:::i;:::-;1361:119;1519:1;1544:53;1589:7;1580:6;1569:9;1565:22;1544:53;:::i;:::-;1534:63;;1490:117;1646:2;1672:53;1717:7;1708:6;1697:9;1693:22;1672:53;:::i;:::-;1662:63;;1617:118;1774:2;1800:53;1845:7;1836:6;1825:9;1821:22;1800:53;:::i;:::-;1790:63;;1745:118;1251:619;;;;;:::o;1876:474::-;1944:6;1952;2001:2;1989:9;1980:7;1976:23;1972:32;1969:119;;;2007:79;;:::i;:::-;1969:119;2127:1;2152:53;2197:7;2188:6;2177:9;2173:22;2152:53;:::i;:::-;2142:63;;2098:117;2254:2;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2225:118;1876:474;;;;;:::o;2356:329::-;2415:6;2464:2;2452:9;2443:7;2439:23;2435:32;2432:119;;;2470:79;;:::i;:::-;2432:119;2590:1;2615:53;2660:7;2651:6;2640:9;2636:22;2615:53;:::i;:::-;2605:63;;2561:117;2356:329;;;;:::o;2691:468::-;2756:6;2764;2813:2;2801:9;2792:7;2788:23;2784:32;2781:119;;;2819:79;;:::i;:::-;2781:119;2939:1;2964:53;3009:7;3000:6;2989:9;2985:22;2964:53;:::i;:::-;2954:63;;2910:117;3066:2;3092:50;3134:7;3125:6;3114:9;3110:22;3092:50;:::i;:::-;3082:60;;3037:115;2691:468;;;;;:::o;3165:118::-;3252:24;3270:5;3252:24;:::i;:::-;3247:3;3240:37;3165:118;;:::o;3289:109::-;3370:21;3385:5;3370:21;:::i;:::-;3365:3;3358:34;3289:109;;:::o;3404:364::-;3492:3;3520:39;3553:5;3520:39;:::i;:::-;3575:71;3639:6;3634:3;3575:71;:::i;:::-;3568:78;;3655:52;3700:6;3695:3;3688:4;3681:5;3677:16;3655:52;:::i;:::-;3732:29;3754:6;3732:29;:::i;:::-;3727:3;3723:39;3716:46;;3496:272;3404:364;;;;:::o;3774:366::-;3916:3;3937:67;4001:2;3996:3;3937:67;:::i;:::-;3930:74;;4013:93;4102:3;4013:93;:::i;:::-;4131:2;4126:3;4122:12;4115:19;;3774:366;;;:::o;4146:::-;4288:3;4309:67;4373:2;4368:3;4309:67;:::i;:::-;4302:74;;4385:93;4474:3;4385:93;:::i;:::-;4503:2;4498:3;4494:12;4487:19;;4146:366;;;:::o;4518:::-;4660:3;4681:67;4745:2;4740:3;4681:67;:::i;:::-;4674:74;;4757:93;4846:3;4757:93;:::i;:::-;4875:2;4870:3;4866:12;4859:19;;4518:366;;;:::o;4890:::-;5032:3;5053:67;5117:2;5112:3;5053:67;:::i;:::-;5046:74;;5129:93;5218:3;5129:93;:::i;:::-;5247:2;5242:3;5238:12;5231:19;;4890:366;;;:::o;5262:::-;5404:3;5425:67;5489:2;5484:3;5425:67;:::i;:::-;5418:74;;5501:93;5590:3;5501:93;:::i;:::-;5619:2;5614:3;5610:12;5603:19;;5262:366;;;:::o;5634:::-;5776:3;5797:67;5861:2;5856:3;5797:67;:::i;:::-;5790:74;;5873:93;5962:3;5873:93;:::i;:::-;5991:2;5986:3;5982:12;5975:19;;5634:366;;;:::o;6006:::-;6148:3;6169:67;6233:2;6228:3;6169:67;:::i;:::-;6162:74;;6245:93;6334:3;6245:93;:::i;:::-;6363:2;6358:3;6354:12;6347:19;;6006:366;;;:::o;6378:::-;6520:3;6541:67;6605:2;6600:3;6541:67;:::i;:::-;6534:74;;6617:93;6706:3;6617:93;:::i;:::-;6735:2;6730:3;6726:12;6719:19;;6378:366;;;:::o;6750:::-;6892:3;6913:67;6977:2;6972:3;6913:67;:::i;:::-;6906:74;;6989:93;7078:3;6989:93;:::i;:::-;7107:2;7102:3;7098:12;7091:19;;6750:366;;;:::o;7122:::-;7264:3;7285:67;7349:2;7344:3;7285:67;:::i;:::-;7278:74;;7361:93;7450:3;7361:93;:::i;:::-;7479:2;7474:3;7470:12;7463:19;;7122:366;;;:::o;7494:::-;7636:3;7657:67;7721:2;7716:3;7657:67;:::i;:::-;7650:74;;7733:93;7822:3;7733:93;:::i;:::-;7851:2;7846:3;7842:12;7835:19;;7494:366;;;:::o;7866:118::-;7953:24;7971:5;7953:24;:::i;:::-;7948:3;7941:37;7866:118;;:::o;7990:112::-;8073:22;8089:5;8073:22;:::i;:::-;8068:3;8061:35;7990:112;;:::o;8108:222::-;8201:4;8239:2;8228:9;8224:18;8216:26;;8252:71;8320:1;8309:9;8305:17;8296:6;8252:71;:::i;:::-;8108:222;;;;:::o;8336:210::-;8423:4;8461:2;8450:9;8446:18;8438:26;;8474:65;8536:1;8525:9;8521:17;8512:6;8474:65;:::i;:::-;8336:210;;;;:::o;8552:313::-;8665:4;8703:2;8692:9;8688:18;8680:26;;8752:9;8746:4;8742:20;8738:1;8727:9;8723:17;8716:47;8780:78;8853:4;8844:6;8780:78;:::i;:::-;8772:86;;8552:313;;;;:::o;8871:419::-;9037:4;9075:2;9064:9;9060:18;9052:26;;9124:9;9118:4;9114:20;9110:1;9099:9;9095:17;9088:47;9152:131;9278:4;9152:131;:::i;:::-;9144:139;;8871:419;;;:::o;9296:::-;9462:4;9500:2;9489:9;9485:18;9477:26;;9549:9;9543:4;9539:20;9535:1;9524:9;9520:17;9513:47;9577:131;9703:4;9577:131;:::i;:::-;9569:139;;9296:419;;;:::o;9721:::-;9887:4;9925:2;9914:9;9910:18;9902:26;;9974:9;9968:4;9964:20;9960:1;9949:9;9945:17;9938:47;10002:131;10128:4;10002:131;:::i;:::-;9994:139;;9721:419;;;:::o;10146:::-;10312:4;10350:2;10339:9;10335:18;10327:26;;10399:9;10393:4;10389:20;10385:1;10374:9;10370:17;10363:47;10427:131;10553:4;10427:131;:::i;:::-;10419:139;;10146:419;;;:::o;10571:::-;10737:4;10775:2;10764:9;10760:18;10752:26;;10824:9;10818:4;10814:20;10810:1;10799:9;10795:17;10788:47;10852:131;10978:4;10852:131;:::i;:::-;10844:139;;10571:419;;;:::o;10996:::-;11162:4;11200:2;11189:9;11185:18;11177:26;;11249:9;11243:4;11239:20;11235:1;11224:9;11220:17;11213:47;11277:131;11403:4;11277:131;:::i;:::-;11269:139;;10996:419;;;:::o;11421:::-;11587:4;11625:2;11614:9;11610:18;11602:26;;11674:9;11668:4;11664:20;11660:1;11649:9;11645:17;11638:47;11702:131;11828:4;11702:131;:::i;:::-;11694:139;;11421:419;;;:::o;11846:::-;12012:4;12050:2;12039:9;12035:18;12027:26;;12099:9;12093:4;12089:20;12085:1;12074:9;12070:17;12063:47;12127:131;12253:4;12127:131;:::i;:::-;12119:139;;11846:419;;;:::o;12271:::-;12437:4;12475:2;12464:9;12460:18;12452:26;;12524:9;12518:4;12514:20;12510:1;12499:9;12495:17;12488:47;12552:131;12678:4;12552:131;:::i;:::-;12544:139;;12271:419;;;:::o;12696:::-;12862:4;12900:2;12889:9;12885:18;12877:26;;12949:9;12943:4;12939:20;12935:1;12924:9;12920:17;12913:47;12977:131;13103:4;12977:131;:::i;:::-;12969:139;;12696:419;;;:::o;13121:::-;13287:4;13325:2;13314:9;13310:18;13302:26;;13374:9;13368:4;13364:20;13360:1;13349:9;13345:17;13338:47;13402:131;13528:4;13402:131;:::i;:::-;13394:139;;13121:419;;;:::o;13546:222::-;13639:4;13677:2;13666:9;13662:18;13654:26;;13690:71;13758:1;13747:9;13743:17;13734:6;13690:71;:::i;:::-;13546:222;;;;:::o;13774:214::-;13863:4;13901:2;13890:9;13886:18;13878:26;;13914:67;13978:1;13967:9;13963:17;13954:6;13914:67;:::i;:::-;13774:214;;;;:::o;14075:99::-;14127:6;14161:5;14155:12;14145:22;;14075:99;;;:::o;14180:169::-;14264:11;14298:6;14293:3;14286:19;14338:4;14333:3;14329:14;14314:29;;14180:169;;;;:::o;14355:305::-;14395:3;14414:20;14432:1;14414:20;:::i;:::-;14409:25;;14448:20;14466:1;14448:20;:::i;:::-;14443:25;;14602:1;14534:66;14530:74;14527:1;14524:81;14521:107;;;14608:18;;:::i;:::-;14521:107;14652:1;14649;14645:9;14638:16;;14355:305;;;;:::o;14666:185::-;14706:1;14723:20;14741:1;14723:20;:::i;:::-;14718:25;;14757:20;14775:1;14757:20;:::i;:::-;14752:25;;14796:1;14786:35;;14801:18;;:::i;:::-;14786:35;14843:1;14840;14836:9;14831:14;;14666:185;;;;:::o;14857:348::-;14897:7;14920:20;14938:1;14920:20;:::i;:::-;14915:25;;14954:20;14972:1;14954:20;:::i;:::-;14949:25;;15142:1;15074:66;15070:74;15067:1;15064:81;15059:1;15052:9;15045:17;15041:105;15038:131;;;15149:18;;:::i;:::-;15038:131;15197:1;15194;15190:9;15179:20;;14857:348;;;;:::o;15211:191::-;15251:4;15271:20;15289:1;15271:20;:::i;:::-;15266:25;;15305:20;15323:1;15305:20;:::i;:::-;15300:25;;15344:1;15341;15338:8;15335:34;;;15349:18;;:::i;:::-;15335:34;15394:1;15391;15387:9;15379:17;;15211:191;;;;:::o;15408:96::-;15445:7;15474:24;15492:5;15474:24;:::i;:::-;15463:35;;15408:96;;;:::o;15510:90::-;15544:7;15587:5;15580:13;15573:21;15562:32;;15510:90;;;:::o;15606:126::-;15643:7;15683:42;15676:5;15672:54;15661:65;;15606:126;;;:::o;15738:77::-;15775:7;15804:5;15793:16;;15738:77;;;:::o;15821:86::-;15856:7;15896:4;15889:5;15885:16;15874:27;;15821:86;;;:::o;15913:307::-;15981:1;15991:113;16005:6;16002:1;15999:13;15991:113;;;16090:1;16085:3;16081:11;16075:18;16071:1;16066:3;16062:11;16055:39;16027:2;16024:1;16020:10;16015:15;;15991:113;;;16122:6;16119:1;16116:13;16113:101;;;16202:1;16193:6;16188:3;16184:16;16177:27;16113:101;15962:258;15913:307;;;:::o;16226:320::-;16270:6;16307:1;16301:4;16297:12;16287:22;;16354:1;16348:4;16344:12;16375:18;16365:81;;16431:4;16423:6;16419:17;16409:27;;16365:81;16493:2;16485:6;16482:14;16462:18;16459:38;16456:84;;;16512:18;;:::i;:::-;16456:84;16277:269;16226:320;;;:::o;16552:233::-;16591:3;16614:24;16632:5;16614:24;:::i;:::-;16605:33;;16660:66;16653:5;16650:77;16647:103;;;16730:18;;:::i;:::-;16647:103;16777:1;16770:5;16766:13;16759:20;;16552:233;;;:::o;16791:180::-;16839:77;16836:1;16829:88;16936:4;16933:1;16926:15;16960:4;16957:1;16950:15;16977:180;17025:77;17022:1;17015:88;17122:4;17119:1;17112:15;17146:4;17143:1;17136:15;17163:180;17211:77;17208:1;17201:88;17308:4;17305:1;17298:15;17332:4;17329:1;17322:15;17349:180;17397:77;17394:1;17387:88;17494:4;17491:1;17484:15;17518:4;17515:1;17508:15;17535:180;17583:77;17580:1;17573:88;17680:4;17677:1;17670:15;17704:4;17701:1;17694:15;17844:117;17953:1;17950;17943:12;17967:102;18008:6;18059:2;18055:7;18050:2;18043:5;18039:14;18035:28;18025:38;;17967:102;;;:::o;18075:222::-;18215:34;18211:1;18203:6;18199:14;18192:58;18284:5;18279:2;18271:6;18267:15;18260:30;18075:222;:::o;18303:229::-;18443:34;18439:1;18431:6;18427:14;18420:58;18512:12;18507:2;18499:6;18495:15;18488:37;18303:229;:::o;18538:225::-;18678:34;18674:1;18666:6;18662:14;18655:58;18747:8;18742:2;18734:6;18730:15;18723:33;18538:225;:::o;18769:221::-;18909:34;18905:1;18897:6;18893:14;18886:58;18978:4;18973:2;18965:6;18961:15;18954:29;18769:221;:::o;18996:177::-;19136:29;19132:1;19124:6;19120:14;19113:53;18996:177;:::o;19179:181::-;19319:33;19315:1;19307:6;19303:14;19296:57;19179:181;:::o;19366:182::-;19506:34;19502:1;19494:6;19490:14;19483:58;19366:182;:::o;19554:228::-;19694:34;19690:1;19682:6;19678:14;19671:58;19763:11;19758:2;19750:6;19746:15;19739:36;19554:228;:::o;19788:224::-;19928:34;19924:1;19916:6;19912:14;19905:58;19997:7;19992:2;19984:6;19980:15;19973:32;19788:224;:::o;20018:223::-;20158:34;20154:1;20146:6;20142:14;20135:58;20227:6;20222:2;20214:6;20210:15;20203:31;20018:223;:::o;20247:231::-;20387:34;20383:1;20375:6;20371:14;20364:58;20456:14;20451:2;20443:6;20439:15;20432:39;20247:231;:::o;20484:122::-;20557:24;20575:5;20557:24;:::i;:::-;20550:5;20547:35;20537:63;;20596:1;20593;20586:12;20537:63;20484:122;:::o;20612:116::-;20682:21;20697:5;20682:21;:::i;:::-;20675:5;20672:32;20662:60;;20718:1;20715;20708:12;20662:60;20612:116;:::o;20734:122::-;20807:24;20825:5;20807:24;:::i;:::-;20800:5;20797:35;20787:63;;20846:1;20843;20836:12;20787:63;20734:122;:::o

Swarm Source

ipfs://b440d7ca078ee8ebf2f33ca3920c7136c71ba848dc93f0d66f6e02ece8395259
Loading