Token Ryborg

Overview CRC20

Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
21,000,000 RBG

Holders:
37 addresses
Contract:
0x30e9e8d4c54b7435088852b3dd97e2f61b5b3c2b0x30E9E8d4c54b7435088852b3dd97E2f61b5b3c2b

Decimals:
18

Social Profiles:
Not Available, Update ?

Balance
1.25 RBG

Value
$0.00
0xc51128485f62ca6d485214fbfdab6c39bae7f0c5
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Ryborg

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-09-05
*/

// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

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

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

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

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


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

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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 {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + 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 {IERC20-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 virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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 virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This 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 virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Capped.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/ERC20Capped.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC20} that adds a cap to the supply of tokens.
 */
abstract contract ERC20Capped is ERC20 {
    uint256 private immutable _cap;

    /**
     * @dev Sets the value of the `cap`. This value is immutable, it can only be
     * set once during construction.
     */
    constructor(uint256 cap_) {
        require(cap_ > 0, "ERC20Capped: cap is 0");
        _cap = cap_;
    }

    /**
     * @dev Returns the cap on the token's total supply.
     */
    function cap() public view virtual returns (uint256) {
        return _cap;
    }

    /**
     * @dev See {ERC20-_mint}.
     */
    function _mint(address account, uint256 amount) internal virtual override {
        require(ERC20.totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded");
        super._mint(account, amount);
    }
}

// File: Ryborg.sol


pragma solidity ^0.8.4;





interface RyborgContract1 { //1K NFT's
        function balanceOf(address owner) external view returns (uint256 balance);

}


interface RyborgContract2 { //2K NFT's
        function balanceOf(address owner) external view returns (uint256 balance);
 
}
interface RyborgContract3 { //3K NFT's
        function balanceOf(address owner) external view returns (uint256 balance);
}
interface RyborgContract4 { //4K NFT's
        function balanceOf(address owner) external view returns (uint256 balance);
}

contract Ryborg is Ownable, Pausable,ERC20{
    constructor() ERC20("Ryborg", "RBG"){
}
    address public ryborg1 = 0x4865EA5877823095c7E42f015FA924f621f191DB;
    address public ryborg2 =0x4865EA5877823095c7E42f015FA924f621f191DB ;
    address public ryborg3 =0x4865EA5877823095c7E42f015FA924f621f191DB ; 
    address public ryborg4 = 0x4865EA5877823095c7E42f015FA924f621f191DB ;
    RyborgContract1 Ryborg1= RyborgContract1(ryborg1);
    RyborgContract2 Ryborg2= RyborgContract2(ryborg2);
    RyborgContract3 Ryborg3= RyborgContract3(ryborg3);
    RyborgContract4 Ryborg4= RyborgContract4(ryborg4);
    mapping(address => uint256) public rytokenids;
    
    uint256 claimable;
    uint256 day=86400; 
    uint256 public stage=1;
    uint256 public rewardcollection1=1.25*10**18;
    uint256 rewardcollection2=1*10**18;
    uint256 rewardcollection3=1*10**18;
    uint256 rewardcollection4=1*10**18;
    uint256 public total_Supply= 21000000*10**18;
    bool public rewardscollection= true;
    uint256 public teamreserved= 1000000*10**18;
    uint256 public RYBORG_NFT_staking= 10000000*10**18;
    uint256 public RYBORG_token_staking= 10000000*10**18;
    uint256 public ryborgstakingtokensclaimed;
    uint256 totalrewardsclaimed=0;
    uint256 teamminted=0;
    address rgbstakingcontr;
    modifier onlyRgbStakingcontract() {
        _checkaddr();
        _;
    }

    
    function _checkaddr() internal view virtual {
        require(msg.sender == rgbstakingcontr, "caller is not staking contract");
    }

    function changerewardsperiod(uint256 _rewardsperiod) public onlyOwner {
        day= _rewardsperiod;
    }

    function setrewards(uint256 r1, uint256 r2, uint256 r3, uint256 r4) public onlyOwner{
        rewardcollection1= r1;
        rewardcollection2= r2;
        rewardcollection3= r3;
        rewardcollection4= r4;

    }

    function setcollectionaddress(address r1, address r2, address r3, address r4) public onlyOwner{
        ryborg1= r1;
        ryborg2= r2;
        ryborg3= r3;
        ryborg4= r4;

    }
     function get(address id) public view returns (uint256) {
        
        return rytokenids[id];
    }

    
     function setrgbstakingcontract(address id) public onlyOwner {
            rgbstakingcontr= id;
    }
      
     function getbalancefrom1(address id) public view returns (uint256) {
            return Ryborg1.balanceOf(id);
    }

    function ryborgstaking(uint256 qty,address _address) public onlyRgbStakingcontract{
        require(ryborgstakingtokensclaimed+qty<=RYBORG_token_staking, "All reserved tokens are minted");
        qty = qty*10**18;
        ryborgstakingtokensclaimed= ryborgstakingtokensclaimed+ qty;
        _mint(_address, qty);
        

    }

    function teammint(uint256 qty,address _address) public onlyOwner{
        require(teamminted+qty<=teamreserved, "All reserved tokens are minted");
        qty = qty*10**18;
        teamminted= teamminted+ qty;
        _mint(_address, qty);
        

    }

    function set(address _address) internal {
        // Update the value at this address
        rytokenids[_address] = block.timestamp;
    }

      function totalSupply() public view virtual override returns (uint256) {
        return total_Supply;
    }
    function remove(address id) internal {
        // Reset the value to the default value.
        delete rytokenids[id];
    }


    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

 

    function start_claiming_reward() public onlyOwner{
        rewardscollection= !rewardscollection;

    }
    function changestage(uint256 _stage) public onlyOwner {
        stage=_stage;
    }

    function calculateRewards (address _address) public view returns (uint256){
    uint256  ry1=Ryborg1.balanceOf(_address);
    uint256 sum;
    uint256  ry2= Ryborg2.balanceOf(_address);
    uint256  ry3=Ryborg3.balanceOf(_address);
    uint256  ry4= Ryborg4.balanceOf(_address);
      ry1= ry1*rewardcollection1;
      ry2= ry2*rewardcollection2;
      ry3= ry3*rewardcollection3;
      ry4= ry4*rewardcollection4;

    if(stage ==1){
        sum = ry1;
    }
    if(stage ==2){
        sum= ry1+ry2;
    }
    if(stage==3){
        sum= ry1+ry2+ry3;
    }
    if(stage==4){       
        sum= ry1+ry2+ry3+ry4;
    }
    uint256 rewardis;
    uint256 check= get(_address);
        if (check == 0){
            rewardis = sum;
                        return rewardis;  

        }
        else{
            uint256 unclaimdays = block.timestamp-check;
            unclaimdays= unclaimdays/day;
            require(unclaimdays>0, "No reward avail");
            rewardis= unclaimdays*sum;
                        return rewardis;  

        }
                
            
            
             }

     function claim(address _address) public{

         uint256 ree= calculateRewards(_address);
         require(ree>0, "No reward available");
         require(totalrewardsclaimed+ree<=RYBORG_NFT_staking, "All rewards are claimed");
        set(_address);
        remove(_address);
        set(_address);
        totalrewardsclaimed=totalrewardsclaimed+ree;
        _mint(_address,ree);
    
     }

    function _beforeTokenTransfer(address from, address to, uint256 amount)
        internal
        whenNotPaused
        override(ERC20)
    {
        super._beforeTokenTransfer(from, to, 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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"RYBORG_NFT_staking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RYBORG_token_staking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"calculateRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsperiod","type":"uint256"}],"name":"changerewardsperiod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stage","type":"uint256"}],"name":"changestage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"id","type":"address"}],"name":"get","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"id","type":"address"}],"name":"getbalancefrom1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardcollection1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardscollection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ryborg1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ryborg2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ryborg3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ryborg4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"ryborgstaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ryborgstakingtokensclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rytokenids","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"r1","type":"address"},{"internalType":"address","name":"r2","type":"address"},{"internalType":"address","name":"r3","type":"address"},{"internalType":"address","name":"r4","type":"address"}],"name":"setcollectionaddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"r1","type":"uint256"},{"internalType":"uint256","name":"r2","type":"uint256"},{"internalType":"uint256","name":"r3","type":"uint256"},{"internalType":"uint256","name":"r4","type":"uint256"}],"name":"setrewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"id","type":"address"}],"name":"setrgbstakingcontract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"start_claiming_reward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"qty","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"teammint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamreserved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_Supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260068054734865ea5877823095c7e42f015fa924f621f191db6001600160a01b03199182168117909255600780548216831790556008805482168317905560098054821683179055600a8054821683179055600b8054821683179055600c8054821683179055600d805490911690911790556201518060105560016011819055671158e460913d0000601255670de0b6b3a7640000601381905560148190556015556a115eec47f6cf7e350000006016556017805460ff1916909117905569d3c21bcecceda10000006018556a084595161401484a0000006019819055601a556000601c819055601d55348015620000fb57600080fd5b50604051806040016040528060068152602001655279626f726760d01b8152506040518060400160405280600381526020016252424760e81b815250620001516200014b6200019260201b60201c565b62000196565b6000805460ff60a01b19169055815162000173906004906020850190620001e6565b50805162000189906005906020840190620001e6565b505050620002c9565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001f4906200028c565b90600052602060002090601f01602090048101928262000218576000855562000263565b82601f106200023357805160ff191683800117855562000263565b8280016001018555821562000263579182015b828111156200026357825182559160200191906001019062000246565b506200027192915062000275565b5090565b5b8082111562000271576000815560010162000276565b600181811c90821680620002a157607f821691505b60208210811415620002c357634e487b7160e01b600052602260045260246000fd5b50919050565b611def80620002d96000396000f3fe608060405234801561001057600080fd5b50600436106102de5760003560e01c806370a0823111610186578063a9059cbb116100e3578063c6f5823711610097578063e96a4da911610071578063e96a4da9146105c4578063f1016dbb146105e4578063f2fde38b146105f757600080fd5b8063c6f582371461056f578063dd57830314610582578063dd62ed3e1461058b57600080fd5b8063c040e6b8116100c8578063c040e6b81461052a578063c1c51a0614610533578063c2bc2efc1461054657600080fd5b8063a9059cbb1461050a578063aec028f21461051d57600080fd5b806395d89b411161013a578063a3fe24721161011f578063a3fe2472146104db578063a457c2d7146104e4578063a4629338146104f757600080fd5b806395d89b41146104ca57806395e282c8146104d257600080fd5b80637a83b0c51161016b5780637a83b0c5146104a85780638456cb59146104b15780638da5cb5b146104b957600080fd5b806370a0823114610477578063715018a6146104a057600080fd5b8063395093511161023f5780635c975abb116101f357806366b1334c116101cd57806366b1334c1461043e57806369c92f48146104515780636d5074181461046457600080fd5b80635c975abb146104065780635ee13eec1461041857806364ab86751461042b57600080fd5b80634ba453d1116102245780634ba453d1146103ca57806350f70774146103d257806357553e5d146103fd57600080fd5b806339509351146103af5780633f4ba83a146103c257600080fd5b80631fe83916116102965780632682b11c1161027b5780632682b11c14610384578063313ce5671461038d57806332a1a8931461039c57600080fd5b80631fe839161461035e57806323b872dd1461037157600080fd5b8063095ea7b3116102c7578063095ea7b31461031657806318160ddd146103395780631e83409a1461034b57600080fd5b8063023708db146102e357806306fdde03146102f8575b600080fd5b6102f66102f1366004611aef565b61060a565b005b610300610698565b60405161030d9190611c85565b60405180910390f35b610329610324366004611bd4565b61072a565b604051901515815260200161030d565b6016545b60405190815260200161030d565b6102f6610359366004611aef565b610742565b6102f661036c366004611b44565b61087b565b61032961037f366004611b98565b610932565b61033d60165481565b6040516012815260200161030d565b6102f66103aa366004611c53565b610956565b6103296103bd366004611bd4565b6109c4565b6102f6610a03565b6102f6610a67565b6006546103e5906001600160a01b031681565b6040516001600160a01b03909116815260200161030d565b61033d60195481565b600054600160a01b900460ff16610329565b6007546103e5906001600160a01b031681565b61033d610439366004611aef565b610af3565b6102f661044c366004611bfe565b610e68565b6102f661045f366004611bfe565b610ec7565b61033d610472366004611aef565b610f26565b61033d610485366004611aef565b6001600160a01b031660009081526001602052604090205490565b6102f6610faa565b61033d60125481565b6102f661100e565b6000546001600160a01b03166103e5565b610300611070565b61033d601b5481565b61033d60185481565b6103296104f2366004611bd4565b61107f565b6008546103e5906001600160a01b031681565b610329610518366004611bd4565b611129565b6017546103299060ff1681565b61033d60115481565b6009546103e5906001600160a01b031681565b61033d610554366004611aef565b6001600160a01b03166000908152600e602052604090205490565b6102f661057d366004611c30565b611137565b61033d601a5481565b61033d610599366004611b11565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61033d6105d2366004611aef565b600e6020526000908152604090205481565b6102f66105f2366004611c30565b61121f565b6102f6610605366004611aef565b6112b5565b6000546001600160a01b031633146106695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6060600480546106a790611d68565b80601f01602080910402602001604051908101604052809291908181526020018280546106d390611d68565b80156107205780601f106106f557610100808354040283529160200191610720565b820191906000526020600020905b81548152906001019060200180831161070357829003601f168201915b5050505050905090565b600033610738818585611397565b5060019392505050565b600061074d82610af3565b90506000811161079f5760405162461bcd60e51b815260206004820152601360248201527f4e6f2072657761726420617661696c61626c65000000000000000000000000006044820152606401610660565b60195481601c546107b09190611cf8565b11156107fe5760405162461bcd60e51b815260206004820152601760248201527f416c6c20726577617264732061726520636c61696d65640000000000000000006044820152606401610660565b61081e826001600160a01b03166000908152600e60205260409020429055565b61083c826001600160a01b03166000908152600e6020526040812055565b61085c826001600160a01b03166000908152600e60205260409020429055565b80601c5461086a9190611cf8565b601c5561087782826114ef565b5050565b6000546001600160a01b031633146108d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b600680546001600160a01b0395861673ffffffffffffffffffffffffffffffffffffffff19918216179091556007805494861694821694909417909355600880549285169284169290921790915560098054919093169116179055565b6000336109408582856115da565b61094b85858561166c565b506001949350505050565b6000546001600160a01b031633146109b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b601293909355601391909155601455601555565b3360008181526002602090815260408083206001600160a01b038716845290915281205490919061073890829086906109fe908790611cf8565b611397565b6000546001600160a01b03163314610a5d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b610a6561188e565b565b6000546001600160a01b03163314610ac15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b601780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b600a546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a082319060240160206040518083038186803b158015610b3c57600080fd5b505afa158015610b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b749190611c17565b600b546040516370a0823160e01b81526001600160a01b038681166004830152929350600092839216906370a082319060240160206040518083038186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190611c17565b600c546040516370a0823160e01b81526001600160a01b038881166004830152929350600092909116906370a082319060240160206040518083038186803b158015610c4257600080fd5b505afa158015610c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a9190611c17565b600d546040516370a0823160e01b81526001600160a01b038981166004830152929350600092909116906370a082319060240160206040518083038186803b158015610cc557600080fd5b505afa158015610cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfd9190611c17565b905060125485610d0d9190611d32565b945060135483610d1d9190611d32565b925060145482610d2d9190611d32565b915060155481610d3d9190611d32565b905060115460011415610d4e578493505b60115460021415610d6657610d638386611cf8565b93505b60115460031415610d895781610d7c8487611cf8565b610d869190611cf8565b93505b60115460041415610db7578082610da08588611cf8565b610daa9190611cf8565b610db49190611cf8565b93505b6001600160a01b0387166000908152600e602052604081205480610de2575093979650505050505050565b6000610dee8242611d51565b905060105481610dfe9190611d10565b905060008111610e505760405162461bcd60e51b815260206004820152600f60248201527f4e6f2072657761726420617661696c00000000000000000000000000000000006044820152606401610660565b610e5a8782611d32565b9a9950505050505050505050565b6000546001600160a01b03163314610ec25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b601155565b6000546001600160a01b03163314610f215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b601055565b600a546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a082319060240160206040518083038186803b158015610f6c57600080fd5b505afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190611c17565b92915050565b6000546001600160a01b031633146110045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b610a6560006118fe565b6000546001600160a01b031633146110685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b610a6561195b565b6060600580546106a790611d68565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091908381101561111c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610660565b61094b8286868403611397565b60003361073881858561166c565b6000546001600160a01b031633146111915760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b60185482601d546111a29190611cf8565b11156111f05760405162461bcd60e51b815260206004820152601e60248201527f416c6c20726573657276656420746f6b656e7320617265206d696e74656400006044820152606401610660565b61120282670de0b6b3a7640000611d32565b915081601d546112129190611cf8565b601d5561087781836114ef565b6112276119b9565b601a5482601b546112389190611cf8565b11156112865760405162461bcd60e51b815260206004820152601e60248201527f416c6c20726573657276656420746f6b656e7320617265206d696e74656400006044820152606401610660565b61129882670de0b6b3a7640000611d32565b915081601b546112a89190611cf8565b601b5561087781836114ef565b6000546001600160a01b0316331461130f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b6001600160a01b03811661138b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610660565b611394816118fe565b50565b6001600160a01b0383166114125760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610660565b6001600160a01b03821661148e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610660565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166115455760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610660565b61155160008383611a13565b80600360008282546115639190611cf8565b90915550506001600160a01b03821660009081526001602052604081208054839290611590908490611cf8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03838116600090815260026020908152604080832093861683529290522054600019811461166657818110156116595760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610660565b6116668484848403611397565b50505050565b6001600160a01b0383166116e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610660565b6001600160a01b0382166117645760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610660565b61176f838383611a13565b6001600160a01b038316600090815260016020526040902054818110156117fe5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610660565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290611835908490611cf8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161188191815260200190565b60405180910390a3611666565b611896611a20565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611963611a79565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118e13390565b601e546001600160a01b03163314610a655760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74207374616b696e6720636f6e747261637400006044820152606401610660565b611a1b611a79565b505050565b600054600160a01b900460ff16610a655760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610660565b600054600160a01b900460ff1615610a655760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610660565b80356001600160a01b0381168114611aea57600080fd5b919050565b600060208284031215611b0157600080fd5b611b0a82611ad3565b9392505050565b60008060408385031215611b2457600080fd5b611b2d83611ad3565b9150611b3b60208401611ad3565b90509250929050565b60008060008060808587031215611b5a57600080fd5b611b6385611ad3565b9350611b7160208601611ad3565b9250611b7f60408601611ad3565b9150611b8d60608601611ad3565b905092959194509250565b600080600060608486031215611bad57600080fd5b611bb684611ad3565b9250611bc460208501611ad3565b9150604084013590509250925092565b60008060408385031215611be757600080fd5b611bf083611ad3565b946020939093013593505050565b600060208284031215611c1057600080fd5b5035919050565b600060208284031215611c2957600080fd5b5051919050565b60008060408385031215611c4357600080fd5b82359150611b3b60208401611ad3565b60008060008060808587031215611c6957600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b81811015611cb257858101830151858201604001528201611c96565b81811115611cc4576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008219821115611d0b57611d0b611da3565b500190565b600082611d2d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611d4c57611d4c611da3565b500290565b600082821015611d6357611d63611da3565b500390565b600181811c90821680611d7c57607f821691505b60208210811415611d9d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220cfd8401c5adaf7cb88c31a79ef5321a0ac18c8bf3244cf51a628a528fd11db8e64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102de5760003560e01c806370a0823111610186578063a9059cbb116100e3578063c6f5823711610097578063e96a4da911610071578063e96a4da9146105c4578063f1016dbb146105e4578063f2fde38b146105f757600080fd5b8063c6f582371461056f578063dd57830314610582578063dd62ed3e1461058b57600080fd5b8063c040e6b8116100c8578063c040e6b81461052a578063c1c51a0614610533578063c2bc2efc1461054657600080fd5b8063a9059cbb1461050a578063aec028f21461051d57600080fd5b806395d89b411161013a578063a3fe24721161011f578063a3fe2472146104db578063a457c2d7146104e4578063a4629338146104f757600080fd5b806395d89b41146104ca57806395e282c8146104d257600080fd5b80637a83b0c51161016b5780637a83b0c5146104a85780638456cb59146104b15780638da5cb5b146104b957600080fd5b806370a0823114610477578063715018a6146104a057600080fd5b8063395093511161023f5780635c975abb116101f357806366b1334c116101cd57806366b1334c1461043e57806369c92f48146104515780636d5074181461046457600080fd5b80635c975abb146104065780635ee13eec1461041857806364ab86751461042b57600080fd5b80634ba453d1116102245780634ba453d1146103ca57806350f70774146103d257806357553e5d146103fd57600080fd5b806339509351146103af5780633f4ba83a146103c257600080fd5b80631fe83916116102965780632682b11c1161027b5780632682b11c14610384578063313ce5671461038d57806332a1a8931461039c57600080fd5b80631fe839161461035e57806323b872dd1461037157600080fd5b8063095ea7b3116102c7578063095ea7b31461031657806318160ddd146103395780631e83409a1461034b57600080fd5b8063023708db146102e357806306fdde03146102f8575b600080fd5b6102f66102f1366004611aef565b61060a565b005b610300610698565b60405161030d9190611c85565b60405180910390f35b610329610324366004611bd4565b61072a565b604051901515815260200161030d565b6016545b60405190815260200161030d565b6102f6610359366004611aef565b610742565b6102f661036c366004611b44565b61087b565b61032961037f366004611b98565b610932565b61033d60165481565b6040516012815260200161030d565b6102f66103aa366004611c53565b610956565b6103296103bd366004611bd4565b6109c4565b6102f6610a03565b6102f6610a67565b6006546103e5906001600160a01b031681565b6040516001600160a01b03909116815260200161030d565b61033d60195481565b600054600160a01b900460ff16610329565b6007546103e5906001600160a01b031681565b61033d610439366004611aef565b610af3565b6102f661044c366004611bfe565b610e68565b6102f661045f366004611bfe565b610ec7565b61033d610472366004611aef565b610f26565b61033d610485366004611aef565b6001600160a01b031660009081526001602052604090205490565b6102f6610faa565b61033d60125481565b6102f661100e565b6000546001600160a01b03166103e5565b610300611070565b61033d601b5481565b61033d60185481565b6103296104f2366004611bd4565b61107f565b6008546103e5906001600160a01b031681565b610329610518366004611bd4565b611129565b6017546103299060ff1681565b61033d60115481565b6009546103e5906001600160a01b031681565b61033d610554366004611aef565b6001600160a01b03166000908152600e602052604090205490565b6102f661057d366004611c30565b611137565b61033d601a5481565b61033d610599366004611b11565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61033d6105d2366004611aef565b600e6020526000908152604090205481565b6102f66105f2366004611c30565b61121f565b6102f6610605366004611aef565b6112b5565b6000546001600160a01b031633146106695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b601e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6060600480546106a790611d68565b80601f01602080910402602001604051908101604052809291908181526020018280546106d390611d68565b80156107205780601f106106f557610100808354040283529160200191610720565b820191906000526020600020905b81548152906001019060200180831161070357829003601f168201915b5050505050905090565b600033610738818585611397565b5060019392505050565b600061074d82610af3565b90506000811161079f5760405162461bcd60e51b815260206004820152601360248201527f4e6f2072657761726420617661696c61626c65000000000000000000000000006044820152606401610660565b60195481601c546107b09190611cf8565b11156107fe5760405162461bcd60e51b815260206004820152601760248201527f416c6c20726577617264732061726520636c61696d65640000000000000000006044820152606401610660565b61081e826001600160a01b03166000908152600e60205260409020429055565b61083c826001600160a01b03166000908152600e6020526040812055565b61085c826001600160a01b03166000908152600e60205260409020429055565b80601c5461086a9190611cf8565b601c5561087782826114ef565b5050565b6000546001600160a01b031633146108d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b600680546001600160a01b0395861673ffffffffffffffffffffffffffffffffffffffff19918216179091556007805494861694821694909417909355600880549285169284169290921790915560098054919093169116179055565b6000336109408582856115da565b61094b85858561166c565b506001949350505050565b6000546001600160a01b031633146109b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b601293909355601391909155601455601555565b3360008181526002602090815260408083206001600160a01b038716845290915281205490919061073890829086906109fe908790611cf8565b611397565b6000546001600160a01b03163314610a5d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b610a6561188e565b565b6000546001600160a01b03163314610ac15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b601780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b600a546040516370a0823160e01b81526001600160a01b03838116600483015260009283929116906370a082319060240160206040518083038186803b158015610b3c57600080fd5b505afa158015610b50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b749190611c17565b600b546040516370a0823160e01b81526001600160a01b038681166004830152929350600092839216906370a082319060240160206040518083038186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190611c17565b600c546040516370a0823160e01b81526001600160a01b038881166004830152929350600092909116906370a082319060240160206040518083038186803b158015610c4257600080fd5b505afa158015610c56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7a9190611c17565b600d546040516370a0823160e01b81526001600160a01b038981166004830152929350600092909116906370a082319060240160206040518083038186803b158015610cc557600080fd5b505afa158015610cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfd9190611c17565b905060125485610d0d9190611d32565b945060135483610d1d9190611d32565b925060145482610d2d9190611d32565b915060155481610d3d9190611d32565b905060115460011415610d4e578493505b60115460021415610d6657610d638386611cf8565b93505b60115460031415610d895781610d7c8487611cf8565b610d869190611cf8565b93505b60115460041415610db7578082610da08588611cf8565b610daa9190611cf8565b610db49190611cf8565b93505b6001600160a01b0387166000908152600e602052604081205480610de2575093979650505050505050565b6000610dee8242611d51565b905060105481610dfe9190611d10565b905060008111610e505760405162461bcd60e51b815260206004820152600f60248201527f4e6f2072657761726420617661696c00000000000000000000000000000000006044820152606401610660565b610e5a8782611d32565b9a9950505050505050505050565b6000546001600160a01b03163314610ec25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b601155565b6000546001600160a01b03163314610f215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b601055565b600a546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a082319060240160206040518083038186803b158015610f6c57600080fd5b505afa158015610f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa49190611c17565b92915050565b6000546001600160a01b031633146110045760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b610a6560006118fe565b6000546001600160a01b031633146110685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b610a6561195b565b6060600580546106a790611d68565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091908381101561111c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610660565b61094b8286868403611397565b60003361073881858561166c565b6000546001600160a01b031633146111915760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b60185482601d546111a29190611cf8565b11156111f05760405162461bcd60e51b815260206004820152601e60248201527f416c6c20726573657276656420746f6b656e7320617265206d696e74656400006044820152606401610660565b61120282670de0b6b3a7640000611d32565b915081601d546112129190611cf8565b601d5561087781836114ef565b6112276119b9565b601a5482601b546112389190611cf8565b11156112865760405162461bcd60e51b815260206004820152601e60248201527f416c6c20726573657276656420746f6b656e7320617265206d696e74656400006044820152606401610660565b61129882670de0b6b3a7640000611d32565b915081601b546112a89190611cf8565b601b5561087781836114ef565b6000546001600160a01b0316331461130f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610660565b6001600160a01b03811661138b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610660565b611394816118fe565b50565b6001600160a01b0383166114125760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610660565b6001600160a01b03821661148e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610660565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166115455760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610660565b61155160008383611a13565b80600360008282546115639190611cf8565b90915550506001600160a01b03821660009081526001602052604081208054839290611590908490611cf8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b03838116600090815260026020908152604080832093861683529290522054600019811461166657818110156116595760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610660565b6116668484848403611397565b50505050565b6001600160a01b0383166116e85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610660565b6001600160a01b0382166117645760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610660565b61176f838383611a13565b6001600160a01b038316600090815260016020526040902054818110156117fe5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610660565b6001600160a01b03808516600090815260016020526040808220858503905591851681529081208054849290611835908490611cf8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161188191815260200190565b60405180910390a3611666565b611896611a20565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611963611a79565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118e13390565b601e546001600160a01b03163314610a655760405162461bcd60e51b815260206004820152601e60248201527f63616c6c6572206973206e6f74207374616b696e6720636f6e747261637400006044820152606401610660565b611a1b611a79565b505050565b600054600160a01b900460ff16610a655760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610660565b600054600160a01b900460ff1615610a655760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610660565b80356001600160a01b0381168114611aea57600080fd5b919050565b600060208284031215611b0157600080fd5b611b0a82611ad3565b9392505050565b60008060408385031215611b2457600080fd5b611b2d83611ad3565b9150611b3b60208401611ad3565b90509250929050565b60008060008060808587031215611b5a57600080fd5b611b6385611ad3565b9350611b7160208601611ad3565b9250611b7f60408601611ad3565b9150611b8d60608601611ad3565b905092959194509250565b600080600060608486031215611bad57600080fd5b611bb684611ad3565b9250611bc460208501611ad3565b9150604084013590509250925092565b60008060408385031215611be757600080fd5b611bf083611ad3565b946020939093013593505050565b600060208284031215611c1057600080fd5b5035919050565b600060208284031215611c2957600080fd5b5051919050565b60008060408385031215611c4357600080fd5b82359150611b3b60208401611ad3565b60008060008060808587031215611c6957600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b81811015611cb257858101830151858201604001528201611c96565b81811115611cc4576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008219821115611d0b57611d0b611da3565b500190565b600082611d2d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615611d4c57611d4c611da3565b500290565b600082821015611d6357611d63611da3565b500390565b600181811c90821680611d7c57607f821691505b60208210811415611d9d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220cfd8401c5adaf7cb88c31a79ef5321a0ac18c8bf3244cf51a628a528fd11db8e64736f6c63430008070033

Deployed ByteCode Sourcemap

24238:5611:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26464:102;;;;;;:::i;:::-;;:::i;:::-;;11838:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14189:201;;;;;;:::i;:::-;;:::i;:::-;;;3096:14:1;;3089:22;3071:41;;3059:2;3044:18;14189:201:0;2931:187:1;27473:108:0;27561:12;;27473:108;;;10303:25:1;;;10291:2;10276:18;27473:108:0;10157:177:1;29226:406:0;;;;;;:::i;:::-;;:::i;26145:192::-;;;;;;:::i;:::-;;:::i;14970:295::-;;;;;;:::i;:::-;;:::i;25165:44::-;;;;;;12800:93;;;12883:2;10481:36:1;;10469:2;10454:18;12800:93:0;10339:184:1;25915:222:0;;;;;;:::i;:::-;;:::i;15674:238::-;;;;;;:::i;:::-;;:::i;27793:65::-;;;:::i;27871:107::-;;;:::i;24333:67::-;;;;;-1:-1:-1;;;;;24333:67:0;;;;;;-1:-1:-1;;;;;2864:55:1;;;2846:74;;2834:2;2819:18;24333:67:0;2700:226:1;25308:50:0;;;;;;2566:86;2613:4;2637:7;-1:-1:-1;;;2637:7:0;;;;2566:86;;24407:66;;;;;-1:-1:-1;;;;;24407:66:0;;;28077:1140;;;;;;:::i;:::-;;:::i;27984:85::-;;;;;;:::i;:::-;;:::i;25799:108::-;;;;;;:::i;:::-;;:::i;26581:118::-;;;;;;:::i;:::-;;:::i;13129:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;13230:18:0;13203:7;13230:18;;;:9;:18;;;;;;;13129:127;5261:103;;;:::i;24991:44::-;;;;;;27724:61;;;:::i;4610:87::-;4656:7;4683:6;-1:-1:-1;;;;;4683:6:0;4610:87;;12057:104;;;:::i;25424:41::-;;;;;;25258:43;;;;;;16415:436;;;;;;:::i;:::-;;:::i;24481:66::-;;;;;-1:-1:-1;;;;;24481:66:0;;;13462:193;;;;;;:::i;:::-;;:::i;25216:35::-;;;;;;;;;24962:22;;;;;;24556:67;;;;;-1:-1:-1;;;;;24556:67:0;;;26344:105;;;;;;:::i;:::-;-1:-1:-1;;;;;26427:14:0;26390:7;26427:14;;;:10;:14;;;;;;;26344:105;27051:262;;;;;;:::i;:::-;;:::i;25365:52::-;;;;;;13718:151;;;;;;:::i;:::-;-1:-1:-1;;;;;13834:18:0;;;13807:7;13834:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13718:151;24855:45;;;;;;:::i;:::-;;;;;;;;;;;;;;26707:336;;;;;;:::i;:::-;;:::i;5519:201::-;;;;;;:::i;:::-;;:::i;26464:102::-;4656:7;4683:6;-1:-1:-1;;;;;4683:6:0;759:10;4830:23;4822:68;;;;-1:-1:-1;;;4822:68:0;;8073:2:1;4822:68:0;;;8055:21:1;;;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;8203:18;;4822:68:0;;;;;;;;;26539:15:::1;:19:::0;;-1:-1:-1;;26539:19:0::1;-1:-1:-1::0;;;;;26539:19:0;;;::::1;::::0;;;::::1;::::0;;26464:102::o;11838:100::-;11892:13;11925:5;11918:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11838:100;:::o;14189:201::-;14272:4;759:10;14328:32;759:10;14344:7;14353:6;14328:8;:32::i;:::-;-1:-1:-1;14378:4:0;;14189:201;-1:-1:-1;;;14189:201:0:o;29226:406::-;29279:11;29292:26;29309:8;29292:16;:26::i;:::-;29279:39;;29342:1;29338:3;:5;29330:37;;;;-1:-1:-1;;;29330:37:0;;8434:2:1;29330:37:0;;;8416:21:1;8473:2;8453:18;;;8446:30;8512:21;8492:18;;;8485:49;8551:18;;29330:37:0;8232:343:1;29330:37:0;29412:18;;29407:3;29387:19;;:23;;;;:::i;:::-;:43;;29379:79;;;;-1:-1:-1;;;29379:79:0;;7721:2:1;29379:79:0;;;7703:21:1;7760:2;7740:18;;;7733:30;7799:25;7779:18;;;7772:53;7842:18;;29379:79:0;7519:347:1;29379:79:0;29469:13;29473:8;-1:-1:-1;;;;;27417:20:0;;;;;:10;:20;;;;;27440:15;27417:38;;27321:142;29469:13;29493:16;29500:8;-1:-1:-1;;;;;27692:14:0;;;;;:10;:14;;;;;27685:21;27587:127;29493:16;29520:13;29524:8;-1:-1:-1;;;;;27417:20:0;;;;;:10;:20;;;;;27440:15;27417:38;;27321:142;29520:13;29584:3;29564:19;;:23;;;;:::i;:::-;29544:19;:43;29598:19;29604:8;29613:3;29598:5;:19::i;:::-;29265:367;29226:406;:::o;26145:192::-;4656:7;4683:6;-1:-1:-1;;;;;4683:6:0;759:10;4830:23;4822:68;;;;-1:-1:-1;;;4822:68:0;;8073:2:1;4822:68:0;;;8055:21:1;;;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;8203:18;;4822:68:0;7871:356:1;4822:68:0;26250:7:::1;:11:::0;;-1:-1:-1;;;;;26250:11:0;;::::1;-1:-1:-1::0;;26250:11:0;;::::1;;::::0;;;26272:7:::1;:11:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;26294:7:::1;:11:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;26316:7:::1;:11:::0;;;;;::::1;::::0;::::1;;::::0;;26145:192::o;14970:295::-;15101:4;759:10;15159:38;15175:4;759:10;15190:6;15159:15;:38::i;:::-;15208:27;15218:4;15224:2;15228:6;15208:9;:27::i;:::-;-1:-1:-1;15253:4:0;;14970:295;-1:-1:-1;;;;14970:295:0:o;25915:222::-;4656:7;4683:6;-1:-1:-1;;;;;4683:6:0;759:10;4830:23;4822:68;;;;-1:-1:-1;;;4822:68:0;;8073:2:1;4822:68:0;;;8055:21:1;;;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;8203:18;;4822:68:0;7871:356:1;4822:68:0;26010:17:::1;:21:::0;;;;26042:17:::1;:21:::0;;;;26074:17:::1;:21:::0;26106:17:::1;:21:::0;25915:222::o;15674:238::-;759:10;15762:4;13834:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;13834:27:0;;;;;;;;;;15762:4;;759:10;15818:64;;759:10;;13834:27;;15843:38;;15871:10;;15843:38;:::i;:::-;15818:8;:64::i;27793:65::-;4656:7;4683:6;-1:-1:-1;;;;;4683:6:0;759:10;4830:23;4822:68;;;;-1:-1:-1;;;4822:68:0;;8073:2:1;4822:68:0;;;8055:21:1;;;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;8203:18;;4822:68:0;7871:356:1;4822:68:0;27840:10:::1;:8;:10::i;:::-;27793:65::o:0;27871:107::-;4656:7;4683:6;-1:-1:-1;;;;;4683:6:0;759:10;4830:23;4822:68;;;;-1:-1:-1;;;4822:68:0;;8073:2:1;4822:68:0;;;8055:21:1;;;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;8203:18;;4822:68:0;7871:356:1;4822:68:0;27951:17:::1;::::0;;27931:37;;::::1;27951:17;::::0;;::::1;27950:18;27931:37;::::0;;27871:107::o;28077:1140::-;28171:7;;:27;;-1:-1:-1;;;28171:27:0;;-1:-1:-1;;;;;2864:55:1;;;28171:27:0;;;2846:74:1;28143:7:0;;;;28171;;;:17;;2819:18:1;;28171:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28237:7;;:27;;-1:-1:-1;;;28237:27:0;;-1:-1:-1;;;;;2864:55:1;;;28237:27:0;;;2846:74:1;28158:40:0;;-1:-1:-1;28205:11:0;;;;28237:7;;:17;;2819:18:1;;28237:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28284:7;;:27;;-1:-1:-1;;;28284:27:0;;-1:-1:-1;;;;;2864:55:1;;;28284:27:0;;;2846:74:1;28223:41:0;;-1:-1:-1;28271:12:0;;28284:7;;;;:17;;2819:18:1;;28284:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28332:7;;:27;;-1:-1:-1;;;28332:27:0;;-1:-1:-1;;;;;2864:55:1;;;28332:27:0;;;2846:74:1;28271:40:0;;-1:-1:-1;28318:12:0;;28332:7;;;;:17;;2819:18:1;;28332:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28318:41;;28377:17;;28373:3;:21;;;;:::i;:::-;28368:26;;28412:17;;28408:3;:21;;;;:::i;:::-;28403:26;;28447:17;;28443:3;:21;;;;:::i;:::-;28438:26;;28482:17;;28478:3;:21;;;;:::i;:::-;28473:26;;28511:5;;28519:1;28511:9;28508:41;;;28538:3;28532:9;;28508:41;28558:5;;28566:1;28558:9;28555:44;;;28584:7;28588:3;28584;:7;:::i;:::-;28579:12;;28555:44;28608:5;;28615:1;28608:8;28605:47;;;28641:3;28633:7;28637:3;28633;:7;:::i;:::-;:11;;;;:::i;:::-;28628:16;;28605:47;28661:5;;28668:1;28661:8;28658:58;;;28705:3;28701;28693:7;28697:3;28693;:7;:::i;:::-;:11;;;;:::i;:::-;:15;;;;:::i;:::-;28688:20;;28658:58;-1:-1:-1;;;;;26427:14:0;;28722:16;26427:14;;;:10;:14;;;;;;28788:10;28784:371;;-1:-1:-1;28825:3:0;;28077:1140;-1:-1:-1;;;;;;;28077:1140:0:o;28784:371::-;28915:19;28937:21;28953:5;28937:15;:21;:::i;:::-;28915:43;;28998:3;;28986:11;:15;;;;:::i;:::-;28973:28;;29036:1;29024:11;:13;29016:41;;;;-1:-1:-1;;;29016:41:0;;7018:2:1;29016:41:0;;;7000:21:1;7057:2;7037:18;;;7030:30;7096:17;7076:18;;;7069:45;7131:18;;29016:41:0;6816:339:1;29016:41:0;29082:15;29094:3;29082:11;:15;:::i;:::-;29072:25;28077:1140;-1:-1:-1;;;;;;;;;;28077:1140:0:o;27984:85::-;4656:7;4683:6;-1:-1:-1;;;;;4683:6:0;759:10;4830:23;4822:68;;;;-1:-1:-1;;;4822:68:0;;8073:2:1;4822:68:0;;;8055:21:1;;;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;8203:18;;4822:68:0;7871:356:1;4822:68:0;28049:5:::1;:12:::0;27984:85::o;25799:108::-;4656:7;4683:6;-1:-1:-1;;;;;4683:6:0;759:10;4830:23;4822:68;;;;-1:-1:-1;;;4822:68:0;;8073:2:1;4822:68:0;;;8055:21:1;;;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;8203:18;;4822:68:0;7871:356:1;4822:68:0;25880:3:::1;:19:::0;25799:108::o;26581:118::-;26670:7;;:21;;-1:-1:-1;;;26670:21:0;;-1:-1:-1;;;;;2864:55:1;;;26670:21:0;;;2846:74:1;26639:7:0;;26670;;:17;;2819:18:1;;26670:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26663:28;26581:118;-1:-1:-1;;26581:118:0:o;5261:103::-;4656:7;4683:6;-1:-1:-1;;;;;4683:6:0;759:10;4830:23;4822:68;;;;-1:-1:-1;;;4822:68:0;;8073:2:1;4822:68:0;;;8055:21:1;;;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;8203:18;;4822:68:0;7871:356:1;4822:68:0;5326:30:::1;5353:1;5326:18;:30::i;27724:61::-:0;4656:7;4683:6;-1:-1:-1;;;;;4683:6:0;759:10;4830:23;4822:68;;;;-1:-1:-1;;;4822:68:0;;8073:2:1;4822:68:0;;;8055:21:1;;;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;8203:18;;4822:68:0;7871:356:1;4822:68:0;27769:8:::1;:6;:8::i;12057:104::-:0;12113:13;12146:7;12139:14;;;;;:::i;16415:436::-;759:10;16508:4;13834:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;13834:27:0;;;;;;;;;;16508:4;;759:10;16655:15;16635:16;:35;;16627:85;;;;-1:-1:-1;;;16627:85:0;;9593:2:1;16627:85:0;;;9575:21:1;9632:2;9612:18;;;9605:30;9671:34;9651:18;;;9644:62;9742:7;9722:18;;;9715:35;9767:19;;16627:85:0;9391:401:1;16627:85:0;16748:60;16757:5;16764:7;16792:15;16773:16;:34;16748:8;:60::i;13462:193::-;13541:4;759:10;13597:28;759:10;13614:2;13618:6;13597:9;:28::i;27051:262::-;4656:7;4683:6;-1:-1:-1;;;;;4683:6:0;759:10;4830:23;4822:68;;;;-1:-1:-1;;;4822:68:0;;8073:2:1;4822:68:0;;;8055:21:1;;;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;8203:18;;4822:68:0;7871:356:1;4822:68:0;27150:12:::1;;27145:3;27134:10;;:14;;;;:::i;:::-;:28;;27126:71;;;::::0;-1:-1:-1;;;27126:71:0;;6314:2:1;27126:71:0::1;::::0;::::1;6296:21:1::0;6353:2;6333:18;;;6326:30;6392:32;6372:18;;;6365:60;6442:18;;27126:71:0::1;6112:354:1::0;27126:71:0::1;27214:10;:3:::0;27218:6:::1;27214:10;:::i;:::-;27208:16;;27259:3;27247:10;;:15;;;;:::i;:::-;27235:10;:27:::0;27273:20:::1;27279:8:::0;27289:3;27273:5:::1;:20::i;26707:336::-:0;25610:12;:10;:12::i;:::-;26840:20:::1;;26835:3;26808:26;;:30;;;;:::i;:::-;:52;;26800:95;;;::::0;-1:-1:-1;;;26800:95:0;;6314:2:1;26800:95:0::1;::::0;::::1;6296:21:1::0;6353:2;6333:18;;;6326:30;6392:32;6372:18;;;6365:60;6442:18;;26800:95:0::1;6112:354:1::0;26800:95:0::1;26912:10;:3:::0;26916:6:::1;26912:10;:::i;:::-;26906:16;;26989:3;26961:26;;:31;;;;:::i;:::-;26933:26;:59:::0;27003:20:::1;27009:8:::0;27019:3;27003:5:::1;:20::i;5519:201::-:0;4656:7;4683:6;-1:-1:-1;;;;;4683:6:0;759:10;4830:23;4822:68;;;;-1:-1:-1;;;4822:68:0;;8073:2:1;4822:68:0;;;8055:21:1;;;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;8203:18;;4822:68:0;7871:356:1;4822:68:0;-1:-1:-1;;;;;5608:22:0;::::1;5600:73;;;::::0;-1:-1:-1;;;5600:73:0;;4739:2:1;5600:73:0::1;::::0;::::1;4721:21:1::0;4778:2;4758:18;;;4751:30;4817:34;4797:18;;;4790:62;4888:8;4868:18;;;4861:36;4914:19;;5600:73:0::1;4537:402:1::0;5600:73:0::1;5684:28;5703:8;5684:18;:28::i;:::-;5519:201:::0;:::o;20040:380::-;-1:-1:-1;;;;;20176:19:0;;20168:68;;;;-1:-1:-1;;;20168:68:0;;9188:2:1;20168:68:0;;;9170:21:1;9227:2;9207:18;;;9200:30;9266:34;9246:18;;;9239:62;9337:6;9317:18;;;9310:34;9361:19;;20168:68:0;8986:400:1;20168:68:0;-1:-1:-1;;;;;20255:21:0;;20247:68;;;;-1:-1:-1;;;20247:68:0;;5146:2:1;20247:68:0;;;5128:21:1;5185:2;5165:18;;;5158:30;5224:34;5204:18;;;5197:62;5295:4;5275:18;;;5268:32;5317:19;;20247:68:0;4944:398:1;20247:68:0;-1:-1:-1;;;;;20328:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20380:32;;10303:25:1;;;20380:32:0;;10276:18:1;20380:32:0;;;;;;;20040:380;;;:::o;18279:399::-;-1:-1:-1;;;;;18363:21:0;;18355:65;;;;-1:-1:-1;;;18355:65:0;;9999:2:1;18355:65:0;;;9981:21:1;10038:2;10018:18;;;10011:30;10077:33;10057:18;;;10050:61;10128:18;;18355:65:0;9797:355:1;18355:65:0;18433:49;18462:1;18466:7;18475:6;18433:20;:49::i;:::-;18511:6;18495:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;18528:18:0;;;;;;:9;:18;;;;;:28;;18550:6;;18528:18;:28;;18550:6;;18528:28;:::i;:::-;;;;-1:-1:-1;;18572:37:0;;10303:25:1;;;-1:-1:-1;;;;;18572:37:0;;;18589:1;;18572:37;;10291:2:1;10276:18;18572:37:0;;;;;;;29265:367;29226:406;:::o;20711:453::-;-1:-1:-1;;;;;13834:18:0;;;20846:24;13834:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;20913:37:0;;20909:248;;20995:6;20975:16;:26;;20967:68;;;;-1:-1:-1;;;20967:68:0;;5549:2:1;20967:68:0;;;5531:21:1;5588:2;5568:18;;;5561:30;5627:31;5607:18;;;5600:59;5676:18;;20967:68:0;5347:353:1;20967:68:0;21079:51;21088:5;21095:7;21123:6;21104:16;:25;21079:8;:51::i;:::-;20835:329;20711:453;;;:::o;17321:671::-;-1:-1:-1;;;;;17452:18:0;;17444:68;;;;-1:-1:-1;;;17444:68:0;;8782:2:1;17444:68:0;;;8764:21:1;8821:2;8801:18;;;8794:30;8860:34;8840:18;;;8833:62;8931:7;8911:18;;;8904:35;8956:19;;17444:68:0;8580:401:1;17444:68:0;-1:-1:-1;;;;;17531:16:0;;17523:64;;;;-1:-1:-1;;;17523:64:0;;3986:2:1;17523:64:0;;;3968:21:1;4025:2;4005:18;;;3998:30;4064:34;4044:18;;;4037:62;4135:5;4115:18;;;4108:33;4158:19;;17523:64:0;3784:399:1;17523:64:0;17600:38;17621:4;17627:2;17631:6;17600:20;:38::i;:::-;-1:-1:-1;;;;;17673:15:0;;17651:19;17673:15;;;:9;:15;;;;;;17707:21;;;;17699:72;;;;-1:-1:-1;;;17699:72:0;;5907:2:1;17699:72:0;;;5889:21:1;5946:2;5926:18;;;5919:30;5985:34;5965:18;;;5958:62;6056:8;6036:18;;;6029:36;6082:19;;17699:72:0;5705:402:1;17699:72:0;-1:-1:-1;;;;;17807:15:0;;;;;;;:9;:15;;;;;;17825:20;;;17807:38;;17867:13;;;;;;;;:23;;17839:6;;17807:15;17867:23;;17839:6;;17867:23;:::i;:::-;;;;;;;;17923:2;-1:-1:-1;;;;;17908:26:0;17917:4;-1:-1:-1;;;;;17908:26:0;;17927:6;17908:26;;;;10303:25:1;;10291:2;10276:18;;10157:177;17908:26:0;;;;;;;;17947:37;29640:206;3421:120;2430:16;:14;:16::i;:::-;3490:5:::1;3480:15:::0;;;::::1;::::0;;3511:22:::1;759:10:::0;3520:12:::1;3511:22;::::0;-1:-1:-1;;;;;2864:55:1;;;2846:74;;2834:2;2819:18;3511:22:0::1;;;;;;;3421:120::o:0;5880:191::-;5954:16;5973:6;;-1:-1:-1;;;;;5990:17:0;;;-1:-1:-1;;5990:17:0;;;;;;6023:40;;5973:6;;;;;;;6023:40;;5954:16;6023:40;5943:128;5880:191;:::o;3162:118::-;2171:19;:17;:19::i;:::-;3222:7:::1;:14:::0;;;::::1;-1:-1:-1::0;;;3222:14:0::1;::::0;;3252:20:::1;3259:12;759:10:::0;;679:98;25656:135;25733:15;;-1:-1:-1;;;;;25733:15:0;25719:10;:29;25711:72;;;;-1:-1:-1;;;25711:72:0;;7362:2:1;25711:72:0;;;7344:21:1;7401:2;7381:18;;;7374:30;7440:32;7420:18;;;7413:60;7490:18;;25711:72:0;7160:354:1;29640:206:0;2171:19;:17;:19::i;:::-;29640:206;;;:::o;2910:108::-;2613:4;2637:7;-1:-1:-1;;;2637:7:0;;;;2969:41;;;;-1:-1:-1;;;2969:41:0;;4390:2:1;2969:41:0;;;4372:21:1;4429:2;4409:18;;;4402:30;4468:22;4448:18;;;4441:50;4508:18;;2969:41:0;4188:344:1;2725:108:0;2613:4;2637:7;-1:-1:-1;;;2637:7:0;;;;2795:9;2787:38;;;;-1:-1:-1;;;2787:38:0;;6673:2:1;2787:38:0;;;6655:21:1;6712:2;6692:18;;;6685:30;6751:18;6731;;;6724:46;6787:18;;2787:38:0;6471:340:1;14:196;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;:::-;356:39;215:186;-1:-1:-1;;;215:186:1:o;406:260::-;474:6;482;535:2;523:9;514:7;510:23;506:32;503:52;;;551:1;548;541:12;503:52;574:29;593:9;574:29;:::i;:::-;564:39;;622:38;656:2;645:9;641:18;622:38;:::i;:::-;612:48;;406:260;;;;;:::o;671:409::-;757:6;765;773;781;834:3;822:9;813:7;809:23;805:33;802:53;;;851:1;848;841:12;802:53;874:29;893:9;874:29;:::i;:::-;864:39;;922:38;956:2;945:9;941:18;922:38;:::i;:::-;912:48;;979:38;1013:2;1002:9;998:18;979:38;:::i;:::-;969:48;;1036:38;1070:2;1059:9;1055:18;1036:38;:::i;:::-;1026:48;;671:409;;;;;;;:::o;1085:328::-;1162:6;1170;1178;1231:2;1219:9;1210:7;1206:23;1202:32;1199:52;;;1247:1;1244;1237:12;1199:52;1270:29;1289:9;1270:29;:::i;:::-;1260:39;;1318:38;1352:2;1341:9;1337:18;1318:38;:::i;:::-;1308:48;;1403:2;1392:9;1388:18;1375:32;1365:42;;1085:328;;;;;:::o;1418:254::-;1486:6;1494;1547:2;1535:9;1526:7;1522:23;1518:32;1515:52;;;1563:1;1560;1553:12;1515:52;1586:29;1605:9;1586:29;:::i;:::-;1576:39;1662:2;1647:18;;;;1634:32;;-1:-1:-1;;;1418:254:1:o;1677:180::-;1736:6;1789:2;1777:9;1768:7;1764:23;1760:32;1757:52;;;1805:1;1802;1795:12;1757:52;-1:-1:-1;1828:23:1;;1677:180;-1:-1:-1;1677:180:1:o;1862:184::-;1932:6;1985:2;1973:9;1964:7;1960:23;1956:32;1953:52;;;2001:1;1998;1991:12;1953:52;-1:-1:-1;2024:16:1;;1862:184;-1:-1:-1;1862:184:1:o;2051:254::-;2119:6;2127;2180:2;2168:9;2159:7;2155:23;2151:32;2148:52;;;2196:1;2193;2186:12;2148:52;2232:9;2219:23;2209:33;;2261:38;2295:2;2284:9;2280:18;2261:38;:::i;2310:385::-;2396:6;2404;2412;2420;2473:3;2461:9;2452:7;2448:23;2444:33;2441:53;;;2490:1;2487;2480:12;2441:53;-1:-1:-1;;2513:23:1;;;2583:2;2568:18;;2555:32;;-1:-1:-1;2634:2:1;2619:18;;2606:32;;2685:2;2670:18;2657:32;;-1:-1:-1;2310:385:1;-1:-1:-1;2310:385:1:o;3123:656::-;3235:4;3264:2;3293;3282:9;3275:21;3325:6;3319:13;3368:6;3363:2;3352:9;3348:18;3341:34;3393:1;3403:140;3417:6;3414:1;3411:13;3403:140;;;3512:14;;;3508:23;;3502:30;3478:17;;;3497:2;3474:26;3467:66;3432:10;;3403:140;;;3561:6;3558:1;3555:13;3552:91;;;3631:1;3626:2;3617:6;3606:9;3602:22;3598:31;3591:42;3552:91;-1:-1:-1;3695:2:1;3683:15;3700:66;3679:88;3664:104;;;;3770:2;3660:113;;3123:656;-1:-1:-1;;;3123:656:1:o;10528:128::-;10568:3;10599:1;10595:6;10592:1;10589:13;10586:39;;;10605:18;;:::i;:::-;-1:-1:-1;10641:9:1;;10528:128::o;10661:274::-;10701:1;10727;10717:189;;-1:-1:-1;;;10759:1:1;10752:88;10863:4;10860:1;10853:15;10891:4;10888:1;10881:15;10717:189;-1:-1:-1;10920:9:1;;10661:274::o;10940:228::-;10980:7;11106:1;-1:-1:-1;;11034:74:1;11031:1;11028:81;11023:1;11016:9;11009:17;11005:105;11002:131;;;11113:18;;:::i;:::-;-1:-1:-1;11153:9:1;;10940:228::o;11173:125::-;11213:4;11241:1;11238;11235:8;11232:34;;;11246:18;;:::i;:::-;-1:-1:-1;11283:9:1;;11173:125::o;11303:437::-;11382:1;11378:12;;;;11425;;;11446:61;;11500:4;11492:6;11488:17;11478:27;;11446:61;11553:2;11545:6;11542:14;11522:18;11519:38;11516:218;;;-1:-1:-1;;;11587:1:1;11580:88;11691:4;11688:1;11681:15;11719:4;11716:1;11709:15;11516:218;;11303:437;;;:::o;11745:184::-;-1:-1:-1;;;11794:1:1;11787:88;11894:4;11891:1;11884:15;11918:4;11915:1;11908:15

Swarm Source

ipfs://cfd8401c5adaf7cb88c31a79ef5321a0ac18c8bf3244cf51a628a528fd11db8e
Loading