Token Sphynx Labs

Overview CRC20

Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
1,500,000,000 SPHYNX

Holders:
291 addresses

Transfers:
-

Contract:
0xa776f5b86cc520861f55a261515264e3bd86e72e0xa776f5b86cC520861F55a261515264E3bd86E72e

Decimals:
18

Social Profiles:
Not Available, Update ?

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
SphynxToken

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2023-04-07
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

/*

  █████████  ███████████  █████   █████ █████ █████ ██████   █████ █████ █████    █████         █████████   ███████████   █████████ 
 ███░░░░░███░░███░░░░░███░░███   ░░███ ░░███ ░░███ ░░██████ ░░███ ░░███ ░░███    ░░███         ███░░░░░███ ░░███░░░░░███ ███░░░░░███
░███    ░░░  ░███    ░███ ░███    ░███  ░░███ ███   ░███░███ ░███  ░░███ ███      ░███        ░███    ░███  ░███    ░███░███    ░░░ 
░░█████████  ░██████████  ░███████████   ░░█████    ░███░░███░███   ░░█████       ░███        ░███████████  ░██████████ ░░█████████ 
 ░░░░░░░░███ ░███░░░░░░   ░███░░░░░███    ░░███     ░███ ░░██████    ███░███      ░███        ░███░░░░░███  ░███░░░░░███ ░░░░░░░░███
 ███    ░███ ░███         ░███    ░███     ░███     ░███  ░░█████   ███ ░░███     ░███      █ ░███    ░███  ░███    ░███ ███    ░███
░░█████████  █████        █████   █████    █████    █████  ░░█████ █████ █████    ███████████ █████   █████ ███████████ ░░█████████ 
 ░░░░░░░░░  ░░░░░        ░░░░░   ░░░░░    ░░░░░    ░░░░░    ░░░░░ ░░░░░ ░░░░░    ░░░░░░░░░░░ ░░░░░   ░░░░░ ░░░░░░░░░░░   ░░░░░░░░░  

  
                     _ _   _          ____               _____       ______ _   _____  _       _    __                     
               /\   | | | (_)        / __ \             |  __ \     |  ____(_) |  __ \| |     | |  / _|                    
              /  \  | | |  _ _ __   | |  | |_ __   ___  | |  | | ___| |__   _  | |__) | | __ _| |_| |_ ___  _ __ _ __ ___  
             / /\ \ | | | | | '_ \  | |  | | '_ \ / _ \ | |  | |/ _ \  __| | | |  ___/| |/ _` | __|  _/ _ \| '__| '_ ` _ \ 
            / ____ \| | | | | | | | | |__| | | | |  __/ | |__| |  __/ |    | | | |    | | (_| | |_| || (_) | |  | | | | | |
           /_/    \_\_|_| |_|_| |_|  \____/|_| |_|\___| |_____/ \___|_|    |_| |_|    |_|\__,_|\__|_| \___/|_|  |_| |_| |_|
*/ 

contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor() internal {}

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

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

contract Manageable is Context {
    address private _manager;

    event ManagementTransferred(address indexed previousManager, address indexed newManager);

    /**
     * @dev Initializes the contract setting the deployer as the initial manager.
     */
    constructor() internal {
        address msgSender = _msgSender();
        _manager = msgSender;
        emit ManagementTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the manager.
     */
    modifier onlyManager() {
        require(_manager == _msgSender(), 'Manageable: caller is not the manager');
        _;
    }

    /**
     * @dev Leaves the contract without manager. It will not be possible to call
     * `onlyManager` functions anymore. Can only be called by the current manager.
     *
     * NOTE: Renouncing management will leave the contract without an manager,
     * thereby removing any functionality that is only available to the manager.
     */
    function renounceManagement() public onlyManager {
        emit ManagementTransferred(_manager, address(0));
        _manager = address(0);
    }

    /**
     * @dev Transfers management of the contract to a new account (`newManager`).
     * Can only be called by the current manager.
     */
    function transferManagement(address newManager) public onlyManager {
        _transferManagement(newManager);
    }

    /**
     * @dev Transfers management of the contract to a new account (`newManager`).
     */
    function _transferManagement(address newManager) internal {
        require(newManager != address(0), 'Manageable: new manager is the zero address');
        emit ManagementTransferred(_manager, newManager);
        _manager = newManager;
    }
}

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() internal {
        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 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 onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), 'Ownable: new owner is the zero address');
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

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

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

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

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

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

    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

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


contract BEP20 is Context, IBEP20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _decimals = 18;
    }

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external override view returns (address) {
        return owner();
    }

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

    /**
     * @dev Returns the token decimals.
     */
    function decimals() public override view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Returns the token symbol.
     */
    function symbol() public override view returns (string memory) {
        return _symbol;
    }

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

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

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

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

    /**
     * @dev See {BEP20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {BEP20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {BEP20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(amount, 'BEP20: transfer amount exceeds allowance')
        );
        return true;
    }

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

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {BEP20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(subtractedValue, 'BEP20: decreased allowance below zero')
        );
        return true;
    }

    /**
     * @dev Destroys `amount` tokens from `msg.sender`, decreasing the total supply.
     *
     */
    function burn(uint256 amount) public returns (bool) {
        _burn(_msgSender(), amount);
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), 'BEP20: transfer from the zero address');
        require(recipient != address(0), 'BEP20: transfer to the zero address');

        _balances[sender] = _balances[sender].sub(amount, 'BEP20: transfer amount exceeds balance');
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), 'BEP20: mint to the zero address');

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), 'BEP20: burn from the zero address');

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal {
        require(owner != address(0), 'BEP20: approve from the zero address');
        require(spender != address(0), 'BEP20: approve to the zero address');

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

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See {_burn} and {_approve}.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(
            account,
            _msgSender(),
            _allowances[account][_msgSender()].sub(amount, 'BEP20: burn amount exceeds allowance')
        );
    }
}

library SafeBEP20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(
        IBEP20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IBEP20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IBEP20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IBEP20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            'SafeBEP20: approve from non-zero to non-zero allowance'
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IBEP20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IBEP20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(
            value,
            'SafeBEP20: decreased allowance below zero'
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IBEP20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, 'SafeBEP20: low-level call failed');
        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), 'SafeBEP20: BEP20 operation did not succeed');
        }
    }
}

interface ISphynxPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function swapFee() external view returns (uint32);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
    function setSwapFee(uint32) external;
}

interface ISphynxFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setSwapFee(address _pair, uint32 _swapFee) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut, uint swapFee) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut, uint swapFee) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


interface ISphynxRouter02 is ISphynxRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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


