ERC-20
NFT
Overview
Max Total Supply
13,568,992.192399211020701597 Rainbows
Holders
2,278 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
24.168 RainbowsValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OtherSideOfTheRainbows
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-03 */ // File: @openzeppelin/contracts/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 v4.4.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 Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { 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 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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `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); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (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 v4.4.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: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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}. * * 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 virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * 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: * * - `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), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(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: * * - `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 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: contracts/Rainbows.sol pragma solidity ^0.8.0; interface InterfaceNoundles { function noundleBalance(address owner) external view returns(uint256); } interface InterfaceEvilNoundles { function companionBalance(address owner) external view returns(uint256); function getEvilNoundleOwners() external view returns (address[] memory); function getRandomEvilNoundleExternal(uint256 index) external returns(address); function lowLandBalance(address owner) external view returns(uint256); function midLandBalance(address owner) external view returns(uint256); function highLandBalance(address owner) external view returns(uint256); } interface InterfaceOriginalRainbows { function balanceOf(address owner) external view returns(uint256); function burn(address user, uint256 amount) external; function claimReward() external; function getTotalClaimable(address user) external view returns(uint256); } contract OtherSideOfTheRainbows is ERC20, Ownable, Pausable { InterfaceNoundles public Noundles; InterfaceEvilNoundles public EvilNoundles; InterfaceOriginalRainbows public OriginalRainbows; // If we are pulling value from the old contract also. bool public UseOriginalRainbowsBalance = true; // The starting block. uint256 public startBlock; uint256 public startBlockCompanion; // The maximum that can ever be minted. uint256 public maximumSupply = 33333333 ether; // Noundle holders: The interval that the user is paid out. uint256 public interval = 86400; uint256 public rate = 4 ether; uint256 public companionInterval = 86400; uint256 public companionRate = 2 ether; // Land protection uint256 public landPertectionRateLow = 2; uint256 public landPertectionRateMid = 5; uint256 public landPertectionRateHigh = 10; // Steal Amount. bool public stealingEnabled = false; uint256 public stealPercentage = 20; // Loss on a trade. uint256 public tradeLoss = 35; // Multiple. bool public useMultiple = false; // The rewards for the user (OG). mapping(address => uint256) public rewards; mapping(address => uint256) public companionRewards; mapping(address => uint256) public evilRewards; // The last time they were paid out. mapping(address => uint256) public lastUpdate; mapping(address => uint256) public lastUpdateCompanion; // Extended access mapping(address => bool) public extendedAccess; // Only allow the contract to interact with it. modifier onlyFromNoundles() { require((msg.sender == address(Noundles)), "Your address doesn't have permissing"); _; } modifier onlyFromEvilNoundles() { require(msg.sender == address(EvilNoundles)); _; } modifier onlyFromRestricted() { require(extendedAccess[msg.sender], "Your address does not have permission to use."); _; } constructor(address noundlesAddress, address evilNoundlesAddress, address ogRainbowsAddress) ERC20("NoundlesRainbows", "Rainbows") { // Set the address to interfaces. Noundles = InterfaceNoundles(noundlesAddress); EvilNoundles = InterfaceEvilNoundles(evilNoundlesAddress); OriginalRainbows = InterfaceOriginalRainbows(ogRainbowsAddress); // Set the starting block. startBlock = block.timestamp; startBlockCompanion = block.timestamp; // Pause the system so no one can interact with it. _pause(); } /* Admin Utility. */ // Pause it. function pause() public onlyOwner { _pause(); } // Unpause it. function unpause() public onlyOwner { _unpause(); } // Set the start block. function setStartBlock(uint256 arg) public onlyOwner { if(arg == 0){ startBlock = block.timestamp; }else{ startBlock = arg; } } // Set the start block for companions. function setStartBlockCompanion(uint256 arg) public onlyOwner { if(arg == 0){ startBlockCompanion = block.timestamp; }else{ startBlockCompanion = arg; } } // Set the status of stealing. function setStealingStatus(bool arg) public onlyOwner { stealingEnabled = arg; } // Set the status of the rainbows balance. function setUseOriginalRainbowBalance(bool arg) public onlyOwner { UseOriginalRainbowsBalance = arg; } // Set the start block. function setIntervalAndRate(uint256 _interval, uint256 _rate) public onlyOwner { interval = _interval; rate = _rate; } // Set the steal rate. function setStealPercentage(uint256 _arg) public onlyOwner { stealPercentage = _arg; } // Set useMultiple. function setUseMultiple(bool _arg) public onlyOwner { useMultiple = _arg; } // Set the land protection rate. function setLandProtectionRates(uint256 _low, uint256 _mid, uint256 _high) public onlyOwner { landPertectionRateLow = _low; landPertectionRateMid = _mid; landPertectionRateHigh = _high; } // Set the start block. function setCompanionIntervalAndRate(uint256 _interval, uint256 _rate) public onlyOwner { companionInterval = _interval; companionRate = _rate; } // Set the address for the contract. function setNoundlesContractAddress(address _noundles) public onlyOwner { Noundles = InterfaceNoundles(_noundles); } // Set the address for the evil noundles contract. function setEvilNoundlesContractAddress(address _noundles) public onlyOwner { EvilNoundles = InterfaceEvilNoundles(_noundles); } // Set the address for the original rainbow contract. function setOGRainbowsContractAddress(address _noundles) public onlyOwner { OriginalRainbows = InterfaceOriginalRainbows(_noundles); } // Set the address for the contract. function setAddressAccess(address _noundles, bool _value) public onlyOwner { extendedAccess[_noundles] = _value; } // Get the access status for a address. function getAddressAccess(address user) external view returns(bool) { return extendedAccess[user]; } // Burn the tokens required to evolve. function burnMultiple(address [] memory users, uint256 [] memory amount) external onlyFromRestricted { for(uint256 i = 0; i < users.length; i += 1){ _burn(users[i], amount[i]); } } // Burn the tokens required to evolve. function burn(address user, uint256 amount) external onlyFromRestricted { _burn(user, amount); } // Mint some tokens for uniswap. function adminCreate(address [] memory users, uint256 [] memory amount) public onlyOwner { for(uint256 i = 0; i < users.length; i += 1){ _mint(users[i], amount[i]); } } /* Helpers. */ // The rewards to the user. function getOGRainbowsClaimable(address user) external view returns(uint256) { // Always 0 if it's not setup. if(UseOriginalRainbowsBalance == false || address(OriginalRainbows) == address(0)){ return 0; } return OriginalRainbows.balanceOf(user); } // The rewards to the user. function getTotalClaimable(address user) external view returns(uint256) { return rewards[user] + companionRewards[user] + getPendingOGReward(user); } // The rewards to the user. function getTotalCompanionClaimable(address user) external view returns(uint256) { return companionRewards[user] + getPendingCompanionReward(user); } function getTotalStolenClaimable(address user) external view returns(uint256) { return evilRewards[user]; } // The rewards to the user. function getLastUpdate(address user) external view returns(uint256) { return lastUpdate[user]; } // The rewards to the user. function getLastUpdateCompanion(address user) external view returns(uint256) { return lastUpdateCompanion[user]; } // Set the address for the contract. function setLastUpdate(address[] memory _noundles, uint256 [] memory values) public onlyOwner { for(uint256 i = 0; i < _noundles.length; i += 1){ lastUpdate[_noundles[i]] = values[i]; } } // Set the address for the contract. function setLastUpdateCompanion(address[] memory _noundles, uint256 [] memory values) public onlyOwner { for(uint256 i = 0; i < _noundles.length; i += 1){ lastUpdateCompanion[_noundles[i]] = values[i]; } } // Update the supply. function setMaximumSupply(uint256 _arg) public onlyOwner { maximumSupply = _arg; } /* User Utilities. */ // Transfer the tokens (only accessable from the contract). function transferTokens(address _from, address _to) onlyFromRestricted whenNotPaused external { // Refactor this. if(_from != address(0)){ rewards[_from] += (getPendingOGReward(_from) * (100 - tradeLoss)) / 100; companionRewards[_from] += (getPendingCompanionReward(_from) * (100 - tradeLoss)) / 100; lastUpdate[_from] = block.timestamp; lastUpdateCompanion[_from] = block.timestamp; } if(_to != address(0)){ rewards[_to] += getPendingOGReward(_to); companionRewards[_to] += getPendingCompanionReward(_to); lastUpdate[_to] = block.timestamp; lastUpdateCompanion[_to] = block.timestamp; } } // Pay out the holder. function claimReward() external whenNotPaused { // Make a local copy of the rewards. uint256 _ogRewards = rewards[msg.sender]; uint256 _compRewards = companionRewards[msg.sender]; uint256 _evilRewards = evilRewards[msg.sender]; // Get the rewards. uint256 pendingOGRewards = getPendingOGReward(msg.sender); uint256 pendingCompanionRewards = getPendingCompanionReward(msg.sender); uint256 pendingOGRainbows = getOGRainbowsPending(msg.sender); // Reset the rewards. rewards[msg.sender] = 0; companionRewards[msg.sender] = 0; evilRewards[msg.sender] = 0; // Reset the block. lastUpdate[msg.sender] = block.timestamp; lastUpdateCompanion[msg.sender] = block.timestamp; // Add up the totals. uint256 totalRewardsWithoutEvil = _ogRewards + _compRewards + pendingOGRewards + pendingCompanionRewards; // Block if we hit our limit. require(totalSupply() + totalRewardsWithoutEvil < maximumSupply, "No longer able to mint tokens."); // How much is one percent worth. uint256 percent = totalRewardsWithoutEvil / 100; // The calculated steal percentage. uint256 calculatedStealPercentage = stealPercentage; // If stealing is enabled. if(stealingEnabled){ uint256 landProtection = 0; // Calculate how much the land protected. if(EvilNoundles.highLandBalance(msg.sender) > 0){ landProtection = landPertectionRateHigh; }else if(EvilNoundles.midLandBalance(msg.sender) > 0){ landProtection = landPertectionRateMid; }else if(EvilNoundles.lowLandBalance(msg.sender) > 0){ landProtection = landPertectionRateLow; } if(landProtection < calculatedStealPercentage){ calculatedStealPercentage -= landProtection; }else{ calculatedStealPercentage = 0; } // Handle stealing. address[] memory evilNoundleLists; // = EvilNoundles.getEvilNoundleOwners(); if(useMultiple == false){ address singleSelected = EvilNoundles.getRandomEvilNoundleExternal(0); if(singleSelected != address(0)){ evilNoundleLists = new address[](1); evilNoundleLists[0] = singleSelected; } }else{ evilNoundleLists = EvilNoundles.getEvilNoundleOwners(); } // Cut the total amount stolen into shares for each noundle. uint256 rewardPerEvilNoundle = (percent * calculatedStealPercentage) / evilNoundleLists.length; // Give each evil noundle holder a cut into their stolen. for(uint256 _index; _index < evilNoundleLists.length; _index += 1){ evilRewards[evilNoundleLists[_index]] += rewardPerEvilNoundle; } }else{ // If stealing isn't enabled, set it to 0. calculatedStealPercentage = 0; } // The final result after it was stolen from by those evil noundles :( uint256 totalRewards = (percent * (100 - calculatedStealPercentage)) + _evilRewards + pendingOGRainbows; // Before we claim, if we have any pendingOG then burn them. if(pendingOGRainbows > 0){ OriginalRainbows.burn(msg.sender, pendingOGRainbows); } // Mint the user their tokens. _mint(msg.sender, totalRewards); } // Get the total rewards. function getPendingOGReward(address user) public view returns(uint256) { // Prevent rewards until our start is hit. if(block.timestamp < startBlock){ return 0; } return Noundles.noundleBalance(user) * rate * (block.timestamp - (lastUpdate[user] >= startBlock ? lastUpdate[user] : startBlock)) / interval; } // Get the total rewards. function getPendingCompanionReward(address user) public view returns(uint256) { // Prevent rewards until our start is hit. if(block.timestamp < startBlockCompanion){ return 0; } return EvilNoundles.companionBalance(user) * companionRate * (block.timestamp - (lastUpdateCompanion[user] >= startBlockCompanion ? lastUpdateCompanion[user] : startBlockCompanion)) / companionInterval; } function getOGRainbowsPending(address user) public view returns(uint256) { // Always 0 if it's not setup. if(UseOriginalRainbowsBalance == false || address(OriginalRainbows) == address(0)){ return 0; } return OriginalRainbows.balanceOf(user); } function getOGRainbowsPendingUnclaimed(address user) public view returns(uint256) { // Always 0 if it's not setup. if(UseOriginalRainbowsBalance == false || address(OriginalRainbows) == address(0)){ return 0; } return OriginalRainbows.getTotalClaimable(user); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"noundlesAddress","type":"address"},{"internalType":"address","name":"evilNoundlesAddress","type":"address"},{"internalType":"address","name":"ogRainbowsAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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":"EvilNoundles","outputs":[{"internalType":"contract InterfaceEvilNoundles","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Noundles","outputs":[{"internalType":"contract InterfaceNoundles","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OriginalRainbows","outputs":[{"internalType":"contract InterfaceOriginalRainbows","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UseOriginalRainbowsBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"adminCreate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"burnMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"companionInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"companionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"companionRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"evilRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"extendedAccess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAddressAccess","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getLastUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getLastUpdateCompanion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getOGRainbowsClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getOGRainbowsPending","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getOGRainbowsPendingUnclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPendingCompanionReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPendingOGReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getTotalClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getTotalCompanionClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getTotalStolenClaimable","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":"interval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landPertectionRateHigh","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landPertectionRateLow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landPertectionRateMid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastUpdateCompanion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_noundles","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAddressAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_interval","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setCompanionIntervalAndRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_noundles","type":"address"}],"name":"setEvilNoundlesContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_interval","type":"uint256"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"setIntervalAndRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_low","type":"uint256"},{"internalType":"uint256","name":"_mid","type":"uint256"},{"internalType":"uint256","name":"_high","type":"uint256"}],"name":"setLandProtectionRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_noundles","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"setLastUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_noundles","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"setLastUpdateCompanion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_arg","type":"uint256"}],"name":"setMaximumSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_noundles","type":"address"}],"name":"setNoundlesContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_noundles","type":"address"}],"name":"setOGRainbowsContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"arg","type":"uint256"}],"name":"setStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"arg","type":"uint256"}],"name":"setStartBlockCompanion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_arg","type":"uint256"}],"name":"setStealPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"arg","type":"bool"}],"name":"setStealingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_arg","type":"bool"}],"name":"setUseMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"arg","type":"bool"}],"name":"setUseOriginalRainbowBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlockCompanion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stealPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stealingEnabled","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradeLoss","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"useMultiple","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526008805460ff60a01b1916600160a01b1790556a1b929b9a4d1cb514340000600b5562015180600c819055673782dace9d900000600d55600e55671bc16d674ec80000600f5560026010556005601155600a6012556013805460ff199081169091556014805560236015556016805490911690553480156200008557600080fd5b5060405162002f0b38038062002f0b833981016040819052620000a89162000364565b604080518082018252601081526f4e6f756e646c65735261696e626f777360801b6020808301918252835180850190945260088452675261696e626f777360c01b9084015281519192916200010091600391620002a1565b50805162000116906004906020840190620002a1565b505050620001336200012d6200019960201b60201c565b6200019d565b6005805460ff60a01b19169055600680546001600160a01b038086166001600160a01b031992831617909255600780548584169083161790556008805492841692909116919091179055426009819055600a5562000190620001ef565b505050620003eb565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b62000203600554600160a01b900460ff1690565b15620002485760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640160405180910390fd5b6005805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620002843390565b6040516001600160a01b03909116815260200160405180910390a1565b828054620002af90620003ae565b90600052602060002090601f016020900481019282620002d357600085556200031e565b82601f10620002ee57805160ff19168380011785556200031e565b828001600101855582156200031e579182015b828111156200031e57825182559160200191906001019062000301565b506200032c92915062000330565b5090565b5b808211156200032c576000815560010162000331565b80516001600160a01b03811681146200035f57600080fd5b919050565b6000806000606084860312156200037a57600080fd5b620003858462000347565b9250620003956020850162000347565b9150620003a56040850162000347565b90509250925092565b600181811c90821680620003c357607f821691505b60208210811415620003e557634e487b7160e01b600052602260045260246000fd5b50919050565b612b1080620003fb6000396000f3fe608060405234801561001057600080fd5b50600436106104335760003560e01c80636b52035a11610236578063b88a802f1161013b578063de67d12d116100c3578063f35e4a6e11610087578063f35e4a6e14610983578063f9d7e22014610996578063fc5a5673146109a3578063fd8558db146109b6578063fec8af24146109bf57600080fd5b8063de67d12d14610907578063eae952611461091a578063ebabdd021461093a578063ef0710dc1461095d578063f2fde38b1461097057600080fd5b8063d38888571161010a578063d38888571461088c578063da229c0214610895578063dc988394146108a8578063dd51d433146108bb578063dd62ed3e146108ce57600080fd5b8063b88a802f1461083e578063bd13c11214610846578063cb03fb1e14610859578063d216294f1461087957600080fd5b806395d89b41116101be578063a44df4241161018d578063a44df424146107dc578063a457c2d7146107ef578063a67876e814610802578063a9059cbb14610822578063aa1a29721461083557600080fd5b806395d89b41146107ab5780639dc29fac146107b35780639de49127146107c65780639fc02c98146107cf57600080fd5b80638456cb59116102055780638456cb59146107635780638cb2c5d11461076b5780638da5cb5b1461077e5780638e6eafef1461078f578063947a36fb146107a257600080fd5b80636b52035a1461070c57806370a082311461071f578063715018a6146107485780637b678c2c1461075057600080fd5b80633dc8ea6b1161033c5780635a5a72ac116102c45780635feae415116102935780635feae415146106ad57806362da6dc0146106c057806366429dc1146106d357806366a95e6b146106e65780636a092e79146106f957600080fd5b80635a5a72ac1461064c5780635a7e19891461065f5780635b2a6a72146106885780635c975abb1461069b57600080fd5b806348cd4cb11161030b57806348cd4cb114610614578063491c1fee14610504578063503524831461061d578063503db69814610626578063517740cb1461063957600080fd5b80633dc8ea6b146105bc5780633ed34053146105e55780633f4ba83a146105f95780634762e1211461060157600080fd5b80631f9d705f116103bf5780632ec61c811161038e5780632ec61c8114610546578063313ce567146105665780633526bacb1461057557806336cc8c0b146105a057806339509351146105a957600080fd5b80631f9d705f1461050457806323b872dd14610517578063267e8ab61461052a5780632c4e722e1461053d57600080fd5b8063154c4bc911610406578063154c4bc9146104ac57806318160ddd146104b5578063190c26ef146104bd5780631aa16e70146104c65780631cae87e7146104ef57600080fd5b80630480e58b1461043857806306fdde03146104545780630700037d14610469578063095ea7b314610489575b600080fd5b610441600b5481565b6040519081526020015b60405180910390f35b61045c6109eb565b60405161044b9190612882565b610441610477366004612561565b60176020526000908152604090205481565b61049c610497366004612651565b610a7d565b604051901515815260200161044b565b61044160105481565b600254610441565b610441600a5481565b6104416104d4366004612561565b6001600160a01b03166000908152601b602052604090205490565b6105026104fd366004612856565b610a93565b005b610441610512366004612561565b610ad4565b61049c6105253660046125db565b610b8a565b610441610538366004612561565b610c34565b610441600d5481565b610441610554366004612561565b60196020526000908152604090205481565b6040516012815260200161044b565b600754610588906001600160a01b031681565b6040516001600160a01b03909116815260200161044b565b610441600f5481565b61049c6105b7366004612651565b610c78565b6104416105ca366004612561565b6001600160a01b031660009081526019602052604090205490565b60085461049c90600160a01b900460ff1681565b610502610cb4565b600654610588906001600160a01b031681565b61044160095481565b61044160145481565b610441610634366004612561565b610ce8565b610441610647366004612561565b610d16565b61050261065a36600461271e565b610e1a565b61044161066d366004612561565b6001600160a01b03166000908152601a602052604090205490565b610502610696366004612834565b610ea3565b600554600160a01b900460ff1661049c565b6105026106bb366004612834565b610ed8565b6105026106ce366004612561565b610f0d565b6105026106e136600461271e565b610f59565b6105026106f436600461261c565b610ff5565b6105026107073660046125a2565b61104a565b61044161071a366004612561565b61123b565b61044161072d366004612561565b6001600160a01b031660009081526020819052604090205490565b61050261129f565b61050261075e366004612561565b6112d3565b61050261131f565b610502610779366004612802565b611351565b6005546001600160a01b0316610588565b61050261079d3660046127e7565b611380565b610441600c5481565b61045c6113bd565b6105026107c1366004612651565b6113cc565b61044160125481565b60135461049c9060ff1681565b6104416107ea366004612561565b611405565b61049c6107fd366004612651565b61149f565b610441610810366004612561565b60186020526000908152604090205481565b61049c610830366004612651565b611538565b61044160155481565b610502611545565b610502610854366004612802565b611b2f565b610441610867366004612561565b601a6020526000908152604090205481565b61050261088736600461271e565b611b5e565b61044160115481565b6105026108a3366004612802565b611be7565b6105026108b6366004612561565b611c26565b6105026108c936600461271e565b611c72565b6104416108dc3660046125a2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600854610588906001600160a01b031681565b610441610928366004612561565b601b6020526000908152604090205481565b61049c610948366004612561565b601c6020526000908152604090205460ff1681565b61050261096b3660046127e7565b611d0e565b61050261097e366004612561565b611d56565b610502610991366004612802565b611dee565b60165461049c9060ff1681565b6105026109b13660046127e7565b611e29565b610441600e5481565b61049c6109cd366004612561565b6001600160a01b03166000908152601c602052604090205460ff1690565b6060600380546109fa90612a48565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2690612a48565b8015610a735780601f10610a4857610100808354040283529160200191610a73565b820191906000526020600020905b815481529060010190602001808311610a5657829003601f168201915b5050505050905090565b6000610a8a338484611e66565b50600192915050565b6005546001600160a01b03163314610ac65760405162461bcd60e51b8152600401610abd90612901565b60405180910390fd5b601092909255601155601255565b600854600090600160a01b900460ff161580610af957506008546001600160a01b0316155b15610b0657506000919050565b6008546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a08231906024015b60206040518083038186803b158015610b4c57600080fd5b505afa158015610b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b84919061281b565b92915050565b6000610b97848484611f8a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c1c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610abd565b610c298533858403611e66565b506001949350505050565b6000610c3f82611405565b6001600160a01b038316600090815260186020908152604080832054601790925290912054610c6e91906129d8565b610b8491906129d8565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a8a918590610caf9086906129d8565b611e66565b6005546001600160a01b03163314610cde5760405162461bcd60e51b8152600401610abd90612901565b610ce6612159565b565b6000610cf382610d16565b6001600160a01b038316600090815260186020526040902054610b8491906129d8565b6000600a54421015610d2a57506000919050565b600e54600a546001600160a01b0384166000908152601b60205260409020541015610d5757600a54610d71565b6001600160a01b0383166000908152601b60205260409020545b610d7b9042612a31565b600f5460075460405163f1d770c560e01b81526001600160a01b0387811660048301529091169063f1d770c5906024015b60206040518083038186803b158015610dc457600080fd5b505afa158015610dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfc919061281b565b610e069190612a12565b610e109190612a12565b610b8491906129f0565b6005546001600160a01b03163314610e445760405162461bcd60e51b8152600401610abd90612901565b60005b8251811015610e9e57610e8c838281518110610e6557610e65612a99565b6020026020010151838381518110610e7f57610e7f612a99565b60200260200101516121f6565b610e976001826129d8565b9050610e47565b505050565b6005546001600160a01b03163314610ecd5760405162461bcd60e51b8152600401610abd90612901565b600e91909155600f55565b6005546001600160a01b03163314610f025760405162461bcd60e51b8152600401610abd90612901565b600c91909155600d55565b6005546001600160a01b03163314610f375760405162461bcd60e51b8152600401610abd90612901565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f835760405162461bcd60e51b8152600401610abd90612901565b60005b8251811015610e9e57818181518110610fa157610fa1612a99565b6020026020010151601b6000858481518110610fbf57610fbf612a99565b6020908102919091018101516001600160a01b0316825281019190915260400160002055610fee6001826129d8565b9050610f86565b6005546001600160a01b0316331461101f5760405162461bcd60e51b8152600401610abd90612901565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b336000908152601c602052604090205460ff166110795760405162461bcd60e51b8152600401610abd90612936565b600554600160a01b900460ff16156110a35760405162461bcd60e51b8152600401610abd906128d7565b6001600160a01b0382161561119157606460155460646110c39190612a31565b6110cc84611405565b6110d69190612a12565b6110e091906129f0565b6001600160a01b038316600090815260176020526040812080549091906111089084906129d8565b909155505060155460649061111d9082612a31565b61112684610d16565b6111309190612a12565b61113a91906129f0565b6001600160a01b038316600090815260186020526040812080549091906111629084906129d8565b90915550506001600160a01b0382166000908152601a602090815260408083204290819055601b909252909120555b6001600160a01b03811615611237576111a981611405565b6001600160a01b038216600090815260176020526040812080549091906111d19084906129d8565b909155506111e0905081610d16565b6001600160a01b038216600090815260186020526040812080549091906112089084906129d8565b90915550506001600160a01b0381166000908152601a602090815260408083204290819055601b909252909120555b5050565b600854600090600160a01b900460ff16158061126057506008546001600160a01b0316155b1561126d57506000919050565b60085460405163133f455b60e11b81526001600160a01b0384811660048301529091169063267e8ab690602401610b34565b6005546001600160a01b031633146112c95760405162461bcd60e51b8152600401610abd90612901565b610ce660006122d5565b6005546001600160a01b031633146112fd5760405162461bcd60e51b8152600401610abd90612901565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113495760405162461bcd60e51b8152600401610abd90612901565b610ce6612327565b6005546001600160a01b0316331461137b5760405162461bcd60e51b8152600401610abd90612901565b600b55565b6005546001600160a01b031633146113aa5760405162461bcd60e51b8152600401610abd90612901565b6013805460ff1916911515919091179055565b6060600480546109fa90612a48565b336000908152601c602052604090205460ff166113fb5760405162461bcd60e51b8152600401610abd90612936565b611237828261238c565b600060095442101561141957506000919050565b600c546009546001600160a01b0384166000908152601a6020526040902054101561144657600954611460565b6001600160a01b0383166000908152601a60205260409020545b61146a9042612a31565b600d5460065460405163ea2c736b60e01b81526001600160a01b0387811660048301529091169063ea2c736b90602401610dac565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115215760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610abd565b61152e3385858403611e66565b5060019392505050565b6000610a8a338484611f8a565b600554600160a01b900460ff161561156f5760405162461bcd60e51b8152600401610abd906128d7565b3360008181526017602090815260408083205460188352818420546019909352908320549093919290916115a290611405565b905060006115af33610d16565b905060006115bc33610ad4565b3360009081526017602090815260408083208390556018825280832083905560198252808320839055601a82528083204290819055601b9092528220559091508284611608888a6129d8565b61161291906129d8565b61161c91906129d8565b9050600b548161162b60025490565b61163591906129d8565b106116825760405162461bcd60e51b815260206004820152601e60248201527f4e6f206c6f6e6765722061626c6520746f206d696e7420746f6b656e732e00006044820152606401610abd565b600061168f6064836129f0565b6014546013549192509060ff1615611a7b5760075460405163f6697c8b60e01b815233600482015260009182916001600160a01b039091169063f6697c8b9060240160206040518083038186803b1580156116e957600080fd5b505afa1580156116fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611721919061281b565b11156117305750601254611842565b600754604051630c8f4b0d60e41b81523360048201526000916001600160a01b03169063c8f4b0d09060240160206040518083038186803b15801561177457600080fd5b505afa158015611788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ac919061281b565b11156117bb5750601154611842565b600754604051631c53a27b60e21b81523360048201526000916001600160a01b03169063714e89ec9060240160206040518083038186803b1580156117ff57600080fd5b505afa158015611813573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611837919061281b565b111561184257506010545b8181101561185b576118548183612a31565b9150611860565b600091505b60165460609060ff166119585760075460405163981fc62760e01b8152600060048201819052916001600160a01b03169063981fc62790602401602060405180830381600087803b1580156118b457600080fd5b505af11580156118c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ec9190612585565b90506001600160a01b03811615611952576040805160018082528183019092529060208083019080368337019050509150808260008151811061193157611931612a99565b60200260200101906001600160a01b031690816001600160a01b0316815250505b506119e5565b600760009054906101000a90046001600160a01b03166001600160a01b031663cac05ca96040518163ffffffff1660e01b815260040160006040518083038186803b1580156119a657600080fd5b505afa1580156119ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119e2919081019061267d565b90505b80516000906119f48587612a12565b6119fe91906129f0565b905060005b8251811015611a72578160196000858481518110611a2357611a23612a99565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000828254611a5a91906129d8565b90915550611a6b90506001826129d8565b9050611a03565b50505050611a7f565b5060005b60008488611a8e846064612a31565b611a989086612a12565b611aa291906129d8565b611aac91906129d8565b90508415611b1957600854604051632770a7eb60e21b8152336004820152602481018790526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b158015611b0057600080fd5b505af1158015611b14573d6000803e3d6000fd5b505050505b611b2333826121f6565b50505050505050505050565b6005546001600160a01b03163314611b595760405162461bcd60e51b8152600401610abd90612901565b601455565b336000908152601c602052604090205460ff16611b8d5760405162461bcd60e51b8152600401610abd90612936565b60005b8251811015610e9e57611bd5838281518110611bae57611bae612a99565b6020026020010151838381518110611bc857611bc8612a99565b602002602001015161238c565b611be06001826129d8565b9050611b90565b6005546001600160a01b03163314611c115760405162461bcd60e51b8152600401610abd90612901565b80611c1d5742600a5550565b600a8190555b50565b6005546001600160a01b03163314611c505760405162461bcd60e51b8152600401610abd90612901565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611c9c5760405162461bcd60e51b8152600401610abd90612901565b60005b8251811015610e9e57818181518110611cba57611cba612a99565b6020026020010151601a6000858481518110611cd857611cd8612a99565b6020908102919091018101516001600160a01b0316825281019190915260400160002055611d076001826129d8565b9050611c9f565b6005546001600160a01b03163314611d385760405162461bcd60e51b8152600401610abd90612901565b60088054911515600160a01b0260ff60a01b19909216919091179055565b6005546001600160a01b03163314611d805760405162461bcd60e51b8152600401610abd90612901565b6001600160a01b038116611de55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abd565b611c23816122d5565b6005546001600160a01b03163314611e185760405162461bcd60e51b8152600401610abd90612901565b80611e24574260095550565b600955565b6005546001600160a01b03163314611e535760405162461bcd60e51b8152600401610abd90612901565b6016805460ff1916911515919091179055565b6001600160a01b038316611ec85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abd565b6001600160a01b038216611f295760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fee5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610abd565b6001600160a01b0382166120505760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610abd565b6001600160a01b038316600090815260208190526040902054818110156120c85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610abd565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120ff9084906129d8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161214b91815260200190565b60405180910390a350505050565b600554600160a01b900460ff166121a95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610abd565b6005805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b03821661224c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610abd565b806002600082825461225e91906129d8565b90915550506001600160a01b0382166000908152602081905260408120805483929061228b9084906129d8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600554600160a01b900460ff16156123515760405162461bcd60e51b8152600401610abd906128d7565b6005805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121d93390565b6001600160a01b0382166123ec5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610abd565b6001600160a01b038216600090815260208190526040902054818110156124605760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610abd565b6001600160a01b038316600090815260208190526040812083830390556002805484929061248f908490612a31565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600082601f8301126124eb57600080fd5b813560206125006124fb836129b4565b612983565b80838252828201915082860187848660051b890101111561252057600080fd5b60005b8581101561253f57813584529284019290840190600101612523565b5090979650505050505050565b8035801515811461255c57600080fd5b919050565b60006020828403121561257357600080fd5b813561257e81612ac5565b9392505050565b60006020828403121561259757600080fd5b815161257e81612ac5565b600080604083850312156125b557600080fd5b82356125c081612ac5565b915060208301356125d081612ac5565b809150509250929050565b6000806000606084860312156125f057600080fd5b83356125fb81612ac5565b9250602084013561260b81612ac5565b929592945050506040919091013590565b6000806040838503121561262f57600080fd5b823561263a81612ac5565b91506126486020840161254c565b90509250929050565b6000806040838503121561266457600080fd5b823561266f81612ac5565b946020939093013593505050565b6000602080838503121561269057600080fd5b825167ffffffffffffffff8111156126a757600080fd5b8301601f810185136126b857600080fd5b80516126c66124fb826129b4565b80828252848201915084840188868560051b87010111156126e657600080fd5b600094505b838510156127125780516126fe81612ac5565b8352600194909401939185019185016126eb565b50979650505050505050565b6000806040838503121561273157600080fd5b823567ffffffffffffffff8082111561274957600080fd5b818501915085601f83011261275d57600080fd5b8135602061276d6124fb836129b4565b8083825282820191508286018a848660051b890101111561278d57600080fd5b600096505b848710156127b95780356127a581612ac5565b835260019690960195918301918301612792565b50965050860135925050808211156127d057600080fd5b506127dd858286016124da565b9150509250929050565b6000602082840312156127f957600080fd5b61257e8261254c565b60006020828403121561281457600080fd5b5035919050565b60006020828403121561282d57600080fd5b5051919050565b6000806040838503121561284757600080fd5b50508035926020909101359150565b60008060006060848603121561286b57600080fd5b505081359360208301359350604090920135919050565b600060208083528351808285015260005b818110156128af57858101830151858201604001528201612893565b818111156128c1576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602d908201527f596f7572206164647265737320646f6573206e6f742068617665207065726d6960408201526c39b9b4b7b7103a37903ab9b29760991b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156129ac576129ac612aaf565b604052919050565b600067ffffffffffffffff8211156129ce576129ce612aaf565b5060051b60200190565b600082198211156129eb576129eb612a83565b500190565b600082612a0d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a2c57612a2c612a83565b500290565b600082821015612a4357612a43612a83565b500390565b600181811c90821680612a5c57607f821691505b60208210811415612a7d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611c2357600080fdfea2646970667358221220d5b143de046275857dee0f7e74f625db7a25f3fff90e46303b0ca9c431efa8a864736f6c634300080700330000000000000000000000004cff01dbed00a5e95d705f96acf369f210c203c80000000000000000000000003d80dc30e716cf76c68c31c4c2ffd41da679459e0000000000000000000000001b7cb8fc659ec17c4bc1e7cdff13022308885437
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106104335760003560e01c80636b52035a11610236578063b88a802f1161013b578063de67d12d116100c3578063f35e4a6e11610087578063f35e4a6e14610983578063f9d7e22014610996578063fc5a5673146109a3578063fd8558db146109b6578063fec8af24146109bf57600080fd5b8063de67d12d14610907578063eae952611461091a578063ebabdd021461093a578063ef0710dc1461095d578063f2fde38b1461097057600080fd5b8063d38888571161010a578063d38888571461088c578063da229c0214610895578063dc988394146108a8578063dd51d433146108bb578063dd62ed3e146108ce57600080fd5b8063b88a802f1461083e578063bd13c11214610846578063cb03fb1e14610859578063d216294f1461087957600080fd5b806395d89b41116101be578063a44df4241161018d578063a44df424146107dc578063a457c2d7146107ef578063a67876e814610802578063a9059cbb14610822578063aa1a29721461083557600080fd5b806395d89b41146107ab5780639dc29fac146107b35780639de49127146107c65780639fc02c98146107cf57600080fd5b80638456cb59116102055780638456cb59146107635780638cb2c5d11461076b5780638da5cb5b1461077e5780638e6eafef1461078f578063947a36fb146107a257600080fd5b80636b52035a1461070c57806370a082311461071f578063715018a6146107485780637b678c2c1461075057600080fd5b80633dc8ea6b1161033c5780635a5a72ac116102c45780635feae415116102935780635feae415146106ad57806362da6dc0146106c057806366429dc1146106d357806366a95e6b146106e65780636a092e79146106f957600080fd5b80635a5a72ac1461064c5780635a7e19891461065f5780635b2a6a72146106885780635c975abb1461069b57600080fd5b806348cd4cb11161030b57806348cd4cb114610614578063491c1fee14610504578063503524831461061d578063503db69814610626578063517740cb1461063957600080fd5b80633dc8ea6b146105bc5780633ed34053146105e55780633f4ba83a146105f95780634762e1211461060157600080fd5b80631f9d705f116103bf5780632ec61c811161038e5780632ec61c8114610546578063313ce567146105665780633526bacb1461057557806336cc8c0b146105a057806339509351146105a957600080fd5b80631f9d705f1461050457806323b872dd14610517578063267e8ab61461052a5780632c4e722e1461053d57600080fd5b8063154c4bc911610406578063154c4bc9146104ac57806318160ddd146104b5578063190c26ef146104bd5780631aa16e70146104c65780631cae87e7146104ef57600080fd5b80630480e58b1461043857806306fdde03146104545780630700037d14610469578063095ea7b314610489575b600080fd5b610441600b5481565b6040519081526020015b60405180910390f35b61045c6109eb565b60405161044b9190612882565b610441610477366004612561565b60176020526000908152604090205481565b61049c610497366004612651565b610a7d565b604051901515815260200161044b565b61044160105481565b600254610441565b610441600a5481565b6104416104d4366004612561565b6001600160a01b03166000908152601b602052604090205490565b6105026104fd366004612856565b610a93565b005b610441610512366004612561565b610ad4565b61049c6105253660046125db565b610b8a565b610441610538366004612561565b610c34565b610441600d5481565b610441610554366004612561565b60196020526000908152604090205481565b6040516012815260200161044b565b600754610588906001600160a01b031681565b6040516001600160a01b03909116815260200161044b565b610441600f5481565b61049c6105b7366004612651565b610c78565b6104416105ca366004612561565b6001600160a01b031660009081526019602052604090205490565b60085461049c90600160a01b900460ff1681565b610502610cb4565b600654610588906001600160a01b031681565b61044160095481565b61044160145481565b610441610634366004612561565b610ce8565b610441610647366004612561565b610d16565b61050261065a36600461271e565b610e1a565b61044161066d366004612561565b6001600160a01b03166000908152601a602052604090205490565b610502610696366004612834565b610ea3565b600554600160a01b900460ff1661049c565b6105026106bb366004612834565b610ed8565b6105026106ce366004612561565b610f0d565b6105026106e136600461271e565b610f59565b6105026106f436600461261c565b610ff5565b6105026107073660046125a2565b61104a565b61044161071a366004612561565b61123b565b61044161072d366004612561565b6001600160a01b031660009081526020819052604090205490565b61050261129f565b61050261075e366004612561565b6112d3565b61050261131f565b610502610779366004612802565b611351565b6005546001600160a01b0316610588565b61050261079d3660046127e7565b611380565b610441600c5481565b61045c6113bd565b6105026107c1366004612651565b6113cc565b61044160125481565b60135461049c9060ff1681565b6104416107ea366004612561565b611405565b61049c6107fd366004612651565b61149f565b610441610810366004612561565b60186020526000908152604090205481565b61049c610830366004612651565b611538565b61044160155481565b610502611545565b610502610854366004612802565b611b2f565b610441610867366004612561565b601a6020526000908152604090205481565b61050261088736600461271e565b611b5e565b61044160115481565b6105026108a3366004612802565b611be7565b6105026108b6366004612561565b611c26565b6105026108c936600461271e565b611c72565b6104416108dc3660046125a2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600854610588906001600160a01b031681565b610441610928366004612561565b601b6020526000908152604090205481565b61049c610948366004612561565b601c6020526000908152604090205460ff1681565b61050261096b3660046127e7565b611d0e565b61050261097e366004612561565b611d56565b610502610991366004612802565b611dee565b60165461049c9060ff1681565b6105026109b13660046127e7565b611e29565b610441600e5481565b61049c6109cd366004612561565b6001600160a01b03166000908152601c602052604090205460ff1690565b6060600380546109fa90612a48565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2690612a48565b8015610a735780601f10610a4857610100808354040283529160200191610a73565b820191906000526020600020905b815481529060010190602001808311610a5657829003601f168201915b5050505050905090565b6000610a8a338484611e66565b50600192915050565b6005546001600160a01b03163314610ac65760405162461bcd60e51b8152600401610abd90612901565b60405180910390fd5b601092909255601155601255565b600854600090600160a01b900460ff161580610af957506008546001600160a01b0316155b15610b0657506000919050565b6008546040516370a0823160e01b81526001600160a01b038481166004830152909116906370a08231906024015b60206040518083038186803b158015610b4c57600080fd5b505afa158015610b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b84919061281b565b92915050565b6000610b97848484611f8a565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c1c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610abd565b610c298533858403611e66565b506001949350505050565b6000610c3f82611405565b6001600160a01b038316600090815260186020908152604080832054601790925290912054610c6e91906129d8565b610b8491906129d8565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a8a918590610caf9086906129d8565b611e66565b6005546001600160a01b03163314610cde5760405162461bcd60e51b8152600401610abd90612901565b610ce6612159565b565b6000610cf382610d16565b6001600160a01b038316600090815260186020526040902054610b8491906129d8565b6000600a54421015610d2a57506000919050565b600e54600a546001600160a01b0384166000908152601b60205260409020541015610d5757600a54610d71565b6001600160a01b0383166000908152601b60205260409020545b610d7b9042612a31565b600f5460075460405163f1d770c560e01b81526001600160a01b0387811660048301529091169063f1d770c5906024015b60206040518083038186803b158015610dc457600080fd5b505afa158015610dd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfc919061281b565b610e069190612a12565b610e109190612a12565b610b8491906129f0565b6005546001600160a01b03163314610e445760405162461bcd60e51b8152600401610abd90612901565b60005b8251811015610e9e57610e8c838281518110610e6557610e65612a99565b6020026020010151838381518110610e7f57610e7f612a99565b60200260200101516121f6565b610e976001826129d8565b9050610e47565b505050565b6005546001600160a01b03163314610ecd5760405162461bcd60e51b8152600401610abd90612901565b600e91909155600f55565b6005546001600160a01b03163314610f025760405162461bcd60e51b8152600401610abd90612901565b600c91909155600d55565b6005546001600160a01b03163314610f375760405162461bcd60e51b8152600401610abd90612901565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f835760405162461bcd60e51b8152600401610abd90612901565b60005b8251811015610e9e57818181518110610fa157610fa1612a99565b6020026020010151601b6000858481518110610fbf57610fbf612a99565b6020908102919091018101516001600160a01b0316825281019190915260400160002055610fee6001826129d8565b9050610f86565b6005546001600160a01b0316331461101f5760405162461bcd60e51b8152600401610abd90612901565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b336000908152601c602052604090205460ff166110795760405162461bcd60e51b8152600401610abd90612936565b600554600160a01b900460ff16156110a35760405162461bcd60e51b8152600401610abd906128d7565b6001600160a01b0382161561119157606460155460646110c39190612a31565b6110cc84611405565b6110d69190612a12565b6110e091906129f0565b6001600160a01b038316600090815260176020526040812080549091906111089084906129d8565b909155505060155460649061111d9082612a31565b61112684610d16565b6111309190612a12565b61113a91906129f0565b6001600160a01b038316600090815260186020526040812080549091906111629084906129d8565b90915550506001600160a01b0382166000908152601a602090815260408083204290819055601b909252909120555b6001600160a01b03811615611237576111a981611405565b6001600160a01b038216600090815260176020526040812080549091906111d19084906129d8565b909155506111e0905081610d16565b6001600160a01b038216600090815260186020526040812080549091906112089084906129d8565b90915550506001600160a01b0381166000908152601a602090815260408083204290819055601b909252909120555b5050565b600854600090600160a01b900460ff16158061126057506008546001600160a01b0316155b1561126d57506000919050565b60085460405163133f455b60e11b81526001600160a01b0384811660048301529091169063267e8ab690602401610b34565b6005546001600160a01b031633146112c95760405162461bcd60e51b8152600401610abd90612901565b610ce660006122d5565b6005546001600160a01b031633146112fd5760405162461bcd60e51b8152600401610abd90612901565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146113495760405162461bcd60e51b8152600401610abd90612901565b610ce6612327565b6005546001600160a01b0316331461137b5760405162461bcd60e51b8152600401610abd90612901565b600b55565b6005546001600160a01b031633146113aa5760405162461bcd60e51b8152600401610abd90612901565b6013805460ff1916911515919091179055565b6060600480546109fa90612a48565b336000908152601c602052604090205460ff166113fb5760405162461bcd60e51b8152600401610abd90612936565b611237828261238c565b600060095442101561141957506000919050565b600c546009546001600160a01b0384166000908152601a6020526040902054101561144657600954611460565b6001600160a01b0383166000908152601a60205260409020545b61146a9042612a31565b600d5460065460405163ea2c736b60e01b81526001600160a01b0387811660048301529091169063ea2c736b90602401610dac565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156115215760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610abd565b61152e3385858403611e66565b5060019392505050565b6000610a8a338484611f8a565b600554600160a01b900460ff161561156f5760405162461bcd60e51b8152600401610abd906128d7565b3360008181526017602090815260408083205460188352818420546019909352908320549093919290916115a290611405565b905060006115af33610d16565b905060006115bc33610ad4565b3360009081526017602090815260408083208390556018825280832083905560198252808320839055601a82528083204290819055601b9092528220559091508284611608888a6129d8565b61161291906129d8565b61161c91906129d8565b9050600b548161162b60025490565b61163591906129d8565b106116825760405162461bcd60e51b815260206004820152601e60248201527f4e6f206c6f6e6765722061626c6520746f206d696e7420746f6b656e732e00006044820152606401610abd565b600061168f6064836129f0565b6014546013549192509060ff1615611a7b5760075460405163f6697c8b60e01b815233600482015260009182916001600160a01b039091169063f6697c8b9060240160206040518083038186803b1580156116e957600080fd5b505afa1580156116fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611721919061281b565b11156117305750601254611842565b600754604051630c8f4b0d60e41b81523360048201526000916001600160a01b03169063c8f4b0d09060240160206040518083038186803b15801561177457600080fd5b505afa158015611788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ac919061281b565b11156117bb5750601154611842565b600754604051631c53a27b60e21b81523360048201526000916001600160a01b03169063714e89ec9060240160206040518083038186803b1580156117ff57600080fd5b505afa158015611813573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611837919061281b565b111561184257506010545b8181101561185b576118548183612a31565b9150611860565b600091505b60165460609060ff166119585760075460405163981fc62760e01b8152600060048201819052916001600160a01b03169063981fc62790602401602060405180830381600087803b1580156118b457600080fd5b505af11580156118c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ec9190612585565b90506001600160a01b03811615611952576040805160018082528183019092529060208083019080368337019050509150808260008151811061193157611931612a99565b60200260200101906001600160a01b031690816001600160a01b0316815250505b506119e5565b600760009054906101000a90046001600160a01b03166001600160a01b031663cac05ca96040518163ffffffff1660e01b815260040160006040518083038186803b1580156119a657600080fd5b505afa1580156119ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119e2919081019061267d565b90505b80516000906119f48587612a12565b6119fe91906129f0565b905060005b8251811015611a72578160196000858481518110611a2357611a23612a99565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000828254611a5a91906129d8565b90915550611a6b90506001826129d8565b9050611a03565b50505050611a7f565b5060005b60008488611a8e846064612a31565b611a989086612a12565b611aa291906129d8565b611aac91906129d8565b90508415611b1957600854604051632770a7eb60e21b8152336004820152602481018790526001600160a01b0390911690639dc29fac90604401600060405180830381600087803b158015611b0057600080fd5b505af1158015611b14573d6000803e3d6000fd5b505050505b611b2333826121f6565b50505050505050505050565b6005546001600160a01b03163314611b595760405162461bcd60e51b8152600401610abd90612901565b601455565b336000908152601c602052604090205460ff16611b8d5760405162461bcd60e51b8152600401610abd90612936565b60005b8251811015610e9e57611bd5838281518110611bae57611bae612a99565b6020026020010151838381518110611bc857611bc8612a99565b602002602001015161238c565b611be06001826129d8565b9050611b90565b6005546001600160a01b03163314611c115760405162461bcd60e51b8152600401610abd90612901565b80611c1d5742600a5550565b600a8190555b50565b6005546001600160a01b03163314611c505760405162461bcd60e51b8152600401610abd90612901565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611c9c5760405162461bcd60e51b8152600401610abd90612901565b60005b8251811015610e9e57818181518110611cba57611cba612a99565b6020026020010151601a6000858481518110611cd857611cd8612a99565b6020908102919091018101516001600160a01b0316825281019190915260400160002055611d076001826129d8565b9050611c9f565b6005546001600160a01b03163314611d385760405162461bcd60e51b8152600401610abd90612901565b60088054911515600160a01b0260ff60a01b19909216919091179055565b6005546001600160a01b03163314611d805760405162461bcd60e51b8152600401610abd90612901565b6001600160a01b038116611de55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abd565b611c23816122d5565b6005546001600160a01b03163314611e185760405162461bcd60e51b8152600401610abd90612901565b80611e24574260095550565b600955565b6005546001600160a01b03163314611e535760405162461bcd60e51b8152600401610abd90612901565b6016805460ff1916911515919091179055565b6001600160a01b038316611ec85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abd565b6001600160a01b038216611f295760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611fee5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610abd565b6001600160a01b0382166120505760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610abd565b6001600160a01b038316600090815260208190526040902054818110156120c85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610abd565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120ff9084906129d8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161214b91815260200190565b60405180910390a350505050565b600554600160a01b900460ff166121a95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610abd565b6005805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b03821661224c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610abd565b806002600082825461225e91906129d8565b90915550506001600160a01b0382166000908152602081905260408120805483929061228b9084906129d8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600554600160a01b900460ff16156123515760405162461bcd60e51b8152600401610abd906128d7565b6005805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121d93390565b6001600160a01b0382166123ec5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610abd565b6001600160a01b038216600090815260208190526040902054818110156124605760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610abd565b6001600160a01b038316600090815260208190526040812083830390556002805484929061248f908490612a31565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600082601f8301126124eb57600080fd5b813560206125006124fb836129b4565b612983565b80838252828201915082860187848660051b890101111561252057600080fd5b60005b8581101561253f57813584529284019290840190600101612523565b5090979650505050505050565b8035801515811461255c57600080fd5b919050565b60006020828403121561257357600080fd5b813561257e81612ac5565b9392505050565b60006020828403121561259757600080fd5b815161257e81612ac5565b600080604083850312156125b557600080fd5b82356125c081612ac5565b915060208301356125d081612ac5565b809150509250929050565b6000806000606084860312156125f057600080fd5b83356125fb81612ac5565b9250602084013561260b81612ac5565b929592945050506040919091013590565b6000806040838503121561262f57600080fd5b823561263a81612ac5565b91506126486020840161254c565b90509250929050565b6000806040838503121561266457600080fd5b823561266f81612ac5565b946020939093013593505050565b6000602080838503121561269057600080fd5b825167ffffffffffffffff8111156126a757600080fd5b8301601f810185136126b857600080fd5b80516126c66124fb826129b4565b80828252848201915084840188868560051b87010111156126e657600080fd5b600094505b838510156127125780516126fe81612ac5565b8352600194909401939185019185016126eb565b50979650505050505050565b6000806040838503121561273157600080fd5b823567ffffffffffffffff8082111561274957600080fd5b818501915085601f83011261275d57600080fd5b8135602061276d6124fb836129b4565b8083825282820191508286018a848660051b890101111561278d57600080fd5b600096505b848710156127b95780356127a581612ac5565b835260019690960195918301918301612792565b50965050860135925050808211156127d057600080fd5b506127dd858286016124da565b9150509250929050565b6000602082840312156127f957600080fd5b61257e8261254c565b60006020828403121561281457600080fd5b5035919050565b60006020828403121561282d57600080fd5b5051919050565b6000806040838503121561284757600080fd5b50508035926020909101359150565b60008060006060848603121561286b57600080fd5b505081359360208301359350604090920135919050565b600060208083528351808285015260005b818110156128af57858101830151858201604001528201612893565b818111156128c1576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252602d908201527f596f7572206164647265737320646f6573206e6f742068617665207065726d6960408201526c39b9b4b7b7103a37903ab9b29760991b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156129ac576129ac612aaf565b604052919050565b600067ffffffffffffffff8211156129ce576129ce612aaf565b5060051b60200190565b600082198211156129eb576129eb612a83565b500190565b600082612a0d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a2c57612a2c612a83565b500290565b600082821015612a4357612a43612a83565b500390565b600181811c90821680612a5c57607f821691505b60208210811415612a7d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611c2357600080fdfea2646970667358221220d5b143de046275857dee0f7e74f625db7a25f3fff90e46303b0ca9c431efa8a864736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004cff01dbed00a5e95d705f96acf369f210c203c80000000000000000000000003d80dc30e716cf76c68c31c4c2ffd41da679459e0000000000000000000000001b7cb8fc659ec17c4bc1e7cdff13022308885437
-----Decoded View---------------
Arg [0] : noundlesAddress (address): 0x4cFF01DBed00A5E95D705F96ACF369F210C203c8
Arg [1] : evilNoundlesAddress (address): 0x3D80dC30e716cf76C68c31c4c2fFd41dA679459E
Arg [2] : ogRainbowsAddress (address): 0x1b7CB8Fc659Ec17C4BC1e7cDFF13022308885437
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004cff01dbed00a5e95d705f96acf369f210c203c8
Arg [1] : 0000000000000000000000003d80dc30e716cf76c68c31c4c2ffd41da679459e
Arg [2] : 0000000000000000000000001b7cb8fc659ec17c4bc1e7cdff13022308885437
Deployed Bytecode Sourcemap
22143:14413:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22620:49;;;;;;;;;7739:25:1;;;7727:2;7712:18;22620:49:0;;;;;;;;11197:100;;;:::i;:::-;;;;;;;:::i;23400:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;13364:169;;;;;;:::i;:::-;;:::i;:::-;;;6847:14:1;;6840:22;6822:41;;6810:2;6795:18;13364:169:0;6682:187:1;22961:41:0;;;;;;12317:108;12405:12;;12317:108;;22532:34;;;;;;29467:128;;;;;;:::i;:::-;-1:-1:-1;;;;;29562:25:0;29535:7;29562:25;;;:19;:25;;;;;;;29467:128;26303:221;;;;;;:::i;:::-;;:::i;:::-;;35924:302;;;;;;:::i;:::-;;:::i;14015:492::-;;;;;;:::i;:::-;;:::i;28779:163::-;;;;;;:::i;:::-;;:::i;22790:42::-;;;;;;23507:46;;;;;;:::i;:::-;;;;;;;;;;;;;;12159:93;;;12242:2;14941:36:1;;14929:2;14914:18;12159:93:0;14799:184:1;22252:41:0;;;;;-1:-1:-1;;;;;22252:41:0;;;;;;-1:-1:-1;;;;;6359:32:1;;;6341:51;;6329:2;6314:18;22252:41:0;6195:203:1;22886:42:0;;;;;;14916:215;;;;;;:::i;:::-;;:::i;29154:121::-;;;;;;:::i;:::-;-1:-1:-1;;;;;29250:17:0;29223:7;29250:17;;;:11;:17;;;;;;;29154:121;22418:45;;;;;-1:-1:-1;;;22418:45:0;;;;;;25008:51;;;:::i;22212:33::-;;;;;-1:-1:-1;;;;;22212:33:0;;;22500:25;;;;;;23177:37;;;;;;28983:163;;;;;;:::i;:::-;;:::i;35428:488::-;;;;;;:::i;:::-;;:::i;28151:204::-;;;;;;:::i;:::-;;:::i;29316:110::-;;;;;;:::i;:::-;-1:-1:-1;;;;;29402:16:0;29375:7;29402:16;;;:10;:16;;;;;;;29316:110;26561:168;;;;;;:::i;:::-;;:::i;1971:86::-;2042:7;;-1:-1:-1;;;2042:7:0;;;;1971:86;;25886:141;;;;;;:::i;:::-;;:::i;27182:148::-;;;;;;:::i;:::-;;:::i;29921:241::-;;;;;;:::i;:::-;;:::i;27380:128::-;;;;;;:::i;:::-;;:::i;30409:791::-;;;;;;:::i;:::-;;:::i;36234:319::-;;;;;;:::i;:::-;;:::i;12488:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;12589:18:0;12562:7;12589:18;;;;;;;;;;;;12488:127;4806:94;;;:::i;26973:142::-;;;;;;:::i;:::-;;:::i;24933:47::-;;;:::i;30197:96::-;;;;;;:::i;:::-;;:::i;4155:87::-;4228:6;;-1:-1:-1;;;;;4228:6:0;4155:87;;25585:94;;;;;;:::i;:::-;;:::i;22743:40::-;;;;;;11416:104;;;:::i;27995:110::-;;;;;;:::i;:::-;;:::i;23057:42::-;;;;;;23130:40;;;;;;;;;34977:412;;;;;;:::i;:::-;;:::i;15634:413::-;;;;;;:::i;:::-;;:::i;23449:51::-;;;;;;:::i;:::-;;;;;;;;;;;;;;12828:175;;;;;;:::i;:::-;;:::i;23248:37::-;;;;;;31236:3702;;;:::i;26063:86::-;;;;;;:::i;:::-;;:::i;23604:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;27727:216;;;;;;:::i;:::-;;:::i;23009:41::-;;;;;;25331:212;;;;;;:::i;:::-;;:::i;26779:130::-;;;;;;:::i;:::-;;:::i;29647:223::-;;;;;;:::i;:::-;;:::i;13066:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;13182:18:0;;;13155:7;13182:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13066:151;22300:49;;;;;-1:-1:-1;;;;;22300:49:0;;;23656:54;;;;;;:::i;:::-;;;;;;;;;;;;;;23743:46;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25733:116;;;;;;:::i;:::-;;:::i;5055:192::-;;;;;;:::i;:::-;;:::i;25096:185::-;;;;;;:::i;:::-;;:::i;23312:40::-;;;;;;;;;26182:75;;;;;;:::i;:::-;;:::i;22839:40::-;;;;;;27561:114;;;;;;:::i;:::-;-1:-1:-1;;;;;27647:20:0;27623:4;27647:20;;;:14;:20;;;;;;;;;27561:114;11197:100;11251:13;11284:5;11277:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11197:100;:::o;13364:169::-;13447:4;13464:39;705:10;13487:7;13496:6;13464:8;:39::i;:::-;-1:-1:-1;13521:4:0;13364:169;;;;:::o;26303:221::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;;;;;;;;;26406:21:::1;:29:::0;;;;26446:21:::1;:29:::0;26486:22:::1;:30:::0;26303:221::o;35924:302::-;36053:26;;35988:7;;-1:-1:-1;;;36053:26:0;;;;:35;;:78;;-1:-1:-1;36100:16:0;;-1:-1:-1;;;;;36100:16:0;36092:39;36053:78;36050:117;;;-1:-1:-1;36154:1:0;;35924:302;-1:-1:-1;35924:302:0:o;36050:117::-;36186:16;;:32;;-1:-1:-1;;;36186:32:0;;-1:-1:-1;;;;;6359:32:1;;;36186::0;;;6341:51:1;36186:16:0;;;;:26;;6314:18:1;;36186:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36179:39;35924:302;-1:-1:-1;;35924:302:0:o;14015:492::-;14155:4;14172:36;14182:6;14190:9;14201:6;14172:9;:36::i;:::-;-1:-1:-1;;;;;14248:19:0;;14221:24;14248:19;;;:11;:19;;;;;;;;705:10;14248:33;;;;;;;;14300:26;;;;14292:79;;;;-1:-1:-1;;;14292:79:0;;11297:2:1;14292:79:0;;;11279:21:1;11336:2;11316:18;;;11309:30;11375:34;11355:18;;;11348:62;-1:-1:-1;;;11426:18:1;;;11419:38;11474:19;;14292:79:0;11095:404:1;14292:79:0;14407:57;14416:6;705:10;14457:6;14438:16;:25;14407:8;:57::i;:::-;-1:-1:-1;14495:4:0;;14015:492;-1:-1:-1;;;;14015:492:0:o;28779:163::-;28842:7;28910:24;28929:4;28910:18;:24::i;:::-;-1:-1:-1;;;;;28885:22:0;;;;;;:16;:22;;;;;;;;;28869:7;:13;;;;;;;:38;;28885:22;28869:38;:::i;:::-;:65;;;;:::i;14916:215::-;705:10;15004:4;15053:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15053:34:0;;;;;;;;;;15004:4;;15021:80;;15044:7;;15053:47;;15090:10;;15053:47;:::i;:::-;15021:8;:80::i;25008:51::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;25046:10:::1;:8;:10::i;:::-;25008:51::o:0;28983:163::-;29055:7;29107:31;29133:4;29107:25;:31::i;:::-;-1:-1:-1;;;;;29082:22:0;;;;;;:16;:22;;;;;;:56;;;;:::i;35428:488::-;35497:7;35592:19;;35574:15;:37;35571:76;;;-1:-1:-1;35634:1:0;;35428:488;-1:-1:-1;35428:488:0:o;35571:76::-;35891:17;;35801:19;;-1:-1:-1;;;;;35772:25:0;;;;;;:19;:25;;;;;;:48;;:98;;35851:19;;35772:98;;;-1:-1:-1;;;;;35823:25:0;;;;;;:19;:25;;;;;;35772:98;35753:118;;:15;:118;:::i;:::-;35720:13;;35666:12;;:35;;-1:-1:-1;;;35666:35:0;;-1:-1:-1;;;;;6359:32:1;;;35666:35:0;;;6341:51:1;35666:12:0;;;;:29;;6314:18:1;;35666:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;;;;:::i;:::-;:206;;;;:::i;:::-;:242;;;;:::i;28151:204::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;28255:9:::1;28251:97;28274:5;:12;28270:1;:16;28251:97;;;28310:26;28316:5;28322:1;28316:8;;;;;;;;:::i;:::-;;;;;;;28326:6;28333:1;28326:9;;;;;;;;:::i;:::-;;;;;;;28310:5;:26::i;:::-;28288:6;28293:1;28288:6:::0;::::1;:::i;:::-;;;28251:97;;;;28151:204:::0;;:::o;26561:168::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;26660:17:::1;:29:::0;;;;26700:13:::1;:21:::0;26561:168::o;25886:141::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;25976:8:::1;:20:::0;;;;26007:4:::1;:12:::0;25886:141::o;27182:148::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;27267:16:::1;:55:::0;;-1:-1:-1;;;;;;27267:55:0::1;-1:-1:-1::0;;;;;27267:55:0;;;::::1;::::0;;;::::1;::::0;;27182:148::o;29921:241::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;30039:9:::1;30035:120;30058:9;:16;30054:1;:20;30035:120;;;30134:6;30141:1;30134:9;;;;;;;;:::i;:::-;;;;;;;30098:19;:33;30118:9;30128:1;30118:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;30098:33:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;30098:33:0;:45;30076:6:::1;30081:1;30076:6:::0;::::1;:::i;:::-;;;30035:120;;27380:128:::0;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27466:25:0;;;::::1;;::::0;;;:14:::1;:25;::::0;;;;:34;;-1:-1:-1;;27466:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27380:128::o;30409:791::-;24175:10;24160:26;;;;:14;:26;;;;;;;;24152:84;;;;-1:-1:-1;;;24152:84:0;;;;;;;:::i;:::-;2042:7;;-1:-1:-1;;;2042:7:0;;;;2296:9:::1;2288:38;;;;-1:-1:-1::0;;;2288:38:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30546:19:0;::::2;::::0;30543:354:::2;;30660:3;30646:9;;30640:3;:15;;;;:::i;:::-;30611:25;30630:5;30611:18;:25::i;:::-;:45;;;;:::i;:::-;30610:53;;;;:::i;:::-;-1:-1:-1::0;;;;;30581:14:0;::::2;;::::0;;;:7:::2;:14;::::0;;;;:82;;:14;;;:82:::2;::::0;;;::::2;:::i;:::-;::::0;;;-1:-1:-1;;30750:9:0::2;::::0;30764:3:::2;::::0;30744:15:::2;::::0;30764:3;30744:15:::2;:::i;:::-;30708:32;30734:5;30708:25;:32::i;:::-;:52;;;;:::i;:::-;30707:60;;;;:::i;:::-;-1:-1:-1::0;;;;;30678:23:0;::::2;;::::0;;;:16:::2;:23;::::0;;;;:89;;:23;;;:89:::2;::::0;;;::::2;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;30782:17:0;::::2;;::::0;;;:10:::2;:17;::::0;;;;;;;30811:15:::2;30782:44:::0;;;;30841:19:::2;:26:::0;;;;;;:44;30543:354:::2;-1:-1:-1::0;;;;;30912:17:0;::::2;::::0;30909:284:::2;;30972:23;30991:3;30972:18;:23::i;:::-;-1:-1:-1::0;;;;;30945:12:0;::::2;;::::0;;;:7:::2;:12;::::0;;;;:50;;:12;;;:50:::2;::::0;;;::::2;:::i;:::-;::::0;;;-1:-1:-1;31037:30:0::2;::::0;-1:-1:-1;31063:3:0;31037:25:::2;:30::i;:::-;-1:-1:-1::0;;;;;31010:21:0;::::2;;::::0;;;:16:::2;:21;::::0;;;;:57;;:21;;;:57:::2;::::0;;;::::2;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;31082:15:0;::::2;;::::0;;;:10:::2;:15;::::0;;;;;;;31109::::2;31082:42:::0;;;;31139:19:::2;:24:::0;;;;;;:42;30909:284:::2;30409:791:::0;;:::o;36234:319::-;36372:26;;36307:7;;-1:-1:-1;;;36372:26:0;;;;:35;;:78;;-1:-1:-1;36419:16:0;;-1:-1:-1;;;;;36419:16:0;36411:39;36372:78;36369:117;;;-1:-1:-1;36473:1:0;;36234:319;-1:-1:-1;36234:319:0:o;36369:117::-;36505:16;;:40;;-1:-1:-1;;;36505:40:0;;-1:-1:-1;;;;;6359:32:1;;;36505:40:0;;;6341:51:1;36505:16:0;;;;:34;;6314:18:1;;36505:40:0;6195:203:1;4806:94:0;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;4871:21:::1;4889:1;4871:9;:21::i;26973:142::-:0;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;27060:12:::1;:47:::0;;-1:-1:-1;;;;;;27060:47:0::1;-1:-1:-1::0;;;;;27060:47:0;;;::::1;::::0;;;::::1;::::0;;26973:142::o;24933:47::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;24969:8:::1;:6;:8::i;30197:96::-:0;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;30265:13:::1;:20:::0;30197:96::o;25585:94::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;25650:15:::1;:21:::0;;-1:-1:-1;;25650:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25585:94::o;11416:104::-;11472:13;11505:7;11498:14;;;;;:::i;27995:110::-;24175:10;24160:26;;;;:14;:26;;;;;;;;24152:84;;;;-1:-1:-1;;;24152:84:0;;;;;;;:::i;:::-;28078:19:::1;28084:4;28090:6;28078:5;:19::i;34977:412::-:0;35039:7;35134:10;;35116:15;:28;35113:67;;;-1:-1:-1;35167:1:0;;34977:412;-1:-1:-1;34977:412:0:o;35113:67::-;35373:8;;35310:10;;-1:-1:-1;;;;;35290:16:0;;;;;;:10;:16;;;;;;:30;;:62;;35342:10;;35290:62;;;-1:-1:-1;;;;;35323:16:0;;;;;;:10;:16;;;;;;35290:62;35271:82;;:15;:82;:::i;:::-;35247:4;;35199:8;;:29;;-1:-1:-1;;;35199:29:0;;-1:-1:-1;;;;;6359:32:1;;;35199:29:0;;;6341:51:1;35199:8:0;;;;:23;;6314:18:1;;35199:29:0;6195:203:1;15634:413:0;705:10;15727:4;15771:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15771:34:0;;;;;;;;;;15824:35;;;;15816:85;;;;-1:-1:-1;;;15816:85:0;;14053:2:1;15816:85:0;;;14035:21:1;14092:2;14072:18;;;14065:30;14131:34;14111:18;;;14104:62;-1:-1:-1;;;14182:18:1;;;14175:35;14227:19;;15816:85:0;13851:401:1;15816:85:0;15937:67;705:10;15960:7;15988:15;15969:16;:34;15937:8;:67::i;:::-;-1:-1:-1;16035:4:0;;15634:413;-1:-1:-1;;;15634:413:0:o;12828:175::-;12914:4;12931:42;705:10;12955:9;12966:6;12931:9;:42::i;31236:3702::-;2042:7;;-1:-1:-1;;;2042:7:0;;;;2296:9;2288:38;;;;-1:-1:-1;;;2288:38:0;;;;;;;:::i;:::-;31372:10:::1;31341:18;31364:19:::0;;;:7:::1;:19;::::0;;;;;;;;31417:16:::1;:28:::0;;;;;;31479:11:::1;:23:::0;;;;;;;31364:19;;31417:28;;31479:23;;31578:30:::1;::::0;:18:::1;:30::i;:::-;31544:64;;31619:31;31653:37;31679:10;31653:25;:37::i;:::-;31619:71;;31701:25;31735:32;31756:10;31735:20;:32::i;:::-;31819:10;31842:1;31811:19:::0;;;:7:::1;:19;::::0;;;;;;;:32;;;31854:16:::1;:28:::0;;;;;:32;;;31897:11:::1;:23:::0;;;;;:32;;;31971:10:::1;:22:::0;;;;;32005:15:::1;31971:49:::0;;;;32031:19:::1;:31:::0;;;;;:49;31701:66;;-1:-1:-1;32205:23:0;32186:16;32158:25:::1;32171:12:::0;32158:10;:25:::1;:::i;:::-;:44;;;;:::i;:::-;:70;;;;:::i;:::-;32124:104;;32330:13;;32304:23;32288:13;12405:12:::0;;;12317:108;32288:13:::1;:39;;;;:::i;:::-;:55;32280:98;;;::::0;-1:-1:-1;;;32280:98:0;;12067:2:1;32280:98:0::1;::::0;::::1;12049:21:1::0;12106:2;12086:18;;;12079:30;12145:32;12125:18;;;12118:60;12195:18;;32280:98:0::1;11865:354:1::0;32280:98:0::1;32434:15;32452:29;32478:3;32452:23:::0;:29:::1;:::i;:::-;32575:15;::::0;32642::::1;::::0;32434:47;;-1:-1:-1;32575:15:0;32642::::1;;32639:1826;;;32776:12;::::0;:40:::1;::::0;-1:-1:-1;;;32776:40:0;;32805:10:::1;32776:40;::::0;::::1;6341:51:1::0;32675:22:0::1;::::0;;;-1:-1:-1;;;;;32776:12:0;;::::1;::::0;:28:::1;::::0;6314:18:1;;32776:40:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;32773:372;;;-1:-1:-1::0;32857:22:0::1;::::0;32773:372:::1;;;32903:12;::::0;:39:::1;::::0;-1:-1:-1;;;32903:39:0;;32931:10:::1;32903:39;::::0;::::1;6341:51:1::0;32945:1:0::1;::::0;-1:-1:-1;;;;;32903:12:0::1;::::0;:27:::1;::::0;6314:18:1;;32903:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;32900:245;;;-1:-1:-1::0;32983:21:0::1;::::0;32900:245:::1;;;33028:12;::::0;:39:::1;::::0;-1:-1:-1;;;33028:39:0;;33056:10:::1;33028:39;::::0;::::1;6341:51:1::0;33070:1:0::1;::::0;-1:-1:-1;;;;;33028:12:0::1;::::0;:27:::1;::::0;6314:18:1;;33028:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;33025:120;;;-1:-1:-1::0;33108:21:0::1;::::0;33025:120:::1;33181:25;33164:14;:42;33161:192;;;33226:43;33255:14:::0;33226:43;::::1;:::i;:::-;;;33161:192;;;33336:1;33308:29;;33161:192;33497:11;::::0;33402:33:::1;::::0;33497:11:::1;;33494:410;;33562:12;::::0;:44:::1;::::0;-1:-1:-1;;;33562:44:0;;33537:22:::1;33562:44;::::0;::::1;7739:25:1::0;;;33537:22:0;-1:-1:-1;;;;;33562:12:0::1;::::0;:41:::1;::::0;7712:18:1;;33562:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33537:69:::0;-1:-1:-1;;;;;;33630:28:0;::::1;::::0;33627:169:::1;;33701:16;::::0;;33715:1:::1;33701:16:::0;;;;;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33701:16:0::1;33682:35;;33762:14;33740:16;33757:1;33740:19;;;;;;;;:::i;:::-;;;;;;:36;-1:-1:-1::0;;;;;33740:36:0::1;;;-1:-1:-1::0;;;;;33740:36:0::1;;;::::0;::::1;33627:169;33518:293;33494:410;;;33853:12;;;;;;;;;-1:-1:-1::0;;;;;33853:12:0::1;-1:-1:-1::0;;;;;33853:33:0::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;33853:35:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;33834:54;;33494:410;34065:23:::0;;33994:28:::1;::::0;34026:35:::1;34036:25:::0;34026:7;:35:::1;:::i;:::-;34025:63;;;;:::i;:::-;33994:94;;34180:14;34176:162;34205:16;:23;34196:6;:32;34176:162;;;34302:20;34261:11;:37;34273:16;34290:6;34273:24;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;34261:37:0::1;-1:-1:-1::0;;;;;34261:37:0::1;;;;;;;;;;;;;:61;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;34230:11:0::1;::::0;-1:-1:-1;34240:1:0::1;34230:11:::0;::::1;:::i;:::-;;;34176:162;;;;32658:1691;;;32639:1826;;;-1:-1:-1::0;34452:1:0::1;32639:1826;34557:20;34643:17:::0;34628:12;34592:31:::1;34598:25:::0;34592:3:::1;:31;:::i;:::-;34581:43;::::0;:7;:43:::1;:::i;:::-;34580:60;;;;:::i;:::-;:80;;;;:::i;:::-;34557:103:::0;-1:-1:-1;34746:21:0;;34743:104:::1;;34783:16;::::0;:52:::1;::::0;-1:-1:-1;;;34783:52:0;;34805:10:::1;34783:52;::::0;::::1;6577:51:1::0;6644:18;;;6637:34;;;-1:-1:-1;;;;;34783:16:0;;::::1;::::0;:21:::1;::::0;6550:18:1;;34783:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34743:104;34899:31;34905:10;34917:12;34899:5;:31::i;:::-;31282:3656;;;;;;;;;;31236:3702::o:0;26063:86::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;26124:15:::1;:22:::0;26063:86::o;27727:216::-;24175:10;24160:26;;;;:14;:26;;;;;;;;24152:84;;;;-1:-1:-1;;;24152:84:0;;;;;;;:::i;:::-;27843:9:::1;27839:97;27862:5;:12;27858:1;:16;27839:97;;;27898:26;27904:5;27910:1;27904:8;;;;;;;;:::i;:::-;;;;;;;27914:6;27921:1;27914:9;;;;;;;;:::i;:::-;;;;;;;27898:5;:26::i;:::-;27876:6;27881:1;27876:6:::0;::::1;:::i;:::-;;;27839:97;;25331:212:::0;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;25407:8;25404:132:::1;;25453:15;25431:19;:37:::0;25331:212;:::o;25404:132::-:1;25499:19;:25:::0;;;25404:132:::1;25331:212:::0;:::o;26779:130::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;26862:8:::1;:39:::0;;-1:-1:-1;;;;;;26862:39:0::1;-1:-1:-1::0;;;;;26862:39:0;;;::::1;::::0;;;::::1;::::0;;26779:130::o;29647:223::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;29756:9:::1;29752:111;29775:9;:16;29771:1;:20;29752:111;;;29842:6;29849:1;29842:9;;;;;;;;:::i;:::-;;;;;;;29815:10;:24;29826:9;29836:1;29826:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;29815:24:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;29815:24:0;:36;29793:6:::1;29798:1;29793:6:::0;::::1;:::i;:::-;;;29752:111;;25733:116:::0;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;25809:26:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;25809:32:0::1;-1:-1:-1::0;;;;25809:32:0;;::::1;::::0;;;::::1;::::0;;25733:116::o;5055:192::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5144:22:0;::::1;5136:73;;;::::0;-1:-1:-1;;;5136:73:0;;9735:2:1;5136:73:0::1;::::0;::::1;9717:21:1::0;9774:2;9754:18;;;9747:30;9813:34;9793:18;;;9786:62;-1:-1:-1;;;9864:18:1;;;9857:36;9910:19;;5136:73:0::1;9533:402:1::0;5136:73:0::1;5220:19;5230:8;5220:9;:19::i;25096:185::-:0;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;25163:8;25160:114:::1;;25200:15;25187:10;:28:::0;25331:212;:::o;25160:114::-:1;25246:10;:16:::0;25096:185::o;26182:75::-;4228:6;;-1:-1:-1;;;;;4228:6:0;705:10;4375:23;4367:68;;;;-1:-1:-1;;;4367:68:0;;;;;;;:::i;:::-;26236:11:::1;:18:::0;;-1:-1:-1;;26236:18:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26182:75::o;19318:380::-;-1:-1:-1;;;;;19454:19:0;;19446:68;;;;-1:-1:-1;;;19446:68:0;;13648:2:1;19446:68:0;;;13630:21:1;13687:2;13667:18;;;13660:30;13726:34;13706:18;;;13699:62;-1:-1:-1;;;13777:18:1;;;13770:34;13821:19;;19446:68:0;13446:400:1;19446:68:0;-1:-1:-1;;;;;19533:21:0;;19525:68;;;;-1:-1:-1;;;19525:68:0;;10142:2:1;19525:68:0;;;10124:21:1;10181:2;10161:18;;;10154:30;10220:34;10200:18;;;10193:62;-1:-1:-1;;;10271:18:1;;;10264:32;10313:19;;19525:68:0;9940:398:1;19525:68:0;-1:-1:-1;;;;;19606:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19658:32;;7739:25:1;;;19658:32:0;;7712:18:1;19658:32:0;;;;;;;19318:380;;;:::o;16537:733::-;-1:-1:-1;;;;;16677:20:0;;16669:70;;;;-1:-1:-1;;;16669:70:0;;12828:2:1;16669:70:0;;;12810:21:1;12867:2;12847:18;;;12840:30;12906:34;12886:18;;;12879:62;-1:-1:-1;;;12957:18:1;;;12950:35;13002:19;;16669:70:0;12626:401:1;16669:70:0;-1:-1:-1;;;;;16758:23:0;;16750:71;;;;-1:-1:-1;;;16750:71:0;;8579:2:1;16750:71:0;;;8561:21:1;8618:2;8598:18;;;8591:30;8657:34;8637:18;;;8630:62;-1:-1:-1;;;8708:18:1;;;8701:33;8751:19;;16750:71:0;8377:399:1;16750:71:0;-1:-1:-1;;;;;16918:17:0;;16894:21;16918:17;;;;;;;;;;;16954:23;;;;16946:74;;;;-1:-1:-1;;;16946:74:0;;10545:2:1;16946:74:0;;;10527:21:1;10584:2;10564:18;;;10557:30;10623:34;10603:18;;;10596:62;-1:-1:-1;;;10674:18:1;;;10667:36;10720:19;;16946:74:0;10343:402:1;16946:74:0;-1:-1:-1;;;;;17056:17:0;;;:9;:17;;;;;;;;;;;17076:22;;;17056:42;;17120:20;;;;;;;;:30;;17092:6;;17056:9;17120:30;;17092:6;;17120:30;:::i;:::-;;;;;;;;17185:9;-1:-1:-1;;;;;17168:35:0;17177:6;-1:-1:-1;;;;;17168:35:0;;17196:6;17168:35;;;;7739:25:1;;7727:2;7712:18;;7585:185;17168:35:0;;;;;;;;16658:612;16537:733;;;:::o;3030:120::-;2042:7;;-1:-1:-1;;;2042:7:0;;;;2566:41;;;;-1:-1:-1;;;2566:41:0;;8983:2:1;2566:41:0;;;8965:21:1;9022:2;9002:18;;;8995:30;-1:-1:-1;;;9041:18:1;;;9034:50;9101:18;;2566:41:0;8781:344:1;2566:41:0;3089:7:::1;:15:::0;;-1:-1:-1;;;;3089:15:0::1;::::0;;3120:22:::1;705:10:::0;3129:12:::1;3120:22;::::0;-1:-1:-1;;;;;6359:32:1;;;6341:51;;6329:2;6314:18;3120:22:0::1;;;;;;;3030:120::o:0;17557:399::-;-1:-1:-1;;;;;17641:21:0;;17633:65;;;;-1:-1:-1;;;17633:65:0;;14459:2:1;17633:65:0;;;14441:21:1;14498:2;14478:18;;;14471:30;14537:33;14517:18;;;14510:61;14588:18;;17633:65:0;14257:355:1;17633:65:0;17789:6;17773:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;17806:18:0;;:9;:18;;;;;;;;;;:28;;17828:6;;17806:9;:28;;17828:6;;17806:28;:::i;:::-;;;;-1:-1:-1;;17850:37:0;;7739:25:1;;;-1:-1:-1;;;;;17850:37:0;;;17867:1;;17850:37;;7727:2:1;7712:18;17850:37:0;;;;;;;30409:791;;:::o;5255:173::-;5330:6;;;-1:-1:-1;;;;;5347:17:0;;;-1:-1:-1;;;;;;5347:17:0;;;;;;;5380:40;;5330:6;;;5347:17;5330:6;;5380:40;;5311:16;;5380:40;5300:128;5255:173;:::o;2771:118::-;2042:7;;-1:-1:-1;;;2042:7:0;;;;2296:9;2288:38;;;;-1:-1:-1;;;2288:38:0;;;;;;;:::i;:::-;2831:7:::1;:14:::0;;-1:-1:-1;;;;2831:14:0::1;-1:-1:-1::0;;;2831:14:0::1;::::0;;2861:20:::1;2868:12;705:10:::0;;625:98;18289:591;-1:-1:-1;;;;;18373:21:0;;18365:67;;;;-1:-1:-1;;;18365:67:0;;12426:2:1;18365:67:0;;;12408:21:1;12465:2;12445:18;;;12438:30;12504:34;12484:18;;;12477:62;-1:-1:-1;;;12555:18:1;;;12548:31;12596:19;;18365:67:0;12224:397:1;18365:67:0;-1:-1:-1;;;;;18532:18:0;;18507:22;18532:18;;;;;;;;;;;18569:24;;;;18561:71;;;;-1:-1:-1;;;18561:71:0;;9332:2:1;18561:71:0;;;9314:21:1;9371:2;9351:18;;;9344:30;9410:34;9390:18;;;9383:62;-1:-1:-1;;;9461:18:1;;;9454:32;9503:19;;18561:71:0;9130:398:1;18561:71:0;-1:-1:-1;;;;;18668:18:0;;:9;:18;;;;;;;;;;18689:23;;;18668:44;;18734:12;:22;;18706:6;;18668:9;18734:22;;18706:6;;18734:22;:::i;:::-;;;;-1:-1:-1;;18774:37:0;;7739:25:1;;;18800:1:0;;-1:-1:-1;;;;;18774:37:0;;;;;7727:2:1;7712:18;18774:37:0;;;;;;;28251:97:::1;28151:204:::0;;:::o;14:673:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:163;509:2;506:1;503:9;495:163;;;566:17;;554:30;;604:12;;;;636;;;;527:1;520:9;495:163;;;-1:-1:-1;676:5:1;;14:673;-1:-1:-1;;;;;;;14:673:1:o;692:160::-;757:20;;813:13;;806:21;796:32;;786:60;;842:1;839;832:12;786:60;692:160;;;:::o;857:247::-;916:6;969:2;957:9;948:7;944:23;940:32;937:52;;;985:1;982;975:12;937:52;1024:9;1011:23;1043:31;1068:5;1043:31;:::i;:::-;1093:5;857:247;-1:-1:-1;;;857:247:1:o;1109:251::-;1179:6;1232:2;1220:9;1211:7;1207:23;1203:32;1200:52;;;1248:1;1245;1238:12;1200:52;1280:9;1274:16;1299:31;1324:5;1299:31;:::i;1365:388::-;1433:6;1441;1494:2;1482:9;1473:7;1469:23;1465:32;1462:52;;;1510:1;1507;1500:12;1462:52;1549:9;1536:23;1568:31;1593:5;1568:31;:::i;:::-;1618:5;-1:-1:-1;1675:2:1;1660:18;;1647:32;1688:33;1647:32;1688:33;:::i;:::-;1740:7;1730:17;;;1365:388;;;;;:::o;1758:456::-;1835:6;1843;1851;1904:2;1892:9;1883:7;1879:23;1875:32;1872:52;;;1920:1;1917;1910:12;1872:52;1959:9;1946:23;1978:31;2003:5;1978:31;:::i;:::-;2028:5;-1:-1:-1;2085:2:1;2070:18;;2057:32;2098:33;2057:32;2098:33;:::i;:::-;1758:456;;2150:7;;-1:-1:-1;;;2204:2:1;2189:18;;;;2176:32;;1758:456::o;2219:315::-;2284:6;2292;2345:2;2333:9;2324:7;2320:23;2316:32;2313:52;;;2361:1;2358;2351:12;2313:52;2400:9;2387:23;2419:31;2444:5;2419:31;:::i;:::-;2469:5;-1:-1:-1;2493:35:1;2524:2;2509:18;;2493:35;:::i;:::-;2483:45;;2219:315;;;;;:::o;2539:::-;2607:6;2615;2668:2;2656:9;2647:7;2643:23;2639:32;2636:52;;;2684:1;2681;2674:12;2636:52;2723:9;2710:23;2742:31;2767:5;2742:31;:::i;:::-;2792:5;2844:2;2829:18;;;;2816:32;;-1:-1:-1;;;2539:315:1:o;2859:967::-;2954:6;2985:2;3028;3016:9;3007:7;3003:23;2999:32;2996:52;;;3044:1;3041;3034:12;2996:52;3077:9;3071:16;3110:18;3102:6;3099:30;3096:50;;;3142:1;3139;3132:12;3096:50;3165:22;;3218:4;3210:13;;3206:27;-1:-1:-1;3196:55:1;;3247:1;3244;3237:12;3196:55;3276:2;3270:9;3299:60;3315:43;3355:2;3315:43;:::i;3299:60::-;3381:3;3405:2;3400:3;3393:15;3433:2;3428:3;3424:12;3417:19;;3464:2;3460;3456:11;3512:7;3507:2;3501;3498:1;3494:10;3490:2;3486:19;3482:28;3479:41;3476:61;;;3533:1;3530;3523:12;3476:61;3555:1;3546:10;;3565:231;3579:2;3576:1;3573:9;3565:231;;;3643:3;3637:10;3660:31;3685:5;3660:31;:::i;:::-;3704:18;;3597:1;3590:9;;;;;3742:12;;;;3774;;3565:231;;;-1:-1:-1;3815:5:1;2859:967;-1:-1:-1;;;;;;;2859:967:1:o;3831:1226::-;3949:6;3957;4010:2;3998:9;3989:7;3985:23;3981:32;3978:52;;;4026:1;4023;4016:12;3978:52;4066:9;4053:23;4095:18;4136:2;4128:6;4125:14;4122:34;;;4152:1;4149;4142:12;4122:34;4190:6;4179:9;4175:22;4165:32;;4235:7;4228:4;4224:2;4220:13;4216:27;4206:55;;4257:1;4254;4247:12;4206:55;4293:2;4280:16;4315:4;4339:60;4355:43;4395:2;4355:43;:::i;4339:60::-;4421:3;4445:2;4440:3;4433:15;4473:2;4468:3;4464:12;4457:19;;4504:2;4500;4496:11;4552:7;4547:2;4541;4538:1;4534:10;4530:2;4526:19;4522:28;4519:41;4516:61;;;4573:1;4570;4563:12;4516:61;4595:1;4586:10;;4605:238;4619:2;4616:1;4613:9;4605:238;;;4690:3;4677:17;4707:31;4732:5;4707:31;:::i;:::-;4751:18;;4637:1;4630:9;;;;;4789:12;;;;4821;;4605:238;;;-1:-1:-1;4862:5:1;-1:-1:-1;;4905:18:1;;4892:32;;-1:-1:-1;;4936:16:1;;;4933:36;;;4965:1;4962;4955:12;4933:36;;4988:63;5043:7;5032:8;5021:9;5017:24;4988:63;:::i;:::-;4978:73;;;3831:1226;;;;;:::o;5062:180::-;5118:6;5171:2;5159:9;5150:7;5146:23;5142:32;5139:52;;;5187:1;5184;5177:12;5139:52;5210:26;5226:9;5210:26;:::i;5247:180::-;5306:6;5359:2;5347:9;5338:7;5334:23;5330:32;5327:52;;;5375:1;5372;5365:12;5327:52;-1:-1:-1;5398:23:1;;5247:180;-1:-1:-1;5247:180:1:o;5432:184::-;5502:6;5555:2;5543:9;5534:7;5530:23;5526:32;5523:52;;;5571:1;5568;5561:12;5523:52;-1:-1:-1;5594:16:1;;5432:184;-1:-1:-1;5432:184:1:o;5621:248::-;5689:6;5697;5750:2;5738:9;5729:7;5725:23;5721:32;5718:52;;;5766:1;5763;5756:12;5718:52;-1:-1:-1;;5789:23:1;;;5859:2;5844:18;;;5831:32;;-1:-1:-1;5621:248:1:o;5874:316::-;5951:6;5959;5967;6020:2;6008:9;5999:7;5995:23;5991:32;5988:52;;;6036:1;6033;6026:12;5988:52;-1:-1:-1;;6059:23:1;;;6129:2;6114:18;;6101:32;;-1:-1:-1;6180:2:1;6165:18;;;6152:32;;5874:316;-1:-1:-1;5874:316:1:o;7775:597::-;7887:4;7916:2;7945;7934:9;7927:21;7977:6;7971:13;8020:6;8015:2;8004:9;8000:18;7993:34;8045:1;8055:140;8069:6;8066:1;8063:13;8055:140;;;8164:14;;;8160:23;;8154:30;8130:17;;;8149:2;8126:26;8119:66;8084:10;;8055:140;;;8213:6;8210:1;8207:13;8204:91;;;8283:1;8278:2;8269:6;8258:9;8254:22;8250:31;8243:42;8204:91;-1:-1:-1;8356:2:1;8335:15;-1:-1:-1;;8331:29:1;8316:45;;;;8363:2;8312:54;;7775:597;-1:-1:-1;;;7775:597:1:o;10750:340::-;10952:2;10934:21;;;10991:2;10971:18;;;10964:30;-1:-1:-1;;;11025:2:1;11010:18;;11003:46;11081:2;11066:18;;10750:340::o;11504:356::-;11706:2;11688:21;;;11725:18;;;11718:30;11784:34;11779:2;11764:18;;11757:62;11851:2;11836:18;;11504:356::o;13032:409::-;13234:2;13216:21;;;13273:2;13253:18;;;13246:30;13312:34;13307:2;13292:18;;13285:62;-1:-1:-1;;;13378:2:1;13363:18;;13356:43;13431:3;13416:19;;13032:409::o;14988:275::-;15059:2;15053:9;15124:2;15105:13;;-1:-1:-1;;15101:27:1;15089:40;;15159:18;15144:34;;15180:22;;;15141:62;15138:88;;;15206:18;;:::i;:::-;15242:2;15235:22;14988:275;;-1:-1:-1;14988:275:1:o;15268:183::-;15328:4;15361:18;15353:6;15350:30;15347:56;;;15383:18;;:::i;:::-;-1:-1:-1;15428:1:1;15424:14;15440:4;15420:25;;15268:183::o;15456:128::-;15496:3;15527:1;15523:6;15520:1;15517:13;15514:39;;;15533:18;;:::i;:::-;-1:-1:-1;15569:9:1;;15456:128::o;15589:217::-;15629:1;15655;15645:132;;15699:10;15694:3;15690:20;15687:1;15680:31;15734:4;15731:1;15724:15;15762:4;15759:1;15752:15;15645:132;-1:-1:-1;15791:9:1;;15589:217::o;15811:168::-;15851:7;15917:1;15913;15909:6;15905:14;15902:1;15899:21;15894:1;15887:9;15880:17;15876:45;15873:71;;;15924:18;;:::i;:::-;-1:-1:-1;15964:9:1;;15811:168::o;15984:125::-;16024:4;16052:1;16049;16046:8;16043:34;;;16057:18;;:::i;:::-;-1:-1:-1;16094:9:1;;15984:125::o;16114:380::-;16193:1;16189:12;;;;16236;;;16257:61;;16311:4;16303:6;16299:17;16289:27;;16257:61;16364:2;16356:6;16353:14;16333:18;16330:38;16327:161;;;16410:10;16405:3;16401:20;16398:1;16391:31;16445:4;16442:1;16435:15;16473:4;16470:1;16463:15;16327:161;;16114:380;;;:::o;16499:127::-;16560:10;16555:3;16551:20;16548:1;16541:31;16591:4;16588:1;16581:15;16615:4;16612:1;16605:15;16631:127;16692:10;16687:3;16683:20;16680:1;16673:31;16723:4;16720:1;16713:15;16747:4;16744:1;16737:15;16763:127;16824:10;16819:3;16815:20;16812:1;16805:31;16855:4;16852:1;16845:15;16879:4;16876:1;16869:15;16895:131;-1:-1:-1;;;;;16970:31:1;;16960:42;;16950:70;;17016:1;17013;17006:12
Swarm Source
ipfs://d5b143de046275857dee0f7e74f625db7a25f3fff90e46303b0ca9c431efa8a8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.