More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 20,204 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Enter Game | 9656391 | 1 min ago | IN | 0 GLMR | 0.006271 | ||||
Settle Game | 9656241 | 16 mins ago | IN | 0 GLMR | 0.00615752 | ||||
Settle Game | 9656190 | 21 mins ago | IN | 0 GLMR | 0.00615752 | ||||
Enter Game | 9656154 | 24 mins ago | IN | 0 GLMR | 0.006271 | ||||
Settle Game | 9656153 | 25 mins ago | IN | 0 GLMR | 0.00615752 | ||||
Settle Game | 9656117 | 28 mins ago | IN | 0 GLMR | 0.00444876 | ||||
Enter Game | 9656117 | 28 mins ago | IN | 0 GLMR | 0.00660528 | ||||
Enter Game | 9656083 | 32 mins ago | IN | 0 GLMR | 0.006271 | ||||
Enter Game | 9656001 | 40 mins ago | IN | 0 GLMR | 0.00660528 | ||||
Settle Game | 9655999 | 40 mins ago | IN | 0 GLMR | 0.00615752 | ||||
Enter Game | 9655926 | 48 mins ago | IN | 0 GLMR | 0.00660528 | ||||
Settle Game | 9655517 | 1 hr ago | IN | 0 GLMR | 0.00615752 | ||||
Enter Game | 9655405 | 1 hr ago | IN | 0 GLMR | 0.006271 | ||||
Settle Game | 9655401 | 1 hr ago | IN | 0 GLMR | 0.00615752 | ||||
Enter Game | 9655298 | 1 hr ago | IN | 0 GLMR | 0.006271 | ||||
Settle Game | 9655298 | 1 hr ago | IN | 0 GLMR | 0.00615752 | ||||
Enter Game | 9654977 | 2 hrs ago | IN | 0 GLMR | 0.006271 | ||||
Settle Game | 9654967 | 2 hrs ago | IN | 0 GLMR | 0.00615752 | ||||
Enter Game | 9654919 | 2 hrs ago | IN | 0 GLMR | 0.006271 | ||||
Settle Game | 9654919 | 2 hrs ago | IN | 0 GLMR | 0.00615752 | ||||
Enter Game | 9654843 | 2 hrs ago | IN | 0 GLMR | 0.006271 | ||||
Settle Game | 9654843 | 2 hrs ago | IN | 0 GLMR | 0.00615752 | ||||
Enter Game | 9654762 | 2 hrs ago | IN | 0 GLMR | 0.006271 | ||||
Settle Game | 9654758 | 2 hrs ago | IN | 0 GLMR | 0.00615752 | ||||
Enter Game | 9654666 | 2 hrs ago | IN | 0 GLMR | 0.006271 |
View more zero value Internal Transactions in Advanced View mode
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
PinkDrop
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.2; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; /************************************************** * @title PINKDROP - alpha v2 * @author mar1dev * @notice PINKDROP Contract. Recurring tournament with PINK rewards **************************************************/ contract PinkDrop is Ownable(msg.sender) { IERC20 pink; /// @notice number of blocks for a tournament uint256 private lockTimeTournament = 7200; /// @notice tournament ID uint256 public currentTournament = 205; /// @notice game ID uint256 public currentGame = 11695; /// @notice PVP mode 1 game ID uint256 public currentPvpMode1Game = 317; /// @notice PVP mode 2 game ID uint256 public currentPvpMode2Game = 17; /// @notice price of a ticket uint256 private ticketPrice = 10000000000000; /// @notice burn % per tournament uint256 private burnPercent = 20; /// @notice burn addy address private burnAddy = 0x000000000000000000000000000000000000dEaD; /// @notice Tournament storage structure struct Tournament { /// @notice block when the tournament started uint256 startBlock; /// @notice block when the tournament ended uint256 endBlock; /// @notice counter for paid tickets used in this tournament uint256 ticketsUsed; /// @notice is the tournament over yet bool isOver; } struct Game { /// @notice player who created the match address addy; /// @notice final game score uint256 score; /// @notice block when the game started uint256 startBlock; /// @notice block when the game ended uint256 endBlock; /// @notice is the game over bool isOver; } struct Player { /// @notice number of paid tickets available uint256 tickets; /// @notice number of free tickets available uint256 NFTtickets; /// @notice PINK to claim uint256 rewards; } struct Match1 { /// @notice player who created the match address[] participants; /// @notice scores of the players uint256[] scores; /// @notice start block uint256 startBlock; /// @notice end block uint256 endBlock; /// @notice is the match already over bool isOver; /// @notice address of the winner address winner; } struct Match2 { /// @notice player who created the match address[] participants; /// @notice scores of the players uint256[] scores; /// @notice start block uint256 startBlock; /// @notice end block uint256 endBlock; /// @notice is the match already over bool isOver; /// @notice address of the winner address winner; /// @notice address of the 2nd winner address secondWinner; } /// @notice PVP matches for logging mapping(uint256 => Match1) public matchesMode1; /// @notice PVP matches for logging mapping(uint256 => Match2) public matchesMode2; /// @notice player address -> player stats mapping(address => Player) public players; /// @notice game id -> game stats mapping(uint256 => Game) public games; /// @notice tournament id -> tournament stats mapping(uint256 => Tournament) public tournaments; // Mapping of tournament ID to array of game IDs mapping(uint256 => uint256[]) public tournamentGames; /// @notice Operator address -> True mapping(address => bool) private admins; /// @notice Non-reentrancy prevention bool internal locked; constructor() { admins[0xdDc9320cc5C141207442D18463b0AE04512ef223] = true; pink = IERC20(0xfFfFFfFf30478fAFBE935e466da114E14fB3563d); tournaments[currentTournament] = Tournament( block.number, block.number + lockTimeTournament, 0, false ); } // ======================================== // Modifiers // ======================================== modifier onlyAdmin() { address sender = msg.sender; require(admins[sender] == true, "Sender not authorized."); _; } modifier noReentrancy() { require(!locked, "No re-entrancy allowed"); locked = true; _; locked = false; } // ======================================== // Events // ======================================== event GameEntered( address indexed player, uint256 indexed gameId, uint256 mode ); event RewardsClaimed(address indexed recipient, uint256 amount); event TicketsPurchased(address indexed buyer, uint256 amount); event GameSettled(address indexed player, uint256 indexed gameId, uint256 score); event TournamentSettled( uint256 indexed tournamentId, uint256 startBlock, uint256 endBlock, uint256 burnedAmount ); event PvpMatchCreated( address indexed player, uint256 mode, uint256 gameId, uint256 startedBlock ); // ======================================== // Public Functions // ======================================== /** * @notice Helper function used to determinate PVP winner * @param array: array of scores to search in */ function findMaxIndex( uint256[] memory array ) public pure returns (uint256) { require(array.length > 0, "Array must contain at least one element"); uint256 maxIndex = 0; for (uint256 i = 1; i < array.length; i++) { if (array[i] > array[maxIndex]) { maxIndex = i; } } return maxIndex; } /** * @notice Helper function used to determinate 2nd PVP winner * @param array: array of scores to search in */ function findSecondMaxIndex( uint256[] memory array ) public pure returns (uint256) { require(array.length >= 2, "Array must contain at least two elements"); uint256 maxIndex = findMaxIndex(array); uint256 secondMaxIndex = (maxIndex == 0) ? 1 : 0; for (uint256 i = 0; i < array.length; i++) { if (i != maxIndex && array[i] > array[secondMaxIndex]) { secondMaxIndex = i; } } return secondMaxIndex; } /** * @notice Helper function used to get scores for a particular gameId * @param _gameId: id of the game to check * @param _mode: type of the game */ function getScores( uint256 _gameId, uint256 _mode ) internal view returns (uint256[] memory) { if (_mode == 1) { uint256[] memory scores = new uint256[](2); for (uint i = 0; i < 2; i++) { scores[i] = matchesMode1[_gameId].scores[i]; } return scores; } else if (_mode == 2) { uint256[] memory scores = new uint256[](4); for (uint i = 0; i < 4; i++) { scores[i] = matchesMode1[_gameId].scores[i]; } return scores; } else { revert("Invalid mode"); } } /** * @notice Function use to initiate a game * @param _mode: type of ticket used to play */ function enterGame(uint256 _mode) external { address sender = msg.sender; if (_mode == 1) { require( players[sender].tickets >= 1, "Not enough tickets loaded in your account" ); players[sender].tickets -= 1; tournaments[currentTournament].ticketsUsed++; } else if (_mode == 2) { require( players[sender].NFTtickets >= 1, "Not enough NFT tickets loaded in your account" ); players[sender].NFTtickets -= 1; } games[currentGame] = Game(sender, 0, block.number, 0, false); tournamentGames[currentTournament].push(currentGame); emit GameEntered(sender, currentGame, _mode); currentGame++; } /** * @notice Function use to enter a PvP game * @param _mode: type of ticket used to play * @param _gameID: id of the game to enter */ function enterPvpGame(uint256 _mode, uint256 _gameID) external { address sender = msg.sender; if (_mode == 1) { require( players[sender].tickets >= 2, "Not enough tickets loaded in your account" ); require(matchesMode1[_gameID].isOver == false, "Game is now over"); players[sender].tickets -= 2; } else if (_mode == 2) { require( players[sender].tickets >= 4, "Not enough tickets loaded in your account" ); require(matchesMode2[_gameID].isOver == false, "Game is now over"); players[sender].tickets -= 4; } } /** * @notice Allow players to buy tickets to play * @param _amount: number of tickets to buy */ function buyTickets(uint256 _amount) external { address sender = msg.sender; address recipient = address(this); uint256 totalPrice = ticketPrice * _amount; require( pink.allowance(sender, address(this)) >= totalPrice && pink.transferFrom(sender, recipient, totalPrice), "Transfer failed or Insufficient allowance" ); players[sender].tickets += _amount; emit TicketsPurchased(sender, _amount); } /** * @notice Allow players to claim their rewards */ function claimRewards() external payable noReentrancy { address sender = msg.sender; uint256 rewards = players[sender].rewards; require(rewards > 0, "No rewards to claim!"); pink.transferFrom(address(this), sender, rewards); emit RewardsClaimed(sender, rewards); players[sender].rewards = 0; } /** * @notice Return the best games for a tournament * @param _tournamentId: tournament to check games for */ function getSortedGames( uint256 _tournamentId ) external view returns (uint256[] memory, address[] memory) { uint256[] memory gameIds = tournamentGames[_tournamentId]; uint256[] memory sortedGameIds = new uint256[](gameIds.length); address[] memory gamePlayers = new address[](gameIds.length); for (uint256 i = 0; i < gameIds.length; i++) { sortedGameIds[i] = gameIds[i]; gamePlayers[i] = games[gameIds[i]].addy; } for (uint256 i = 0; i < sortedGameIds.length - 1; i++) { for (uint256 j = 0; j < sortedGameIds.length - i - 1; j++) { if ( games[sortedGameIds[j]].score < games[sortedGameIds[j + 1]].score ) { (sortedGameIds[j], sortedGameIds[j + 1]) = ( sortedGameIds[j + 1], sortedGameIds[j] ); (gamePlayers[j], gamePlayers[j + 1]) = ( gamePlayers[j + 1], gamePlayers[j] ); } } } return (sortedGameIds, gamePlayers); } /** * @notice Return the number of block before current tournament expires */ function blocksLeftInTournament() external view returns (uint256) { uint256 currentBlock = block.number; uint256 endBlock = tournaments[currentTournament].endBlock; if (currentBlock < endBlock) { return endBlock - currentBlock; } else { return 0; } } /** * @notice Let an user create a PVP match by chosing the mode * @param _mode: 1 for 1v1, 2 for 1v1v1v1 */ function createPvpMatch(uint256 _mode) public payable { address sender = msg.sender; uint256 currentBlock = block.number; if (_mode == 1) { require( players[sender].tickets >= 2, "Not enough tickets loaded in your account" ); players[sender].tickets -= 2; matchesMode1[currentPvpMode1Game].startBlock = currentBlock; emit PvpMatchCreated( sender, _mode, currentPvpMode1Game, currentBlock ); currentPvpMode1Game++; } else if (_mode == 2) { require( players[sender].tickets >= 4, "Not enough tickets loaded in your account" ); players[sender].tickets -= 4; matchesMode2[currentPvpMode2Game].startBlock = currentBlock; emit PvpMatchCreated( sender, _mode, currentPvpMode2Game, currentBlock ); currentPvpMode2Game++; } } // ======================================== // Back-End Functions // ======================================== /** * @notice NFTs holders get rewards with free tickets * @dev Admin Required * @param _playerWallet: EOW of user * @param _amount: amount of tickets to give * @param _mode: type of tickets to give */ function addTickets( address[] memory _playerWallet, uint256[] memory _amount, uint256 _mode ) external onlyAdmin { if (_mode == 1) { for (uint256 i = 0; i < _playerWallet.length; i++) { players[_playerWallet[i]].tickets += _amount[i]; } } else if (_mode == 2) { for (uint256 i = 0; i < _playerWallet.length; i++) { players[_playerWallet[i]].NFTtickets += _amount[i]; } } } /** * @notice End a game * @dev Admin Required * @param _gameId: ID to set terminate * @param _score: score of the game */ function settleGame(uint256 _gameId, uint256 _score) external onlyAdmin { require( games[_gameId].score == 0 && games[_gameId].endBlock == 0 && games[_gameId].isOver == false, "Game already saved" ); games[_gameId].score = _score; games[_gameId].endBlock = block.number; games[_gameId].isOver = true; emit GameSettled(games[_gameId].addy, _gameId, _score); } /** * @notice End a PVP match * @dev Admin Required * @param _gameId: ID of match to set terminate * @param _mode: type of the match */ function settleMatch( uint256 _mode, uint256 _gameId ) public payable onlyAdmin { uint256 currentBlock = block.number; if (_mode == 1) { uint256 maxIndex = findMaxIndex(getScores(_gameId, 1)); address winner = matchesMode1[_gameId].participants[maxIndex]; matchesMode1[_gameId].isOver = true; matchesMode1[_gameId].endBlock = currentBlock; matchesMode1[_gameId].winner = winner; pink.transfer(burnAddy, 8000000000000); pink.transfer(winner, 32000000000000); } else if (_mode == 2) { uint256 maxIndex = findMaxIndex(getScores(_gameId, 2)); uint256 secondMaxIndex = findSecondMaxIndex(getScores(_gameId, 2)); address winner = matchesMode2[_gameId].participants[maxIndex]; address secondWinner = matchesMode2[_gameId].participants[ secondMaxIndex ]; matchesMode2[_gameId].isOver = true; matchesMode2[_gameId].endBlock = currentBlock; matchesMode2[_gameId].winner = winner; matchesMode2[_gameId].secondWinner = secondWinner; pink.transfer(burnAddy, 16000000000000); pink.transfer(winner, 104000000000000); pink.transfer(secondWinner, 40000000000000); } } /** * @notice Add a score to a match * @dev Admin Required * @param _mode: 1 or 2 * @param _gameId: ID of Match to set terminate * @param _score: score of the game * @param _player: participant address */ function addScoreMatch( uint256 _mode, uint256 _gameId, uint256 _score, address _player ) external payable onlyAdmin { if (_mode == 1) { matchesMode1[_gameId].participants.push(_player); matchesMode1[_gameId].scores.push(_score); if (matchesMode1[_gameId].scores.length == 2) { settleMatch(_mode, _gameId); } } else if (_mode == 2) { matchesMode2[_gameId].participants.push(_player); matchesMode2[_gameId].scores.push(_score); if (matchesMode2[_gameId].scores.length == 4) { settleMatch(_mode, _gameId); } } } /** * @notice End the current tournament and start the new one * @dev Admin Required */ function settleTournament() public payable onlyAdmin { require( tournaments[currentTournament].endBlock <= block.number, "Tournament not over" ); require( tournaments[currentTournament].isOver == false, "Tournament not over" ); tournaments[currentTournament].isOver = true; uint256 totalTicketsUsed = tournaments[currentTournament].ticketsUsed; uint256 burnAmount = (totalTicketsUsed * ticketPrice * burnPercent) / 100; pink.transfer(burnAddy, burnAmount); emit TournamentSettled( currentTournament, block.number, block.number + lockTimeTournament, burnAmount ); tournaments[currentTournament + 1] = Tournament( block.number, block.number + lockTimeTournament, 0, false ); currentTournament++; } /** * @notice Add rewards for players after a tournament ends * @dev Admin Required * @param _players: array of players from last tournament * @param _pinkToAdd: PINK rewards to add */ function addRewards( address[] memory _players, uint256[] memory _pinkToAdd ) public payable onlyAdmin { for (uint256 i = 0; i < _players.length; i++) { players[_players[i]].rewards += _pinkToAdd[i]; } } // ======================================== // Owner Functions // ======================================== /** * @notice Used by core team to withdraw rewards * @dev Owner required. * @param _token: token address to withdraw * @param _amount: amount of tokens to withdraw */ function adminWithdraw( address _token, uint256 _amount ) public payable onlyOwner { address payable payable_addr = payable(msg.sender); if (_token == address(0x0)) { payable_addr.transfer(_amount); return; } IERC20 token = IERC20(_token); token.transfer(msg.sender, _amount); } /** * @notice Set a new ticket price * @dev Owner required. * @param _amount: new amount */ function setTicketPrice(uint256 _amount) public payable onlyOwner { ticketPrice = _amount; } /** * @notice Set a wallet address to admin status. * Owner required. * @param _admin: new admin to invite */ function setNewAdmin(address _admin) public onlyOwner { admins[_admin] = true; } /** * @notice Set the regular lock time for NFTs * @dev Owner required. * @param _newLock: new lock in block number to set */ function setTournamentTime(uint256 _newLock) public onlyOwner { lockTimeTournament = _newLock; } /** * @notice Set the % for burn * @dev Owner required. */ function setDistribution( uint256 _newPercent ) public onlyOwner { burnPercent = _newPercent; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "remappings": [] }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mode","type":"uint256"}],"name":"GameEntered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"score","type":"uint256"}],"name":"GameSettled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"mode","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startedBlock","type":"uint256"}],"name":"PvpMatchCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TicketsPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tournamentId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnedAmount","type":"uint256"}],"name":"TournamentSettled","type":"event"},{"inputs":[{"internalType":"address[]","name":"_players","type":"address[]"},{"internalType":"uint256[]","name":"_pinkToAdd","type":"uint256[]"}],"name":"addRewards","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mode","type":"uint256"},{"internalType":"uint256","name":"_gameId","type":"uint256"},{"internalType":"uint256","name":"_score","type":"uint256"},{"internalType":"address","name":"_player","type":"address"}],"name":"addScoreMatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_playerWallet","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"},{"internalType":"uint256","name":"_mode","type":"uint256"}],"name":"addTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"adminWithdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"blocksLeftInTournament","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyTickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mode","type":"uint256"}],"name":"createPvpMatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"currentGame","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPvpMode1Game","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPvpMode2Game","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTournament","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mode","type":"uint256"}],"name":"enterGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mode","type":"uint256"},{"internalType":"uint256","name":"_gameID","type":"uint256"}],"name":"enterPvpGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"array","type":"uint256[]"}],"name":"findMaxIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"array","type":"uint256[]"}],"name":"findSecondMaxIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"uint256","name":"score","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"bool","name":"isOver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tournamentId","type":"uint256"}],"name":"getSortedGames","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"matchesMode1","outputs":[{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"bool","name":"isOver","type":"bool"},{"internalType":"address","name":"winner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"matchesMode2","outputs":[{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"bool","name":"isOver","type":"bool"},{"internalType":"address","name":"winner","type":"address"},{"internalType":"address","name":"secondWinner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"players","outputs":[{"internalType":"uint256","name":"tickets","type":"uint256"},{"internalType":"uint256","name":"NFTtickets","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPercent","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setNewAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setTicketPrice","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLock","type":"uint256"}],"name":"setTournamentTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gameId","type":"uint256"},{"internalType":"uint256","name":"_score","type":"uint256"}],"name":"settleGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mode","type":"uint256"},{"internalType":"uint256","name":"_gameId","type":"uint256"}],"name":"settleMatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"settleTournament","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tournamentGames","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tournaments","outputs":[{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"ticketsUsed","type":"uint256"},{"internalType":"bool","name":"isOver","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611c2060025560cd600355612daf60045561013d60055560116006556509184e72a0006007556014600855600980546001600160a01b03191661dead17905534801561004e575f5ffd5b50338061007457604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61007d81610162565b5073ddc9320cc5c141207442d18463b0ae04512ef2235f52601060209081527fb7c9d315ef18e31be165e38096632a15b266836c67061475570d7da23e480440805460ff1916600190811790915580546001600160a01b03191673ffffffff30478fafbe935e466da114e14fb3563d179055604080516080810190915243808252600254919283019161010f916101b1565b81525f60208083018290526040928301829052600380548352600e825291839020845181559084015160018201559183015160028301556060909201519101805460ff19169115159190911790556101d6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b808201808211156101d057634e487b7160e01b5f52601160045260245ffd5b92915050565b6128ef806101e35f395ff3fe6080604052600436106101e6575f3560e01c806360b663bb116101085780639ff930881161009d578063e2eb41ff1161006d578063e2eb41ff14610643578063e3635f1e14610698578063e85d2289146106ac578063f2fde38b146106d9578063fc751155146106f8575f5ffd5b80639ff93088146105ea578063af37182114610609578063d30e14d214610611578063d99887a414610624575f5ffd5b806388ab862f116100d857806388ab862f146105735780638c03a9a1146105865780638da5cb5b146105a55780638eec99c8146105cb575f5ffd5b806360b663bb14610454578063715018a6146104695780637503e1b71461047d57806384d4a904146104e2575f5ffd5b8063372500ab1161017e578063550d03201161014e578063550d0320146103f0578063595a90f2146104035780635a922caa14610416578063600c882714610435575f5ffd5b8063372500ab146103a1578063401d4482146103a957806343d6582b146103bc578063441a4fdf146103db575f5ffd5b806318bc53bd116101b957806318bc53bd1461032f57806320b4d2a41461034e5780632f3666371461036d5780632f50d6dc1461038c575f5ffd5b80630c48ebb8146101ea578063117a5b901461026e578063155b3aeb146102f7578063159816501461031a575b5f5ffd5b3480156101f5575f5ffd5b5061023a6102043660046123ce565b600a6020525f908152604090206002810154600382015460049092015490919060ff81169061010090046001600160a01b031684565b604080519485526020850193909352901515918301919091526001600160a01b031660608201526080015b60405180910390f35b348015610279575f5ffd5b506102c36102883660046123ce565b600d6020525f9081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919290919060ff1685565b604080516001600160a01b03909616865260208601949094529284019190915260608301521515608082015260a001610265565b348015610302575f5ffd5b5061030c60055481565b604051908152602001610265565b61032d6103283660046123ce565b610717565b005b34801561033a575f5ffd5b5061032d610349366004612534565b610724565b348015610359575f5ffd5b5061032d6103683660046125a2565b61087b565b348015610378575f5ffd5b5061032d6103873660046123ce565b610a0b565b348015610397575f5ffd5b5061030c60035481565b61032d610be9565b61032d6103b73660046125c2565b610d7d565b3480156103c7575f5ffd5b5061032d6103d63660046123ce565b610e37565b3480156103e6575f5ffd5b5061030c60065481565b61032d6103fe3660046125a2565b61107f565b61032d6104113660046125ea565b61149a565b348015610421575f5ffd5b5061030c61043036600461264f565b61154c565b348015610440575f5ffd5b5061032d61044f3660046123ce565b611607565b34801561045f575f5ffd5b5061030c60045481565b348015610474575f5ffd5b5061032d611614565b348015610488575f5ffd5b506104c06104973660046123ce565b600e6020525f908152604090208054600182015460028301546003909301549192909160ff1684565b6040805194855260208501939093529183015215156060820152608001610265565b3480156104ed575f5ffd5b5061053c6104fc3660046123ce565b600b6020525f908152604090206002810154600382015460048301546005909301549192909160ff8216916001600160a01b036101009091048116911685565b604080519586526020860194909452911515928401929092526001600160a01b03918216606084015216608082015260a001610265565b61032d6105813660046123ce565b611627565b348015610591575f5ffd5b5061030c6105a036600461264f565b6117f2565b3480156105b0575f5ffd5b505f546040516001600160a01b039091168152602001610265565b3480156105d6575f5ffd5b5061032d6105e5366004612689565b6118dc565b3480156105f5575f5ffd5b5061032d6106043660046125a2565b611907565b61032d611a34565b61032d61061f3660046126a9565b611ccb565b34801561062f575f5ffd5b5061030c61063e3660046125a2565b611ddb565b34801561064e575f5ffd5b5061067d61065d366004612689565b600c6020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610265565b3480156106a3575f5ffd5b5061030c611e06565b3480156106b7575f5ffd5b506106cb6106c63660046123ce565b611e3d565b6040516102659291906126e5565b3480156106e4575f5ffd5b5061032d6106f3366004612689565b6121ba565b348015610703575f5ffd5b5061032d6107123660046123ce565b6121f7565b61071f612204565b600755565b335f8181526010602052604090205460ff1615156001146107605760405162461bcd60e51b81526004016107579061276e565b60405180910390fd5b816001036107ec575f5b84518110156107e6578381815181106107855761078561279e565b6020026020010151600c5f8784815181106107a2576107a261279e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f015f8282546107d991906127c6565b909155505060010161076a565b50610875565b81600203610875575f5b8451811015610873578381815181106108115761081161279e565b6020026020010151600c5f87848151811061082e5761082e61279e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206001015f82825461086691906127c6565b90915550506001016107f6565b505b50505050565b336001839003610944576001600160a01b0381165f908152600c6020526040902054600211156108bd5760405162461bcd60e51b8152600401610757906127d9565b5f828152600a602052604090206004015460ff16156109115760405162461bcd60e51b815260206004820152601060248201526f23b0b6b29034b9903737bb9037bb32b960811b6044820152606401610757565b6001600160a01b0381165f908152600c60205260408120805460029290610939908490612822565b90915550610a069050565b82600203610a06576001600160a01b0381165f908152600c6020526040902054600411156109845760405162461bcd60e51b8152600401610757906127d9565b5f828152600b602052604090206004015460ff16156109d85760405162461bcd60e51b815260206004820152601060248201526f23b0b6b29034b9903737bb9037bb32b960811b6044820152606401610757565b6001600160a01b0381165f908152600c60205260408120805460049290610a00908490612822565b90915550505b505050565b600754339030905f90610a1f908590612835565b600154604051636eb1769f60e11b81526001600160a01b03868116600483015230602483015292935083929091169063dd62ed3e90604401602060405180830381865afa158015610a72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a96919061284c565b10158015610b1b57506001546040516323b872dd60e01b81526001600160a01b038581166004830152848116602483015260448201849052909116906323b872dd906064016020604051808303815f875af1158015610af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b1b9190612863565b610b795760405162461bcd60e51b815260206004820152602960248201527f5472616e73666572206661696c6564206f7220496e73756666696369656e7420604482015268616c6c6f77616e636560b81b6064820152608401610757565b6001600160a01b0383165f908152600c602052604081208054869290610ba09084906127c6565b90915550506040518481526001600160a01b038416907fe11731cb4f1eb3ec3dd09bdc96809bb07365f4c881cda3192b397a4bc0b6da409060200160405180910390a250505050565b60115460ff1615610c355760405162461bcd60e51b8152602060048201526016602482015275139bc81c994b595b9d1c985b98de48185b1b1bddd95960521b6044820152606401610757565b6011805460ff19166001179055335f818152600c602052604090206002015480610c985760405162461bcd60e51b81526020600482015260146024820152734e6f207265776172647320746f20636c61696d2160601b6044820152606401610757565b6001546040516323b872dd60e01b81523060048201526001600160a01b03848116602483015260448201849052909116906323b872dd906064016020604051808303815f875af1158015610cee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d129190612863565b50816001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051610d4e91815260200190565b60405180910390a2506001600160a01b03165f908152600c60205260408120600201556011805460ff19169055565b610d85612204565b336001600160a01b038316610dc7576040516001600160a01b0382169083156108fc029084905f818181858888f19350505050158015610875573d5f5f3e3d5ffd5b60405163a9059cbb60e01b81523360048201526024810183905283906001600160a01b0382169063a9059cbb906044016020604051808303815f875af1158015610e13573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108739190612863565b336001829003610ecf576001600160a01b0381165f908152600c602052604090205460011115610e795760405162461bcd60e51b8152600401610757906127d9565b6001600160a01b0381165f908152600c60205260408120805460019290610ea1908490612822565b90915550506003545f908152600e60205260408120600201805491610ec583612882565b9190505550610f8b565b81600203610f8b576001600160a01b0381165f908152600c602052604090206001908101541015610f585760405162461bcd60e51b815260206004820152602d60248201527f4e6f7420656e6f756768204e4654207469636b657473206c6f6164656420696e60448201526c081e5bdd5c881858d8dbdd5b9d609a1b6064820152608401610757565b6001600160a01b0381165f908152600c602052604081206001908101805491929091610f85908490612822565b90915550505b6040805160a0810182526001600160a01b038381168083525f6020808501828152438688019081526060870184815260808801858152600480548752600d86528a872099518a546001600160a01b031916991698909817895592516001808a019190915591516002890155516003808901919091559151968601805460ff191697151597909717909655548252600f815285822084548154968701825590835291819020909401559054925185815290917f9a1a3c45c9a593fe515b398aac3639ed6ac33d78b8c7eeb8f81241e8ecf65ee9910160405180910390a360048054905f61107683612882565b91905055505050565b335f8181526010602052604090205460ff1615156001146110b25760405162461bcd60e51b81526004016107579061276e565b436001849003611238575f6110cb610430856001612230565b5f858152600a6020526040812080549293509091839081106110ef576110ef61279e565b5f91825260208083209190910154878352600a9091526040918290206004808201805460039093018890556001600160a01b0393841661010081026001600160a81b031990941693909317600190811790915554600954945163a9059cbb60e01b815294841691850191909152650746a52880006024850152909350169063a9059cbb906044016020604051808303815f875af1158015611192573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b69190612863565b5060015460405163a9059cbb60e01b81526001600160a01b038381166004830152651d1a94a2000060248301529091169063a9059cbb906044016020604051808303815f875af115801561120c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112309190612863565b505050610875565b83600203610875575f61124f610430856002612230565b90505f6112606105a0866002612230565b5f868152600b6020526040812080549293509091849081106112845761128461279e565b5f918252602080832090910154888352600b9091526040822080546001600160a01b03909216935090849081106112bd576112bd61279e565b5f91825260208083209190910154898352600b90915260409182902060048082018054600384018b90556001600160a01b03888116610100026001600160a81b0319909216919091176001908117909255600590930180546001600160a01b031916948416948517905554600954945163a9059cbb60e01b815294831691850191909152650e8d4a5100006024850152919350169063a9059cbb906044016020604051808303815f875af1158015611377573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139b9190612863565b5060015460405163a9059cbb60e01b81526001600160a01b038481166004830152655e96630e800060248301529091169063a9059cbb906044016020604051808303815f875af11580156113f1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114159190612863565b5060015460405163a9059cbb60e01b81526001600160a01b03838116600483015265246139ca800060248301529091169063a9059cbb906044016020604051808303815f875af115801561146b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061148f9190612863565b505050505050505050565b335f8181526010602052604090205460ff1615156001146114cd5760405162461bcd60e51b81526004016107579061276e565b5f5b8351811015610875578281815181106114ea576114ea61279e565b6020026020010151600c5f8684815181106115075761150761279e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206002015f82825461153f91906127c6565b90915550506001016114cf565b5f5f8251116115ad5760405162461bcd60e51b815260206004820152602760248201527f4172726179206d75737420636f6e7461696e206174206c65617374206f6e6520604482015266195b195b595b9d60ca1b6064820152608401610757565b5f60015b8351811015611600578382815181106115cc576115cc61279e565b60200260200101518482815181106115e6576115e661279e565b602002602001015111156115f8578091505b6001016115b1565b5092915050565b61160f612204565b600255565b61161c612204565b6116255f61237f565b565b33436001839003611713576001600160a01b0382165f908152600c60205260409020546002111561166a5760405162461bcd60e51b8152600401610757906127d9565b6001600160a01b0382165f908152600c60205260408120805460029290611692908490612822565b9091555050600580545f908152600a6020908152604091829020600201849055915481518681529283015281018290526001600160a01b038316907f8d9f83849857ceaf892550c3236854ed313894d04f07d3a76725afc7a2235a379060600160405180910390a260058054905f61170983612882565b9190505550505050565b82600203610a06576001600160a01b0382165f908152600c6020526040902054600411156117535760405162461bcd60e51b8152600401610757906127d9565b6001600160a01b0382165f908152600c6020526040812080546004929061177b908490612822565b9091555050600680545f908152600b6020908152604091829020600201849055915481518681529283015281018290526001600160a01b038316907f8d9f83849857ceaf892550c3236854ed313894d04f07d3a76725afc7a2235a379060600160405180910390a260068054905f61170983612882565b5f6002825110156118565760405162461bcd60e51b815260206004820152602860248201527f4172726179206d75737420636f6e7461696e206174206c656173742074776f20604482015267656c656d656e747360c01b6064820152608401610757565b5f6118608361154c565b90505f811561186f575f611872565b60015b60ff1690505f5b84518110156118d4578281141580156118c3575084828151811061189f5761189f61279e565b60200260200101518582815181106118b9576118b961279e565b6020026020010151115b156118cc578091505b600101611879565b509392505050565b6118e4612204565b6001600160a01b03165f908152601060205260409020805460ff19166001179055565b335f8181526010602052604090205460ff16151560011461193a5760405162461bcd60e51b81526004016107579061276e565b5f838152600d602052604090206001015415801561196657505f838152600d6020526040902060030154155b801561198357505f838152600d602052604090206004015460ff16155b6119c45760405162461bcd60e51b815260206004820152601260248201527111d85b5948185b1c9958591e481cd85d995960721b6044820152606401610757565b5f838152600d6020908152604091829020600180820186905543600383015560048201805460ff1916909117905554915184815285926001600160a01b0316917f3f9816b7851af3e5a818edbae74a83371dae8fd137d3e6353ad90befdb227cc8910160405180910390a3505050565b335f8181526010602052604090205460ff161515600114611a675760405162461bcd60e51b81526004016107579061276e565b6003545f908152600e6020526040902060010154431015611ac05760405162461bcd60e51b81526020600482015260136024820152722a37bab93730b6b2b73a103737ba1037bb32b960691b6044820152606401610757565b600380545f908152600e60205260409020015460ff1615611b195760405162461bcd60e51b81526020600482015260136024820152722a37bab93730b6b2b73a103737ba1037bb32b960691b6044820152606401610757565b600380545f908152600e60205260408082208301805460ff19166001179055915481529081206002015460085460075491929160649190611b5a9085612835565b611b649190612835565b611b6e919061289a565b60015460095460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044016020604051808303815f875af1158015611bc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be69190612863565b506003547fde4041d130541c757b9ac932998643c84f40122ddc15d1cddb09ab61bad2cf854360025443611c1a91906127c6565b604080519283526020830191909152810184905260600160405180910390a2604051806080016040528043815260200160025443611c5891906127c6565b81526020015f81526020015f1515815250600e5f6003546001611c7b91906127c6565b815260208082019290925260409081015f908120845181559284015160018401559083015160028301556060909201516003918201805460ff191691151591909117905580549161170983612882565b335f8181526010602052604090205460ff161515600114611cfe5760405162461bcd60e51b81526004016107579061276e565b84600103611d6f575f848152600a60209081526040822080546001808201835582855283852090910180546001600160a01b0319166001600160a01b03881617905590810180549182018155808452918320018590559085905254600203611d6a57611d6a858561107f565b610873565b84600203610873575f848152600b60209081526040822080546001808201835582855283852090910180546001600160a01b0319166001600160a01b0388161790559081018054918201815580845291832001859055908590525460040361087357610873858561107f565b600f602052815f5260405f208181548110611df4575f80fd5b905f5260205f20015f91509150505481565b6003545f908152600e6020526040812060010154439080821015611e3557611e2e8282612822565b9250505090565b5f9250505090565b6060805f600f5f8581526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015611e9a57602002820191905f5260205f20905b815481526020019060010190808311611e86575b505050505090505f815167ffffffffffffffff811115611ebc57611ebc6123e5565b604051908082528060200260200182016040528015611ee5578160200160208202803683370190505b5090505f825167ffffffffffffffff811115611f0357611f036123e5565b604051908082528060200260200182016040528015611f2c578160200160208202803683370190505b5090505f5b8351811015611fe357838181518110611f4c57611f4c61279e565b6020026020010151838281518110611f6657611f6661279e565b602002602001018181525050600d5f858381518110611f8757611f8761279e565b602002602001015181526020019081526020015f205f015f9054906101000a90046001600160a01b0316828281518110611fc357611fc361279e565b6001600160a01b0390921660209283029190910190910152600101611f31565b505f5b60018351611ff49190612822565b8110156121ae575f5b600182855161200c9190612822565b6120169190612822565b8110156121a557600d5f8561202c8460016127c6565b8151811061203c5761203c61279e565b602002602001015181526020019081526020015f2060010154600d5f86848151811061206a5761206a61279e565b602002602001015181526020019081526020015f2060010154101561219d57836120958260016127c6565b815181106120a5576120a561279e565b60200260200101518482815181106120bf576120bf61279e565b60200260200101518583815181106120d9576120d961279e565b60200260200101868460016120ee91906127c6565b815181106120fe576120fe61279e565b602090810291909101019190915252826121198260016127c6565b815181106121295761212961279e565b60200260200101518382815181106121435761214361279e565b602002602001015184838151811061215d5761215d61279e565b602002602001018584600161217291906127c6565b815181106121825761218261279e565b6001600160a01b039384166020918202929092010152911690525b600101611ffd565b50600101611fe6565b50909590945092505050565b6121c2612204565b6001600160a01b0381166121eb57604051631e4fbdf760e01b81525f6004820152602401610757565b6121f48161237f565b50565b6121ff612204565b600855565b5f546001600160a01b031633146116255760405163118cdaa760e01b8152336004820152602401610757565b6060816001036122bd576040805160028082526060820183525f926020830190803683370190505090505f5b60028110156122b5575f858152600a602052604090206001018054829081106122875761228761279e565b905f5260205f2001548282815181106122a2576122a261279e565b602090810291909101015260010161225c565b509050612379565b816002036123425760408051600480825260a082019092525f91602082016080803683370190505090505f5b60048110156122b5575f858152600a602052604090206001018054829081106123145761231461279e565b905f5260205f20015482828151811061232f5761232f61279e565b60209081029190910101526001016122e9565b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206d6f646560a01b6044820152606401610757565b92915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156123de575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612422576124226123e5565b604052919050565b5f67ffffffffffffffff821115612443576124436123e5565b5060051b60200190565b80356001600160a01b0381168114612463575f5ffd5b919050565b5f82601f830112612477575f5ffd5b813561248a6124858261242a565b6123f9565b8082825260208201915060208360051b8601019250858311156124ab575f5ffd5b602085015b838110156124cf576124c18161244d565b8352602092830192016124b0565b5095945050505050565b5f82601f8301126124e8575f5ffd5b81356124f66124858261242a565b8082825260208201915060208360051b860101925085831115612517575f5ffd5b602085015b838110156124cf57803583526020928301920161251c565b5f5f5f60608486031215612546575f5ffd5b833567ffffffffffffffff81111561255c575f5ffd5b61256886828701612468565b935050602084013567ffffffffffffffff811115612584575f5ffd5b612590868287016124d9565b93969395505050506040919091013590565b5f5f604083850312156125b3575f5ffd5b50508035926020909101359150565b5f5f604083850312156125d3575f5ffd5b6125dc8361244d565b946020939093013593505050565b5f5f604083850312156125fb575f5ffd5b823567ffffffffffffffff811115612611575f5ffd5b61261d85828601612468565b925050602083013567ffffffffffffffff811115612639575f5ffd5b612645858286016124d9565b9150509250929050565b5f6020828403121561265f575f5ffd5b813567ffffffffffffffff811115612675575f5ffd5b612681848285016124d9565b949350505050565b5f60208284031215612699575f5ffd5b6126a28261244d565b9392505050565b5f5f5f5f608085870312156126bc575f5ffd5b8435935060208501359250604085013591506126da6060860161244d565b905092959194509250565b604080825283519082018190525f9060208501906060840190835b8181101561271e578351835260209384019390920191600101612700565b5050838103602080860191909152855180835291810192508501905f5b818110156127625782516001600160a01b031684526020938401939092019160010161273b565b50919695505050505050565b60208082526016908201527529b2b73232b9103737ba1030baba3437b934bd32b21760511b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115612379576123796127b2565b60208082526029908201527f4e6f7420656e6f756768207469636b657473206c6f6164656420696e20796f756040820152681c881858d8dbdd5b9d60ba1b606082015260800190565b81810381811115612379576123796127b2565b8082028115828204841417612379576123796127b2565b5f6020828403121561285c575f5ffd5b5051919050565b5f60208284031215612873575f5ffd5b815180151581146126a2575f5ffd5b5f60018201612893576128936127b2565b5060010190565b5f826128b457634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220530af41cbcc7415d14991bd8fb183c71c49e3f13e7a57baeb2436ff9e1d950dd64736f6c634300081c0033
Deployed Bytecode
0x6080604052600436106101e6575f3560e01c806360b663bb116101085780639ff930881161009d578063e2eb41ff1161006d578063e2eb41ff14610643578063e3635f1e14610698578063e85d2289146106ac578063f2fde38b146106d9578063fc751155146106f8575f5ffd5b80639ff93088146105ea578063af37182114610609578063d30e14d214610611578063d99887a414610624575f5ffd5b806388ab862f116100d857806388ab862f146105735780638c03a9a1146105865780638da5cb5b146105a55780638eec99c8146105cb575f5ffd5b806360b663bb14610454578063715018a6146104695780637503e1b71461047d57806384d4a904146104e2575f5ffd5b8063372500ab1161017e578063550d03201161014e578063550d0320146103f0578063595a90f2146104035780635a922caa14610416578063600c882714610435575f5ffd5b8063372500ab146103a1578063401d4482146103a957806343d6582b146103bc578063441a4fdf146103db575f5ffd5b806318bc53bd116101b957806318bc53bd1461032f57806320b4d2a41461034e5780632f3666371461036d5780632f50d6dc1461038c575f5ffd5b80630c48ebb8146101ea578063117a5b901461026e578063155b3aeb146102f7578063159816501461031a575b5f5ffd5b3480156101f5575f5ffd5b5061023a6102043660046123ce565b600a6020525f908152604090206002810154600382015460049092015490919060ff81169061010090046001600160a01b031684565b604080519485526020850193909352901515918301919091526001600160a01b031660608201526080015b60405180910390f35b348015610279575f5ffd5b506102c36102883660046123ce565b600d6020525f9081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919290919060ff1685565b604080516001600160a01b03909616865260208601949094529284019190915260608301521515608082015260a001610265565b348015610302575f5ffd5b5061030c60055481565b604051908152602001610265565b61032d6103283660046123ce565b610717565b005b34801561033a575f5ffd5b5061032d610349366004612534565b610724565b348015610359575f5ffd5b5061032d6103683660046125a2565b61087b565b348015610378575f5ffd5b5061032d6103873660046123ce565b610a0b565b348015610397575f5ffd5b5061030c60035481565b61032d610be9565b61032d6103b73660046125c2565b610d7d565b3480156103c7575f5ffd5b5061032d6103d63660046123ce565b610e37565b3480156103e6575f5ffd5b5061030c60065481565b61032d6103fe3660046125a2565b61107f565b61032d6104113660046125ea565b61149a565b348015610421575f5ffd5b5061030c61043036600461264f565b61154c565b348015610440575f5ffd5b5061032d61044f3660046123ce565b611607565b34801561045f575f5ffd5b5061030c60045481565b348015610474575f5ffd5b5061032d611614565b348015610488575f5ffd5b506104c06104973660046123ce565b600e6020525f908152604090208054600182015460028301546003909301549192909160ff1684565b6040805194855260208501939093529183015215156060820152608001610265565b3480156104ed575f5ffd5b5061053c6104fc3660046123ce565b600b6020525f908152604090206002810154600382015460048301546005909301549192909160ff8216916001600160a01b036101009091048116911685565b604080519586526020860194909452911515928401929092526001600160a01b03918216606084015216608082015260a001610265565b61032d6105813660046123ce565b611627565b348015610591575f5ffd5b5061030c6105a036600461264f565b6117f2565b3480156105b0575f5ffd5b505f546040516001600160a01b039091168152602001610265565b3480156105d6575f5ffd5b5061032d6105e5366004612689565b6118dc565b3480156105f5575f5ffd5b5061032d6106043660046125a2565b611907565b61032d611a34565b61032d61061f3660046126a9565b611ccb565b34801561062f575f5ffd5b5061030c61063e3660046125a2565b611ddb565b34801561064e575f5ffd5b5061067d61065d366004612689565b600c6020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610265565b3480156106a3575f5ffd5b5061030c611e06565b3480156106b7575f5ffd5b506106cb6106c63660046123ce565b611e3d565b6040516102659291906126e5565b3480156106e4575f5ffd5b5061032d6106f3366004612689565b6121ba565b348015610703575f5ffd5b5061032d6107123660046123ce565b6121f7565b61071f612204565b600755565b335f8181526010602052604090205460ff1615156001146107605760405162461bcd60e51b81526004016107579061276e565b60405180910390fd5b816001036107ec575f5b84518110156107e6578381815181106107855761078561279e565b6020026020010151600c5f8784815181106107a2576107a261279e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f015f8282546107d991906127c6565b909155505060010161076a565b50610875565b81600203610875575f5b8451811015610873578381815181106108115761081161279e565b6020026020010151600c5f87848151811061082e5761082e61279e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206001015f82825461086691906127c6565b90915550506001016107f6565b505b50505050565b336001839003610944576001600160a01b0381165f908152600c6020526040902054600211156108bd5760405162461bcd60e51b8152600401610757906127d9565b5f828152600a602052604090206004015460ff16156109115760405162461bcd60e51b815260206004820152601060248201526f23b0b6b29034b9903737bb9037bb32b960811b6044820152606401610757565b6001600160a01b0381165f908152600c60205260408120805460029290610939908490612822565b90915550610a069050565b82600203610a06576001600160a01b0381165f908152600c6020526040902054600411156109845760405162461bcd60e51b8152600401610757906127d9565b5f828152600b602052604090206004015460ff16156109d85760405162461bcd60e51b815260206004820152601060248201526f23b0b6b29034b9903737bb9037bb32b960811b6044820152606401610757565b6001600160a01b0381165f908152600c60205260408120805460049290610a00908490612822565b90915550505b505050565b600754339030905f90610a1f908590612835565b600154604051636eb1769f60e11b81526001600160a01b03868116600483015230602483015292935083929091169063dd62ed3e90604401602060405180830381865afa158015610a72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a96919061284c565b10158015610b1b57506001546040516323b872dd60e01b81526001600160a01b038581166004830152848116602483015260448201849052909116906323b872dd906064016020604051808303815f875af1158015610af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b1b9190612863565b610b795760405162461bcd60e51b815260206004820152602960248201527f5472616e73666572206661696c6564206f7220496e73756666696369656e7420604482015268616c6c6f77616e636560b81b6064820152608401610757565b6001600160a01b0383165f908152600c602052604081208054869290610ba09084906127c6565b90915550506040518481526001600160a01b038416907fe11731cb4f1eb3ec3dd09bdc96809bb07365f4c881cda3192b397a4bc0b6da409060200160405180910390a250505050565b60115460ff1615610c355760405162461bcd60e51b8152602060048201526016602482015275139bc81c994b595b9d1c985b98de48185b1b1bddd95960521b6044820152606401610757565b6011805460ff19166001179055335f818152600c602052604090206002015480610c985760405162461bcd60e51b81526020600482015260146024820152734e6f207265776172647320746f20636c61696d2160601b6044820152606401610757565b6001546040516323b872dd60e01b81523060048201526001600160a01b03848116602483015260448201849052909116906323b872dd906064016020604051808303815f875af1158015610cee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d129190612863565b50816001600160a01b03167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051610d4e91815260200190565b60405180910390a2506001600160a01b03165f908152600c60205260408120600201556011805460ff19169055565b610d85612204565b336001600160a01b038316610dc7576040516001600160a01b0382169083156108fc029084905f818181858888f19350505050158015610875573d5f5f3e3d5ffd5b60405163a9059cbb60e01b81523360048201526024810183905283906001600160a01b0382169063a9059cbb906044016020604051808303815f875af1158015610e13573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108739190612863565b336001829003610ecf576001600160a01b0381165f908152600c602052604090205460011115610e795760405162461bcd60e51b8152600401610757906127d9565b6001600160a01b0381165f908152600c60205260408120805460019290610ea1908490612822565b90915550506003545f908152600e60205260408120600201805491610ec583612882565b9190505550610f8b565b81600203610f8b576001600160a01b0381165f908152600c602052604090206001908101541015610f585760405162461bcd60e51b815260206004820152602d60248201527f4e6f7420656e6f756768204e4654207469636b657473206c6f6164656420696e60448201526c081e5bdd5c881858d8dbdd5b9d609a1b6064820152608401610757565b6001600160a01b0381165f908152600c602052604081206001908101805491929091610f85908490612822565b90915550505b6040805160a0810182526001600160a01b038381168083525f6020808501828152438688019081526060870184815260808801858152600480548752600d86528a872099518a546001600160a01b031916991698909817895592516001808a019190915591516002890155516003808901919091559151968601805460ff191697151597909717909655548252600f815285822084548154968701825590835291819020909401559054925185815290917f9a1a3c45c9a593fe515b398aac3639ed6ac33d78b8c7eeb8f81241e8ecf65ee9910160405180910390a360048054905f61107683612882565b91905055505050565b335f8181526010602052604090205460ff1615156001146110b25760405162461bcd60e51b81526004016107579061276e565b436001849003611238575f6110cb610430856001612230565b5f858152600a6020526040812080549293509091839081106110ef576110ef61279e565b5f91825260208083209190910154878352600a9091526040918290206004808201805460039093018890556001600160a01b0393841661010081026001600160a81b031990941693909317600190811790915554600954945163a9059cbb60e01b815294841691850191909152650746a52880006024850152909350169063a9059cbb906044016020604051808303815f875af1158015611192573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b69190612863565b5060015460405163a9059cbb60e01b81526001600160a01b038381166004830152651d1a94a2000060248301529091169063a9059cbb906044016020604051808303815f875af115801561120c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112309190612863565b505050610875565b83600203610875575f61124f610430856002612230565b90505f6112606105a0866002612230565b5f868152600b6020526040812080549293509091849081106112845761128461279e565b5f918252602080832090910154888352600b9091526040822080546001600160a01b03909216935090849081106112bd576112bd61279e565b5f91825260208083209190910154898352600b90915260409182902060048082018054600384018b90556001600160a01b03888116610100026001600160a81b0319909216919091176001908117909255600590930180546001600160a01b031916948416948517905554600954945163a9059cbb60e01b815294831691850191909152650e8d4a5100006024850152919350169063a9059cbb906044016020604051808303815f875af1158015611377573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139b9190612863565b5060015460405163a9059cbb60e01b81526001600160a01b038481166004830152655e96630e800060248301529091169063a9059cbb906044016020604051808303815f875af11580156113f1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114159190612863565b5060015460405163a9059cbb60e01b81526001600160a01b03838116600483015265246139ca800060248301529091169063a9059cbb906044016020604051808303815f875af115801561146b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061148f9190612863565b505050505050505050565b335f8181526010602052604090205460ff1615156001146114cd5760405162461bcd60e51b81526004016107579061276e565b5f5b8351811015610875578281815181106114ea576114ea61279e565b6020026020010151600c5f8684815181106115075761150761279e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206002015f82825461153f91906127c6565b90915550506001016114cf565b5f5f8251116115ad5760405162461bcd60e51b815260206004820152602760248201527f4172726179206d75737420636f6e7461696e206174206c65617374206f6e6520604482015266195b195b595b9d60ca1b6064820152608401610757565b5f60015b8351811015611600578382815181106115cc576115cc61279e565b60200260200101518482815181106115e6576115e661279e565b602002602001015111156115f8578091505b6001016115b1565b5092915050565b61160f612204565b600255565b61161c612204565b6116255f61237f565b565b33436001839003611713576001600160a01b0382165f908152600c60205260409020546002111561166a5760405162461bcd60e51b8152600401610757906127d9565b6001600160a01b0382165f908152600c60205260408120805460029290611692908490612822565b9091555050600580545f908152600a6020908152604091829020600201849055915481518681529283015281018290526001600160a01b038316907f8d9f83849857ceaf892550c3236854ed313894d04f07d3a76725afc7a2235a379060600160405180910390a260058054905f61170983612882565b9190505550505050565b82600203610a06576001600160a01b0382165f908152600c6020526040902054600411156117535760405162461bcd60e51b8152600401610757906127d9565b6001600160a01b0382165f908152600c6020526040812080546004929061177b908490612822565b9091555050600680545f908152600b6020908152604091829020600201849055915481518681529283015281018290526001600160a01b038316907f8d9f83849857ceaf892550c3236854ed313894d04f07d3a76725afc7a2235a379060600160405180910390a260068054905f61170983612882565b5f6002825110156118565760405162461bcd60e51b815260206004820152602860248201527f4172726179206d75737420636f6e7461696e206174206c656173742074776f20604482015267656c656d656e747360c01b6064820152608401610757565b5f6118608361154c565b90505f811561186f575f611872565b60015b60ff1690505f5b84518110156118d4578281141580156118c3575084828151811061189f5761189f61279e565b60200260200101518582815181106118b9576118b961279e565b6020026020010151115b156118cc578091505b600101611879565b509392505050565b6118e4612204565b6001600160a01b03165f908152601060205260409020805460ff19166001179055565b335f8181526010602052604090205460ff16151560011461193a5760405162461bcd60e51b81526004016107579061276e565b5f838152600d602052604090206001015415801561196657505f838152600d6020526040902060030154155b801561198357505f838152600d602052604090206004015460ff16155b6119c45760405162461bcd60e51b815260206004820152601260248201527111d85b5948185b1c9958591e481cd85d995960721b6044820152606401610757565b5f838152600d6020908152604091829020600180820186905543600383015560048201805460ff1916909117905554915184815285926001600160a01b0316917f3f9816b7851af3e5a818edbae74a83371dae8fd137d3e6353ad90befdb227cc8910160405180910390a3505050565b335f8181526010602052604090205460ff161515600114611a675760405162461bcd60e51b81526004016107579061276e565b6003545f908152600e6020526040902060010154431015611ac05760405162461bcd60e51b81526020600482015260136024820152722a37bab93730b6b2b73a103737ba1037bb32b960691b6044820152606401610757565b600380545f908152600e60205260409020015460ff1615611b195760405162461bcd60e51b81526020600482015260136024820152722a37bab93730b6b2b73a103737ba1037bb32b960691b6044820152606401610757565b600380545f908152600e60205260408082208301805460ff19166001179055915481529081206002015460085460075491929160649190611b5a9085612835565b611b649190612835565b611b6e919061289a565b60015460095460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044016020604051808303815f875af1158015611bc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be69190612863565b506003547fde4041d130541c757b9ac932998643c84f40122ddc15d1cddb09ab61bad2cf854360025443611c1a91906127c6565b604080519283526020830191909152810184905260600160405180910390a2604051806080016040528043815260200160025443611c5891906127c6565b81526020015f81526020015f1515815250600e5f6003546001611c7b91906127c6565b815260208082019290925260409081015f908120845181559284015160018401559083015160028301556060909201516003918201805460ff191691151591909117905580549161170983612882565b335f8181526010602052604090205460ff161515600114611cfe5760405162461bcd60e51b81526004016107579061276e565b84600103611d6f575f848152600a60209081526040822080546001808201835582855283852090910180546001600160a01b0319166001600160a01b03881617905590810180549182018155808452918320018590559085905254600203611d6a57611d6a858561107f565b610873565b84600203610873575f848152600b60209081526040822080546001808201835582855283852090910180546001600160a01b0319166001600160a01b0388161790559081018054918201815580845291832001859055908590525460040361087357610873858561107f565b600f602052815f5260405f208181548110611df4575f80fd5b905f5260205f20015f91509150505481565b6003545f908152600e6020526040812060010154439080821015611e3557611e2e8282612822565b9250505090565b5f9250505090565b6060805f600f5f8581526020019081526020015f20805480602002602001604051908101604052809291908181526020018280548015611e9a57602002820191905f5260205f20905b815481526020019060010190808311611e86575b505050505090505f815167ffffffffffffffff811115611ebc57611ebc6123e5565b604051908082528060200260200182016040528015611ee5578160200160208202803683370190505b5090505f825167ffffffffffffffff811115611f0357611f036123e5565b604051908082528060200260200182016040528015611f2c578160200160208202803683370190505b5090505f5b8351811015611fe357838181518110611f4c57611f4c61279e565b6020026020010151838281518110611f6657611f6661279e565b602002602001018181525050600d5f858381518110611f8757611f8761279e565b602002602001015181526020019081526020015f205f015f9054906101000a90046001600160a01b0316828281518110611fc357611fc361279e565b6001600160a01b0390921660209283029190910190910152600101611f31565b505f5b60018351611ff49190612822565b8110156121ae575f5b600182855161200c9190612822565b6120169190612822565b8110156121a557600d5f8561202c8460016127c6565b8151811061203c5761203c61279e565b602002602001015181526020019081526020015f2060010154600d5f86848151811061206a5761206a61279e565b602002602001015181526020019081526020015f2060010154101561219d57836120958260016127c6565b815181106120a5576120a561279e565b60200260200101518482815181106120bf576120bf61279e565b60200260200101518583815181106120d9576120d961279e565b60200260200101868460016120ee91906127c6565b815181106120fe576120fe61279e565b602090810291909101019190915252826121198260016127c6565b815181106121295761212961279e565b60200260200101518382815181106121435761214361279e565b602002602001015184838151811061215d5761215d61279e565b602002602001018584600161217291906127c6565b815181106121825761218261279e565b6001600160a01b039384166020918202929092010152911690525b600101611ffd565b50600101611fe6565b50909590945092505050565b6121c2612204565b6001600160a01b0381166121eb57604051631e4fbdf760e01b81525f6004820152602401610757565b6121f48161237f565b50565b6121ff612204565b600855565b5f546001600160a01b031633146116255760405163118cdaa760e01b8152336004820152602401610757565b6060816001036122bd576040805160028082526060820183525f926020830190803683370190505090505f5b60028110156122b5575f858152600a602052604090206001018054829081106122875761228761279e565b905f5260205f2001548282815181106122a2576122a261279e565b602090810291909101015260010161225c565b509050612379565b816002036123425760408051600480825260a082019092525f91602082016080803683370190505090505f5b60048110156122b5575f858152600a602052604090206001018054829081106123145761231461279e565b905f5260205f20015482828151811061232f5761232f61279e565b60209081029190910101526001016122e9565b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964206d6f646560a01b6044820152606401610757565b92915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156123de575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612422576124226123e5565b604052919050565b5f67ffffffffffffffff821115612443576124436123e5565b5060051b60200190565b80356001600160a01b0381168114612463575f5ffd5b919050565b5f82601f830112612477575f5ffd5b813561248a6124858261242a565b6123f9565b8082825260208201915060208360051b8601019250858311156124ab575f5ffd5b602085015b838110156124cf576124c18161244d565b8352602092830192016124b0565b5095945050505050565b5f82601f8301126124e8575f5ffd5b81356124f66124858261242a565b8082825260208201915060208360051b860101925085831115612517575f5ffd5b602085015b838110156124cf57803583526020928301920161251c565b5f5f5f60608486031215612546575f5ffd5b833567ffffffffffffffff81111561255c575f5ffd5b61256886828701612468565b935050602084013567ffffffffffffffff811115612584575f5ffd5b612590868287016124d9565b93969395505050506040919091013590565b5f5f604083850312156125b3575f5ffd5b50508035926020909101359150565b5f5f604083850312156125d3575f5ffd5b6125dc8361244d565b946020939093013593505050565b5f5f604083850312156125fb575f5ffd5b823567ffffffffffffffff811115612611575f5ffd5b61261d85828601612468565b925050602083013567ffffffffffffffff811115612639575f5ffd5b612645858286016124d9565b9150509250929050565b5f6020828403121561265f575f5ffd5b813567ffffffffffffffff811115612675575f5ffd5b612681848285016124d9565b949350505050565b5f60208284031215612699575f5ffd5b6126a28261244d565b9392505050565b5f5f5f5f608085870312156126bc575f5ffd5b8435935060208501359250604085013591506126da6060860161244d565b905092959194509250565b604080825283519082018190525f9060208501906060840190835b8181101561271e578351835260209384019390920191600101612700565b5050838103602080860191909152855180835291810192508501905f5b818110156127625782516001600160a01b031684526020938401939092019160010161273b565b50919695505050505050565b60208082526016908201527529b2b73232b9103737ba1030baba3437b934bd32b21760511b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115612379576123796127b2565b60208082526029908201527f4e6f7420656e6f756768207469636b657473206c6f6164656420696e20796f756040820152681c881858d8dbdd5b9d60ba1b606082015260800190565b81810381811115612379576123796127b2565b8082028115828204841417612379576123796127b2565b5f6020828403121561285c575f5ffd5b5051919050565b5f60208284031215612873575f5ffd5b815180151581146126a2575f5ffd5b5f60018201612893576128936127b2565b5060010190565b5f826128b457634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220530af41cbcc7415d14991bd8fb183c71c49e3f13e7a57baeb2436ff9e1d950dd64736f6c634300081c0033
Deployed Bytecode Sourcemap
396:19989:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3101:46;;;;;;;;;;-1:-1:-1;3101:46:3;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3101:46:3;;;;;;;470:25:4;;;526:2;511:18;;504:34;;;;581:14;;574:22;554:18;;;547:50;;;;-1:-1:-1;;;;;633:32:4;628:2;613:18;;606:60;457:3;442:19;3101:46:3;;;;;;;;3380:37;;;;;;;;;;-1:-1:-1;3380:37:3;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3380:37:3;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;948:32:4;;;930:51;;1012:2;997:18;;990:34;;;;1040:18;;;1033:34;;;;1098:2;1083:18;;1076:34;1154:14;1147:22;1141:3;1126:19;;1119:51;917:3;902:19;3380:37:3;677:499:4;734:40:3;;;;;;;;;;;;;;;;;;;1327:25:4;;;1315:2;1300:18;734:40:3;1181:177:4;19580:104:3;;;;;;:::i;:::-;;:::i;:::-;;13610:509;;;;;;;;;;-1:-1:-1;13610:509:3;;;;;:::i;:::-;;:::i;8481:704::-;;;;;;;;;;-1:-1:-1;8481:704:3;;;;;:::i;:::-;;:::i;9307:496::-;;;;;;;;;;-1:-1:-1;9307:496:3;;;;;:::i;:::-;;:::i;589:38::-;;;;;;;;;;;;;;;;9877:347;;;:::i;19092:366::-;;;;;;:::i;:::-;;:::i;7513:802::-;;;;;;;;;;-1:-1:-1;7513:802:3;;;;;:::i;:::-;;:::i;816:39::-;;;;;;;;;;;;;;;;14915:1350;;;;;;:::i;:::-;;:::i;18514:255::-;;;;;;:::i;:::-;;:::i;5540:386::-;;;;;;;;;;-1:-1:-1;5540:386:3;;;;;:::i;:::-;;:::i;20072:108::-;;;;;;;;;;-1:-1:-1;20072:108:3;;;;;:::i;:::-;;:::i;658:34::-;;;;;;;;;;;;;;;;2293:101:0;;;;;;;;;;;;;:::i;3474:49:3:-;;;;;;;;;;-1:-1:-1;3474:49:3;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6087:25:4;;;6143:2;6128:18;;6121:34;;;;6171:18;;;6164:34;6241:14;6234:22;6229:2;6214:18;;6207:50;6074:3;6059:19;3474:49:3;5862:401:4;3194:46:3;;;;;;;;;;-1:-1:-1;3194:46:3;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3194:46:3;;;;;;;;;;;;;;6521:25:4;;;6577:2;6562:18;;6555:34;;;;6632:14;;6625:22;6605:18;;;6598:50;;;;-1:-1:-1;;;;;6684:32:4;;;6679:2;6664:18;;6657:60;6754:32;6748:3;6733:19;;6726:61;6508:3;6493:19;3194:46:3;6268:525:4;12123:1122:3;;;;;;:::i;:::-;;:::i;6064:505::-;;;;;;;;;;-1:-1:-1;6064:505:3;;;;;:::i;:::-;;:::i;1638:85:0:-;;;;;;;;;;-1:-1:-1;1684:7:0;1710:6;1638:85;;-1:-1:-1;;;;;1710:6:0;;;6944:51:4;;6932:2;6917:18;1638:85:0;6798:203:4;19824:92:3;;;;;;;;;;-1:-1:-1;19824:92:3;;;;;:::i;:::-;;:::i;14277:467::-;;;;;;;;;;-1:-1:-1;14277:467:3;;;;;:::i;:::-;;:::i;17329:965::-;;;:::i;16515:701::-;;;;;;:::i;:::-;;:::i;3583:52::-;;;;;;;;;;-1:-1:-1;3583:52:3;;;;;:::i;:::-;;:::i;3294:41::-;;;;;;;;;;-1:-1:-1;3294:41:3;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7945:25:4;;;8001:2;7986:18;;7979:34;;;;8029:18;;;8022:34;7933:2;7918:18;3294:41:3;7743:319:4;11670::3;;;;;;;;;;;;;:::i;10359:1213::-;;;;;;;;;;-1:-1:-1;10359:1213:3;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2543:215:0:-;;;;;;;;;;-1:-1:-1;2543:215:0;;;;;:::i;:::-;;:::i;20264:119:3:-;;;;;;;;;;-1:-1:-1;20264:119:3;;;;;:::i;:::-;;:::i;19580:104::-;1531:13:0;:11;:13::i;:::-;19656:11:3::1;:21:::0;19580:104::o;13610:509::-;4291:10;4274:14;4319;;;:6;:14;;;;;;;;:22;;:14;:22;4311:57;;;;-1:-1:-1;;;4311:57:3;;;;;;;:::i;:::-;;;;;;;;;13766:5:::1;13775:1;13766:10:::0;13762:351:::1;;13797:9;13792:131;13816:13;:20;13812:1;:24;13792:131;;;13898:7;13906:1;13898:10;;;;;;;;:::i;:::-;;;;;;;13861:7;:25;13869:13;13883:1;13869:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;13861:25:3::1;-1:-1:-1::0;;;;;13861:25:3::1;;;;;;;;;;;;:33;;;:47;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;13838:3:3::1;;13792:131;;;;13762:351;;;13943:5;13952:1;13943:10:::0;13939:174:::1;;13974:9;13969:134;13993:13;:20;13989:1;:24;13969:134;;;14078:7;14086:1;14078:10;;;;;;;;:::i;:::-;;;;;;;14038:7;:25;14046:13;14060:1;14046:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;14038:25:3::1;-1:-1:-1::0;;;;;14038:25:3::1;;;;;;;;;;;;:36;;;:50;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;14015:3:3::1;;13969:134;;;;13939:174;4264:122:::0;13610:509;;;:::o;8481:704::-;8571:10;8604:1;8595:10;;;8591:588;;-1:-1:-1;;;;;8646:15:3;;;;;;:7;:15;;;;;:23;8673:1;-1:-1:-1;8646:28:3;8621:128;;;;-1:-1:-1;;;8621:128:3;;;;;;;:::i;:::-;8771:21;;;;:12;:21;;;;;:28;;;;;:37;8763:66;;;;-1:-1:-1;;;8763:66:3;;10600:2:4;8763:66:3;;;10582:21:4;10639:2;10619:18;;;10612:30;-1:-1:-1;;;10658:18:4;;;10651:46;10714:18;;8763:66:3;10398:340:4;8763:66:3;-1:-1:-1;;;;;8843:15:3;;;;;;:7;:15;;;;;:28;;8870:1;;8843:15;:28;;8870:1;;8843:28;:::i;:::-;;;;-1:-1:-1;8591:588:3;;-1:-1:-1;8591:588:3;;8892:5;8901:1;8892:10;8888:291;;-1:-1:-1;;;;;8943:15:3;;;;;;:7;:15;;;;;:23;8970:1;-1:-1:-1;8943:28:3;8918:128;;;;-1:-1:-1;;;8918:128:3;;;;;;;:::i;:::-;9068:21;;;;:12;:21;;;;;:28;;;;;:37;9060:66;;;;-1:-1:-1;;;9060:66:3;;10600:2:4;9060:66:3;;;10582:21:4;10639:2;10619:18;;;10612:30;-1:-1:-1;;;10658:18:4;;;10651:46;10714:18;;9060:66:3;10398:340:4;9060:66:3;-1:-1:-1;;;;;9140:15:3;;;;;;:7;:15;;;;;:28;;9167:1;;9140:15;:28;;9167:1;;9140:28;:::i;:::-;;;;-1:-1:-1;;8888:291:3;8544:641;8481:704;;:::o;9307:496::-;9464:11;;9380:10;;9428:4;;9363:14;;9464:21;;9478:7;;9464:21;:::i;:::-;9517:4;;:37;;-1:-1:-1;;;9517:37:3;;-1:-1:-1;;;;;11241:32:4;;;9517:37:3;;;11223:51:4;9548:4:3;11290:18:4;;;11283:60;9443:42:3;;-1:-1:-1;9443:42:3;;9517:4;;;;:14;;11196:18:4;;9517:37:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;:119;;;;-1:-1:-1;9588:4:3;;:48;;-1:-1:-1;;;9588:48:3;;-1:-1:-1;;;;;11763:32:4;;;9588:48:3;;;11745:51:4;11832:32;;;11812:18;;;11805:60;11881:18;;;11874:34;;;9588:4:3;;;;:17;;11718:18:4;;9588:48:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9496:207;;;;-1:-1:-1;;;9496:207:3;;12403:2:4;9496:207:3;;;12385:21:4;12442:2;12422:18;;;12415:30;12481:34;12461:18;;;12454:62;-1:-1:-1;;;12532:18:4;;;12525:39;12581:19;;9496:207:3;12201:405:4;9496:207:3;-1:-1:-1;;;;;9714:15:3;;;;;;:7;:15;;;;;:34;;9741:7;;9714:15;:34;;9741:7;;9714:34;:::i;:::-;;;;-1:-1:-1;;9763:33:3;;1327:25:4;;;-1:-1:-1;;;;;9763:33:3;;;;;1315:2:4;1300:18;9763:33:3;;;;;;;9353:450;;;9307:496;:::o;9877:347::-;4435:6;;;;4434:7;4426:42;;;;-1:-1:-1;;;4426:42:3;;12813:2:4;4426:42:3;;;12795:21:4;12852:2;12832:18;;;12825:30;-1:-1:-1;;;12871:18:4;;;12864:52;12933:18;;4426:42:3;12611:346:4;4426:42:3;4478:6;:13;;-1:-1:-1;;4478:13:3;4487:4;4478:13;;;9958:10:::1;4478:6:::0;9996:15;;;:7:::1;:15;::::0;;;;:23:::1;;::::0;10037:11;10029:44:::1;;;::::0;-1:-1:-1;;;10029:44:3;;13164:2:4;10029:44:3::1;::::0;::::1;13146:21:4::0;13203:2;13183:18;;;13176:30;-1:-1:-1;;;13222:18:4;;;13215:50;13282:18;;10029:44:3::1;12962:344:4::0;10029:44:3::1;10084:4;::::0;:49:::1;::::0;-1:-1:-1;;;10084:49:3;;10110:4:::1;10084:49;::::0;::::1;11745:51:4::0;-1:-1:-1;;;;;11832:32:4;;;11812:18;;;11805:60;11881:18;;;11874:34;;;10084:4:3;;::::1;::::0;:17:::1;::::0;11718:18:4;;10084:49:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10163:6;-1:-1:-1::0;;;;;10148:31:3::1;;10171:7;10148:31;;;;1327:25:4::0;;1315:2;1300:18;;1181:177;10148:31:3::1;;;;;;;;-1:-1:-1::0;;;;;;10190:15:3::1;10216:1;10190:15:::0;;;:7:::1;:15;::::0;;;;:23:::1;;:27:::0;4512:6;:14;;-1:-1:-1;;4512:14:3;;;9877:347::o;19092:366::-;1531:13:0;:11;:13::i;:::-;19244:10:3::1;-1:-1:-1::0;;;;;19269:22:3;::::1;19265:103;;19307:30;::::0;-1:-1:-1;;;;;19307:21:3;::::1;::::0;:30;::::1;;;::::0;19329:7;;19307:30:::1;::::0;;;19329:7;19307:21;:30;::::1;;;;;;;;;;;;;;;;;;19265:103;19416:35;::::0;-1:-1:-1;;;19416:35:3;;19431:10:::1;19416:35;::::0;::::1;13485:51:4::0;13552:18;;;13545:34;;;19399:6:3;;-1:-1:-1;;;;;19416:14:3;::::1;::::0;::::1;::::0;13458:18:4;;19416:35:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7513:802::-:0;7583:10;7616:1;7607:10;;;7603:496;;-1:-1:-1;;;;;7658:15:3;;;;;;:7;:15;;;;;:23;7685:1;-1:-1:-1;7658:28:3;7633:128;;;;-1:-1:-1;;;7633:128:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;7775:15:3;;;;;;:7;:15;;;;;:28;;7802:1;;7775:15;:28;;7802:1;;7775:28;:::i;:::-;;;;-1:-1:-1;;7829:17:3;;7817:30;;;;:11;:30;;;;;:42;;:44;;;;;;:::i;:::-;;;;;;7603:496;;;7882:5;7891:1;7882:10;7878:221;;-1:-1:-1;;;;;7933:15:3;;;;;;:7;:15;;;;;7963:1;7933:26;;;;:31;;7908:135;;;;-1:-1:-1;;;7908:135:3;;13932:2:4;7908:135:3;;;13914:21:4;13971:2;13951:18;;;13944:30;14010:34;13990:18;;;13983:62;-1:-1:-1;;;14061:18:4;;;14054:43;14114:19;;7908:135:3;13730:409:4;7908:135:3;-1:-1:-1;;;;;8057:15:3;;;;;;:7;:15;;;;;8087:1;8057:26;;;:31;;8087:1;;8057:26;;:31;;8087:1;;8057:31;:::i;:::-;;;;-1:-1:-1;;7878:221:3;8130:39;;;;;;;;-1:-1:-1;;;;;8130:39:3;;;;;;-1:-1:-1;8130:39:3;;;;;;;8146:12;8130:39;;;;;;;;;;;;;;;;;;8115:11;;;8109:18;;:5;:18;;;;;:60;;;;-1:-1:-1;;;;;;8109:60:3;;;;;;;;;;;-1:-1:-1;8109:60:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8109:60:3;;;;;;;;;;;8195:17;8179:34;;:15;:34;;;;;8219:11;;8179:52;;;;;;;;;;;;;;;;;;8266:11;;8246:39;;1327:25:4;;;8130:39:3;;8246;;1300:18:4;8246:39:3;;;;;;;8295:11;:13;;;:11;:13;;;:::i;:::-;;;;;;7556:759;7513:802;:::o;14915:1350::-;4291:10;4274:14;4319;;;:6;:14;;;;;;;;:22;;:14;:22;4311:57;;;;-1:-1:-1;;;4311:57:3;;;;;;;:::i;:::-;15048:12:::1;15083:1;15074:10:::0;;;15070:1189:::1;;15100:16;15119:35;15132:21;15142:7;15151:1;15132:9;:21::i;15119:35::-;15168:14;15185:21:::0;;;:12:::1;:21;::::0;;;;:44;;15100:54;;-1:-1:-1;15168:14:3;;15100:54;;15185:44;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;15243:21;;;:12:::1;:21:::0;;;;;;;;:28:::1;::::0;;::::1;:35:::0;;15292:30:::1;::::0;;::::1;:45:::0;;;-1:-1:-1;;;;;15185:44:3;;::::1;;15351:37:::0;::::1;-1:-1:-1::0;;;;;;15351:37:3;;;;;;;-1:-1:-1;15351:37:3;;;;;;15402:4;15416:8:::1;::::0;15402:38;;-1:-1:-1;;;15402:38:3;;15416:8;;::::1;15402:38:::0;;::::1;13485:51:4::0;;;;15426:13:3::1;13552:18:4::0;;;13545:34;15185:44:3;;-1:-1:-1;15402:4:3::1;::::0;:13:::1;::::0;13458:18:4;;15402:38:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;15454:4:3::1;::::0;:37:::1;::::0;-1:-1:-1;;;15454:37:3;;-1:-1:-1;;;;;13503:32:4;;;15454:37:3::1;::::0;::::1;13485:51:4::0;15476:14:3::1;13552:18:4::0;;;13545:34;15454:4:3;;::::1;::::0;:13:::1;::::0;13458:18:4;;15454:37:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15086:416;;15070:1189;;;15512:5;15521:1;15512:10:::0;15508:751:::1;;15538:16;15557:35;15570:21;15580:7;15589:1;15570:9;:21::i;15557:35::-;15538:54;;15606:22;15631:41;15650:21;15660:7;15669:1;15650:9;:21::i;15631:41::-;15686:14;15703:21:::0;;;:12:::1;:21;::::0;;;;:44;;15606:66;;-1:-1:-1;15686:14:3;;15738:8;;15703:44;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;15784:21;;;:12:::1;:21:::0;;;;;;:80;;-1:-1:-1;;;;;15703:44:3;;::::1;::::0;-1:-1:-1;15784:21:3;15836:14;;15784:80;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;::::0;15878:21;;;:12:::1;:21:::0;;;;;;;;:28:::1;::::0;;::::1;:35:::0;;15927:30:::1;::::0;::::1;:45:::0;;;-1:-1:-1;;;;;15986:37:3;;::::1;15784:80;15986:37;-1:-1:-1::0;;;;;;15986:37:3;;;;;;;-1:-1:-1;15986:37:3;;;;;;16037:34:::1;::::0;;::::1;:49:::0;;-1:-1:-1;;;;;;16037:49:3::1;15784:80:::0;;::::1;16037:49:::0;;::::1;::::0;;16100:4;16114:8:::1;::::0;16100:39;;-1:-1:-1;;;16100:39:3;;16114:8;;::::1;16100:39:::0;;::::1;13485:51:4::0;;;;16124:14:3::1;13552:18:4::0;;;13545:34;15784:80:3;;-1:-1:-1;16100:4:3::1;::::0;:13:::1;::::0;13458:18:4;;16100:39:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;16153:4:3::1;::::0;:38:::1;::::0;-1:-1:-1;;;16153:38:3;;-1:-1:-1;;;;;13503:32:4;;;16153:38:3::1;::::0;::::1;13485:51:4::0;16175:15:3::1;13552:18:4::0;;;13545:34;16153:4:3;;::::1;::::0;:13:::1;::::0;13458:18:4;;16153:38:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;16205:4:3::1;::::0;:43:::1;::::0;-1:-1:-1;;;16205:43:3;;-1:-1:-1;;;;;13503:32:4;;;16205:43:3::1;::::0;::::1;13485:51:4::0;16233:14:3::1;13552:18:4::0;;;13545:34;16205:4:3;;::::1;::::0;:13:::1;::::0;13458:18:4;;16205:43:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15524:735;;;;15015:1250;4264:122:::0;14915:1350;;:::o;18514:255::-;4291:10;4274:14;4319;;;:6;:14;;;;;;;;:22;;:14;:22;4311:57;;;;-1:-1:-1;;;4311:57:3;;;;;;;:::i;:::-;18652:9:::1;18647:116;18671:8;:15;18667:1;:19;18647:116;;;18739:10;18750:1;18739:13;;;;;;;;:::i;:::-;;;;;;;18707:7;:20;18715:8;18724:1;18715:11;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;18707:20:3::1;-1:-1:-1::0;;;;;18707:20:3::1;;;;;;;;;;;;:28;;;:45;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;18688:3:3::1;;18647:116;;5540:386:::0;5621:7;5663:1;5648:5;:12;:16;5640:68;;;;-1:-1:-1;;;5640:68:3;;15846:2:4;5640:68:3;;;15828:21:4;15885:2;15865:18;;;15858:30;15924:34;15904:18;;;15897:62;-1:-1:-1;;;15975:18:4;;;15968:37;16022:19;;5640:68:3;15644:403:4;5640:68:3;5719:16;5767:1;5750:144;5774:5;:12;5770:1;:16;5750:144;;;5822:5;5828:8;5822:15;;;;;;;;:::i;:::-;;;;;;;5811:5;5817:1;5811:8;;;;;;;;:::i;:::-;;;;;;;:26;5807:77;;;5868:1;5857:12;;5807:77;5788:3;;5750:144;;;-1:-1:-1;5911:8:3;5540:386;-1:-1:-1;;5540:386:3:o;20072:108::-;1531:13:0;:11;:13::i;:::-;20144:18:3::1;:29:::0;20072:108::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;12123:1122:3:-;12204:10;12247:12;12282:1;12273:10;;;12269:970;;-1:-1:-1;;;;;12324:15:3;;;;;;:7;:15;;;;;:23;12351:1;-1:-1:-1;12324:28:3;12299:128;;;;-1:-1:-1;;;12299:128:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;12441:15:3;;;;;;:7;:15;;;;;:28;;12468:1;;12441:15;:28;;12468:1;;12441:28;:::i;:::-;;;;-1:-1:-1;;12497:19:3;;;12484:33;;;;:12;:33;;;;;;;;;:44;;:59;;;12642:19;;12562:143;;7945:25:4;;;7986:18;;;7979:34;8029:18;;8022:34;;;-1:-1:-1;;;;;12562:143:3;;;;;7933:2:4;7918:18;12562:143:3;;;;;;;12719:19;:21;;;:19;:21;;;:::i;:::-;;;;;;8544:641;8481:704;;:::o;12269:970::-;12761:5;12770:1;12761:10;12757:482;;-1:-1:-1;;;;;12812:15:3;;;;;;:7;:15;;;;;:23;12839:1;-1:-1:-1;12812:28:3;12787:128;;;;-1:-1:-1;;;12787:128:3;;;;;;;:::i;:::-;-1:-1:-1;;;;;12929:15:3;;;;;;:7;:15;;;;;:28;;12956:1;;12929:15;:28;;12956:1;;12929:28;:::i;:::-;;;;-1:-1:-1;;12985:19:3;;;12972:33;;;;:12;:33;;;;;;;;;:44;;:59;;;13130:19;;13050:143;;7945:25:4;;;7986:18;;;7979:34;8029:18;;8022:34;;;-1:-1:-1;;;;;13050:143:3;;;;;7933:2:4;7918:18;13050:143:3;;;;;;;13207:19;:21;;;:19;:21;;;:::i;6064:505::-;6151:7;6194:1;6178:5;:12;:17;;6170:70;;;;-1:-1:-1;;;6170:70:3;;16254:2:4;6170:70:3;;;16236:21:4;16293:2;16273:18;;;16266:30;16332:34;16312:18;;;16305:62;-1:-1:-1;;;16383:18:4;;;16376:38;16431:19;;6170:70:3;16052:404:4;6170:70:3;6251:16;6270:19;6283:5;6270:12;:19::i;:::-;6251:38;-1:-1:-1;6299:22:3;6325:13;;6324:23;;6346:1;6324:23;;;6342:1;6324:23;6299:48;;;-1:-1:-1;6363:9:3;6358:173;6382:5;:12;6378:1;:16;6358:173;;;6424:8;6419:1;:13;;:49;;;;;6447:5;6453:14;6447:21;;;;;;;;:::i;:::-;;;;;;;6436:5;6442:1;6436:8;;;;;;;;:::i;:::-;;;;;;;:32;6419:49;6415:106;;;6505:1;6488:18;;6415:106;6396:3;;6358:173;;;-1:-1:-1;6548:14:3;6064:505;-1:-1:-1;;;6064:505:3:o;19824:92::-;1531:13:0;:11;:13::i;:::-;-1:-1:-1;;;;;19888:14:3::1;;::::0;;;:6:::1;:14;::::0;;;;:21;;-1:-1:-1;;19888:21:3::1;19905:4;19888:21;::::0;;19824:92::o;14277:467::-;4291:10;4274:14;4319;;;:6;:14;;;;;;;;:22;;:14;:22;4311:57;;;;-1:-1:-1;;;4311:57:3;;;;;;;:::i;:::-;14380:14:::1;::::0;;;:5:::1;:14;::::0;;;;:20:::1;;::::0;:25;:73;::::1;;;-1:-1:-1::0;14425:14:3::1;::::0;;;:5:::1;:14;::::0;;;;:23:::1;;::::0;:28;14380:73:::1;:123;;;;-1:-1:-1::0;14473:14:3::1;::::0;;;:5:::1;:14;::::0;;;;:21:::1;;::::0;::::1;;:30;14380:123;14359:188;;;::::0;-1:-1:-1;;;14359:188:3;;16663:2:4;14359:188:3::1;::::0;::::1;16645:21:4::0;16702:2;16682:18;;;16675:30;-1:-1:-1;;;16721:18:4;;;16714:48;16779:18;;14359:188:3::1;16461:342:4::0;14359:188:3::1;14558:14;::::0;;;:5:::1;:14;::::0;;;;;;;;:20:::1;::::0;;::::1;:29:::0;;;14623:12:::1;14597:23;::::0;::::1;:38:::0;14645:21:::1;::::0;::::1;:28:::0;;-1:-1:-1;;14645:28:3::1;::::0;;::::1;::::0;;14700:19;14688:49;;1327:25:4;;;14558:14:3;;-1:-1:-1;;;;;14700:19:3::1;::::0;14688:49:::1;::::0;1300:18:4;14688:49:3::1;;;;;;;4264:122:::0;14277:467;;:::o;17329:965::-;4291:10;4274:14;4319;;;:6;:14;;;;;;;;:22;;:14;:22;4311:57;;;;-1:-1:-1;;;4311:57:3;;;;;;;:::i;:::-;17425:17:::1;::::0;17413:30:::1;::::0;;;:11:::1;:30;::::0;;;;:39:::1;;::::0;17456:12:::1;-1:-1:-1::0;17413:55:3::1;17392:121;;;::::0;-1:-1:-1;;;17392:121:3;;17010:2:4;17392:121:3::1;::::0;::::1;16992:21:4::0;17049:2;17029:18;;;17022:30;-1:-1:-1;;;17068:18:4;;;17061:49;17127:18;;17392:121:3::1;16808:343:4::0;17392:121:3::1;17556:17;::::0;;17544:30:::1;::::0;;;:11:::1;:30;::::0;;;;:37:::1;::::0;::::1;;:46;17523:112;;;::::0;-1:-1:-1;;;17523:112:3;;17010:2:4;17523:112:3::1;::::0;::::1;16992:21:4::0;17049:2;17029:18;;;17022:30;-1:-1:-1;;;17068:18:4;;;17061:49;17127:18;;17523:112:3::1;16808:343:4::0;17523:112:3::1;17658:17;::::0;;17646:30:::1;::::0;;;:11:::1;:30;::::0;;;;;:37;::::1;:44:::0;;-1:-1:-1;;17646:44:3::1;17686:4;17646:44;::::0;;17740:17;;17728:30;;;;;:42:::1;;::::0;17835:11:::1;::::0;17821::::1;::::0;17728:42;;17646:30;17862:3:::1;::::0;17835:11;17802:30:::1;::::0;17728:42;17802:30:::1;:::i;:::-;:44;;;;:::i;:::-;17801:64;;;;:::i;:::-;17876:4;::::0;17890:8:::1;::::0;17876:35:::1;::::0;-1:-1:-1;;;17876:35:3;;-1:-1:-1;;;;;17890:8:3;;::::1;17876:35;::::0;::::1;13485:51:4::0;13552:18;;;13545:34;;;17780:85:3;;-1:-1:-1;17876:4:3::1;::::0;:13:::1;::::0;13458:18:4;;17876:35:3::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17958:17;;17927:155;17989:12;18030:18;;18015:12;:33;;;;:::i;:::-;17927:155;::::0;;7945:25:4;;;8001:2;7986:18;;7979:34;;;;8029:18;;8022:34;;;7933:2;7918:18;17927:155:3::1;;;;;;;18130:127;;;;;;;;18154:12;18130:127;;;;18195:18;;18180:12;:33;;;;:::i;:::-;18130:127;;;;18227:1;18130:127;;;;18242:5;18130:127;;;;::::0;18093:11:::1;:34;18105:17;;18125:1;18105:21;;;;:::i;:::-;18093:34:::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;18093:34:3;;;:164;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;18093:164:3::1;::::0;::::1;;::::0;;;::::1;::::0;;18268:19;;;::::1;::::0;::::1;:::i;16515:701::-:0;4291:10;4274:14;4319;;;:6;:14;;;;;;;;:22;;:14;:22;4311:57;;;;-1:-1:-1;;;4311:57:3;;;;;;;:::i;:::-;16682:5:::1;16691:1;16682:10:::0;16678:532:::1;;16708:21;::::0;;;:12:::1;:21;::::0;;;;;;:48;;::::1;::::0;;::::1;::::0;;;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;16708:48:3::1;-1:-1:-1::0;;;;;16708:48:3;::::1;;::::0;;16770:28;;::::1;:41:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;;16829:21;;;;:35;16868:1:::1;16829:40:::0;16825:106:::1;;16889:27;16901:5;16908:7;16889:11;:27::i;:::-;16678:532;;;16951:5;16960:1;16951:10:::0;16947:263:::1;;16977:21;::::0;;;:12:::1;:21;::::0;;;;;;:48;;::::1;::::0;;::::1;::::0;;;;;;;;;;::::1;::::0;;-1:-1:-1;;;;;;16977:48:3::1;-1:-1:-1::0;;;;;16977:48:3;::::1;;::::0;;17039:28;;::::1;:41:::0;;;;::::1;::::0;;;;;;;;::::1;::::0;;;17098:21;;;;:35;17137:1:::1;17098:40:::0;17094:106:::1;;17158:27;17170:5;17177:7;17158:11;:27::i;3583:52::-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11670:319::-;11822:17;;11727:7;11810:30;;;:11;:30;;;;;:39;;;11769:12;;11864:23;;;11860:123;;;11910:23;11921:12;11910:8;:23;:::i;:::-;11903:30;;;;11670:319;:::o;11860:123::-;11971:1;11964:8;;;;11670:319;:::o;10359:1213::-;10443:16;10461;10489:24;10516:15;:30;10532:13;10516:30;;;;;;;;;;;10489:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10556:30;10603:7;:14;10589:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10589:29:3;;10556:62;;10628:28;10673:7;:14;10659:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10659:29:3;-1:-1:-1;10628:60:3;-1:-1:-1;10704:9:3;10699:152;10723:7;:14;10719:1;:18;10699:152;;;10777:7;10785:1;10777:10;;;;;;;;:::i;:::-;;;;;;;10758:13;10772:1;10758:16;;;;;;;;:::i;:::-;;;;;;:29;;;;;10818:5;:17;10824:7;10832:1;10824:10;;;;;;;;:::i;:::-;;;;;;;10818:17;;;;;;;;;;;:22;;;;;;;;;;-1:-1:-1;;;;;10818:22:3;10801:11;10813:1;10801:14;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10801:39:3;;;:14;;;;;;;;;;;:39;10739:3;;10699:152;;;-1:-1:-1;10866:9:3;10861:660;10908:1;10885:13;:20;:24;;;;:::i;:::-;10881:1;:28;10861:660;;;10935:9;10930:581;10981:1;10977;10954:13;:20;:24;;;;:::i;:::-;:28;;;;:::i;:::-;10950:1;:32;10930:581;;;11084:5;:27;11090:13;11104:5;:1;11108;11104:5;:::i;:::-;11090:20;;;;;;;;:::i;:::-;;;;;;;11084:27;;;;;;;;;;;:33;;;11032:5;:23;11038:13;11052:1;11038:16;;;;;;;;:::i;:::-;;;;;;;11032:23;;;;;;;;;;;:29;;;:85;11007:490;;;11227:13;11241:5;:1;11245;11241:5;:::i;:::-;11227:20;;;;;;;;:::i;:::-;;;;;;;11273:13;11287:1;11273:16;;;;;;;;:::i;:::-;;;;;;;11159:13;11173:1;11159:16;;;;;;;;:::i;:::-;;;;;;11177:13;11191:1;11195;11191:5;;;;:::i;:::-;11177:20;;;;;;;;:::i;:::-;;;;;;;;;;11158:153;;;;;11398:11;11410:5;:1;11414;11410:5;:::i;:::-;11398:18;;;;;;;;:::i;:::-;;;;;;;11442:11;11454:1;11442:14;;;;;;;;:::i;:::-;;;;;;;11334:11;11346:1;11334:14;;;;;;;;:::i;:::-;;;;;;11350:11;11362:1;11366;11362:5;;;;:::i;:::-;11350:18;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11333:145:3;;;11350:18;;;;;;;;;11333:145;;;;;11007:490;10984:3;;10930:581;;;-1:-1:-1;10911:3:3;;10861:660;;;-1:-1:-1;11538:13:3;;11553:11;;-1:-1:-1;10359:1213:3;-1:-1:-1;;;10359:1213:3:o;2543:215:0:-;1531:13;:11;:13::i;:::-;-1:-1:-1;;;;;2627:22:0;::::1;2623:91;;2672:31;::::0;-1:-1:-1;;;2672:31:0;;2700:1:::1;2672:31;::::0;::::1;6944:51:4::0;6917:18;;2672:31:0::1;6798:203:4::0;2623:91:0::1;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;20264:119:3:-;1531:13:0;:11;:13::i;:::-;20351:11:3::1;:25:::0;20264:119::o;1796:162:0:-;1684:7;1710:6;-1:-1:-1;;;;;1710:6:0;735:10:2;1855:23:0;1851:101;;1901:40;;-1:-1:-1;;;1901:40:0;;735:10:2;1901:40:0;;;6944:51:4;6917:18;;1901:40:0;6798:203:4;6750:645:3;6846:16;6878:5;6887:1;6878:10;6874:515;;6930:16;;;6944:1;6930:16;;;;;;;;6904:23;;6930:16;;;;;;;;;;-1:-1:-1;;6904:42:3;-1:-1:-1;6965:6:3;6960:105;6981:1;6977;:5;6960:105;;;7019:21;;;;:12;:21;;;;;:28;;:31;;7048:1;;7019:31;;;;;;:::i;:::-;;;;;;;;;7007:6;7014:1;7007:9;;;;;;;;:::i;:::-;;;;;;;;;;:43;6984:3;;6960:105;;;-1:-1:-1;7085:6:3;-1:-1:-1;7078:13:3;;6874:515;7112:5;7121:1;7112:10;7108:281;;7164:16;;;7178:1;7164:16;;;;;;;;;7138:23;;7164:16;;;;;;;;;;-1:-1:-1;;7138:42:3;-1:-1:-1;7199:6:3;7194:105;7215:1;7211;:5;7194:105;;;7253:21;;;;:12;:21;;;;;:28;;:31;;7282:1;;7253:31;;;;;;:::i;:::-;;;;;;;;;7241:6;7248:1;7241:9;;;;;;;;:::i;:::-;;;;;;;;;;:43;7218:3;;7194:105;;7108:281;7356:22;;-1:-1:-1;;;7356:22:3;;17580:2:4;7356:22:3;;;17562:21:4;17619:2;17599:18;;;17592:30;-1:-1:-1;;;17638:18:4;;;17631:42;17690:18;;7356:22:3;17378:336:4;7108:281:3;6750:645;;;;:::o;2912:187:0:-;2985:16;3004:6;;-1:-1:-1;;;;;3020:17:0;;;-1:-1:-1;;;;;;3020:17:0;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;14:226:4:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;187:23:4;;14:226;-1:-1:-1;14:226:4:o;1363:127::-;1424:10;1419:3;1415:20;1412:1;1405:31;1455:4;1452:1;1445:15;1479:4;1476:1;1469:15;1495:275;1566:2;1560:9;1631:2;1612:13;;-1:-1:-1;;1608:27:4;1596:40;;1666:18;1651:34;;1687:22;;;1648:62;1645:88;;;1713:18;;:::i;:::-;1749:2;1742:22;1495:275;;-1:-1:-1;1495:275:4:o;1775:183::-;1835:4;1868:18;1860:6;1857:30;1854:56;;;1890:18;;:::i;:::-;-1:-1:-1;1935:1:4;1931:14;1947:4;1927:25;;1775:183::o;1963:173::-;2031:20;;-1:-1:-1;;;;;2080:31:4;;2070:42;;2060:70;;2126:1;2123;2116:12;2060:70;1963:173;;;:::o;2141:675::-;2195:5;2248:3;2241:4;2233:6;2229:17;2225:27;2215:55;;2266:1;2263;2256:12;2215:55;2306:6;2293:20;2333:64;2349:47;2389:6;2349:47;:::i;:::-;2333:64;:::i;:::-;2421:3;2445:6;2440:3;2433:19;2477:4;2472:3;2468:14;2461:21;;2538:4;2528:6;2525:1;2521:14;2513:6;2509:27;2505:38;2491:52;;2566:3;2558:6;2555:15;2552:35;;;2583:1;2580;2573:12;2552:35;2619:4;2611:6;2607:17;2633:152;2649:6;2644:3;2641:15;2633:152;;;2717:23;2736:3;2717:23;:::i;:::-;2705:36;;2770:4;2761:14;;;;2666;2633:152;;;-1:-1:-1;2803:7:4;2141:675;-1:-1:-1;;;;;2141:675:4:o;2821:723::-;2875:5;2928:3;2921:4;2913:6;2909:17;2905:27;2895:55;;2946:1;2943;2936:12;2895:55;2986:6;2973:20;3013:64;3029:47;3069:6;3029:47;:::i;3013:64::-;3101:3;3125:6;3120:3;3113:19;3157:4;3152:3;3148:14;3141:21;;3218:4;3208:6;3205:1;3201:14;3193:6;3189:27;3185:38;3171:52;;3246:3;3238:6;3235:15;3232:35;;;3263:1;3260;3253:12;3232:35;3299:4;3291:6;3287:17;3313:200;3329:6;3324:3;3321:15;3313:200;;;3421:17;;3451:18;;3498:4;3489:14;;;;3346;3313:200;;3549:704;3676:6;3684;3692;3745:2;3733:9;3724:7;3720:23;3716:32;3713:52;;;3761:1;3758;3751:12;3713:52;3801:9;3788:23;3834:18;3826:6;3823:30;3820:50;;;3866:1;3863;3856:12;3820:50;3889:61;3942:7;3933:6;3922:9;3918:22;3889:61;:::i;:::-;3879:71;;;4003:2;3992:9;3988:18;3975:32;4032:18;4022:8;4019:32;4016:52;;;4064:1;4061;4054:12;4016:52;4087:63;4142:7;4131:8;4120:9;4116:24;4087:63;:::i;:::-;3549:704;;4077:73;;-1:-1:-1;;;;4219:2:4;4204:18;;;;4191:32;;3549:704::o;4258:346::-;4326:6;4334;4387:2;4375:9;4366:7;4362:23;4358:32;4355:52;;;4403:1;4400;4393:12;4355:52;-1:-1:-1;;4448:23:4;;;4568:2;4553:18;;;4540:32;;-1:-1:-1;4258:346:4:o;4609:300::-;4677:6;4685;4738:2;4726:9;4717:7;4713:23;4709:32;4706:52;;;4754:1;4751;4744:12;4706:52;4777:29;4796:9;4777:29;:::i;:::-;4767:39;4875:2;4860:18;;;;4847:32;;-1:-1:-1;;;4609:300:4:o;4914:590::-;5032:6;5040;5093:2;5081:9;5072:7;5068:23;5064:32;5061:52;;;5109:1;5106;5099:12;5061:52;5149:9;5136:23;5182:18;5174:6;5171:30;5168:50;;;5214:1;5211;5204:12;5168:50;5237:61;5290:7;5281:6;5270:9;5266:22;5237:61;:::i;:::-;5227:71;;;5351:2;5340:9;5336:18;5323:32;5380:18;5370:8;5367:32;5364:52;;;5412:1;5409;5402:12;5364:52;5435:63;5490:7;5479:8;5468:9;5464:24;5435:63;:::i;:::-;5425:73;;;4914:590;;;;;:::o;5509:348::-;5593:6;5646:2;5634:9;5625:7;5621:23;5617:32;5614:52;;;5662:1;5659;5652:12;5614:52;5702:9;5689:23;5735:18;5727:6;5724:30;5721:50;;;5767:1;5764;5757:12;5721:50;5790:61;5843:7;5834:6;5823:9;5819:22;5790:61;:::i;:::-;5780:71;5509:348;-1:-1:-1;;;;5509:348:4:o;7006:186::-;7065:6;7118:2;7106:9;7097:7;7093:23;7089:32;7086:52;;;7134:1;7131;7124:12;7086:52;7157:29;7176:9;7157:29;:::i;:::-;7147:39;7006:186;-1:-1:-1;;;7006:186:4:o;7197:541::-;7283:6;7291;7299;7307;7360:3;7348:9;7339:7;7335:23;7331:33;7328:53;;;7377:1;7374;7367:12;7328:53;7422:23;;;-1:-1:-1;7542:2:4;7527:18;;7514:32;;-1:-1:-1;7645:2:4;7630:18;;7617:32;;-1:-1:-1;7694:38:4;7728:2;7713:18;;7694:38;:::i;:::-;7684:48;;7197:541;;;;;;;:::o;8067:1171::-;8335:2;8347:21;;;8417:13;;8320:18;;;8439:22;;;8287:4;;8530;8518:17;;;8492:2;8477:18;;;8287:4;8563:173;8577:6;8574:1;8571:13;8563:173;;;8638:13;;8626:26;;8681:4;8709:17;;;;8672:14;;;;8599:1;8592:9;8563:173;;;-1:-1:-1;;8774:19:4;;;8767:4;8752:20;;;8745:49;;;;8844:13;;8866:21;;;8905:14;;;;-1:-1:-1;8944:17:4;;;8981:1;8991:219;9007:8;9002:3;8999:17;8991:219;;;9080:15;;-1:-1:-1;;;;;9076:41:4;9062:56;;9151:4;9140:16;;;;9181:19;;;;9114:1;9026:11;8991:219;;;-1:-1:-1;9227:5:4;;8067:1171;-1:-1:-1;;;;;;8067:1171:4:o;9243:346::-;9445:2;9427:21;;;9484:2;9464:18;;;9457:30;-1:-1:-1;;;9518:2:4;9503:18;;9496:52;9580:2;9565:18;;9243:346::o;9594:127::-;9655:10;9650:3;9646:20;9643:1;9636:31;9686:4;9683:1;9676:15;9710:4;9707:1;9700:15;9726:127;9787:10;9782:3;9778:20;9775:1;9768:31;9818:4;9815:1;9808:15;9842:4;9839:1;9832:15;9858:125;9923:9;;;9944:10;;;9941:36;;;9957:18;;:::i;9988:405::-;10190:2;10172:21;;;10229:2;10209:18;;;10202:30;10268:34;10263:2;10248:18;;10241:62;-1:-1:-1;;;10334:2:4;10319:18;;10312:39;10383:3;10368:19;;9988:405::o;10743:128::-;10810:9;;;10831:11;;;10828:37;;;10845:18;;:::i;10876:168::-;10949:9;;;10980;;10997:15;;;10991:22;;10977:37;10967:71;;11018:18;;:::i;11354:184::-;11424:6;11477:2;11465:9;11456:7;11452:23;11448:32;11445:52;;;11493:1;11490;11483:12;11445:52;-1:-1:-1;11516:16:4;;11354:184;-1:-1:-1;11354:184:4:o;11919:277::-;11986:6;12039:2;12027:9;12018:7;12014:23;12010:32;12007:52;;;12055:1;12052;12045:12;12007:52;12087:9;12081:16;12140:5;12133:13;12126:21;12119:5;12116:32;12106:60;;12162:1;12159;12152:12;13590:135;13629:3;13650:17;;;13647:43;;13670:18;;:::i;:::-;-1:-1:-1;13717:1:4;13706:13;;13590:135::o;17156:217::-;17196:1;17222;17212:132;;17266:10;17261:3;17257:20;17254:1;17247:31;17301:4;17298:1;17291:15;17329:4;17326:1;17319:15;17212:132;-1:-1:-1;17358:9:4;;17156:217::o
Swarm Source
ipfs://530af41cbcc7415d14991bd8fb183c71c49e3f13e7a57baeb2436ff9e1d950dd
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.