contract SphynxToken is BEP20, Manageable {
    using SafeMath for uint256;
    using SafeBEP20 for IBEP20;

    ISphynxRouter02 public sphynxSwapRouter;
    address public sphynxSwapPair;

    bool private swapping;

    mapping(address => bool) public masterChef;
    address public sphynxBridge;
    address public liquidityWallet;

    address payable public marketingWallet =
        payable(0x3e20C4bFf0f34BA46f9D33599d3aEAa7e815B19f);
    address payable public developmentWallet =
        payable(0x93c3ae3C4d2B6F98533A4b1E8df6F25DcC37f3Ad);

    uint256 public nativeAmountToSwap = 10000 ether;

    uint256 public marketingFeeOnBuy;
    uint256 public developmentFeeOnBuy;
    uint256 public burnFeeOnSell;
    uint256 public burnFeeOnBuy;
    uint256 public totalFeesOnBuy;
    uint256 public marketingFeeOnSell;
    uint256 public developmentFeeOnSell;
    uint256 public liquidityFeeOnBuy;
    uint256 public liquidityFeeOnSell;
    uint256 public totalFeesOnSell;
    uint256 public blockNumber;
    uint256 public liquidityShare = 2;
    uint256 public marketingShare = 10;
    uint256 public developmentShare = 0;
    uint256 public totalShares = 12;

    bool public SwapAndLiquifyEnabled = false;
    bool public stopTrade = false;

    bool public trueBurn = false;
    uint256 public burnContractBalance;

    uint256 public maxTxAmount = 1000000000 * (10**18); // Initial Max Tx Amount
    mapping(address => bool) signers;
    mapping(uint256 => address) signersArray;
    mapping(address => bool) stopTradeSign;
    mapping(address => bool) blackSign;

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;

    // getting fee addresses
    mapping(address => bool) public _isGetFees;
    mapping(address => bool) public blackList;

    // store addresses that are automated market maker pairs. Any transfer to these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    modifier onlyMasterChefAndBridge() {
        require(
            masterChef[msg.sender] || msg.sender == sphynxBridge,
            "Permission Denied"
        );
        _;
    }

    modifier onlySigner() {
        require(signers[msg.sender], "not-a-signer");
        _;
    }

    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    // Contract Events
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event GetFee(address indexed account, bool isGetFee);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event MarketingWalletUpdated(
        address indexed newMarketingWallet,
        address indexed oldMarketingWallet
    );
    event DevelopmentWalletUpdated(
        address indexed newDevelopmentWallet,
        address indexed oldDevelopmentWallet
    );
    event UpdateSphynxSwapRouter(
        address indexed newAddress,
        address indexed oldAddress
    );
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 nativeReceived,
        uint256 tokensIntoLiqudity
    );
    event UpdateSwapAndLiquify(bool value);
    event SetMarketingFee(uint256 onBuy, uint256 onSell);
    event SetDevelopmentFee(uint256 onBuy, uint256 onSell);
    event SetBurnFee(uint256 onBuy, uint256 onSell);
    event SetDistribution(
        uint256 liquidity,
        uint256 marketing,
        uint256 development
    );
    event SetLiquidityFee(uint256 onBuy, uint256 onSell);
    event SetNativeAmountToSwap(uint256 nativeAmountToSwap);
    event SetBlockNumber(uint256 blockNumber);
    event UpdateMasterChef(address masterChef);
    event UpdateSphynxBridge(address sphynxBridge);
    event UpdateMaxTxAmount(uint256 txAmount);


    constructor() public BEP20("Sphynx Labs", "SPHYNX") {
        marketingFeeOnBuy = 2;
        marketingFeeOnSell = 8;
        developmentFeeOnBuy = 0;
        developmentFeeOnSell = 0;
        burnFeeOnSell = 1;
        burnFeeOnBuy = 1;
        liquidityFeeOnBuy = 0;
        liquidityFeeOnSell = 1;
        liquidityWallet = msg.sender;
        totalFeesOnBuy = marketingFeeOnBuy.add(developmentFeeOnBuy).add(
            liquidityFeeOnBuy
        );
        totalFeesOnSell = marketingFeeOnSell.add(developmentFeeOnSell).add(
            liquidityFeeOnSell
        );

        ISphynxRouter02 _sphynxSwapRouter = ISphynxRouter02(
            0x145863Eb42Cf62847A6Ca784e6416C1682b1b2Ae
        ); // mainnet
        // Create a sphynxswap pair for SPHYNX
        address _sphynxSwapPair = ISphynxFactory(_sphynxSwapRouter.factory())
            .createPair(address(this), _sphynxSwapRouter.WETH());

        sphynxSwapRouter = _sphynxSwapRouter;
        sphynxSwapPair = _sphynxSwapPair;

        _setAutomatedMarketMakerPair(sphynxSwapPair, true);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(marketingWallet, true);
        excludeFromFees(developmentWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(owner(), true);

        // set getFee addresses
        _isGetFees[_sphynxSwapPair] = true;

        _mint(owner(), 4000000000 * (10**18));

        _status = _NOT_ENTERED;

        //multi-sign-wallets
        signers[0x35BfE8dA53F94d6711F111790643D2D403992b56] = true;
        signers[0x96C463B615228981A2c30B842E8A8e4e933CEc46] = true;
        signers[0x7278fC9C49A2B6bd072b9d47E3c903ef0e12bb83] = true;
        signersArray[0] = 0x35BfE8dA53F94d6711F111790643D2D403992b56;
        signersArray[1] = 0x96C463B615228981A2c30B842E8A8e4e933CEc46;
        signersArray[2] = 0x7278fC9C49A2B6bd072b9d47E3c903ef0e12bb83;
    }

    receive() external payable {}

    // mint function for masterchef;
    function mint(address to, uint256 amount) public onlyMasterChefAndBridge {
        _mint(to, amount);
    }

    function updateSwapAndLiquifiy(bool value) public onlyManager {
        SwapAndLiquifyEnabled = value;
        emit UpdateSwapAndLiquify(value);
    }

    function updateTrueBurn(bool _value) public onlyManager {
        trueBurn = _value;
    }

    function updateLiquidityWallet(address _liquidityWallet)
        external
        onlyManager
    {
        liquidityWallet = _liquidityWallet;
    }

    function setMarketingFee(uint256 _onBuy, uint256 _onSell)
        external
        onlyManager
    {
        require(_onBuy <= 10 && _onSell <= 10, "SPHYNX: Invalid marketingFee");
        marketingFeeOnBuy = _onBuy;
        marketingFeeOnSell = _onSell;
        totalFeesOnBuy = marketingFeeOnBuy.add(developmentFeeOnBuy).add(
            liquidityFeeOnBuy
        );
        totalFeesOnSell = marketingFeeOnSell.add(developmentFeeOnSell).add(
            liquidityFeeOnSell
        );
        emit SetMarketingFee(_onBuy, _onSell);
    }

    function setDevelopmentFee(uint256 _onBuy, uint256 _onSell)
        external
        onlyManager
    {
        require(_onBuy <= 10 && _onSell <= 10, "SPHYNX: Invalid marketingFee");
        developmentFeeOnBuy = _onBuy;
        developmentFeeOnSell = _onSell;
        totalFeesOnBuy = developmentFeeOnBuy.add(marketingFeeOnBuy).add(
            liquidityFeeOnBuy
        );
        totalFeesOnSell = developmentFeeOnSell.add(marketingFeeOnSell).add(
            liquidityFeeOnSell
        );
        emit SetDevelopmentFee(_onBuy, _onSell);
    }

    function setLiquidityFee(uint256 _onBuy, uint256 _onSell)
        external
        onlyManager
    {
        require(_onBuy <= 10 && _onSell <= 10, "SPHYNX: Invalid marketingFee");
        liquidityFeeOnBuy = _onBuy;
        liquidityFeeOnSell = _onSell;
        totalFeesOnBuy = liquidityFeeOnBuy.add(developmentFeeOnBuy).add(
            marketingFeeOnBuy
        );
        totalFeesOnSell = liquidityFeeOnSell.add(developmentFeeOnSell).add(
            marketingFeeOnSell
        );
        emit SetLiquidityFee(_onBuy, _onSell);
    }

    function setBurnFee(uint256 _onBuy, uint256 _onSell) external onlyManager {
        require(_onBuy <= 10, "SPHYNX: Invalid burnFee");
        require(_onSell <= 10, "SPHYNX: Invalid burnFee");
        burnFeeOnBuy = _onBuy;
        burnFeeOnSell = _onSell;
        emit SetBurnFee(_onBuy, _onSell);
    }

    function updateShares(
        uint256 _liquidity,
        uint256 _marketing,
        uint256 _development
    ) external onlyManager {
        liquidityShare = _liquidity;
        marketingShare = _marketing;
        developmentShare = _development;
        totalShares = liquidityShare.add(marketingShare).add(developmentShare);

        emit SetDistribution(_liquidity, _marketing, _development);
    }

    function updateSphynxSwapRouter(address newAddress) public onlyManager {
        require(
            newAddress != address(sphynxSwapRouter),
            "SPHYNX: The router already has that address"
        );
        emit UpdateSphynxSwapRouter(newAddress, address(sphynxSwapRouter));
        sphynxSwapRouter = ISphynxRouter02(newAddress);
        address _sphynxSwapPair;
        _sphynxSwapPair = ISphynxFactory(sphynxSwapRouter.factory()).getPair(
            address(this),
            sphynxSwapRouter.WETH()
        );
        if (_sphynxSwapPair == address(0)) {
            _sphynxSwapPair = ISphynxFactory(sphynxSwapRouter.factory())
                .createPair(address(this), sphynxSwapRouter.WETH());
        }
        _setAutomatedMarketMakerPair(sphynxSwapPair, false);
        sphynxSwapPair = _sphynxSwapPair;
        _setAutomatedMarketMakerPair(sphynxSwapPair, true);
    }

    function updateMasterChef(address _masterChef, bool _value)
        public
        onlyManager
    {
        masterChef[_masterChef] = _value;
        emit UpdateMasterChef(_masterChef);
    }

    function updateSphynxBridge(address _sphynxBridge) public onlyManager {
        require(
            sphynxBridge != _sphynxBridge,
            "SPHYNX: SphynxBridge already exists!"
        );
        _isExcludedFromFees[sphynxBridge] = false;
        sphynxBridge = _sphynxBridge;
        _isExcludedFromFees[sphynxBridge] = true;
        emit UpdateSphynxBridge(_sphynxBridge);
    }

    function excludeFromFees(address account, bool excluded)
        public
        onlyManager
    {
        require(
            _isExcludedFromFees[account] != excluded,
            "SPHYNX: Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function setFeeAccount(address account, bool isGetFee) public onlyManager {
        require(
            _isGetFees[account] != isGetFee,
            "SPHYNX: Account is already the value of 'isGetFee'"
        );
        _isGetFees[account] = isGetFee;

        emit GetFee(account, isGetFee);
    }

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyManager
    {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "SPHYNX: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setNativeAmountToSwap(uint256 _nativeAmount) public onlyManager {
        nativeAmountToSwap = _nativeAmount;
        emit SetNativeAmountToSwap(nativeAmountToSwap);
    }

    function updateMarketingWallet(address newMarketingWallet)
        public
        onlyManager
    {
        require(
            newMarketingWallet != marketingWallet,
            "SPHYNX: The marketing wallet is already this address"
        );
        excludeFromFees(newMarketingWallet, true);
        excludeFromFees(marketingWallet, false);
        emit MarketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = payable(newMarketingWallet);
    }

    function updateDevelopmentWallet(address newDevelopmentWallet)
        public
        onlyManager
    {
        require(
            newDevelopmentWallet != developmentWallet,
            "SPHYNX: The development wallet is already this address"
        );
        excludeFromFees(newDevelopmentWallet, true);
        excludeFromFees(developmentWallet, false);
        emit DevelopmentWalletUpdated(newDevelopmentWallet, developmentWallet);
        developmentWallet = payable(newDevelopmentWallet);
    }

    function setBlockNumber() public onlyOwner {
        blockNumber = block.number;
        emit SetBlockNumber(blockNumber);
    }

    function updateMaxTxAmount(uint256 _amount) public onlyManager {
        maxTxAmount = _amount;
        emit UpdateMaxTxAmount(_amount);
    }

    function updateStopTrade(bool _value) external onlySigner {
        require(stopTrade != _value, "already-set");
        require(!stopTradeSign[msg.sender], "already-sign");
        stopTradeSign[msg.sender] = true;

        uint256 stopSignCount = 0;
        if (stopTradeSign[signersArray[0]]) {
            stopSignCount = stopSignCount + 1;
        }

        if (stopTradeSign[signersArray[1]]) {
            stopSignCount = stopSignCount + 1;
        }

        if (stopTradeSign[signersArray[2]]) {
            stopSignCount = stopSignCount + 1;
        }
        if (stopSignCount > 2) {
            stopTrade = _value;
            stopTradeSign[signersArray[0]] = false;
            stopTradeSign[signersArray[1]] = false;
            stopTradeSign[signersArray[2]] = false;
        }
    }

    function updateB(address _wallet, bool _value) external onlySigner {
        require(blackList[_wallet] != _value, "already-set");
        require(!blackSign[msg.sender], "already-sign");
        blackSign[msg.sender] = true;
        uint256 blackSignCount = 0;
        if (blackSign[signersArray[0]]) {
            blackSignCount = blackSignCount + 1;
        }

        if (blackSign[signersArray[1]]) {
            blackSignCount = blackSignCount + 1;
        }

        if (blackSign[signersArray[2]]) {
            blackSignCount = blackSignCount + 1;
        }

        if (blackSignCount >= 2) {
            blackList[_wallet] = _value;
            blackSign[signersArray[0]] = false;
            blackSign[signersArray[1]] = false;
            blackSign[signersArray[2]] = false;
        }
    }

    function updateSignerWallet(address _signer) external onlySigner {
        signers[msg.sender] = false;
        signers[_signer] = true;
        for (uint256 i = 0; i < 3; i++) {
            if (signersArray[i] == msg.sender) {
                signersArray[i] = _signer;
            }
        }
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");
        require(!stopTrade, "trade-stopped");
        require(!blackList[from] && !blackList[to], "SPHYNX: include-blackList");
        require(amount <= maxTxAmount, "max-tx-amount-overflow");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (SwapAndLiquifyEnabled) {
            uint256 contractTokenBalance = balanceOf(address(this)).sub(burnContractBalance);
            uint256 nativeTokenAmount = _getTokenAmountFromNative();

            bool canSwap = contractTokenBalance >= nativeTokenAmount;

            if (canSwap && !swapping && !automatedMarketMakerPairs[from]) {
                swapping = true;
                // Set number of tokens to sell to nativeTokenAmount
                contractTokenBalance = nativeTokenAmount;
                swapTokens(contractTokenBalance);
                swapping = false;
            }
        }

        if (_isGetFees[to] && blockNumber == 0) {
            blockNumber = block.number;
        }

        // indicates if fee should be deducted from transfer
        bool takeFee = true;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        if (takeFee) {
            if (block.number - blockNumber <= 10) {
                uint256 afterBalance = balanceOf(to) + amount;
                require(
                    afterBalance <= 250000 * (10**18),
                    "Owned amount exceeds the maxOwnedAmount"
                );
            }
            uint256 fees;
            if (_isGetFees[from] || _isGetFees[to]) {
                if (block.number - blockNumber <= 10) {
                    fees = amount.mul(99).div(10**2);
                } else {
                    uint256 burnFee;
                    if (_isGetFees[from]) {
                        fees = amount.mul(totalFeesOnBuy).div(10**2);
                        burnFee = burnFeeOnBuy;
                    } else {
                        fees = amount.mul(totalFeesOnSell).div(10**2);
                        burnFee = burnFeeOnSell;
                    }
                    uint256 burnAmount = amount.mul(burnFee).div(10**2);
                    amount = amount.sub(burnAmount);
                    super._transfer(from, address(this), burnAmount);
                    if (trueBurn) {
                        _burn(address(this), burnAmount);
                    } else {
                        burnContractBalance = burnContractBalance.add(burnAmount);
                    }
                }
                amount = amount.sub(fees);
                super._transfer(from, address(this), fees);
            }
        }

        super._transfer(from, to, amount);
    }

    function swapTokens(uint256 tokenAmount) private {
        uint256 tokensForLiquidity = tokenAmount.mul(liquidityShare).div(
            totalShares
        );
        uint256 swapTokenAmount = tokenAmount.sub(tokensForLiquidity);
        swapTokensForNative(swapTokenAmount);
        uint256 swappedNative = address(this).balance;
        uint256 nativeForLiquidity = swappedNative.mul(liquidityShare).div(
            totalShares
        );
        uint256 nativeForMarketing = swappedNative.mul(marketingShare).div(
            totalShares
        );
        uint256 nativeForDevelopment = swappedNative
            .sub(nativeForMarketing)
            .sub(nativeForLiquidity);
        if (tokensForLiquidity > 0) {
            addLiquidity(tokensForLiquidity, nativeForLiquidity);
        }
        if (nativeForMarketing > 0) {
            transferNativeToMarketingWallet(nativeForMarketing);
        }
        if (nativeForDevelopment > 0) {
            transferNativeToDevelopmentWallet(nativeForDevelopment);
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 nativeAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(sphynxSwapRouter), tokenAmount);

        // add the liquidity
        sphynxSwapRouter.addLiquidityETH{value: nativeAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

    // Swap tokens on PacakeSwap
    function swapTokensForNative(uint256 tokenAmount) private {
        // generate the sphynxswap pair path of token -> WETH
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = sphynxSwapRouter.WETH();

        _approve(address(this), address(sphynxSwapRouter), tokenAmount);

        // make the swap
        sphynxSwapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of Native
            path,
            address(this),
            block.timestamp
        );
    }

    function _getTokenAmountFromNative() internal view returns (uint256) {
        uint256 tokenAmount;
        address[] memory path = new address[](2);
        path[0] = sphynxSwapRouter.WETH();
        path[1] = address(this);
        uint256[] memory amounts = sphynxSwapRouter.getAmountsOut(
            nativeAmountToSwap,
            path
        );
        tokenAmount = amounts[1];
        return tokenAmount;
    }

    function transferNativeToMarketingWallet(uint256 amount) private {
        marketingWallet.transfer(amount);
    }

    function transferNativeToDevelopmentWallet(uint256 amount) private {
        developmentWallet.transfer(amount);
    }

    function withdrawFromBurn(uint256 _amount) external onlyManager {
        burnContractBalance = burnContractBalance.sub(_amount);
        super._transfer(address(this), msg.sender, _amount);
    }

    function withdrawNative() external payable onlyManager {
        address payable msgSender = payable(msg.sender);
        msgSender.transfer(address(this).balance);
    }


    function withdrawToken(address _token, uint256 _amount) external onlyManager {
        IBEP20(_token).safeTransfer(msg.sender, _amount);
    }
}

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":"newDevelopmentWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldDevelopmentWallet","type":"address"}],"name":"DevelopmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isGetFee","type":"bool"}],"name":"GetFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousManager","type":"address"},{"indexed":true,"internalType":"address","name":"newManager","type":"address"}],"name":"ManagementTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldMarketingWallet","type":"address"}],"name":"MarketingWalletUpdated","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"SetBlockNumber","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"onBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"onSell","type":"uint256"}],"name":"SetBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"onBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"onSell","type":"uint256"}],"name":"SetDevelopmentFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"development","type":"uint256"}],"name":"SetDistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"onBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"onSell","type":"uint256"}],"name":"SetLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"onBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"onSell","type":"uint256"}],"name":"SetMarketingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"nativeAmountToSwap","type":"uint256"}],"name":"SetNativeAmountToSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nativeReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"masterChef","type":"address"}],"name":"UpdateMasterChef","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"txAmount","type":"uint256"}],"name":"UpdateMaxTxAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sphynxBridge","type":"address"}],"name":"UpdateSphynxBridge","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateSphynxSwapRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"UpdateSwapAndLiquify","type":"event"},{"inputs":[],"name":"SwapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isGetFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeeOnSell","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":[],"name":"developmentFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"masterChef","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeAmountToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setBlockNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_onBuy","type":"uint256"},{"internalType":"uint256","name":"_onSell","type":"uint256"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_onBuy","type":"uint256"},{"internalType":"uint256","name":"_onSell","type":"uint256"}],"name":"setDevelopmentFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isGetFee","type":"bool"}],"name":"setFeeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_onBuy","type":"uint256"},{"internalType":"uint256","name":"_onSell","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_onBuy","type":"uint256"},{"internalType":"uint256","name":"_onSell","type":"uint256"}],"name":"setMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nativeAmount","type":"uint256"}],"name":"setNativeAmountToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sphynxBridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sphynxSwapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sphynxSwapRouter","outputs":[{"internalType":"contract ISphynxRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopTrade","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":"totalFeesOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","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":"newManager","type":"address"}],"name":"transferManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"trueBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"updateB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevelopmentWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_masterChef","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"updateMasterChef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"}],"name":"updateShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"}],"name":"updateSignerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sphynxBridge","type":"address"}],"name":"updateSphynxBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateSphynxSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"updateStopTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"updateSwapAndLiquifiy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"updateTrueBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFromBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600c80546001600160a01b0319908116733e20c4bff0f34ba46f9d33599d3aeaa7e815b19f178255600d80549091167393c3ae3c4d2b6f98533a4b1e8df6f25dcc37f3ad17905569021e19e0c9bab2400000600e556002601a55600a601b556000601c55601d55601e805462ffffff191690556b033b2e3c9fd0803ce80000006020553480156200009457600080fd5b506040518060400160405280600b81526020016a537068796e78204c61627360a81b815250604051806040016040528060068152602001650a6a090b29cb60d31b8152506000620000ea6200062a60201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35081516200014990600490602085019062000975565b5080516200015f90600590602084019062000975565b50506006805460ff191660121790555060006200017b6200062a565b60068054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c85908290a3506002600f81905560086014556000601081905560158190556001601181905560128190556016829055601755600b8054336001600160a01b031990911617905562000242916200022e90826200062e602090811b6200337a17901c565b6200062e60201b6200337a1790919060201c565b6013819055506200026d6017546200022e6015546014546200062e60201b6200337a1790919060201c565b601881905550600073145863eb42cf62847a6ca784e6416c1682b1b2ae90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c857600080fd5b505afa158015620002dd573d6000803e3d6000fd5b505050506040513d6020811015620002f457600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929187169163ad5c464891600480820192602092909190829003018186803b1580156200034557600080fd5b505afa1580156200035a573d6000803e3d6000fd5b505050506040513d60208110156200037157600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620003c457600080fd5b505af1158015620003d9573d6000803e3d6000fd5b505050506040513d6020811015620003f057600080fd5b5051600780546001600160a01b038086166001600160a01b0319928316179092556008805483851692169190911790819055919250620004339116600162000690565b600c546200044c906001600160a01b0316600162000744565b600d5462000465906001600160a01b0316600162000744565b6200047230600162000744565b620004886200048062000861565b600162000744565b6001600160a01b0381166000908152602660205260409020805460ff19166001179055620004cc620004b962000861565b6b0cecb8f27f4200f3a000000062000870565b5050600160298190557f988dbe6e0e557058dadd989f8d431e84531427f51a12b2b3f1ba051f2f9a8303805460ff1990811683179091557f149508ccd8b6fda216961568710487c339c5b49126040ee626bd2803f64d4af180548216831790557fd29fc98708995add24c518d2887a07b677e6b620e8b59ec8178616aed97203508054909116909117905560226020527fb84cf808d0d5b1ad44962c9bfddd3cfce67763c49ab557cfd0e9f6804faade9980546001600160a01b03199081167335bfe8da53f94d6711f111790643d2d403992b56179091557fe39b43e4224876d80510ac9d8f190663bcce357e28a4aec26f3bf2e600bb40ec805482167396c463b615228981a2c30b842e8a8e4e933cec4617905560026000527f52978eb6718a0ed733b71dbb3c4781d6da146a41523832713c09679420d0cac58054909116737278fc9c49a2b6bd072b9d47e3c903ef0e12bb8317905562000a11565b3390565b60008282018381101562000689576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821660009081526028602052604090205460ff1615158115151415620006f05760405162461bcd60e51b8152600401808060200182810382526040815260200180620057fc6040913960400191505060405180910390fd5b6001600160a01b038216600081815260286020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6200074e6200062a565b60065461010090046001600160a01b03908116911614620007a15760405162461bcd60e51b8152600401808060200182810382526025815260200180620057d76025913960400191505060405180910390fd5b6001600160a01b03821660009081526025602052604090205460ff1615158115151415620008015760405162461bcd60e51b8152600401808060200182810382526032815260200180620057a56032913960400191505060405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff1916851515908117909155825190815291517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79281900390910190a25050565b6000546001600160a01b031690565b6001600160a01b038216620008cc576040805162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b620008e8816003546200062e60201b6200337a1790919060201c565b6003556001600160a01b0382166000908152600160209081526040909120546200091d9183906200337a6200062e821b17901c565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620009b857805160ff1916838001178555620009e8565b82800160010185558215620009e8579182015b82811115620009e8578251825591602001919060010190620009cb565b50620009f6929150620009fa565b5090565b5b80821115620009f65760008155600101620009fb565b614d848062000a216000396000f3fe6080604052600436106104615760003560e01c80638768a9cd1161023f578063ae5988d111610139578063dc4c7dbc116100b6578063f1cd581d1161007a578063f1cd581d14610fe2578063f1d257671461100e578063f2fde38b14611038578063fbf6eaa51461106b578063fbfa13aa1461108057610468565b8063dc4c7dbc14610ef9578063dd62ed3e14610f0e578063e37ba8f914610f49578063e4edf85214610f7c578063f023f57314610faf57610468565b8063c83f6758116100fd578063c83f675814610e36578063cb61b42d14610e4b578063cef7079514610e81578063d469801614610eb4578063da21bcbc14610ec957610468565b8063ae5988d114610d1f578063b62496f514610d34578063c024666814610d67578063c04a541414610da2578063c492f04614610db757610468565b80639a7a23d6116101c7578063a4de3c191161018b578063a4de3c1914610c30578063a7ba8c8314610c6b578063a9059cbb14610c9e578063a938d1c914610cd7578063aacebbe314610cec57610468565b80639a7a23d614610b445780639c4afbbd14610b7f5780639e281a9814610b94578063a254b41e14610bcd578063a457c2d714610bf757610468565b80638d48e2ae1161020e5780638d48e2ae14610ab55780638da5cb5b14610aca57806395d89b4114610adf578063980a873a14610af4578063989a124f14610b2f57610468565b80638768a9cd14610a43578063893d20e814610a765780638baeefce14610a8b5780638c0b5e2214610aa057610468565b80633af932a71161035b57806357e871e7116102d8578063715018a61161029c578063715018a6146109bf57806375f0a874146109d4578063766ea415146109e95780637b3c83b1146109fe5780638268875614610a1357610468565b806357e871e71461090c5780635fc2e596146109215780636256d1811461093657806368b4cac91461096057806370a082311461098c57610468565b8063481c6a751161031f578063481c6a75146108565780634838d1651461086b5780634fbee1931461089e57806350431ce4146108d157806353b5482f146108d957610468565b80633af932a7146107825780633f301893146107ae57806340c10f19146107de578063423ce9cc1461081757806342966c681461082c57610468565b80631dac24d6116103e95780632ce86fbf116103ad5780632ce86fbf146106b9578063313ce567146106ce5780633423e797146106f957806339509351146107345780633a98ef391461076d57610468565b80631dac24d61461060657806323058e1e1461061b57806323b872dd1461064c57806325ecca871461068f57806328ba35e2146106a457610468565b8063095ea7b311610430578063095ea7b31461054a5780630a81df18146105975780630b504da3146105ac57806315291cd4146105dc57806318160ddd146105f157610468565b806306fdde031461046d578063087ed972146104f7578063089208d81461051e57806309218ee71461053557610468565b3661046857005b600080fd5b34801561047957600080fd5b506104826110b3565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104bc5781810151838201526020016104a4565b50505050905090810190601f1680156104e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050357600080fd5b5061050c611149565b60408051918252519081900360200190f35b34801561052a57600080fd5b5061053361114f565b005b34801561054157600080fd5b5061050c6111f8565b34801561055657600080fd5b506105836004803603604081101561056d57600080fd5b506001600160a01b0381351690602001356111fe565b604080519115158252519081900360200190f35b3480156105a357600080fd5b5061050c61121c565b3480156105b857600080fd5b50610533600480360360408110156105cf57600080fd5b5080359060200135611222565b3480156105e857600080fd5b5061050c611364565b3480156105fd57600080fd5b5061050c61136a565b34801561061257600080fd5b5061050c611370565b34801561062757600080fd5b50610630611376565b604080516001600160a01b039092168252519081900360200190f35b34801561065857600080fd5b506105836004803603606081101561066f57600080fd5b506001600160a01b03813581169160208101359091169060400135611385565b34801561069b57600080fd5b5061050c61140c565b3480156106b057600080fd5b50610583611412565b3480156106c557600080fd5b5061050c611421565b3480156106da57600080fd5b506106e3611427565b6040805160ff9092168252519081900360200190f35b34801561070557600080fd5b506105336004803603604081101561071c57600080fd5b506001600160a01b0381351690602001351515611430565b34801561074057600080fd5b506105836004803603604081101561075757600080fd5b506001600160a01b0381351690602001356114e6565b34801561077957600080fd5b5061050c611534565b34801561078e57600080fd5b50610533600480360360208110156107a557600080fd5b5035151561153a565b3480156107ba57600080fd5b50610533600480360360408110156107d157600080fd5b50803590602001356115af565b3480156107ea57600080fd5b506105336004803603604081101561080157600080fd5b506001600160a01b0381351690602001356116ee565b34801561082357600080fd5b50610583611769565b34801561083857600080fd5b506105836004803603602081101561084f57600080fd5b5035611772565b34801561086257600080fd5b5061063061178d565b34801561087757600080fd5b506105836004803603602081101561088e57600080fd5b50356001600160a01b03166117a1565b3480156108aa57600080fd5b50610583600480360360208110156108c157600080fd5b50356001600160a01b03166117b6565b6105336117d4565b3480156108e557600080fd5b50610533600480360360208110156108fc57600080fd5b50356001600160a01b031661185b565b34801561091857600080fd5b5061050c61198a565b34801561092d57600080fd5b5061050c611990565b34801561094257600080fd5b506105336004803603602081101561095957600080fd5b5035611996565b34801561096c57600080fd5b506105336004803603602081101561098357600080fd5b50351515611a2b565b34801561099857600080fd5b5061050c600480360360208110156109af57600080fd5b50356001600160a01b0316611acb565b3480156109cb57600080fd5b50610533611ae6565b3480156109e057600080fd5b50610630611b88565b3480156109f557600080fd5b5061050c611b97565b348015610a0a57600080fd5b5061050c611b9d565b348015610a1f57600080fd5b5061053360048036036040811015610a3657600080fd5b5080359060200135611ba3565b348015610a4f57600080fd5b5061058360048036036020811015610a6657600080fd5b50356001600160a01b0316611cdc565b348015610a8257600080fd5b50610630611cf1565b348015610a9757600080fd5b50610583611d00565b348015610aac57600080fd5b5061050c611d0e565b348015610ac157600080fd5b5061050c611d14565b348015610ad657600080fd5b50610630611d1a565b348015610aeb57600080fd5b50610482611d29565b348015610b0057600080fd5b5061053360048036036040811015610b1757600080fd5b506001600160a01b0381351690602001351515611d8a565b348015610b3b57600080fd5b5061050c611fd7565b348015610b5057600080fd5b5061053360048036036040811015610b6757600080fd5b506001600160a01b0381351690602001351515611fdd565b348015610b8b57600080fd5b5061050c612040565b348015610ba057600080fd5b5061053360048036036040811015610bb757600080fd5b506001600160a01b038135169060200135612046565b348015610bd957600080fd5b5061053360048036036020811015610bf057600080fd5b50356120b3565b348015610c0357600080fd5b5061058360048036036040811015610c1a57600080fd5b506001600160a01b038135169060200135612147565b348015610c3c57600080fd5b5061053360048036036040811015610c5357600080fd5b506001600160a01b03813516906020013515156121af565b348015610c7757600080fd5b5061058360048036036020811015610c8e57600080fd5b50356001600160a01b03166122c6565b348015610caa57600080fd5b5061058360048036036040811015610cc157600080fd5b506001600160a01b0381351690602001356122db565b348015610ce357600080fd5b5061050c6122ef565b348015610cf857600080fd5b5061053360048036036020811015610d0f57600080fd5b50356001600160a01b03166122f5565b348015610d2b57600080fd5b5061063061241a565b348015610d4057600080fd5b5061058360048036036020811015610d5757600080fd5b50356001600160a01b0316612429565b348015610d7357600080fd5b5061053360048036036040811015610d8a57600080fd5b506001600160a01b038135169060200135151561243e565b348015610dae57600080fd5b50610630612555565b348015610dc357600080fd5b5061053360048036036040811015610dda57600080fd5b810190602081018135640100000000811115610df557600080fd5b820183602082011115610e0757600080fd5b80359060200191846020830284011164010000000083111715610e2957600080fd5b9193509150351515612564565b348015610e4257600080fd5b50610630612684565b348015610e5757600080fd5b5061053360048036036060811015610e6e57600080fd5b5080359060208101359060400135612693565b348015610e8d57600080fd5b5061053360048036036020811015610ea457600080fd5b50356001600160a01b0316612751565b348015610ec057600080fd5b50610630612b7b565b348015610ed557600080fd5b5061053360048036036040811015610eec57600080fd5b5080359060200135612b8a565b348015610f0557600080fd5b5061050c612cc3565b348015610f1a57600080fd5b5061050c60048036036040811015610f3157600080fd5b506001600160a01b0381358116916020013516612cc9565b348015610f5557600080fd5b5061053360048036036020811015610f6c57600080fd5b50356001600160a01b0316612cf4565b348015610f8857600080fd5b5061053360048036036020811015610f9f57600080fd5b50356001600160a01b0316612d6f565b348015610fbb57600080fd5b5061053360048036036020811015610fd257600080fd5b50356001600160a01b0316612dd4565b348015610fee57600080fd5b506105336004803603602081101561100557600080fd5b50351515612ef9565b34801561101a57600080fd5b506105336004803603602081101561103157600080fd5b5035613133565b34801561104457600080fd5b506105336004803603602081101561105b57600080fd5b50356001600160a01b03166131a7565b34801561107757600080fd5b50610533613208565b34801561108c57600080fd5b50610533600480360360208110156110a357600080fd5b50356001600160a01b031661329a565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561113f5780601f106111145761010080835404028352916020019161113f565b820191906000526020600020905b81548152906001019060200180831161112257829003601f168201915b5050505050905090565b60185481565b6111576133db565b60065461010090046001600160a01b039081169116146111a85760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b60065460405160009161010090046001600160a01b0316907f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c85908390a360068054610100600160a81b0319169055565b601b5481565b600061121261120b6133db565b84846133df565b5060015b92915050565b601f5481565b61122a6133db565b60065461010090046001600160a01b0390811691161461127b5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600a8211156112cb576040805162461bcd60e51b8152602060048201526017602482015276535048594e583a20496e76616c6964206275726e46656560481b604482015290519081900360640190fd5b600a81111561131b576040805162461bcd60e51b8152602060048201526017602482015276535048594e583a20496e76616c6964206275726e46656560481b604482015290519081900360640190fd5b60128290556011819055604080518381526020810183905281517f845a2030e65ce67ab0b9dce718144ca03b9ad4b8f2a4de64c8bb15b60f73841b929181900390910190a15050565b601a5481565b60035490565b60155481565b6007546001600160a01b031681565b60006113928484846134cb565b6114028461139e6133db565b6113fd85604051806060016040528060288152602001614a38602891396001600160a01b038a166000908152600260205260408120906113dc6133db565b6001600160a01b03168152602081019190915260400160002054919061398b565b6133df565b5060019392505050565b60105481565b601e5462010000900460ff1681565b60175481565b60065460ff1690565b6114386133db565b60065461010090046001600160a01b039081169116146114895760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b6001600160a01b038216600081815260096020908152604091829020805460ff1916851515179055815192835290517f6f322dbd39e457046ae29978ebab00f11e6e59d6c1ad690c6d773b6de2b93e479281900390910190a15050565b60006112126114f36133db565b846113fd85600260006115046133db565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061337a565b601d5481565b6115426133db565b60065461010090046001600160a01b039081169116146115935760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b601e8054911515620100000262ff000019909216919091179055565b6115b76133db565b60065461010090046001600160a01b039081169116146116085760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600a821115801561161a5750600a8111155b61166b576040805162461bcd60e51b815260206004820152601c60248201527f535048594e583a20496e76616c6964206d61726b6574696e6746656500000000604482015290519081900360640190fd5b600f8290556014819055601654601054611691919061168b90859061337a565b9061337a565b6013556017546015546014546116ac929161168b919061337a565b601855604080518381526020810183905281517f116c154a85aae2434f37439e77373feb3892dbf9f0da79242aa92ae0cadfe608929181900390910190a15050565b3360009081526009602052604090205460ff16806117165750600a546001600160a01b031633145b61175b576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8811195b9a5959607a1b604482015290519081900360640190fd5b6117658282613a22565b5050565b601e5460ff1681565b600061178561177f6133db565b83613b08565b506001919050565b60065461010090046001600160a01b031690565b60276020526000908152604090205460ff1681565b6001600160a01b031660009081526025602052604090205460ff1690565b6117dc6133db565b60065461010090046001600160a01b0390811691161461182d5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b604051339081904780156108fc02916000818181858888f19350505050158015611765573d6000803e3d6000fd5b6118636133db565b60065461010090046001600160a01b039081169116146118b45760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600a546001600160a01b03828116911614156119015760405162461bcd60e51b8152600401808060200182810382526024815260200180614b196024913960400191505060405180910390fd5b600a80546001600160a01b039081166000908152602560209081526040808320805460ff1990811690915585546001600160a01b031916878616908117968790559590941683529182902080549093166001179092558051928352517f2fd0fa9b04270f4e7c5b4c49363b854563973fa8abb929dbdf6cdd505ae92e399281900390910190a150565b60195481565b600f5481565b61199e6133db565b60065461010090046001600160a01b039081169116146119ef5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b60208181556040805183815290517faa3699eefc959af0349072633ce13d21ce9c6fe475e5818b99da990ee39645a1929181900390910190a150565b611a336133db565b60065461010090046001600160a01b03908116911614611a845760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b601e805482151560ff19909116811790915560408051918252517f701507a13d5701687328d70ea5a717a33a062f46c229a785b315fb4517fef0699181900360200190a150565b6001600160a01b031660009081526001602052604090205490565b611aee6133db565b6000546001600160a01b03908116911614611b3e576040805162461bcd60e51b81526020600482018190526024820152600080516020614ad3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600c546001600160a01b031681565b60135481565b60165481565b611bab6133db565b60065461010090046001600160a01b03908116911614611bfc5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600a8211158015611c0e5750600a8111155b611c5f576040805162461bcd60e51b815260206004820152601c60248201527f535048594e583a20496e76616c6964206d61726b6574696e6746656500000000604482015290519081900360640190fd5b60108290556015819055601654600f54611c7f919061168b90859061337a565b601355601754601454601554611c9a929161168b919061337a565b601855604080518381526020810183905281517f2c23f881dba47e5d04ed00101f3697091006eaa7b38ceb267647c390aa93f34f929181900390910190a15050565b60266020526000908152604090205460ff1681565b6000611cfb611d1a565b905090565b601e54610100900460ff1681565b60205481565b601c5481565b6000546001600160a01b031690565b60058054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561113f5780601f106111145761010080835404028352916020019161113f565b3360009081526021602052604090205460ff16611ddd576040805162461bcd60e51b815260206004820152600c60248201526b3737ba16b096b9b4b3b732b960a11b604482015290519081900360640190fd5b6001600160a01b03821660009081526027602052604090205460ff1615158115151415611e3f576040805162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e4b5cd95d60aa1b604482015290519081900360640190fd5b3360009081526024602052604090205460ff1615611e93576040805162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c96b9b4b3b760a11b604482015290519081900360640190fd5b33600090815260246020526040808220805460ff19166001179055600080516020614ca3833981519152546001600160a01b0316825281205460ff1615611ed8576001015b600080516020614c21833981519152546001600160a01b031660009081526024602052604090205460ff1615611f0c576001015b600080516020614a60833981519152546001600160a01b031660009081526024602052604090205460ff1615611f40576001015b60028110611fd2576001600160a01b038381166000908152602760209081526040808320805460ff1990811688151517909155600080516020614ca383398151915254851684526024909252808320805483169055600080516020614c218339815191525484168352808320805483169055600080516020614a60833981519152549093168252919020805490911690555b505050565b60115481565b611fe56133db565b60065461010090046001600160a01b039081169116146120365760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b6117658282613bf8565b600e5481565b61204e6133db565b60065461010090046001600160a01b0390811691161461209f5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b6117656001600160a01b0383163383613caa565b6120bb6133db565b60065461010090046001600160a01b0390811691161461210c5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600e8190556040805182815290517f7c57306552f9ca1d69c9c779932ef43e8bc6f04d7718d9e1fbf6a877013ececd9181900360200190a150565b60006112126121546133db565b846113fd85604051806060016040528060258152602001614b60602591396002600061217e6133db565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061398b565b6121b76133db565b60065461010090046001600160a01b039081169116146122085760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b6001600160a01b03821660009081526026602052604090205460ff16151581151514156122665760405162461bcd60e51b8152600401808060200182810382526032815260200180614a806032913960400191505060405180910390fd5b6001600160a01b038216600081815260266020908152604091829020805460ff1916851515908117909155825190815291517fd3d1fab5db42ae85293059c69e12bf01ffffb1dd5ff4caa5e5568f99fc387f249281900390910190a25050565b60096020526000908152604090205460ff1681565b60006112126122e86133db565b84846134cb565b60125481565b6122fd6133db565b60065461010090046001600160a01b0390811691161461234e5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600c546001600160a01b038281169116141561239b5760405162461bcd60e51b8152600401808060200182810382526034815260200180614d1b6034913960400191505060405180910390fd5b6123a681600161243e565b600c546123bd906001600160a01b0316600061243e565b600c546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b031681565b60286020526000908152604090205460ff1681565b6124466133db565b60065461010090046001600160a01b039081169116146124975760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b6001600160a01b03821660009081526025602052604090205460ff16151581151514156124f55760405162461bcd60e51b8152600401808060200182810382526032815260200180614a066032913960400191505060405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff1916851515908117909155825190815291517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79281900390910190a25050565b600d546001600160a01b031681565b61256c6133db565b6000546001600160a01b039081169116146125bc576040805162461bcd60e51b81526020600482018190526024820152600080516020614ad3833981519152604482015290519081900360640190fd5b60005b828110156126115781602560008686858181106125d857fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016125bf565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051808060200183151581526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b600a546001600160a01b031681565b61269b6133db565b60065461010090046001600160a01b039081169116146126ec5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b601a839055601b829055601c8190556127098161168b858561337a565b601d55604080518481526020810184905280820183905290517fcc891d40504d5b798e9edf203f13fad7a7e3db2585689577e22c7529a474fc099181900360600190a1505050565b6127596133db565b60065461010090046001600160a01b039081169116146127aa5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b6007546001600160a01b03828116911614156127f75760405162461bcd60e51b815260040180806020018281038252602b815260200180614bf6602b913960400191505060405180910390fd5b6007546040516001600160a01b03918216918316907f0807b5b1d0f1a9b369ecf33bc393cc8bf6b2a3e3e46a9f28d08a900343f41ebe90600090a3600780546001600160a01b0319166001600160a01b0383811691909117918290556040805163c45a015560e01b815290516000939092169163c45a015591600480820192602092909190829003018186803b15801561289057600080fd5b505afa1580156128a4573d6000803e3d6000fd5b505050506040513d60208110156128ba57600080fd5b5051600754604080516315ab88c960e31b815290516001600160a01b039384169363e6a4390593309391169163ad5c464891600480820192602092909190829003018186803b15801561290c57600080fd5b505afa158015612920573d6000803e3d6000fd5b505050506040513d602081101561293657600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b15801561298657600080fd5b505afa15801561299a573d6000803e3d6000fd5b505050506040513d60208110156129b057600080fd5b505190506001600160a01b038116612b3757600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612a1057600080fd5b505afa158015612a24573d6000803e3d6000fd5b505050506040513d6020811015612a3a57600080fd5b5051600754604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693309391169163ad5c464891600480820192602092909190829003018186803b158015612a8c57600080fd5b505afa158015612aa0573d6000803e3d6000fd5b505050506040513d6020811015612ab657600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015612b0857600080fd5b505af1158015612b1c573d6000803e3d6000fd5b505050506040513d6020811015612b3257600080fd5b505190505b600854612b4e906001600160a01b03166000613bf8565b600880546001600160a01b0319166001600160a01b03838116919091179182905561176591166001613bf8565b600b546001600160a01b031681565b612b926133db565b60065461010090046001600160a01b03908116911614612be35760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600a8211158015612bf55750600a8111155b612c46576040805162461bcd60e51b815260206004820152601c60248201527f535048594e583a20496e76616c6964206d61726b6574696e6746656500000000604482015290519081900360640190fd5b60168290556017819055600f54601054612c66919061168b90859061337a565b601355601454601554601754612c81929161168b919061337a565b601855604080518381526020810183905281517fdcabb673b8004b29667370cf7e48059178985da4fa97105c1532cdfb5bbc5c0d929181900390910190a15050565b60145481565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b612cfc6133db565b60065461010090046001600160a01b03908116911614612d4d5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b612d776133db565b60065461010090046001600160a01b03908116911614612dc85760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b612dd181613cfc565b50565b612ddc6133db565b60065461010090046001600160a01b03908116911614612e2d5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600d546001600160a01b0382811691161415612e7a5760405162461bcd60e51b8152600401808060200182810382526036815260200180614cc36036913960400191505060405180910390fd5b612e8581600161243e565b600d54612e9c906001600160a01b0316600061243e565b600d546040516001600160a01b03918216918316907f94cc1498503be9a145caf3e96f856665f29cf9b26c7179a93fbe1c1e5f56a0fd90600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526021602052604090205460ff16612f4c576040805162461bcd60e51b815260206004820152600c60248201526b3737ba16b096b9b4b3b732b960a11b604482015290519081900360640190fd5b601e5460ff6101009091041615158115151415612f9e576040805162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e4b5cd95d60aa1b604482015290519081900360640190fd5b3360009081526023602052604090205460ff1615612ff2576040805162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c96b9b4b3b760a11b604482015290519081900360640190fd5b33600090815260236020526040808220805460ff19166001179055600080516020614ca3833981519152546001600160a01b0316825281205460ff1615613037576001015b600080516020614c21833981519152546001600160a01b031660009081526023602052604090205460ff161561306b576001015b600080516020614a60833981519152546001600160a01b031660009081526023602052604090205460ff161561309f576001015b60028111156117655750601e80549115156101000261ff0019909216919091179055600080516020614ca3833981519152546001600160a01b03908116600090815260236020526040808220805460ff19908116909155600080516020614c218339815191525484168352818320805482169055600080516020614a60833981519152549093168252902080549091169055565b61313b6133db565b60065461010090046001600160a01b0390811691161461318c5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b601f546131999082613da8565b601f55612dd1303383613dea565b6131af6133db565b6000546001600160a01b039081169116146131ff576040805162461bcd60e51b81526020600482018190526024820152600080516020614ad3833981519152604482015290519081900360640190fd5b612dd181613f3c565b6132106133db565b6000546001600160a01b03908116911614613260576040805162461bcd60e51b81526020600482018190526024820152600080516020614ad3833981519152604482015290519081900360640190fd5b43601981905560408051918252517f27f2628255d76b9078e3983ef55b01e83266647391bef5f60c83b70e9d4002e19181900360200190a1565b3360009081526021602052604090205460ff166132ed576040805162461bcd60e51b815260206004820152600c60248201526b3737ba16b096b9b4b3b732b960a11b604482015290519081900360640190fd5b33600090815260216020526040808220805460ff199081169091556001600160a01b0384168352908220805490911660011790555b6003811015611765576000818152602260205260409020546001600160a01b031633141561337257600081815260226020526040902080546001600160a01b0319166001600160a01b0384161790555b600101613322565b6000828201838110156133d4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166134245760405162461bcd60e51b815260040180806020018281038252602481526020018061496b6024913960400191505060405180910390fd5b6001600160a01b0382166134695760405162461bcd60e51b8152600401808060200182810382526022815260200180614cf96022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166135105760405162461bcd60e51b81526004018080602001828103825260258152602001806149466025913960400191505060405180910390fd5b6001600160a01b0382166135555760405162461bcd60e51b8152600401808060200182810382526023815260200180614b3d6023913960400191505060405180910390fd5b601e54610100900460ff16156135a2576040805162461bcd60e51b815260206004820152600d60248201526c1d1c9859194b5cdd1bdc1c1959609a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526027602052604090205460ff161580156135e457506001600160a01b03821660009081526027602052604090205460ff16155b613635576040805162461bcd60e51b815260206004820152601960248201527f535048594e583a20696e636c7564652d626c61636b4c69737400000000000000604482015290519081900360640190fd5b602054811115613685576040805162461bcd60e51b81526020600482015260166024820152756d61782d74782d616d6f756e742d6f766572666c6f7760501b604482015290519081900360640190fd5b8061369b5761369683836000613dea565b611fd2565b601e5460ff16156137445760006136bd601f546136b730611acb565b90613da8565b905060006136c9613fdc565b905080821080159081906136e75750600854600160a01b900460ff16155b801561370c57506001600160a01b03861660009081526028602052604090205460ff16155b15613740576008805460ff60a01b1916600160a01b17905590915081906137328261423b565b6008805460ff60a01b191690555b5050505b6001600160a01b03821660009081526026602052604090205460ff16801561376c5750601954155b1561377657436019555b6001600160a01b03831660009081526025602052604090205460019060ff16806137b857506001600160a01b03831660009081526025602052604090205460ff165b156137c1575060005b801561397a57600a60195443031161382d576000826137df85611acb565b0190506934f086f3b33b6840000081111561382b5760405162461bcd60e51b81526004018080602001828103825260278152602001806149df6027913960400191505060405180910390fd5b505b6001600160a01b03841660009081526026602052604081205460ff168061386c57506001600160a01b03841660009081526026602052604090205460ff165b1561397857600a60195443031161389a57613893606461388d8560636142fd565b90614356565b9050613961565b6001600160a01b03851660009081526026602052604081205460ff16156138e1576138d5606461388d601354876142fd90919063ffffffff16565b91506012549050613903565b6138fb606461388d601854876142fd90919063ffffffff16565b915060115490505b6000613914606461388d87856142fd565b90506139208582613da8565b945061392d873083613dea565b601e5462010000900460ff161561394d576139483082613b08565b61395e565b601f5461395a908261337a565b601f555b50505b61396b8382613da8565b9250613978853083613dea565b505b613985848484613dea565b50505050565b60008184841115613a1a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139df5781810151838201526020016139c7565b50505050905090810190601f168015613a0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038216613a7d576040805162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600354613a8a908261337a565b6003556001600160a01b038216600090815260016020526040902054613ab0908261337a565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216613b4d5760405162461bcd60e51b8152600401808060200182810382526021815260200180614b856021913960400191505060405180910390fd5b613b8a81604051806060016040528060228152602001614c41602291396001600160a01b038516600090815260016020526040902054919061398b565b6001600160a01b038316600090815260016020526040902055600354613bb09082613da8565b6003556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b03821660009081526028602052604090205460ff1615158115151415613c565760405162461bcd60e51b8152600401808060200182810382526040815260200180614c636040913960400191505060405180910390fd5b6001600160a01b038216600081815260286020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611fd2908490614398565b6001600160a01b038116613d415760405162461bcd60e51b815260040180806020018281038252602b815260200180614bcb602b913960400191505060405180910390fd5b6006546040516001600160a01b0380841692610100900416907f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8590600090a3600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006133d483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061398b565b6001600160a01b038316613e2f5760405162461bcd60e51b81526004018080602001828103825260258152602001806149466025913960400191505060405180910390fd5b6001600160a01b038216613e745760405162461bcd60e51b8152600401808060200182810382526023815260200180614b3d6023913960400191505060405180910390fd5b613eb181604051806060016040528060268152602001614af3602691396001600160a01b038616600090815260016020526040902054919061398b565b6001600160a01b038085166000908152600160205260408082209390935590841681522054613ee0908261337a565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b038116613f815760405162461bcd60e51b81526004018080602001828103825260268152602001806149b96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040805160028082526060808301845260009384939192906020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561404757600080fd5b505afa15801561405b573d6000803e3d6000fd5b505050506040513d602081101561407157600080fd5b50518151829060009061408057fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106140ae57fe5b6001600160a01b03928316602091820292909201810191909152600754600e546040805163d06ca61f60e01b81526004810183815260248201928352875160448301528751606097959095169563d06ca61f958994929360640191858101910280838360005b8381101561412c578181015183820152602001614114565b50505050905001935050505060006040518083038186803b15801561415057600080fd5b505afa158015614164573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561418d57600080fd5b81019080805160405193929190846401000000008211156141ad57600080fd5b9083019060208201858111156141c257600080fd5b82518660208202830111640100000000821117156141df57600080fd5b82525081516020918201928201910280838360005b8381101561420c5781810151838201526020016141f4565b5050505090500160405250505090508060018151811061422857fe5b6020026020010151925082935050505090565b6000614258601d5461388d601a54856142fd90919063ffffffff16565b905060006142668383613da8565b905061427181614449565b60004790506000614293601d5461388d601a54856142fd90919063ffffffff16565b905060006142b2601d5461388d601b54866142fd90919063ffffffff16565b905060006142c4836136b78685613da8565b905085156142d6576142d686846145f7565b81156142e5576142e5826146af565b80156142f4576142f4816146e9565b50505050505050565b60008261430c57506000611216565b8282028284828161431957fe5b04146133d45760405162461bcd60e51b8152600401808060200182810382526021815260200180614ab26021913960400191505060405180910390fd5b60006133d483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614723565b60606143ed826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166147889092919063ffffffff16565b805190915015611fd25780806020019051602081101561440c57600080fd5b5051611fd25760405162461bcd60e51b815260040180806020018281038252602a81526020018061498f602a913960400191505060405180910390fd5b6040805160028082526060808301845292602083019080368337019050509050308160008151811061447757fe5b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156144cb57600080fd5b505afa1580156144df573d6000803e3d6000fd5b505050506040513d60208110156144f557600080fd5b505181518290600190811061450657fe5b6001600160a01b03928316602091820292909201015260075461452c91309116846133df565b60075460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b838110156145b257818101518382015260200161459a565b505050509050019650505050505050600060405180830381600087803b1580156145db57600080fd5b505af11580156145ef573d6000803e3d6000fd5b505050505050565b60075461460f9030906001600160a01b0316846133df565b600754600b546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b15801561468457600080fd5b505af1158015614698573d6000803e3d6000fd5b50505050506040513d606081101561398557600080fd5b600c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611765573d6000803e3d6000fd5b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611765573d6000803e3d6000fd5b600081836147725760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156139df5781810151838201526020016139c7565b50600083858161477e57fe5b0495945050505050565b6060614797848460008561479f565b949350505050565b60606147aa8561490c565b6147fb576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061483a5780518252601f19909201916020918201910161481b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461489c576040519150601f19603f3d011682016040523d82523d6000602084013e6148a1565b606091505b509150915081156148b55791506147979050565b8051156148c55780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156139df5781810151838201526020016139c7565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061479757505015159291505056fe42455032303a207472616e736665722066726f6d20746865207a65726f206164647265737342455032303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666542455032303a204245503230206f7065726174696f6e20646964206e6f7420737563636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e656420616d6f756e74206578636565647320746865206d61784f776e6564416d6f756e74535048594e583a204163636f756e7420697320616c7265616479207468652076616c7565206f6620276578636c756465642742455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636552978eb6718a0ed733b71dbb3c4781d6da146a41523832713c09679420d0cac5535048594e583a204163636f756e7420697320616c7265616479207468652076616c7565206f662027697347657446656527536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657242455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365535048594e583a20537068796e7842726964676520616c7265616479206578697374732142455032303a207472616e7366657220746f20746865207a65726f206164647265737342455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a206275726e2066726f6d20746865207a65726f20616464726573734d616e61676561626c653a2063616c6c6572206973206e6f7420746865206d616e616765724d616e61676561626c653a206e6577206d616e6167657220697320746865207a65726f2061646472657373535048594e583a2054686520726f7574657220616c72656164792068617320746861742061646472657373e39b43e4224876d80510ac9d8f190663bcce357e28a4aec26f3bf2e600bb40ec42455032303a206275726e20616d6f756e7420657863656564732062616c616e6365535048594e583a204175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c7565b84cf808d0d5b1ad44962c9bfddd3cfce67763c49ab557cfd0e9f6804faade99535048594e583a2054686520646576656c6f706d656e742077616c6c657420697320616c72656164792074686973206164647265737342455032303a20617070726f766520746f20746865207a65726f2061646472657373535048594e583a20546865206d61726b6574696e672077616c6c657420697320616c726561647920746869732061646472657373a2646970667358221220419a8dd9b2006d57b773d4a87dc57d282ff7e56dfaf0d513a00d0851f6fb292764736f6c634300060c0033535048594e583a204163636f756e7420697320616c7265616479207468652076616c7565206f6620276578636c75646564274d616e61676561626c653a2063616c6c6572206973206e6f7420746865206d616e61676572535048594e583a204175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c7565

Deployed Bytecode

0x6080604052600436106104615760003560e01c80638768a9cd1161023f578063ae5988d111610139578063dc4c7dbc116100b6578063f1cd581d1161007a578063f1cd581d14610fe2578063f1d257671461100e578063f2fde38b14611038578063fbf6eaa51461106b578063fbfa13aa1461108057610468565b8063dc4c7dbc14610ef9578063dd62ed3e14610f0e578063e37ba8f914610f49578063e4edf85214610f7c578063f023f57314610faf57610468565b8063c83f6758116100fd578063c83f675814610e36578063cb61b42d14610e4b578063cef7079514610e81578063d469801614610eb4578063da21bcbc14610ec957610468565b8063ae5988d114610d1f578063b62496f514610d34578063c024666814610d67578063c04a541414610da2578063c492f04614610db757610468565b80639a7a23d6116101c7578063a4de3c191161018b578063a4de3c1914610c30578063a7ba8c8314610c6b578063a9059cbb14610c9e578063a938d1c914610cd7578063aacebbe314610cec57610468565b80639a7a23d614610b445780639c4afbbd14610b7f5780639e281a9814610b94578063a254b41e14610bcd578063a457c2d714610bf757610468565b80638d48e2ae1161020e5780638d48e2ae14610ab55780638da5cb5b14610aca57806395d89b4114610adf578063980a873a14610af4578063989a124f14610b2f57610468565b80638768a9cd14610a43578063893d20e814610a765780638baeefce14610a8b5780638c0b5e2214610aa057610468565b80633af932a71161035b57806357e871e7116102d8578063715018a61161029c578063715018a6146109bf57806375f0a874146109d4578063766ea415146109e95780637b3c83b1146109fe5780638268875614610a1357610468565b806357e871e71461090c5780635fc2e596146109215780636256d1811461093657806368b4cac91461096057806370a082311461098c57610468565b8063481c6a751161031f578063481c6a75146108565780634838d1651461086b5780634fbee1931461089e57806350431ce4146108d157806353b5482f146108d957610468565b80633af932a7146107825780633f301893146107ae57806340c10f19146107de578063423ce9cc1461081757806342966c681461082c57610468565b80631dac24d6116103e95780632ce86fbf116103ad5780632ce86fbf146106b9578063313ce567146106ce5780633423e797146106f957806339509351146107345780633a98ef391461076d57610468565b80631dac24d61461060657806323058e1e1461061b57806323b872dd1461064c57806325ecca871461068f57806328ba35e2146106a457610468565b8063095ea7b311610430578063095ea7b31461054a5780630a81df18146105975780630b504da3146105ac57806315291cd4146105dc57806318160ddd146105f157610468565b806306fdde031461046d578063087ed972146104f7578063089208d81461051e57806309218ee71461053557610468565b3661046857005b600080fd5b34801561047957600080fd5b506104826110b3565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104bc5781810151838201526020016104a4565b50505050905090810190601f1680156104e95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561050357600080fd5b5061050c611149565b60408051918252519081900360200190f35b34801561052a57600080fd5b5061053361114f565b005b34801561054157600080fd5b5061050c6111f8565b34801561055657600080fd5b506105836004803603604081101561056d57600080fd5b506001600160a01b0381351690602001356111fe565b604080519115158252519081900360200190f35b3480156105a357600080fd5b5061050c61121c565b3480156105b857600080fd5b50610533600480360360408110156105cf57600080fd5b5080359060200135611222565b3480156105e857600080fd5b5061050c611364565b3480156105fd57600080fd5b5061050c61136a565b34801561061257600080fd5b5061050c611370565b34801561062757600080fd5b50610630611376565b604080516001600160a01b039092168252519081900360200190f35b34801561065857600080fd5b506105836004803603606081101561066f57600080fd5b506001600160a01b03813581169160208101359091169060400135611385565b34801561069b57600080fd5b5061050c61140c565b3480156106b057600080fd5b50610583611412565b3480156106c557600080fd5b5061050c611421565b3480156106da57600080fd5b506106e3611427565b6040805160ff9092168252519081900360200190f35b34801561070557600080fd5b506105336004803603604081101561071c57600080fd5b506001600160a01b0381351690602001351515611430565b34801561074057600080fd5b506105836004803603604081101561075757600080fd5b506001600160a01b0381351690602001356114e6565b34801561077957600080fd5b5061050c611534565b34801561078e57600080fd5b50610533600480360360208110156107a557600080fd5b5035151561153a565b3480156107ba57600080fd5b50610533600480360360408110156107d157600080fd5b50803590602001356115af565b3480156107ea57600080fd5b506105336004803603604081101561080157600080fd5b506001600160a01b0381351690602001356116ee565b34801561082357600080fd5b50610583611769565b34801561083857600080fd5b506105836004803603602081101561084f57600080fd5b5035611772565b34801561086257600080fd5b5061063061178d565b34801561087757600080fd5b506105836004803603602081101561088e57600080fd5b50356001600160a01b03166117a1565b3480156108aa57600080fd5b50610583600480360360208110156108c157600080fd5b50356001600160a01b03166117b6565b6105336117d4565b3480156108e557600080fd5b50610533600480360360208110156108fc57600080fd5b50356001600160a01b031661185b565b34801561091857600080fd5b5061050c61198a565b34801561092d57600080fd5b5061050c611990565b34801561094257600080fd5b506105336004803603602081101561095957600080fd5b5035611996565b34801561096c57600080fd5b506105336004803603602081101561098357600080fd5b50351515611a2b565b34801561099857600080fd5b5061050c600480360360208110156109af57600080fd5b50356001600160a01b0316611acb565b3480156109cb57600080fd5b50610533611ae6565b3480156109e057600080fd5b50610630611b88565b3480156109f557600080fd5b5061050c611b97565b348015610a0a57600080fd5b5061050c611b9d565b348015610a1f57600080fd5b5061053360048036036040811015610a3657600080fd5b5080359060200135611ba3565b348015610a4f57600080fd5b5061058360048036036020811015610a6657600080fd5b50356001600160a01b0316611cdc565b348015610a8257600080fd5b50610630611cf1565b348015610a9757600080fd5b50610583611d00565b348015610aac57600080fd5b5061050c611d0e565b348015610ac157600080fd5b5061050c611d14565b348015610ad657600080fd5b50610630611d1a565b348015610aeb57600080fd5b50610482611d29565b348015610b0057600080fd5b5061053360048036036040811015610b1757600080fd5b506001600160a01b0381351690602001351515611d8a565b348015610b3b57600080fd5b5061050c611fd7565b348015610b5057600080fd5b5061053360048036036040811015610b6757600080fd5b506001600160a01b0381351690602001351515611fdd565b348015610b8b57600080fd5b5061050c612040565b348015610ba057600080fd5b5061053360048036036040811015610bb757600080fd5b506001600160a01b038135169060200135612046565b348015610bd957600080fd5b5061053360048036036020811015610bf057600080fd5b50356120b3565b348015610c0357600080fd5b5061058360048036036040811015610c1a57600080fd5b506001600160a01b038135169060200135612147565b348015610c3c57600080fd5b5061053360048036036040811015610c5357600080fd5b506001600160a01b03813516906020013515156121af565b348015610c7757600080fd5b5061058360048036036020811015610c8e57600080fd5b50356001600160a01b03166122c6565b348015610caa57600080fd5b5061058360048036036040811015610cc157600080fd5b506001600160a01b0381351690602001356122db565b348015610ce357600080fd5b5061050c6122ef565b348015610cf857600080fd5b5061053360048036036020811015610d0f57600080fd5b50356001600160a01b03166122f5565b348015610d2b57600080fd5b5061063061241a565b348015610d4057600080fd5b5061058360048036036020811015610d5757600080fd5b50356001600160a01b0316612429565b348015610d7357600080fd5b5061053360048036036040811015610d8a57600080fd5b506001600160a01b038135169060200135151561243e565b348015610dae57600080fd5b50610630612555565b348015610dc357600080fd5b5061053360048036036040811015610dda57600080fd5b810190602081018135640100000000811115610df557600080fd5b820183602082011115610e0757600080fd5b80359060200191846020830284011164010000000083111715610e2957600080fd5b9193509150351515612564565b348015610e4257600080fd5b50610630612684565b348015610e5757600080fd5b5061053360048036036060811015610e6e57600080fd5b5080359060208101359060400135612693565b348015610e8d57600080fd5b5061053360048036036020811015610ea457600080fd5b50356001600160a01b0316612751565b348015610ec057600080fd5b50610630612b7b565b348015610ed557600080fd5b5061053360048036036040811015610eec57600080fd5b5080359060200135612b8a565b348015610f0557600080fd5b5061050c612cc3565b348015610f1a57600080fd5b5061050c60048036036040811015610f3157600080fd5b506001600160a01b0381358116916020013516612cc9565b348015610f5557600080fd5b5061053360048036036020811015610f6c57600080fd5b50356001600160a01b0316612cf4565b348015610f8857600080fd5b5061053360048036036020811015610f9f57600080fd5b50356001600160a01b0316612d6f565b348015610fbb57600080fd5b5061053360048036036020811015610fd257600080fd5b50356001600160a01b0316612dd4565b348015610fee57600080fd5b506105336004803603602081101561100557600080fd5b50351515612ef9565b34801561101a57600080fd5b506105336004803603602081101561103157600080fd5b5035613133565b34801561104457600080fd5b506105336004803603602081101561105b57600080fd5b50356001600160a01b03166131a7565b34801561107757600080fd5b50610533613208565b34801561108c57600080fd5b50610533600480360360208110156110a357600080fd5b50356001600160a01b031661329a565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561113f5780601f106111145761010080835404028352916020019161113f565b820191906000526020600020905b81548152906001019060200180831161112257829003601f168201915b5050505050905090565b60185481565b6111576133db565b60065461010090046001600160a01b039081169116146111a85760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b60065460405160009161010090046001600160a01b0316907f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c85908390a360068054610100600160a81b0319169055565b601b5481565b600061121261120b6133db565b84846133df565b5060015b92915050565b601f5481565b61122a6133db565b60065461010090046001600160a01b0390811691161461127b5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600a8211156112cb576040805162461bcd60e51b8152602060048201526017602482015276535048594e583a20496e76616c6964206275726e46656560481b604482015290519081900360640190fd5b600a81111561131b576040805162461bcd60e51b8152602060048201526017602482015276535048594e583a20496e76616c6964206275726e46656560481b604482015290519081900360640190fd5b60128290556011819055604080518381526020810183905281517f845a2030e65ce67ab0b9dce718144ca03b9ad4b8f2a4de64c8bb15b60f73841b929181900390910190a15050565b601a5481565b60035490565b60155481565b6007546001600160a01b031681565b60006113928484846134cb565b6114028461139e6133db565b6113fd85604051806060016040528060288152602001614a38602891396001600160a01b038a166000908152600260205260408120906113dc6133db565b6001600160a01b03168152602081019190915260400160002054919061398b565b6133df565b5060019392505050565b60105481565b601e5462010000900460ff1681565b60175481565b60065460ff1690565b6114386133db565b60065461010090046001600160a01b039081169116146114895760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b6001600160a01b038216600081815260096020908152604091829020805460ff1916851515179055815192835290517f6f322dbd39e457046ae29978ebab00f11e6e59d6c1ad690c6d773b6de2b93e479281900390910190a15050565b60006112126114f36133db565b846113fd85600260006115046133db565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061337a565b601d5481565b6115426133db565b60065461010090046001600160a01b039081169116146115935760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b601e8054911515620100000262ff000019909216919091179055565b6115b76133db565b60065461010090046001600160a01b039081169116146116085760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600a821115801561161a5750600a8111155b61166b576040805162461bcd60e51b815260206004820152601c60248201527f535048594e583a20496e76616c6964206d61726b6574696e6746656500000000604482015290519081900360640190fd5b600f8290556014819055601654601054611691919061168b90859061337a565b9061337a565b6013556017546015546014546116ac929161168b919061337a565b601855604080518381526020810183905281517f116c154a85aae2434f37439e77373feb3892dbf9f0da79242aa92ae0cadfe608929181900390910190a15050565b3360009081526009602052604090205460ff16806117165750600a546001600160a01b031633145b61175b576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8811195b9a5959607a1b604482015290519081900360640190fd5b6117658282613a22565b5050565b601e5460ff1681565b600061178561177f6133db565b83613b08565b506001919050565b60065461010090046001600160a01b031690565b60276020526000908152604090205460ff1681565b6001600160a01b031660009081526025602052604090205460ff1690565b6117dc6133db565b60065461010090046001600160a01b0390811691161461182d5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b604051339081904780156108fc02916000818181858888f19350505050158015611765573d6000803e3d6000fd5b6118636133db565b60065461010090046001600160a01b039081169116146118b45760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600a546001600160a01b03828116911614156119015760405162461bcd60e51b8152600401808060200182810382526024815260200180614b196024913960400191505060405180910390fd5b600a80546001600160a01b039081166000908152602560209081526040808320805460ff1990811690915585546001600160a01b031916878616908117968790559590941683529182902080549093166001179092558051928352517f2fd0fa9b04270f4e7c5b4c49363b854563973fa8abb929dbdf6cdd505ae92e399281900390910190a150565b60195481565b600f5481565b61199e6133db565b60065461010090046001600160a01b039081169116146119ef5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b60208181556040805183815290517faa3699eefc959af0349072633ce13d21ce9c6fe475e5818b99da990ee39645a1929181900390910190a150565b611a336133db565b60065461010090046001600160a01b03908116911614611a845760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b601e805482151560ff19909116811790915560408051918252517f701507a13d5701687328d70ea5a717a33a062f46c229a785b315fb4517fef0699181900360200190a150565b6001600160a01b031660009081526001602052604090205490565b611aee6133db565b6000546001600160a01b03908116911614611b3e576040805162461bcd60e51b81526020600482018190526024820152600080516020614ad3833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600c546001600160a01b031681565b60135481565b60165481565b611bab6133db565b60065461010090046001600160a01b03908116911614611bfc5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600a8211158015611c0e5750600a8111155b611c5f576040805162461bcd60e51b815260206004820152601c60248201527f535048594e583a20496e76616c6964206d61726b6574696e6746656500000000604482015290519081900360640190fd5b60108290556015819055601654600f54611c7f919061168b90859061337a565b601355601754601454601554611c9a929161168b919061337a565b601855604080518381526020810183905281517f2c23f881dba47e5d04ed00101f3697091006eaa7b38ceb267647c390aa93f34f929181900390910190a15050565b60266020526000908152604090205460ff1681565b6000611cfb611d1a565b905090565b601e54610100900460ff1681565b60205481565b601c5481565b6000546001600160a01b031690565b60058054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561113f5780601f106111145761010080835404028352916020019161113f565b3360009081526021602052604090205460ff16611ddd576040805162461bcd60e51b815260206004820152600c60248201526b3737ba16b096b9b4b3b732b960a11b604482015290519081900360640190fd5b6001600160a01b03821660009081526027602052604090205460ff1615158115151415611e3f576040805162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e4b5cd95d60aa1b604482015290519081900360640190fd5b3360009081526024602052604090205460ff1615611e93576040805162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c96b9b4b3b760a11b604482015290519081900360640190fd5b33600090815260246020526040808220805460ff19166001179055600080516020614ca3833981519152546001600160a01b0316825281205460ff1615611ed8576001015b600080516020614c21833981519152546001600160a01b031660009081526024602052604090205460ff1615611f0c576001015b600080516020614a60833981519152546001600160a01b031660009081526024602052604090205460ff1615611f40576001015b60028110611fd2576001600160a01b038381166000908152602760209081526040808320805460ff1990811688151517909155600080516020614ca383398151915254851684526024909252808320805483169055600080516020614c218339815191525484168352808320805483169055600080516020614a60833981519152549093168252919020805490911690555b505050565b60115481565b611fe56133db565b60065461010090046001600160a01b039081169116146120365760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b6117658282613bf8565b600e5481565b61204e6133db565b60065461010090046001600160a01b0390811691161461209f5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b6117656001600160a01b0383163383613caa565b6120bb6133db565b60065461010090046001600160a01b0390811691161461210c5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600e8190556040805182815290517f7c57306552f9ca1d69c9c779932ef43e8bc6f04d7718d9e1fbf6a877013ececd9181900360200190a150565b60006112126121546133db565b846113fd85604051806060016040528060258152602001614b60602591396002600061217e6133db565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061398b565b6121b76133db565b60065461010090046001600160a01b039081169116146122085760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b6001600160a01b03821660009081526026602052604090205460ff16151581151514156122665760405162461bcd60e51b8152600401808060200182810382526032815260200180614a806032913960400191505060405180910390fd5b6001600160a01b038216600081815260266020908152604091829020805460ff1916851515908117909155825190815291517fd3d1fab5db42ae85293059c69e12bf01ffffb1dd5ff4caa5e5568f99fc387f249281900390910190a25050565b60096020526000908152604090205460ff1681565b60006112126122e86133db565b84846134cb565b60125481565b6122fd6133db565b60065461010090046001600160a01b0390811691161461234e5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600c546001600160a01b038281169116141561239b5760405162461bcd60e51b8152600401808060200182810382526034815260200180614d1b6034913960400191505060405180910390fd5b6123a681600161243e565b600c546123bd906001600160a01b0316600061243e565b600c546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b031681565b60286020526000908152604090205460ff1681565b6124466133db565b60065461010090046001600160a01b039081169116146124975760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b6001600160a01b03821660009081526025602052604090205460ff16151581151514156124f55760405162461bcd60e51b8152600401808060200182810382526032815260200180614a066032913960400191505060405180910390fd5b6001600160a01b038216600081815260256020908152604091829020805460ff1916851515908117909155825190815291517f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79281900390910190a25050565b600d546001600160a01b031681565b61256c6133db565b6000546001600160a01b039081169116146125bc576040805162461bcd60e51b81526020600482018190526024820152600080516020614ad3833981519152604482015290519081900360640190fd5b60005b828110156126115781602560008686858181106125d857fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016125bf565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051808060200183151581526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b600a546001600160a01b031681565b61269b6133db565b60065461010090046001600160a01b039081169116146126ec5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b601a839055601b829055601c8190556127098161168b858561337a565b601d55604080518481526020810184905280820183905290517fcc891d40504d5b798e9edf203f13fad7a7e3db2585689577e22c7529a474fc099181900360600190a1505050565b6127596133db565b60065461010090046001600160a01b039081169116146127aa5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b6007546001600160a01b03828116911614156127f75760405162461bcd60e51b815260040180806020018281038252602b815260200180614bf6602b913960400191505060405180910390fd5b6007546040516001600160a01b03918216918316907f0807b5b1d0f1a9b369ecf33bc393cc8bf6b2a3e3e46a9f28d08a900343f41ebe90600090a3600780546001600160a01b0319166001600160a01b0383811691909117918290556040805163c45a015560e01b815290516000939092169163c45a015591600480820192602092909190829003018186803b15801561289057600080fd5b505afa1580156128a4573d6000803e3d6000fd5b505050506040513d60208110156128ba57600080fd5b5051600754604080516315ab88c960e31b815290516001600160a01b039384169363e6a4390593309391169163ad5c464891600480820192602092909190829003018186803b15801561290c57600080fd5b505afa158015612920573d6000803e3d6000fd5b505050506040513d602081101561293657600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039384166004820152929091166024830152516044808301926020929190829003018186803b15801561298657600080fd5b505afa15801561299a573d6000803e3d6000fd5b505050506040513d60208110156129b057600080fd5b505190506001600160a01b038116612b3757600760009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015612a1057600080fd5b505afa158015612a24573d6000803e3d6000fd5b505050506040513d6020811015612a3a57600080fd5b5051600754604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693309391169163ad5c464891600480820192602092909190829003018186803b158015612a8c57600080fd5b505afa158015612aa0573d6000803e3d6000fd5b505050506040513d6020811015612ab657600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015612b0857600080fd5b505af1158015612b1c573d6000803e3d6000fd5b505050506040513d6020811015612b3257600080fd5b505190505b600854612b4e906001600160a01b03166000613bf8565b600880546001600160a01b0319166001600160a01b03838116919091179182905561176591166001613bf8565b600b546001600160a01b031681565b612b926133db565b60065461010090046001600160a01b03908116911614612be35760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600a8211158015612bf55750600a8111155b612c46576040805162461bcd60e51b815260206004820152601c60248201527f535048594e583a20496e76616c6964206d61726b6574696e6746656500000000604482015290519081900360640190fd5b60168290556017819055600f54601054612c66919061168b90859061337a565b601355601454601554601754612c81929161168b919061337a565b601855604080518381526020810183905281517fdcabb673b8004b29667370cf7e48059178985da4fa97105c1532cdfb5bbc5c0d929181900390910190a15050565b60145481565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b612cfc6133db565b60065461010090046001600160a01b03908116911614612d4d5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b612d776133db565b60065461010090046001600160a01b03908116911614612dc85760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b612dd181613cfc565b50565b612ddc6133db565b60065461010090046001600160a01b03908116911614612e2d5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b600d546001600160a01b0382811691161415612e7a5760405162461bcd60e51b8152600401808060200182810382526036815260200180614cc36036913960400191505060405180910390fd5b612e8581600161243e565b600d54612e9c906001600160a01b0316600061243e565b600d546040516001600160a01b03918216918316907f94cc1498503be9a145caf3e96f856665f29cf9b26c7179a93fbe1c1e5f56a0fd90600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526021602052604090205460ff16612f4c576040805162461bcd60e51b815260206004820152600c60248201526b3737ba16b096b9b4b3b732b960a11b604482015290519081900360640190fd5b601e5460ff6101009091041615158115151415612f9e576040805162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e4b5cd95d60aa1b604482015290519081900360640190fd5b3360009081526023602052604090205460ff1615612ff2576040805162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c96b9b4b3b760a11b604482015290519081900360640190fd5b33600090815260236020526040808220805460ff19166001179055600080516020614ca3833981519152546001600160a01b0316825281205460ff1615613037576001015b600080516020614c21833981519152546001600160a01b031660009081526023602052604090205460ff161561306b576001015b600080516020614a60833981519152546001600160a01b031660009081526023602052604090205460ff161561309f576001015b60028111156117655750601e80549115156101000261ff0019909216919091179055600080516020614ca3833981519152546001600160a01b03908116600090815260236020526040808220805460ff19908116909155600080516020614c218339815191525484168352818320805482169055600080516020614a60833981519152549093168252902080549091169055565b61313b6133db565b60065461010090046001600160a01b0390811691161461318c5760405162461bcd60e51b8152600401808060200182810382526025815260200180614ba66025913960400191505060405180910390fd5b601f546131999082613da8565b601f55612dd1303383613dea565b6131af6133db565b6000546001600160a01b039081169116146131ff576040805162461bcd60e51b81526020600482018190526024820152600080516020614ad3833981519152604482015290519081900360640190fd5b612dd181613f3c565b6132106133db565b6000546001600160a01b03908116911614613260576040805162461bcd60e51b81526020600482018190526024820152600080516020614ad3833981519152604482015290519081900360640190fd5b43601981905560408051918252517f27f2628255d76b9078e3983ef55b01e83266647391bef5f60c83b70e9d4002e19181900360200190a1565b3360009081526021602052604090205460ff166132ed576040805162461bcd60e51b815260206004820152600c60248201526b3737ba16b096b9b4b3b732b960a11b604482015290519081900360640190fd5b33600090815260216020526040808220805460ff199081169091556001600160a01b0384168352908220805490911660011790555b6003811015611765576000818152602260205260409020546001600160a01b031633141561337257600081815260226020526040902080546001600160a01b0319166001600160a01b0384161790555b600101613322565b6000828201838110156133d4576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166134245760405162461bcd60e51b815260040180806020018281038252602481526020018061496b6024913960400191505060405180910390fd5b6001600160a01b0382166134695760405162461bcd60e51b8152600401808060200182810382526022815260200180614cf96022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166135105760405162461bcd60e51b81526004018080602001828103825260258152602001806149466025913960400191505060405180910390fd5b6001600160a01b0382166135555760405162461bcd60e51b8152600401808060200182810382526023815260200180614b3d6023913960400191505060405180910390fd5b601e54610100900460ff16156135a2576040805162461bcd60e51b815260206004820152600d60248201526c1d1c9859194b5cdd1bdc1c1959609a1b604482015290519081900360640190fd5b6001600160a01b03831660009081526027602052604090205460ff161580156135e457506001600160a01b03821660009081526027602052604090205460ff16155b613635576040805162461bcd60e51b815260206004820152601960248201527f535048594e583a20696e636c7564652d626c61636b4c69737400000000000000604482015290519081900360640190fd5b602054811115613685576040805162461bcd60e51b81526020600482015260166024820152756d61782d74782d616d6f756e742d6f766572666c6f7760501b604482015290519081900360640190fd5b8061369b5761369683836000613dea565b611fd2565b601e5460ff16156137445760006136bd601f546136b730611acb565b90613da8565b905060006136c9613fdc565b905080821080159081906136e75750600854600160a01b900460ff16155b801561370c57506001600160a01b03861660009081526028602052604090205460ff16155b15613740576008805460ff60a01b1916600160a01b17905590915081906137328261423b565b6008805460ff60a01b191690555b5050505b6001600160a01b03821660009081526026602052604090205460ff16801561376c5750601954155b1561377657436019555b6001600160a01b03831660009081526025602052604090205460019060ff16806137b857506001600160a01b03831660009081526025602052604090205460ff165b156137c1575060005b801561397a57600a60195443031161382d576000826137df85611acb565b0190506934f086f3b33b6840000081111561382b5760405162461bcd60e51b81526004018080602001828103825260278152602001806149df6027913960400191505060405180910390fd5b505b6001600160a01b03841660009081526026602052604081205460ff168061386c57506001600160a01b03841660009081526026602052604090205460ff165b1561397857600a60195443031161389a57613893606461388d8560636142fd565b90614356565b9050613961565b6001600160a01b03851660009081526026602052604081205460ff16156138e1576138d5606461388d601354876142fd90919063ffffffff16565b91506012549050613903565b6138fb606461388d601854876142fd90919063ffffffff16565b915060115490505b6000613914606461388d87856142fd565b90506139208582613da8565b945061392d873083613dea565b601e5462010000900460ff161561394d576139483082613b08565b61395e565b601f5461395a908261337a565b601f555b50505b61396b8382613da8565b9250613978853083613dea565b505b613985848484613dea565b50505050565b60008184841115613a1a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139df5781810151838201526020016139c7565b50505050905090810190601f168015613a0c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038216613a7d576040805162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600354613a8a908261337a565b6003556001600160a01b038216600090815260016020526040902054613ab0908261337a565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216613b4d5760405162461bcd60e51b8152600401808060200182810382526021815260200180614b856021913960400191505060405180910390fd5b613b8a81604051806060016040528060228152602001614c41602291396001600160a01b038516600090815260016020526040902054919061398b565b6001600160a01b038316600090815260016020526040902055600354613bb09082613da8565b6003556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b03821660009081526028602052604090205460ff1615158115151415613c565760405162461bcd60e51b8152600401808060200182810382526040815260200180614c636040913960400191505060405180910390fd5b6001600160a01b038216600081815260286020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611fd2908490614398565b6001600160a01b038116613d415760405162461bcd60e51b815260040180806020018281038252602b815260200180614bcb602b913960400191505060405180910390fd5b6006546040516001600160a01b0380841692610100900416907f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8590600090a3600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60006133d483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061398b565b6001600160a01b038316613e2f5760405162461bcd60e51b81526004018080602001828103825260258152602001806149466025913960400191505060405180910390fd5b6001600160a01b038216613e745760405162461bcd60e51b8152600401808060200182810382526023815260200180614b3d6023913960400191505060405180910390fd5b613eb181604051806060016040528060268152602001614af3602691396001600160a01b038616600090815260016020526040902054919061398b565b6001600160a01b038085166000908152600160205260408082209390935590841681522054613ee0908261337a565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b038116613f815760405162461bcd60e51b81526004018080602001828103825260268152602001806149b96026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6040805160028082526060808301845260009384939192906020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561404757600080fd5b505afa15801561405b573d6000803e3d6000fd5b505050506040513d602081101561407157600080fd5b50518151829060009061408057fe5b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106140ae57fe5b6001600160a01b03928316602091820292909201810191909152600754600e546040805163d06ca61f60e01b81526004810183815260248201928352875160448301528751606097959095169563d06ca61f958994929360640191858101910280838360005b8381101561412c578181015183820152602001614114565b50505050905001935050505060006040518083038186803b15801561415057600080fd5b505afa158015614164573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561418d57600080fd5b81019080805160405193929190846401000000008211156141ad57600080fd5b9083019060208201858111156141c257600080fd5b82518660208202830111640100000000821117156141df57600080fd5b82525081516020918201928201910280838360005b8381101561420c5781810151838201526020016141f4565b5050505090500160405250505090508060018151811061422857fe5b6020026020010151925082935050505090565b6000614258601d5461388d601a54856142fd90919063ffffffff16565b905060006142668383613da8565b905061427181614449565b60004790506000614293601d5461388d601a54856142fd90919063ffffffff16565b905060006142b2601d5461388d601b54866142fd90919063ffffffff16565b905060006142c4836136b78685613da8565b905085156142d6576142d686846145f7565b81156142e5576142e5826146af565b80156142f4576142f4816146e9565b50505050505050565b60008261430c57506000611216565b8282028284828161431957fe5b04146133d45760405162461bcd60e51b8152600401808060200182810382526021815260200180614ab26021913960400191505060405180910390fd5b60006133d483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614723565b60606143ed826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166147889092919063ffffffff16565b805190915015611fd25780806020019051602081101561440c57600080fd5b5051611fd25760405162461bcd60e51b815260040180806020018281038252602a81526020018061498f602a913960400191505060405180910390fd5b6040805160028082526060808301845292602083019080368337019050509050308160008151811061447757fe5b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156144cb57600080fd5b505afa1580156144df573d6000803e3d6000fd5b505050506040513d60208110156144f557600080fd5b505181518290600190811061450657fe5b6001600160a01b03928316602091820292909201015260075461452c91309116846133df565b60075460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b838110156145b257818101518382015260200161459a565b505050509050019650505050505050600060405180830381600087803b1580156145db57600080fd5b505af11580156145ef573d6000803e3d6000fd5b505050505050565b60075461460f9030906001600160a01b0316846133df565b600754600b546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b15801561468457600080fd5b505af1158015614698573d6000803e3d6000fd5b50505050506040513d606081101561398557600080fd5b600c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611765573d6000803e3d6000fd5b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611765573d6000803e3d6000fd5b600081836147725760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156139df5781810151838201526020016139c7565b50600083858161477e57fe5b0495945050505050565b6060614797848460008561479f565b949350505050565b60606147aa8561490c565b6147fb576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061483a5780518252601f19909201916020918201910161481b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461489c576040519150601f19603f3d011682016040523d82523d6000602084013e6148a1565b606091505b509150915081156148b55791506147979050565b8051156148c55780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156139df5781810151838201526020016139c7565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061479757505015159291505056fe42455032303a207472616e736665722066726f6d20746865207a65726f206164647265737342455032303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666542455032303a204245503230206f7065726174696f6e20646964206e6f7420737563636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e656420616d6f756e74206578636565647320746865206d61784f776e6564416d6f756e74535048594e583a204163636f756e7420697320616c7265616479207468652076616c7565206f6620276578636c756465642742455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636552978eb6718a0ed733b71dbb3c4781d6da146a41523832713c09679420d0cac5535048594e583a204163636f756e7420697320616c7265616479207468652076616c7565206f662027697347657446656527536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657242455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365535048594e583a20537068796e7842726964676520616c7265616479206578697374732142455032303a207472616e7366657220746f20746865207a65726f206164647265737342455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a206275726e2066726f6d20746865207a65726f20616464726573734d616e61676561626c653a2063616c6c6572206973206e6f7420746865206d616e616765724d616e61676561626c653a206e6577206d616e6167657220697320746865207a65726f2061646472657373535048594e583a2054686520726f7574657220616c72656164792068617320746861742061646472657373e39b43e4224876d80510ac9d8f190663bcce357e28a4aec26f3bf2e600bb40ec42455032303a206275726e20616d6f756e7420657863656564732062616c616e6365535048594e583a204175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c7565b84cf808d0d5b1ad44962c9bfddd3cfce67763c49ab557cfd0e9f6804faade99535048594e583a2054686520646576656c6f706d656e742077616c6c657420697320616c72656164792074686973206164647265737342455032303a20617070726f766520746f20746865207a65726f2061646472657373535048594e583a20546865206d61726b6574696e672077616c6c657420697320616c726561647920746869732061646472657373a2646970667358221220419a8dd9b2006d57b773d4a87dc57d282ff7e56dfaf0d513a00d0851f6fb292764736f6c634300060c0033

Deployed ByteCode Sourcemap

42925:22836:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23625:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43900:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5101:148;;;;;;;;;;;;;:::i;:::-;;44010:34;;;;;;;;;;;;;:::i;25112:161::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25112:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;44254:34;;;;;;;;;;;;;:::i;51675:310::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51675:310:0;;;;;;;:::i;43970:33::-;;;;;;;;;;;;;:::i;24101:100::-;;;;;;;;;;;;;:::i;43779:35::-;;;;;;;;;;;;;:::i;43042:39::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;43042:39:0;;;;;;;;;;;;;;25744:397;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25744:397:0;;;;;;;;;;;;;;;;;:::i;43593:34::-;;;;;;;;;;;;;:::i;44219:28::-;;;;;;;;;;;;;:::i;43860:33::-;;;;;;;;;;;;;:::i;23784:92::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53339:198;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;53339:198:0;;;;;;;;;;:::i;26549:210::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26549:210:0;;;;;;;;:::i;44093:31::-;;;;;;;;;;;;;:::i;49722:92::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49722:92:0;;;;:::i;49984:553::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49984:553:0;;;;;;;:::i;49444:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;49444:109:0;;;;;;;;:::i;44133:41::-;;;;;;;;;;;;;:::i;27692:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27692:120:0;;:::i;4433:83::-;;;;;;;;;;;;;:::i;44746:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44746:41:0;-1:-1:-1;;;;;44746:41:0;;:::i;58991:126::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58991:126:0;-1:-1:-1;;;;;58991:126:0;;:::i;65431:173::-;;;:::i;53545:395::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53545:395:0;-1:-1:-1;;;;;53545:395:0;;:::i;43937:26::-;;;;;;;;;;;;;:::i;43554:32::-;;;;;;;;;;;;;:::i;56858:145::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56858:145:0;;:::i;49561:153::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49561:153:0;;;;:::i;24263:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24263:119:0;-1:-1:-1;;;;;24263:119:0;;:::i;7032:140::-;;;;;;;;;;;;;:::i;43278:101::-;;;;;;;;;;;;;:::i;43703:29::-;;;;;;;;;;;;;:::i;43821:32::-;;;;;;;;;;;;;:::i;50545:561::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50545:561:0;;;;;;;:::i;44697:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44697:42:0;-1:-1:-1;;;;;44697:42:0;;:::i;23468:94::-;;;;;;;;;;;;;:::i;44181:29::-;;;;;;;;;;;;;:::i;44297:50::-;;;;;;;;;;;;;:::i;44051:35::-;;;;;;;;;;;;;:::i;6390:79::-;;;;;;;;;;;;;:::i;23941:96::-;;;;;;;;;;;;;:::i;57841:826::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;57841:826:0;;;;;;;;;;:::i;43634:28::-;;;;;;;;;;;;;:::i;54970:165::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;54970:165:0;;;;;;;;;;:::i;43498:47::-;;;;;;;;;;;;;:::i;65614:144::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;65614:144:0;;;;;;;;:::i;55504:183::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55504:183:0;;:::i;27261:311::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27261:311:0;;;;;;;;:::i;54316:308::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;54316:308:0;;;;;;;;;;:::i;43156:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43156:42:0;-1:-1:-1;;;;;43156:42:0;;:::i;24594:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24594:167:0;;;;;;;;:::i;43669:27::-;;;;;;;;;;;;;:::i;55695:492::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55695:492:0;-1:-1:-1;;;;;55695:492:0;;:::i;43088:29::-;;;;;;;;;;;;;:::i;44945:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44945:57:0;-1:-1:-1;;;;;44945:57:0;;:::i;53948:360::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;53948:360:0;;;;;;;;;;:::i;43386:103::-;;;;;;;;;;;;;:::i;54632:330::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54632:330:0;-1:-1:-1;54632:330:0;;;;:::i;43205:27::-;;;;;;;;;;;;;:::i;51993:417::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51993:417:0;;;;;;;;;;;;:::i;52418:913::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52418:913:0;-1:-1:-1;;;;;52418:913:0;;:::i;43239:30::-;;;;;;;;;;;;;:::i;51114:553::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51114:553:0;;;;;;;:::i;43739:33::-;;;;;;;;;;;;;:::i;24823:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24823:143:0;;;;;;;;;;:::i;49822:154::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49822:154:0;-1:-1:-1;;;;;49822:154:0;;:::i;5409:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5409:117:0;-1:-1:-1;;;;;5409:117:0;;:::i;56195:516::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56195:516:0;-1:-1:-1;;;;;56195:516:0;;:::i;57011:822::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57011:822:0;;;;:::i;65224:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;65224:199:0;;:::i;7327:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7327:109:0;-1:-1:-1;;;;;7327:109:0;;:::i;56719:131::-;;;;;;;;;;;;;:::i;58675:308::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58675:308:0;-1:-1:-1;;;;;58675:308:0;;:::i;23625:92::-;23704:5;23697:12;;;;;;;;-1:-1:-1;;23697:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23671:13;;23697:12;;23704:5;;23697:12;;23704:5;23697:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23625:92;:::o;43900:30::-;;;;:::o;5101:148::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5188:8:::1;::::0;5166:43:::1;::::0;5206:1:::1;::::0;5188:8:::1;::::0;::::1;-1:-1:-1::0;;;;;5188:8:0::1;::::0;5166:43:::1;::::0;5206:1;;5166:43:::1;5220:8;:21:::0;;-1:-1:-1;;;;;;5220:21:0::1;::::0;;5101:148::o;44010:34::-;;;;:::o;25112:161::-;25187:4;25204:39;25213:12;:10;:12::i;:::-;25227:7;25236:6;25204:8;:39::i;:::-;-1:-1:-1;25261:4:0;25112:161;;;;;:::o;44254:34::-;;;;:::o;51675:310::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51778:2:::1;51768:6;:12;;51760:48;;;::::0;;-1:-1:-1;;;51760:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;51760:48:0;;;;;;;;;;;;;::::1;;51838:2;51827:7;:13;;51819:49;;;::::0;;-1:-1:-1;;;51819:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;51819:49:0;;;;;;;;;;;;;::::1;;51879:12;:21:::0;;;51911:13:::1;:23:::0;;;51950:27:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;51675:310:::0;;:::o;43970:33::-;;;;:::o;24101:100::-;24181:12;;24101:100;:::o;43779:35::-;;;;:::o;43042:39::-;;;-1:-1:-1;;;;;43042:39:0;;:::o;25744:397::-;25876:4;25893:36;25903:6;25911:9;25922:6;25893:9;:36::i;:::-;25940:171;25963:6;25984:12;:10;:12::i;:::-;26011:89;26049:6;26011:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26011:19:0;;;;;;:11;:19;;;;;;26031:12;:10;:12::i;:::-;-1:-1:-1;;;;;26011:33:0;;;;;;;;;;;;-1:-1:-1;26011:33:0;;;:89;:37;:89::i;:::-;25940:8;:171::i;:::-;-1:-1:-1;26129:4:0;25744:397;;;;;:::o;43593:34::-;;;;:::o;44219:28::-;;;;;;;;;:::o;43860:33::-;;;;:::o;23784:92::-;23859:9;;;;23784:92;:::o;53339:198::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;53452:23:0;::::1;;::::0;;;:10:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;53452:32:0::1;::::0;::::1;;;::::0;;53500:29;;;;;;;::::1;::::0;;;;;;;;::::1;53339:198:::0;;:::o;26549:210::-;26629:4;26646:83;26655:12;:10;:12::i;:::-;26669:7;26678:50;26717:10;26678:11;:25;26690:12;:10;:12::i;:::-;-1:-1:-1;;;;;26678:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;26678:25:0;;;:34;;;;;;;;;;;:38;:50::i;44093:31::-;;;;:::o;49722:92::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49789:8:::1;:17:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;49789:17:0;;::::1;::::0;;;::::1;::::0;;49722:92::o;49984:553::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50115:2:::1;50105:6;:12;;:29;;;;;50132:2;50121:7;:13;;50105:29;50097:70;;;::::0;;-1:-1:-1;;;50097:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;50178:17;:26:::0;;;50215:18:::1;:28:::0;;;50332:17:::1;::::0;50293:19:::1;::::0;50271:89:::1;::::0;50332:17;50271:42:::1;::::0;50198:6;;50271:21:::1;:42::i;:::-;:46:::0;::::1;:89::i;:::-;50254:14;:106:::0;50452:18:::1;::::0;50412:20:::1;::::0;50389:18:::1;::::0;:92:::1;::::0;50452:18;50389:44:::1;::::0;:18;:22:::1;:44::i;:92::-;50371:15;:110:::0;50497:32:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;49984:553:::0;;:::o;49444:109::-;45216:10;45205:22;;;;:10;:22;;;;;;;;;:52;;-1:-1:-1;45245:12:0;;-1:-1:-1;;;;;45245:12:0;45231:10;:26;45205:52;45183:119;;;;;-1:-1:-1;;;45183:119:0;;;;;;;;;;;;-1:-1:-1;;;45183:119:0;;;;;;;;;;;;;;;49528:17:::1;49534:2;49538:6;49528:5;:17::i;:::-;49444:109:::0;;:::o;44133:41::-;;;;;;:::o;27692:120::-;27738:4;27755:27;27761:12;:10;:12::i;:::-;27775:6;27755:5;:27::i;:::-;-1:-1:-1;27800:4:0;27692:120;;;:::o;4433:83::-;4500:8;;;;;-1:-1:-1;;;;;4500:8:0;;4433:83::o;44746:41::-;;;;;;;;;;;;;;;:::o;58991:126::-;-1:-1:-1;;;;;59081:28:0;59057:4;59081:28;;;:19;:28;;;;;;;;;58991:126::o;65431:173::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65555:41:::1;::::0;65533:10:::1;::::0;;;65574:21:::1;65555:41:::0;::::1;;;::::0;65497:25:::1;65555:41:::0;65497:25;65555:41;65574:21;65533:10;65555:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;53545:395:::0;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53648:12:::1;::::0;-1:-1:-1;;;;;53648:29:0;;::::1;:12:::0;::::1;:29;;53626:115;;;;-1:-1:-1::0;;;53626:115:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53772:12;::::0;;-1:-1:-1;;;;;53772:12:0;;::::1;53788:5;53752:33:::0;;;:19:::1;:33;::::0;;;;;;;:41;;-1:-1:-1;;53752:41:0;;::::1;::::0;;;53804:28;;-1:-1:-1;;;;;;53804:28:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;53863:12;;;::::1;53843:33:::0;;;;;;:40;;;;::::1;-1:-1:-1::0;53843:40:0::1;::::0;;;53899:33;;;;;;::::1;::::0;;;;;;;;::::1;53545:395:::0;:::o;43937:26::-;;;;:::o;43554:32::-;;;;:::o;56858:145::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56932:11:::1;:21:::0;;;56969:26:::1;::::0;;;;;;;::::1;::::0;;;;;;;;;::::1;56858:145:::0;:::o;49561:153::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49634:21:::1;:29:::0;;;::::1;;-1:-1:-1::0;;49634:29:0;;::::1;::::0;::::1;::::0;;;49679:27:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;49561:153:::0;:::o;24263:119::-;-1:-1:-1;;;;;24356:18:0;24329:7;24356:18;;;:9;:18;;;;;;;24263:119::o;7032:140::-;6612:12;:10;:12::i;:::-;6602:6;;-1:-1:-1;;;;;6602:6:0;;;:22;;;6594:67;;;;;-1:-1:-1;;;6594:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6594:67:0;;;;;;;;;;;;;;;7131:1:::1;7115:6:::0;;7094:40:::1;::::0;-1:-1:-1;;;;;7115:6:0;;::::1;::::0;7094:40:::1;::::0;7131:1;;7094:40:::1;7162:1;7145:19:::0;;-1:-1:-1;;;;;;7145:19:0::1;::::0;;7032:140::o;43278:101::-;;;-1:-1:-1;;;;;43278:101:0;;:::o;43703:29::-;;;;:::o;43821:32::-;;;;:::o;50545:561::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50678:2:::1;50668:6;:12;;:29;;;;;50695:2;50684:7;:13;;50668:29;50660:70;;;::::0;;-1:-1:-1;;;50660:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;50741:19;:28:::0;;;50780:20:::1;:30:::0;;;50899:17:::1;::::0;50862::::1;::::0;50838:89:::1;::::0;50899:17;50838:42:::1;::::0;50763:6;;50838:23:::1;:42::i;:89::-;50821:14;:106:::0;51019:18:::1;::::0;50981::::1;::::0;50956:20:::1;::::0;:92:::1;::::0;51019:18;50956:44:::1;::::0;:20;:24:::1;:44::i;:92::-;50938:15;:110:::0;51064:34:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;50545:561:::0;;:::o;44697:42::-;;;;;;;;;;;;;;;:::o;23468:94::-;23520:7;23547;:5;:7::i;:::-;23540:14;;23468:94;:::o;44181:29::-;;;;;;;;;:::o;44297:50::-;;;;:::o;44051:35::-;;;;:::o;6390:79::-;6428:7;6455:6;-1:-1:-1;;;;;6455:6:0;6390:79;:::o;23941:96::-;24022:7;24015:14;;;;;;;;-1:-1:-1;;24015:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23989:13;;24015:14;;24022:7;;24015:14;;24022:7;24015:14;;;;;;;;;;;;;;;;;;;;;;;;57841:826;45379:10;45371:19;;;;:7;:19;;;;;;;;45363:44;;;;;-1:-1:-1;;;45363:44:0;;;;;;;;;;;;-1:-1:-1;;;45363:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;57927:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;:28;;::::0;::::1;;;;57919:52;;;::::0;;-1:-1:-1;;;57919:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;57919:52:0;;;;;;;;;;;;;::::1;;58001:10;57991:21;::::0;;;:9:::1;:21;::::0;;;;;::::1;;57990:22;57982:47;;;::::0;;-1:-1:-1;;;57982:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;57982:47:0;;;;;;;;;;;;;::::1;;58050:10;58040:21;::::0;;;:9:::1;:21;::::0;;;;;:28;;-1:-1:-1;;58040:28:0::1;58064:4;58040:28;::::0;;-1:-1:-1;;;;;;;;;;;58130:15:0;-1:-1:-1;;;;;58130:15:0::1;58120:26:::0;;;;;58040:28:::1;58120:26;58116:94;;;58197:1;58180:18;58116:94;-1:-1:-1::0;;;;;;;;;;;58236:15:0;-1:-1:-1;;;;;58236:15:0::1;58226:26;::::0;;;:9:::1;58236:15;58226:26:::0;58236:15;58226:26;;;::::1;;58222:94;;;58303:1;58286:18;58222:94;-1:-1:-1::0;;;;;;;;;;;58342:15:0;-1:-1:-1;;;;;58342:15:0::1;58332:26;::::0;;;:9:::1;58342:15;58332:26:::0;58342:15;58332:26;;;::::1;;58328:94;;;58409:1;58392:18;58328:94;58456:1;58438:14;:19;58434:226;;-1:-1:-1::0;;;;;58474:18:0;;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;:27;;-1:-1:-1;;58474:27:0;;::::1;::::0;::::1;;;::::0;;;-1:-1:-1;;;;;;;;;;;58526:15:0;;::::1;58516:26:::0;;:9:::1;:26:::0;;;;;;:34;;;::::1;::::0;;-1:-1:-1;;;;;;;;;;;58575:15:0;;::::1;58565:26:::0;;;;;:34;;;::::1;::::0;;-1:-1:-1;;;;;;;;;;;58624:15:0;;;::::1;58614:26:::0;;;;;:34;;;;::::1;::::0;;58434:226:::1;45418:1;57841:826:::0;;:::o;43634:28::-;;;;:::o;54970:165::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55086:41:::1;55115:4;55121:5;55086:28;:41::i;43498:47::-:0;;;;:::o;65614:144::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65702:48:::1;-1:-1:-1::0;;;;;65702:27:0;::::1;65730:10;65742:7:::0;65702:27:::1;:48::i;55504:183::-:0;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55588:18:::1;:34:::0;;;55638:41:::1;::::0;;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;55504:183:::0;:::o;27261:311::-;27346:4;27363:179;27386:12;:10;:12::i;:::-;27413:7;27435:96;27474:15;27435:96;;;;;;;;;;;;;;;;;:11;:25;27447:12;:10;:12::i;:::-;-1:-1:-1;;;;;27435:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;27435:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;54316:308::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54423:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;:31;;::::0;::::1;;;;54401:131;;;;-1:-1:-1::0;;;54401:131:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;54543:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;;;;:30;;-1:-1:-1;;54543:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;54591:25;;;;;;;::::1;::::0;;;;;;;;::::1;54316:308:::0;;:::o;43156:42::-;;;;;;;;;;;;;;;:::o;24594:167::-;24672:4;24689:42;24699:12;:10;:12::i;:::-;24713:9;24724:6;24689:9;:42::i;43669:27::-;;;;:::o;55695:492::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55851:15:::1;::::0;-1:-1:-1;;;;;55829:37:0;;::::1;55851:15:::0;::::1;55829:37;;55807:139;;;;-1:-1:-1::0;;;55807:139:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55957:41;55973:18;55993:4;55957:15;:41::i;:::-;56025:15;::::0;56009:39:::1;::::0;-1:-1:-1;;;;;56025:15:0::1;;56009;:39::i;:::-;56107:15;::::0;56064:59:::1;::::0;-1:-1:-1;;;;;56107:15:0;;::::1;::::0;56064:59;::::1;::::0;::::1;::::0;56107:15:::1;::::0;56064:59:::1;56134:15;:45:::0;;-1:-1:-1;;;;;;56134:45:0::1;-1:-1:-1::0;;;;;56134:45:0;;;::::1;::::0;;;::::1;::::0;;55695:492::o;43088:29::-;;;-1:-1:-1;;;;;43088:29:0;;:::o;44945:57::-;;;;;;;;;;;;;;;:::o;53948:360::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54080:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;54058:140;;;;-1:-1:-1::0;;;54058:140:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;54209:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;54209:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;54266:34;;;;;;;::::1;::::0;;;;;;;;::::1;53948:360:::0;;:::o;43386:103::-;;;-1:-1:-1;;;;;43386:103:0;;:::o;54632:330::-;6612:12;:10;:12::i;:::-;6602:6;;-1:-1:-1;;;;;6602:6:0;;;:22;;;6594:67;;;;;-1:-1:-1;;;6594:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6594:67:0;;;;;;;;;;;;;;;54775:9:::1;54770:116;54790:19:::0;;::::1;54770:116;;;54866:8;54831:19;:32;54851:8;;54860:1;54851:11;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;54851:11:0::1;54831:32:::0;;-1:-1:-1;54831:32:0;::::1;::::0;;;;;;-1:-1:-1;54831:32:0;:43;;-1:-1:-1;;54831:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;54811:3:0::1;54770:116;;;;54903:51;54935:8;;54945;54903:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;54903:51:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;54903:51:0;;-1:-1:-1;;;;;54903:51:0::1;54632:330:::0;;;:::o;43205:27::-;;;-1:-1:-1;;;;;43205:27:0;;:::o;51993:417::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52143:14:::1;:27:::0;;;52181:14:::1;:27:::0;;;52219:16:::1;:31:::0;;;52275:56:::1;52238:12:::0;52275:34:::1;52160:10:::0;52198;52275:18:::1;:34::i;:56::-;52261:11;:70:::0;52349:53:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;51993:417:::0;;;:::o;52418:913::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52544:16:::1;::::0;-1:-1:-1;;;;;52522:39:0;;::::1;52544:16:::0;::::1;52522:39;;52500:132;;;;-1:-1:-1::0;;;52500:132:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52691:16;::::0;52648:61:::1;::::0;-1:-1:-1;;;;;52691:16:0;;::::1;::::0;52648:61;::::1;::::0;::::1;::::0;52691:16:::1;::::0;52648:61:::1;52720:16;:46:::0;;-1:-1:-1;;;;;;52720:46:0::1;-1:-1:-1::0;;;;;52720:46:0;;::::1;::::0;;;::::1;::::0;;;;52844:26:::1;::::0;;-1:-1:-1;;;52844:26:0;;;;-1:-1:-1;;52844:16:0;;::::1;::::0;:24:::1;::::0;:26:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:16;:26;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;52844:26:0;52922:16:::1;::::0;:23:::1;::::0;;-1:-1:-1;;;52922:23:0;;;;-1:-1:-1;;;;;52829:50:0;;::::1;::::0;::::1;::::0;52902:4:::1;::::0;52922:16;::::1;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;52844:26:::1;::::0;52922:23;;;;;;;;:16;:23;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;52922:23:0;52829:127:::1;::::0;;-1:-1:-1;;;;;;52829:127:0::1;::::0;;;;;;-1:-1:-1;;;;;52829:127:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;52922:23:::1;::::0;52829:127;;;;;;;;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;52829:127:0;;-1:-1:-1;;;;;;52971:29:0;::::1;52967:191;;53050:16;;;;;;;;;-1:-1:-1::0;;;;;53050:16:0::1;-1:-1:-1::0;;;;;53050:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;53050:26:0;53122:16:::1;::::0;:23:::1;::::0;;-1:-1:-1;;;53122:23:0;;;;-1:-1:-1;;;;;53035:71:0;;::::1;::::0;::::1;::::0;53115:4:::1;::::0;53122:16;::::1;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;53050:26:::1;::::0;53122:23;;;;;;;;:16;:23;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;53122:23:0;53035:111:::1;::::0;;-1:-1:-1;;;;;;53035:111:0::1;::::0;;;;;;-1:-1:-1;;;;;53035:111:0;;::::1;;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;53122:23:::1;::::0;53035:111;;;;;;;-1:-1:-1;53035:111:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;53035:111:0;;-1:-1:-1;52967:191:0::1;53197:14;::::0;53168:51:::1;::::0;-1:-1:-1;;;;;53197:14:0::1;;53168:28;:51::i;:::-;53230:14;:32:::0;;-1:-1:-1;;;;;;53230:32:0::1;-1:-1:-1::0;;;;;53230:32:0;;::::1;::::0;;;::::1;::::0;;;;53273:50:::1;::::0;53302:14:::1;-1:-1:-1::0;53273:28:0::1;:50::i;43239:30::-:0;;;-1:-1:-1;;;;;43239:30:0;;:::o;51114:553::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51245:2:::1;51235:6;:12;;:29;;;;;51262:2;51251:7;:13;;51235:29;51227:70;;;::::0;;-1:-1:-1;;;51227:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;51308:17;:26:::0;;;51345:18:::1;:28:::0;;;51462:17:::1;::::0;51423:19:::1;::::0;51401:89:::1;::::0;51462:17;51401:42:::1;::::0;51328:6;;51401:21:::1;:42::i;:89::-;51384:14;:106:::0;51582:18:::1;::::0;51542:20:::1;::::0;51519:18:::1;::::0;:92:::1;::::0;51582:18;51519:44:::1;::::0;:18;:22:::1;:44::i;:92::-;51501:15;:110:::0;51627:32:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;51114:553:::0;;:::o;43739:33::-;;;;:::o;24823:143::-;-1:-1:-1;;;;;24931:18:0;;;24904:7;24931:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24823:143::o;49822:154::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49934:15:::1;:34:::0;;-1:-1:-1;;;;;;49934:34:0::1;-1:-1:-1::0;;;;;49934:34:0;;;::::1;::::0;;;::::1;::::0;;49822:154::o;5409:117::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5487:31:::1;5507:10;5487:19;:31::i;:::-;5409:117:::0;:::o;56195:516::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56357:17:::1;::::0;-1:-1:-1;;;;;56333:41:0;;::::1;56357:17:::0;::::1;56333:41;;56311:145;;;;-1:-1:-1::0;;;56311:145:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56467:43;56483:20;56505:4;56467:15;:43::i;:::-;56537:17;::::0;56521:41:::1;::::0;-1:-1:-1;;;;;56537:17:0::1;;56521:15;:41::i;:::-;56625:17;::::0;56578:65:::1;::::0;-1:-1:-1;;;;;56625:17:0;;::::1;::::0;56578:65;::::1;::::0;::::1;::::0;56625:17:::1;::::0;56578:65:::1;56654:17;:49:::0;;-1:-1:-1;;;;;;56654:49:0::1;-1:-1:-1::0;;;;;56654:49:0;;;::::1;::::0;;;::::1;::::0;;56195:516::o;57011:822::-;45379:10;45371:19;;;;:7;:19;;;;;;;;45363:44;;;;;-1:-1:-1;;;45363:44:0;;;;;;;;;;;;-1:-1:-1;;;45363:44:0;;;;;;;;;;;;;;;57088:9:::1;::::0;::::1;;::::0;;::::1;;:19;;::::0;::::1;;;;57080:43;;;::::0;;-1:-1:-1;;;57080:43:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;57080:43:0;;;;;;;;;;;;;::::1;;57157:10;57143:25;::::0;;;:13:::1;:25;::::0;;;;;::::1;;57142:26;57134:51;;;::::0;;-1:-1:-1;;;57134:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;57134:51:0;;;;;;;;;;;;;::::1;;57210:10;57196:25;::::0;;;:13:::1;:25;::::0;;;;;:32;;-1:-1:-1;;57196:32:0::1;57224:4;57196:32;::::0;;-1:-1:-1;;;;;;;;;;;57295:15:0;-1:-1:-1;;;;;57295:15:0::1;57281:30:::0;;;;;57196:32:::1;57281:30;57277:96;;;57360:1;57344:17;57277:96;-1:-1:-1::0;;;;;;;;;;;57403:15:0;-1:-1:-1;;;;;57403:15:0::1;57389:30;::::0;;;:13:::1;57403:15;57389:30:::0;57403:15;57389:30;;;::::1;;57385:96;;;57468:1;57452:17;57385:96;-1:-1:-1::0;;;;;;;;;;;57511:15:0;-1:-1:-1;;;;;57511:15:0::1;57497:30;::::0;;;:13:::1;57511:15;57497:30:::0;57511:15;57497:30;;;::::1;;57493:96;;;57576:1;57560:17;57493:96;57619:1;57603:13;:17;57599:227;;;-1:-1:-1::0;57637:9:0::1;:18:::0;;;::::1;;;;-1:-1:-1::0;;57637:18:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;;;;;;57684:15:0;-1:-1:-1;;;;;57684:15:0;;::::1;-1:-1:-1::0;57670:30:0;;;:13:::1;57684:15;57670:30:::0;57684:15;57670:30;;;:38;;-1:-1:-1;;57670:38:0;;::::1;::::0;;;-1:-1:-1;;;;;;;;;;;57737:15:0;;::::1;57723:30:::0;;;;;:38;;;::::1;::::0;;-1:-1:-1;;;;;;;;;;;57790:15:0;;;::::1;57776:30:::0;;;;:38;;;;::::1;::::0;;57011:822::o;65224:199::-;4665:12;:10;:12::i;:::-;4653:8;;;;;-1:-1:-1;;;;;4653:8:0;;;:24;;;4645:74;;;;-1:-1:-1;;;4645:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;65321:19:::1;::::0;:32:::1;::::0;65345:7;65321:23:::1;:32::i;:::-;65299:19;:54:::0;65364:51:::1;65388:4;65395:10;65407:7:::0;65364:15:::1;:51::i;7327:109::-:0;6612:12;:10;:12::i;:::-;6602:6;;-1:-1:-1;;;;;6602:6:0;;;:22;;;6594:67;;;;;-1:-1:-1;;;6594:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6594:67:0;;;;;;;;;;;;;;;7400:28:::1;7419:8;7400:18;:28::i;56719:131::-:0;6612:12;:10;:12::i;:::-;6602:6;;-1:-1:-1;;;;;6602:6:0;;;:22;;;6594:67;;;;;-1:-1:-1;;;6594:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;6594:67:0;;;;;;;;;;;;;;;56787:12:::1;56773:11;:26:::0;;;56815:27:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;56719:131::o:0;58675:308::-;45379:10;45371:19;;;;:7;:19;;;;;;;;45363:44;;;;;-1:-1:-1;;;45363:44:0;;;;;;;;;;;;-1:-1:-1;;;45363:44:0;;;;;;;;;;;;;;;58759:10:::1;58773:5;58751:19:::0;;;:7:::1;:19;::::0;;;;;:27;;-1:-1:-1;;58751:27:0;;::::1;::::0;;;-1:-1:-1;;;;;58789:16:0;::::1;::::0;;;;;:23;;;;::::1;58751:27:::0;58789:23:::1;::::0;;58823:153:::1;58847:1;58843;:5;58823:153;;;58874:15;::::0;;;:12:::1;:15;::::0;;;;;-1:-1:-1;;;;;58874:15:0::1;58893:10;58874:29;58870:95;;;58924:15;::::0;;;:12:::1;:15;::::0;;;;:25;;-1:-1:-1;;;;;;58924:25:0::1;-1:-1:-1::0;;;;;58924:25:0;::::1;;::::0;;58870:95:::1;58850:3;;58823:153;;11190:181:::0;11248:7;11280:5;;;11304:6;;;;11296:46;;;;;-1:-1:-1;;;11296:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11362:1;11190:181;-1:-1:-1;;;11190:181:0:o;3578:98::-;3658:10;3578:98;:::o;30524:372::-;-1:-1:-1;;;;;30652:19:0;;30644:68;;;;-1:-1:-1;;;30644:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30731:21:0;;30723:68;;;;-1:-1:-1;;;30723:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30804:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30856:32;;;;;;;;;;;;;;;;;30524:372;;;:::o;59125:3154::-;-1:-1:-1;;;;;59257:18:0;;59249:68;;;;-1:-1:-1;;;59249:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;59336:16:0;;59328:64;;;;-1:-1:-1;;;59328:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59412:9;;;;;;;59411:10;59403:36;;;;;-1:-1:-1;;;59403:36:0;;;;;;;;;;;;-1:-1:-1;;;59403:36:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;59459:15:0;;;;;;:9;:15;;;;;;;;59458:16;:34;;;;-1:-1:-1;;;;;;59479:13:0;;;;;;:9;:13;;;;;;;;59478:14;59458:34;59450:72;;;;;-1:-1:-1;;;59450:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;59551:11;;59541:6;:21;;59533:56;;;;;-1:-1:-1;;;59533:56:0;;;;;;;;;;;;-1:-1:-1;;;59533:56:0;;;;;;;;;;;;;;;59606:11;59602:93;;59634:28;59650:4;59656:2;59660:1;59634:15;:28::i;:::-;59677:7;;59602:93;59711:21;;;;59707:620;;;59749:28;59780:49;59809:19;;59780:24;59798:4;59780:9;:24::i;:::-;:28;;:49::i;:::-;59749:80;;59844:25;59872:27;:25;:27::i;:::-;59844:55;-1:-1:-1;59931:41:0;;;;;;;;59993:20;;-1:-1:-1;60005:8:0;;-1:-1:-1;;;60005:8:0;;;;60004:9;59993:20;:56;;;;-1:-1:-1;;;;;;60018:31:0;;;;;;:25;:31;;;;;;;;60017:32;59993:56;59989:327;;;60070:8;:15;;-1:-1:-1;;;;60070:15:0;-1:-1:-1;;;60070:15:0;;;60197:17;;-1:-1:-1;60197:17:0;;60233:32;60197:17;60233:10;:32::i;:::-;60284:8;:16;;-1:-1:-1;;;;60284:16:0;;;59989:327;59707:620;;;;-1:-1:-1;;;;;60343:14:0;;;;;;:10;:14;;;;;;;;:34;;;;-1:-1:-1;60361:11:0;;:16;60343:34;60339:93;;;60408:12;60394:11;:26;60339:93;-1:-1:-1;;;;;60627:25:0;;60506:12;60627:25;;;:19;:25;;;;;;60521:4;;60627:25;;;:52;;-1:-1:-1;;;;;;60656:23:0;;;;;;:19;:23;;;;;;;;60627:52;60623:100;;;-1:-1:-1;60706:5:0;60623:100;60739:7;60735:1491;;;60797:2;60782:11;;60767:12;:26;:32;60763:283;;60820:20;60859:6;60843:13;60853:2;60843:9;:13::i;:::-;:22;60820:45;;60930:17;60914:12;:33;;60884:146;;;;-1:-1:-1;;;60884:146:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60763:283;;-1:-1:-1;;;;;61091:16:0;;61060:12;61091:16;;;:10;:16;;;;;;;;;:34;;-1:-1:-1;;;;;;61111:14:0;;;;;;:10;:14;;;;;;;;61091:34;61087:1128;;;61180:2;61165:11;;61150:12;:26;:32;61146:949;;61214:25;61233:5;61214:14;:6;61225:2;61214:10;:14::i;:::-;:18;;:25::i;:::-;61207:32;;61146:949;;;-1:-1:-1;;;;;61330:16:0;;61288:15;61330:16;;;:10;:16;;;;;;;;61326:318;;;61382:37;61413:5;61382:26;61393:14;;61382:6;:10;;:26;;;;:::i;:37::-;61375:44;;61456:12;;61446:22;;61326:318;;;61532:38;61564:5;61532:27;61543:15;;61532:6;:10;;:27;;;;:::i;:38::-;61525:45;;61607:13;;61597:23;;61326:318;61666:18;61687:30;61711:5;61687:19;:6;61698:7;61687:10;:19::i;:30::-;61666:51;-1:-1:-1;61749:22:0;:6;61666:51;61749:10;:22::i;:::-;61740:31;;61794:48;61810:4;61824;61831:10;61794:15;:48::i;:::-;61869:8;;;;;;;61865:211;;;61906:32;61920:4;61927:10;61906:5;:32::i;:::-;61865:211;;;62017:19;;:35;;62041:10;62017:23;:35::i;:::-;61995:19;:57;61865:211;61146:949;;;62122:16;:6;62133:4;62122:10;:16::i;:::-;62113:25;;62157:42;62173:4;62187;62194;62157:15;:42::i;:::-;60735:1491;;62238:33;62254:4;62260:2;62264:6;62238:15;:33::i;:::-;59125:3154;;;;:::o;12093:226::-;12213:7;12249:12;12241:6;;;;12233:29;;;;-1:-1:-1;;;12233:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12285:5:0;;;12093:226::o;29096:308::-;-1:-1:-1;;;;;29172:21:0;;29164:65;;;;;-1:-1:-1;;;29164:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29257:12;;:24;;29274:6;29257:16;:24::i;:::-;29242:12;:39;-1:-1:-1;;;;;29313:18:0;;;;;;:9;:18;;;;;;:30;;29336:6;29313:22;:30::i;:::-;-1:-1:-1;;;;;29292:18:0;;;;;;:9;:18;;;;;;;;:51;;;;29359:37;;;;;;;29292:18;;;;29359:37;;;;;;;;;;29096:308;;:::o;29736:348::-;-1:-1:-1;;;;;29812:21:0;;29804:67;;;;-1:-1:-1;;;29804:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29905:68;29928:6;29905:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29905:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;29884:18:0;;;;;;:9;:18;;;;;:89;29999:12;;:24;;30016:6;29999:16;:24::i;:::-;29984:12;:39;30039:37;;;;;;;;30065:1;;-1:-1:-1;;;;;30039:37:0;;;;;;;;;;;;29736:348;;:::o;55143:353::-;-1:-1:-1;;;;;55248:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;55226:154;;;;-1:-1:-1;;;55226:154:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;55391:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;55391:39:0;;;;;;;;;;55448:40;;55391:39;;:31;55448:40;;;55143:353;;:::o;31463:211::-;31607:58;;;-1:-1:-1;;;;;31607:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31607:58:0;-1:-1:-1;;;31607:58:0;;;31580:86;;31600:5;;31580:19;:86::i;5635:248::-;-1:-1:-1;;;;;5712:24:0;;5704:80;;;;-1:-1:-1;;;5704:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5822:8;;5800:43;;-1:-1:-1;;;;;5800:43:0;;;;5822:8;;;;;5800:43;;;;;5854:8;:21;;-1:-1:-1;;;;;5854:21:0;;;;;-1:-1:-1;;;;;;5854:21:0;;;;;;;;;5635:248::o;11654:136::-;11712:7;11739:43;11743:1;11746;11739:43;;;;;;;;;;;;;;;;;:3;:43::i;28302:513::-;-1:-1:-1;;;;;28442:20:0;;28434:70;;;;-1:-1:-1;;;28434:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28523:23:0;;28515:71;;;;-1:-1:-1;;;28515:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28619;28641:6;28619:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28619:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;28599:17:0;;;;;;;:9;:17;;;;;;:91;;;;28724:20;;;;;;;:32;;28749:6;28724:24;:32::i;:::-;-1:-1:-1;;;;;28701:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;28772:35;;;;;;;28701:20;;28772:35;;;;;;;;;;;;;28302:513;;;:::o;7542:229::-;-1:-1:-1;;;;;7616:22:0;;7608:73;;;;-1:-1:-1;;;7608:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7718:6;;;7697:38;;-1:-1:-1;;;;;7697:38:0;;;;7718:6;;;7697:38;;;7746:6;:17;;-1:-1:-1;;;;;;7746:17:0;-1:-1:-1;;;;;7746:17:0;;;;;;;;;;7542:229::o;64533:431::-;64667:16;;;64681:1;64667:16;;;64643:21;64667:16;;;;;64593:7;;;;64643:21;;64681:1;64667:16;;;;;;;;-1:-1:-1;;64704:16:0;;:23;;;-1:-1:-1;;;64704:23:0;;;;64643:40;;-1:-1:-1;;;;;;64704:16:0;;;;:21;;-1:-1:-1;64704:23:0;;;;;;;;;;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;64704:23:0;64694:7;;:4;;64699:1;;64694:7;;;;;;;;;:33;-1:-1:-1;;;;;64694:33:0;;;-1:-1:-1;;;;;64694:33:0;;;;;64756:4;64738;64743:1;64738:7;;;;;;;;-1:-1:-1;;;;;64738:23:0;;;:7;;;;;;;;;;:23;;;;64799:16;;64844:18;;64799:93;;;-1:-1:-1;;;64799:93:0;;;;;;;;;;;;;;;;;;;;;;64772:24;;64799:16;;;;;:30;;64877:4;;64799:93;;;;;;;;;;;;;:16;:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;64799:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;64799:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64772:120;;64917:7;64925:1;64917:10;;;;;;;;;;;;;;64903:24;;64945:11;64938:18;;;;;64533:431;:::o;62287:1058::-;62347:26;62376:72;62426:11;;62376:31;62392:14;;62376:11;:15;;:31;;;;:::i;:72::-;62347:101;-1:-1:-1;62459:23:0;62485:35;:11;62347:101;62485:15;:35::i;:::-;62459:61;;62531:36;62551:15;62531:19;:36::i;:::-;62578:21;62602;62578:45;;62634:26;62663:74;62715:11;;62663:33;62681:14;;62663:13;:17;;:33;;;;:::i;:74::-;62634:103;;62748:26;62777:74;62829:11;;62777:33;62795:14;;62777:13;:17;;:33;;;;:::i;:74::-;62748:103;-1:-1:-1;62862:28:0;62893:89;62963:18;62893:51;:13;62748:103;62893:31;:51::i;:89::-;62862:120;-1:-1:-1;62997:22:0;;62993:107;;63036:52;63049:18;63069;63036:12;:52::i;:::-;63114:22;;63110:106;;63153:51;63185:18;63153:31;:51::i;:::-;63230:24;;63226:112;;63271:55;63305:20;63271:33;:55::i;:::-;62287:1058;;;;;;;:::o;12578:471::-;12636:7;12881:6;12877:47;;-1:-1:-1;12911:1:0;12904:8;;12877:47;12948:5;;;12952:1;12948;:5;:1;12972:5;;;;;:10;12964:56;;;;-1:-1:-1;;;12964:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13525:132;13583:7;13610:39;13614:1;13617;13610:39;;;;;;;;;;;;;;;;;:3;:39::i;33998:774::-;34422:23;34448:69;34476:4;34448:69;;;;;;;;;;;;;;;;;34456:5;-1:-1:-1;;;;;34448:27:0;;;:69;;;;;:::i;:::-;34532:17;;34422:95;;-1:-1:-1;34532:21:0;34528:237;;34687:10;34676:30;;;;;;;;;;;;;;;-1:-1:-1;34676:30:0;34668:85;;;;-1:-1:-1;;;34668:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63924:601;64080:16;;;64094:1;64080:16;;;64056:21;64080:16;;;;;64056:21;64080:16;;;;;;;;;;-1:-1:-1;64080:16:0;64056:40;;64125:4;64107;64112:1;64107:7;;;;;;;;-1:-1:-1;;;;;64107:23:0;;;:7;;;;;;;;;;:23;;;;64151:16;;:23;;;-1:-1:-1;;;64151:23:0;;;;:16;;;;;:21;;:23;;;;;64107:7;;64151:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;64151:23:0;64141:7;;:4;;64146:1;;64141:7;;;;;;-1:-1:-1;;;;;64141:33:0;;;:7;;;;;;;;;:33;64219:16;;64187:63;;64204:4;;64219:16;64238:11;64187:8;:63::i;:::-;64289:16;;:228;;-1:-1:-1;;;64289:228:0;;;;;;;;:16;:228;;;;;;64471:4;64289:228;;;;;;64491:15;64289:228;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;64289:16:0;;;;:67;;64371:11;;64444:4;;64471;64491:15;64289:228;;;;;;;;;;;;;;;;:16;:228;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63924:601;;:::o;63353:529::-;63536:16;;63504:63;;63521:4;;-1:-1:-1;;;;;63536:16:0;63555:11;63504:8;:63::i;:::-;63610:16;;63818:15;;63610:264;;;-1:-1:-1;;;63610:264:0;;63686:4;63610:264;;;;;;;;;;:16;:264;;;;;;;;;;-1:-1:-1;;;;;63818:15:0;;;63610:264;;;;63848:15;63610:264;;;;;;:16;;;;;:32;;63650:12;;63610:264;;;;;;;;;;;;;;;63650:12;63610:16;:264;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64972:116;65048:15;;:32;;-1:-1:-1;;;;;65048:15:0;;;;:32;;;;;65073:6;;65048:15;:32;:15;:32;65073:6;65048:15;:32;;;;;;;;;;;;;;;;;;;65096:120;65174:17;;:34;;-1:-1:-1;;;;;65174:17:0;;;;:34;;;;;65201:6;;65174:17;:34;:17;:34;65201:6;65174:17;:34;;;;;;;;;;;;;;;;;;;14153:312;14273:7;14308:12;14301:5;14293:28;;;;-1:-1:-1;;;14293:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14332:9;14348:1;14344;:5;;;;;;;14153:312;-1:-1:-1;;;;;14153:312:0:o;20042:230::-;20179:12;20211:53;20234:6;20242:4;20248:1;20251:12;20211:22;:53::i;:::-;20204:60;20042:230;-1:-1:-1;;;;20042:230:0:o;21530:1020::-;21703:12;21736:18;21747:6;21736:10;:18::i;:::-;21728:60;;;;;-1:-1:-1;;;21728:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21862:12;21876:23;21903:6;-1:-1:-1;;;;;21903:11:0;21922:8;21932:4;21903:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21903:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21861:76;;;;21952:7;21948:595;;;21983:10;-1:-1:-1;21976:17:0;;-1:-1:-1;21976:17:0;21948:595;22097:17;;:21;22093:439;;22360:10;22354:17;22421:15;22408:10;22404:2;22400:19;22393:44;22308:148;22496:20;;-1:-1:-1;;;22496:20:0;;;;;;;;;;;;;;;;;22503:12;;22496:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16905:641;16965:4;17446:20;;17276:66;17495:23;;;;;;:42;;-1:-1:-1;;17522:15:0;;;17487:51;-1:-1:-1;;16905:641:0:o

Swarm Source

ipfs://419a8dd9b2006d57b773d4a87dc57d282ff7e56dfaf0d513a00d0851f6fb2927
Loading