Source Code
Latest 25 from a total of 12,616 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Add NF Ttickets | 6539011 | 567 days ago | IN | 0 GLMR | 0.289281 | ||||
| Add NF Ttickets | 6538982 | 567 days ago | IN | 0 GLMR | 0.59122512 | ||||
| Add Rewards | 6538600 | 567 days ago | IN | 0 GLMR | 0.00807562 | ||||
| Add Rewards | 6538596 | 567 days ago | IN | 0 GLMR | 0.01103687 | ||||
| Add Rewards | 6538589 | 567 days ago | IN | 0 GLMR | 0.00978601 | ||||
| Add Rewards | 6538580 | 567 days ago | IN | 0 GLMR | 0.01103237 | ||||
| Add Rewards | 6538577 | 567 days ago | IN | 0 GLMR | 0.010526 | ||||
| Add Rewards | 6538574 | 567 days ago | IN | 0 GLMR | 0.0143035 | ||||
| Add Rewards | 6538571 | 567 days ago | IN | 0 GLMR | 0.00971712 | ||||
| Add Rewards | 6538568 | 567 days ago | IN | 0 GLMR | 0.01398612 | ||||
| Add Rewards | 6538565 | 567 days ago | IN | 0 GLMR | 0.01754912 | ||||
| Add Rewards | 6538561 | 567 days ago | IN | 0 GLMR | 0.02051937 | ||||
| Add Rewards | 6538558 | 567 days ago | IN | 0 GLMR | 0.0164335 | ||||
| Add Rewards | 6538555 | 567 days ago | IN | 0 GLMR | 0.01674037 | ||||
| Add Rewards | 6538552 | 567 days ago | IN | 0 GLMR | 0.04702675 | ||||
| Add Rewards | 6538548 | 567 days ago | IN | 0 GLMR | 0.03181462 | ||||
| Add Rewards | 6538545 | 567 days ago | IN | 0 GLMR | 0.0367275 | ||||
| Add Rewards | 6538542 | 567 days ago | IN | 0 GLMR | 0.04018475 | ||||
| Add Rewards | 6538538 | 567 days ago | IN | 0 GLMR | 0.043137 | ||||
| Add Rewards | 6538535 | 567 days ago | IN | 0 GLMR | 0.02541712 | ||||
| Add Rewards | 6538532 | 567 days ago | IN | 0 GLMR | 0.03313137 | ||||
| Add Rewards | 6538528 | 567 days ago | IN | 0 GLMR | 0.137982 | ||||
| Enter Game | 6483958 | 575 days ago | IN | 0 GLMR | 0.02134105 | ||||
| Enter Game | 6440149 | 581 days ago | IN | 0 GLMR | 0.021228 | ||||
| Enter Game | 6440106 | 581 days ago | IN | 0 GLMR | 0.021228 |
View more zero value Internal Transactions in Advanced View mode
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PinkDrop
Compiler Version
v0.8.25+commit.b61c2a91
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 v1.2
* @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 = 1;
/// @notice game ID
uint256 public currentGame = 1;
/// @notice price of a ticket
uint256 public ticketPrice = 1000000000000;
/// @notice burn % per tournament
uint256 public burnPercent = 20;
/// @notice burn addy
address public burnAddy = 0x000000000000000000000000000000000000dEaD;
/// @notice treasury % per tournament
uint256 public treasuryPercent = 5;
/// @notice treasury addy
address public treasuryAddy = 0xb9d3DF2b9e143d9e03E0480BfBE16973169544A7;
/// @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 PlayerScore {
/// @notice player's address
address player;
/// @notice player's score
uint256 score;
}
struct PlayerReward {
/// @notice player's address
address player;
/// @notice player's current reward for tournament
uint256 reward;
}
/// @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(uint256 indexed gameId, uint256 score);
event TournamentSettled(
uint256 indexed tournamentId,
uint256 startBlock,
uint256 endBlock,
uint256 burnedAmount,
uint256 treasuryReceived
);
// ========================================
// Public Functions
// ========================================
/**
* @notice Function use to initiate a game
* @param _mode: type of ticket used to play
*/
function enterGame(uint256 _mode) noReentrancy external returns (uint256) {
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++;
return currentGame - 1;
}
/**
* @notice Allow players to buy tickets to play
* @param _amount: number of tickets to buy
*/
function buyTickets(uint256 _amount) noReentrancy 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 array of best score per unique player for a given tournament
*/
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);
PlayerScore[] memory playerScores = new PlayerScore[](gameIds.length);
for (uint256 i = 0; i < gameIds.length; i++) {
playerScores[i] = PlayerScore(games[gameIds[i]].addy, games[gameIds[i]].score);
}
for (uint256 i = 0; i < playerScores.length - 1; i++) {
for (uint256 j = 0; j < playerScores.length - i - 1; j++) {
if (playerScores[j].score < playerScores[j + 1].score) {
(playerScores[j], playerScores[j + 1]) = (playerScores[j + 1], playerScores[j]);
}
}
}
for (uint256 i = 0; i < playerScores.length; i++) {
sortedGameIds[i] = playerScores[i].score;
gamePlayers[i] = playerScores[i].player;
}
return (sortedGameIds, gamePlayers);
}
/**
* @notice Return the number of blocks left for the current tournament
*/
function blocksLeftInTournament() external view returns (uint256) {
uint256 currentBlock = block.number;
uint256 endBlock = tournaments[currentTournament].endBlock;
if (currentBlock < endBlock) {
return endBlock - currentBlock;
} else {
return 0;
}
}
function generateRewardsTable(uint256[] memory sortedGameIds, address[] memory gamePlayers) external view returns (PlayerReward[] memory) {
uint256 totalTicketsUsed = tournaments[currentTournament].ticketsUsed;
uint256 ticketsAfterDeduction = totalTicketsUsed * (100 - burnPercent - treasuryPercent) / 100;
uint256 rewardsForPlayer = ticketsAfterDeduction * ticketPrice;
PlayerReward[] memory rewards = new PlayerReward[](sortedGameIds.length);
// Calculate rewards for the top 5 players based on fixed percentages
uint256[] memory fixedRewards = new uint256[](5);
fixedRewards[0] = rewardsForPlayer * 10 / 100; // 10% for 1st place
fixedRewards[1] = rewardsForPlayer * 8 / 100; // 8% for 2nd place
fixedRewards[2] = rewardsForPlayer * 6 / 100; // 6% for 3rd place
fixedRewards[3] = rewardsForPlayer * 4 / 100; // 4% for 4th place
fixedRewards[4] = rewardsForPlayer * 3 / 100; // 3% for 5th place
// Calculate rewards for the remaining players
uint256 remainingRewards = rewardsForPlayer - (fixedRewards[0] + fixedRewards[1] + fixedRewards[2] + fixedRewards[3] + fixedRewards[4]);
uint256 top25Players = sortedGameIds.length / 4; // 25% of the total number of players
uint256 top50Players = sortedGameIds.length / 2; // 50% of the total number of players
uint256 top25Rewards = remainingRewards * 65 / 100; // 65% for top 25% players
uint256 top50Rewards = remainingRewards * 35 / 100; // 35% for 25 to 50% players
// Assign rewards for the top 25% players
for (uint256 i = 0; i < top25Players; i++) {
rewards[i] = PlayerReward(gamePlayers[i], top25Rewards / top25Players);
}
// Assign rewards for players between 25% and 50%
for (uint256 i = top25Players; i < top50Players; i++) {
rewards[i] = PlayerReward(gamePlayers[i], top50Rewards / (top50Players - top25Players));
}
// Assign fixed rewards for the top 5 players
for (uint256 i = 0; i < 5; i++) {
rewards[i] = PlayerReward(gamePlayers[i], fixedRewards[i]);
}
return rewards;
}
// ========================================
// Back-End Functions
// ========================================
/**
* @notice NFTs holders get rewards with free tickets
* @dev Admin Required
* @param _playerWallet: EOW of user
* @param _amount: amount of NFT tickets to give
*/
function addNFTtickets(
address[] memory _playerWallet,
uint256[] memory _amount
) external onlyAdmin {
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(_gameId, _score);
}
/**
* @notice End the current tournament and start the new one
* @dev Admin Required but potentially to remove
*/
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;
uint256 treasuryAmount = (totalTicketsUsed *
ticketPrice *
treasuryPercent) / 100;
pink.transfer(burnAddy, burnAmount);
pink.transfer(treasuryAddy, treasuryAmount);
emit TournamentSettled(
currentTournament,
block.number,
block.number + lockTimeTournament,
burnAmount,
treasuryAmount
);
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 and treasury
* @dev Owner required.
* @param _parameter: 1 for burn 2 for treasury
*/
function setDistribution(
uint256 _parameter,
uint256 _newPercent
) public onlyOwner {
if (_parameter == 1) {
burnPercent = _newPercent;
} else if (_parameter == 2) {
treasuryPercent = _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": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"remappings": []
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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":"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":"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"},{"indexed":false,"internalType":"uint256","name":"treasuryReceived","type":"uint256"}],"name":"TournamentSettled","type":"event"},{"inputs":[{"internalType":"address[]","name":"_playerWallet","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"addNFTtickets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_players","type":"address[]"},{"internalType":"uint256[]","name":"_pinkToAdd","type":"uint256[]"}],"name":"addRewards","outputs":[],"stateMutability":"payable","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":[],"name":"burnAddy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnPercent","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":[],"name":"currentGame","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":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","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":"sortedGameIds","type":"uint256[]"},{"internalType":"address[]","name":"gamePlayers","type":"address[]"}],"name":"generateRewardsTable","outputs":[{"components":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"reward","type":"uint256"}],"internalType":"struct PinkDrop.PlayerReward[]","name":"","type":"tuple[]"}],"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":[],"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":"_parameter","type":"uint256"},{"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":[],"name":"settleTournament","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ticketPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"inputs":[],"name":"treasuryAddy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052611c206002556001600355600160045564e8d4a51000600555601460065561dead60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560085573b9d3df2b9e143d9e03e0480bfbe16973169544a760095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100c8575f80fd5b50335f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361013a575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610131919061038d565b60405180910390fd5b6101498161028d60201b60201c565b506001600e5f73ddc9320cc5c141207442d18463b0ae04512ef22373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555073ffffffff30478fafbe935e466da114e14fb3563d60015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180608001604052804381526020016002544361022691906103dc565b81526020015f81526020015f1515815250600c5f60035481526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555090505061040f565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103778261034e565b9050919050565b6103878161036d565b82525050565b5f6020820190506103a05f83018461037e565b92915050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6103e6826103a6565b91506103f1836103a6565b9250828201905080821115610409576104086103af565b5b92915050565b61366a8061041c5f395ff3fe6080604052600436106101c1575f3560e01c8063600c8827116100f6578063af37182111610094578063e3635f1e11610063578063e3635f1e146105cc578063e85d2289146105f6578063f18dba2614610633578063f2fde38b1461065b576101c1565b8063af3718211461050c578063d4b036aa14610516578063d99887a414610552578063e2eb41ff1461058e576101c1565b80637503e1b7116100d05780637503e1b7146104535780638da5cb5b146104925780638eec99c8146104bc5780639ff93088146104e4576101c1565b8063600c8827146103eb57806360b663bb14610413578063715018a61461043d576101c1565b80632f50d6dc1161016357806343d6582b1161013d57806343d6582b14610341578063563d50fa1461037d578063595a90f2146103a55780635c592afa146103c1576101c1565b80632f50d6dc146102f1578063372500ab1461031b578063401d448214610325576101c1565b80631209b1f61161019f5780631209b1f61461025957806313299b681461028357806315981650146102ad5780632f366637146102c9576101c1565b806303807ee5146101c557806304ef9d58146101ef578063117a5b9014610219575b5f80fd5b3480156101d0575f80fd5b506101d9610683565b6040516101e69190612754565b60405180910390f35b3480156101fa575f80fd5b50610203610689565b6040516102109190612754565b60405180910390f35b348015610224575f80fd5b5061023f600480360381019061023a91906127a8565b61068f565b60405161025095949392919061282c565b60405180910390f35b348015610264575f80fd5b5061026d6106ec565b60405161027a9190612754565b60405180910390f35b34801561028e575f80fd5b506102976106f2565b6040516102a4919061287d565b60405180910390f35b6102c760048036038101906102c291906127a8565b610717565b005b3480156102d4575f80fd5b506102ef60048036038101906102ea91906127a8565b610729565b005b3480156102fc575f80fd5b506103056109f0565b6040516103129190612754565b60405180910390f35b6103236109f6565b005b61033f600480360381019061033a91906128c0565b610c38565b005b34801561034c575f80fd5b50610367600480360381019061036291906127a8565b610d48565b6040516103749190612754565b60405180910390f35b348015610388575f80fd5b506103a3600480360381019061039e9190612b0e565b611153565b005b6103bf60048036038101906103ba9190612b0e565b61128f565b005b3480156103cc575f80fd5b506103d56113cb565b6040516103e2919061287d565b60405180910390f35b3480156103f6575f80fd5b50610411600480360381019061040c91906127a8565b6113f0565b005b34801561041e575f80fd5b50610427611402565b6040516104349190612754565b60405180910390f35b348015610448575f80fd5b50610451611408565b005b34801561045e575f80fd5b50610479600480360381019061047491906127a8565b61141b565b6040516104899493929190612b84565b60405180910390f35b34801561049d575f80fd5b506104a6611453565b6040516104b3919061287d565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd9190612bc7565b61147a565b005b3480156104ef575f80fd5b5061050a60048036038101906105059190612bf2565b6114da565b005b6105146116ad565b005b348015610521575f80fd5b5061053c60048036038101906105379190612c30565b611b11565b6040516105499190612d99565b60405180910390f35b34801561055d575f80fd5b5061057860048036038101906105739190612bf2565b612013565b6040516105859190612754565b60405180910390f35b348015610599575f80fd5b506105b460048036038101906105af9190612bc7565b61203e565b6040516105c393929190612db9565b60405180910390f35b3480156105d7575f80fd5b506105e0612064565b6040516105ed9190612754565b60405180910390f35b348015610601575f80fd5b5061061c600480360381019061061791906127a8565b6120a9565b60405161062a929190612f3e565b60405180910390f35b34801561063e575f80fd5b5061065960048036038101906106549190612bf2565b6124dc565b005b348015610666575f80fd5b50610681600480360381019061067c9190612bc7565b61250d565b005b60065481565b60085481565b600b602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015490806004015f9054906101000a900460ff16905085565b60055481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61071f612591565b8060058190555050565b600f5f9054906101000a900460ff1615610778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076f90612fcd565b60405180910390fd5b6001600f5f6101000a81548160ff0219169083151502179055505f3390505f3090505f836005546107a99190613018565b90508060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e85306040518363ffffffff1660e01b8152600401610808929190613059565b602060405180830381865afa158015610823573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108479190613094565b101580156108ef575060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff1660e01b81526004016108ae939291906130bf565b6020604051808303815f875af11580156108ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ee919061311e565b5b61092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610925906131b9565b60405180910390fd5b83600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f82825461097c91906131d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fe11731cb4f1eb3ec3dd09bdc96809bb07365f4c881cda3192b397a4bc0b6da40856040516109c99190612754565b60405180910390a25050505f600f5f6101000a81548160ff02191690831515021790555050565b60035481565b600f5f9054906101000a900460ff1615610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c90612fcd565b60405180910390fd5b6001600f5f6101000a81548160ff0219169083151502179055505f3390505f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015490505f8111610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090613254565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3084846040518463ffffffff1660e01b8152600401610b47939291906130bf565b6020604051808303815f875af1158015610b63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b87919061311e565b508173ffffffffffffffffffffffffffffffffffffffff167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051610bce9190612754565b60405180910390a25f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002018190555050505f600f5f6101000a81548160ff021916908315150217905550565b610c40612591565b5f3390505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cc1578073ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015610cba573d5f803e3d5ffd5b5050610d44565b5f8390508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401610d00929190613272565b6020604051808303815f875af1158015610d1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d40919061311e565b5050505b5050565b5f600f5f9054906101000a900460ff1615610d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8f90612fcd565b60405180910390fd5b6001600f5f6101000a81548160ff0219169083151502179055505f33905060018303610ec7576001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01541015610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890613309565b60405180910390fd5b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f828254610e909190613327565b92505081905550600c5f60035481526020019081526020015f206002015f815480929190610ebd9061335a565b9190505550610fac565b60028303610fab576001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101541015610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a90613411565b60405180910390fd5b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015f828254610fa39190613327565b925050819055505b5b6040518060a001604052808273ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020014381526020015f81526020015f1515815250600b5f60045481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff021916908315150217905550905050600d5f60035481526020019081526020015f20600454908060018154018082558091505060019003905f5260205f20015f90919091909150556004548173ffffffffffffffffffffffffffffffffffffffff167f9a1a3c45c9a593fe515b398aac3639ed6ac33d78b8c7eeb8f81241e8ecf65ee9856040516111049190612754565b60405180910390a360045f81548092919061111e9061335a565b919050555060016004546111329190613327565b9150505f600f5f6101000a81548160ff021916908315150217905550919050565b5f33905060011515600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90613479565b60405180910390fd5b5f5b83518110156112895782818151811061120557611204613497565b5b6020026020010151600a5f86848151811061122357611222613497565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015f82825461127591906131d7565b9250508190555080806001019150506111e9565b50505050565b5f33905060011515600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a90613479565b60405180910390fd5b5f5b83518110156113c55782818151811061134157611340613497565b5b6020026020010151600a5f86848151811061135f5761135e613497565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015f8282546113b191906131d7565b925050819055508080600101915050611325565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113f8612591565b8060028190555050565b60045481565b611410612591565b6114195f612618565b565b600c602052805f5260405f205f91509050805f015490806001015490806002015490806003015f9054906101000a900460ff16905084565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611482612591565b6001600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f33905060011515600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615151461156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590613479565b60405180910390fd5b5f600b5f8581526020019081526020015f20600101541480156115a457505f600b5f8581526020019081526020015f2060030154145b80156115d357505f1515600b5f8581526020019081526020015f206004015f9054906101000a900460ff161515145b611612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116099061350e565b60405180910390fd5b81600b5f8581526020019081526020015f206001018190555043600b5f8581526020019081526020015f20600301819055506001600b5f8581526020019081526020015f206004015f6101000a81548160ff021916908315150217905550827f0c076aae091fc919e8f23294e4131683c901d239b789df8a4b92e402546f09a1836040516116a09190612754565b60405180910390a2505050565b5f33905060011515600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173890613479565b60405180910390fd5b43600c5f60035481526020019081526020015f2060010154111561179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190613576565b60405180910390fd5b5f1515600c5f60035481526020019081526020015f206003015f9054906101000a900460ff16151514611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613576565b60405180910390fd5b6001600c5f60035481526020019081526020015f206003015f6101000a81548160ff0219169083151502179055505f600c5f60035481526020019081526020015f206002015490505f60646006546005548461185e9190613018565b6118689190613018565b61187291906135c1565b90505f6064600854600554856118889190613018565b6118929190613018565b61189c91906135c1565b905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161191b929190613272565b6020604051808303815f875af1158015611937573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195b919061311e565b5060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016119d9929190613272565b6020604051808303815f875af11580156119f5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a19919061311e565b506003547fce16ddb24ef21ea1b5e1ca44ae4d099a651a45cb3ef02cdea6f571525258bc324360025443611a4d91906131d7565b8585604051611a5f94939291906135f1565b60405180910390a2604051806080016040528043815260200160025443611a8691906131d7565b81526020015f81526020015f1515815250600c5f6001600354611aa991906131d7565b81526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555090505060035f815480929190611b069061335a565b919050555050505050565b60605f600c5f60035481526020019081526020015f206002015490505f60646008546006546064611b429190613327565b611b4c9190613327565b83611b579190613018565b611b6191906135c1565b90505f60055482611b729190613018565b90505f865167ffffffffffffffff811115611b9057611b8f612912565b5b604051908082528060200260200182016040528015611bc957816020015b611bb66126e0565b815260200190600190039081611bae5790505b5090505f600567ffffffffffffffff811115611be857611be7612912565b5b604051908082528060200260200182016040528015611c165781602001602082028036833780820191505090505b5090506064600a84611c289190613018565b611c3291906135c1565b815f81518110611c4557611c44613497565b5b6020026020010181815250506064600884611c609190613018565b611c6a91906135c1565b81600181518110611c7e57611c7d613497565b5b6020026020010181815250506064600684611c999190613018565b611ca391906135c1565b81600281518110611cb757611cb6613497565b5b6020026020010181815250506064600484611cd29190613018565b611cdc91906135c1565b81600381518110611cf057611cef613497565b5b6020026020010181815250506064600384611d0b9190613018565b611d1591906135c1565b81600481518110611d2957611d28613497565b5b6020026020010181815250505f81600481518110611d4a57611d49613497565b5b602002602001015182600381518110611d6657611d65613497565b5b602002602001015183600281518110611d8257611d81613497565b5b602002602001015184600181518110611d9e57611d9d613497565b5b6020026020010151855f81518110611db957611db8613497565b5b6020026020010151611dcb91906131d7565b611dd591906131d7565b611ddf91906131d7565b611de991906131d7565b84611df49190613327565b90505f60048a51611e0591906135c1565b90505f60028b51611e1691906135c1565b90505f6064604185611e289190613018565b611e3291906135c1565b90505f6064602386611e449190613018565b611e4e91906135c1565b90505f5b84811015611ed55760405180604001604052808e8381518110611e7857611e77613497565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020018685611ea791906135c1565b815250888281518110611ebd57611ebc613497565b5b60200260200101819052508080600101915050611e52565b505f8490505b83811015611f695760405180604001604052808e8381518110611f0157611f00613497565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020018686611f309190613327565b84611f3b91906135c1565b815250888281518110611f5157611f50613497565b5b60200260200101819052508080600101915050611edb565b505f5b6005811015611fff5760405180604001604052808e8381518110611f9357611f92613497565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168152602001888381518110611fc957611fc8613497565b5b6020026020010151815250888281518110611fe757611fe6613497565b5b60200260200101819052508080600101915050611f6c565b50869a505050505050505050505092915050565b600d602052815f5260405f20818154811061202c575f80fd5b905f5260205f20015f91509150505481565b600a602052805f5260405f205f91509050805f0154908060010154908060020154905083565b5f804390505f600c5f60035481526020019081526020015f20600101549050808210156120a05781816120979190613327565b925050506120a6565b5f925050505b90565b6060805f600d5f8581526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561210657602002820191905f5260205f20905b8154815260200190600101908083116120f2575b505050505090505f815167ffffffffffffffff81111561212957612128612912565b5b6040519080825280602002602001820160405280156121575781602001602082028036833780820191505090505b5090505f825167ffffffffffffffff81111561217657612175612912565b5b6040519080825280602002602001820160405280156121a45781602001602082028036833780820191505090505b5090505f835167ffffffffffffffff8111156121c3576121c2612912565b5b6040519080825280602002602001820160405280156121fc57816020015b6121e961270e565b8152602001906001900390816121e15790505b5090505f5b84518110156122da576040518060400160405280600b5f88858151811061222b5761222a613497565b5b602002602001015181526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f88858151811061229357612292613497565b5b602002602001015181526020019081526020015f20600101548152508282815181106122c2576122c1613497565b5b60200260200101819052508080600101915050612201565b505f5b600182516122eb9190613327565b81101561240a575f5b60018284516123039190613327565b61230d9190613327565b8110156123fc578260018261232291906131d7565b8151811061233357612332613497565b5b60200260200101516020015183828151811061235257612351613497565b5b60200260200101516020015110156123ef578260018261237291906131d7565b8151811061238357612382613497565b5b602002602001015183828151811061239e5761239d613497565b5b60200260200101518483815181106123b9576123b8613497565b5b60200260200101856001856123ce91906131d7565b815181106123df576123de613497565b5b6020026020010182905282905250505b80806001019150506122f4565b5080806001019150506122dd565b505f5b81518110156124cc5781818151811061242957612428613497565b5b60200260200101516020015184828151811061244857612447613497565b5b60200260200101818152505081818151811061246757612466613497565b5b60200260200101515f015183828151811061248557612484613497565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808060010191505061240d565b5082829550955050505050915091565b6124e4612591565b600182036124f85780600681905550612509565b6002820361250857806008819055505b5b5050565b612515612591565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612585575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161257c919061287d565b60405180910390fd5b61258e81612618565b50565b6125996126d9565b73ffffffffffffffffffffffffffffffffffffffff166125b7611453565b73ffffffffffffffffffffffffffffffffffffffff1614612616576125da6126d9565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161260d919061287d565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f819050919050565b61274e8161273c565b82525050565b5f6020820190506127675f830184612745565b92915050565b5f604051905090565b5f80fd5b5f80fd5b6127878161273c565b8114612791575f80fd5b50565b5f813590506127a28161277e565b92915050565b5f602082840312156127bd576127bc612776565b5b5f6127ca84828501612794565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127fc826127d3565b9050919050565b61280c816127f2565b82525050565b5f8115159050919050565b61282681612812565b82525050565b5f60a08201905061283f5f830188612803565b61284c6020830187612745565b6128596040830186612745565b6128666060830185612745565b612873608083018461281d565b9695505050505050565b5f6020820190506128905f830184612803565b92915050565b61289f816127f2565b81146128a9575f80fd5b50565b5f813590506128ba81612896565b92915050565b5f80604083850312156128d6576128d5612776565b5b5f6128e3858286016128ac565b92505060206128f485828601612794565b9150509250929050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61294882612902565b810181811067ffffffffffffffff8211171561296757612966612912565b5b80604052505050565b5f61297961276d565b9050612985828261293f565b919050565b5f67ffffffffffffffff8211156129a4576129a3612912565b5b602082029050602081019050919050565b5f80fd5b5f6129cb6129c68461298a565b612970565b905080838252602082019050602084028301858111156129ee576129ed6129b5565b5b835b81811015612a175780612a0388826128ac565b8452602084019350506020810190506129f0565b5050509392505050565b5f82601f830112612a3557612a346128fe565b5b8135612a458482602086016129b9565b91505092915050565b5f67ffffffffffffffff821115612a6857612a67612912565b5b602082029050602081019050919050565b5f612a8b612a8684612a4e565b612970565b90508083825260208201905060208402830185811115612aae57612aad6129b5565b5b835b81811015612ad75780612ac38882612794565b845260208401935050602081019050612ab0565b5050509392505050565b5f82601f830112612af557612af46128fe565b5b8135612b05848260208601612a79565b91505092915050565b5f8060408385031215612b2457612b23612776565b5b5f83013567ffffffffffffffff811115612b4157612b4061277a565b5b612b4d85828601612a21565b925050602083013567ffffffffffffffff811115612b6e57612b6d61277a565b5b612b7a85828601612ae1565b9150509250929050565b5f608082019050612b975f830187612745565b612ba46020830186612745565b612bb16040830185612745565b612bbe606083018461281d565b95945050505050565b5f60208284031215612bdc57612bdb612776565b5b5f612be9848285016128ac565b91505092915050565b5f8060408385031215612c0857612c07612776565b5b5f612c1585828601612794565b9250506020612c2685828601612794565b9150509250929050565b5f8060408385031215612c4657612c45612776565b5b5f83013567ffffffffffffffff811115612c6357612c6261277a565b5b612c6f85828601612ae1565b925050602083013567ffffffffffffffff811115612c9057612c8f61277a565b5b612c9c85828601612a21565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612cd8816127f2565b82525050565b612ce78161273c565b82525050565b604082015f820151612d015f850182612ccf565b506020820151612d146020850182612cde565b50505050565b5f612d258383612ced565b60408301905092915050565b5f602082019050919050565b5f612d4782612ca6565b612d518185612cb0565b9350612d5c83612cc0565b805f5b83811015612d8c578151612d738882612d1a565b9750612d7e83612d31565b925050600181019050612d5f565b5085935050505092915050565b5f6020820190508181035f830152612db18184612d3d565b905092915050565b5f606082019050612dcc5f830186612745565b612dd96020830185612745565b612de66040830184612745565b949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612e228383612cde565b60208301905092915050565b5f602082019050919050565b5f612e4482612dee565b612e4e8185612df8565b9350612e5983612e08565b805f5b83811015612e89578151612e708882612e17565b9750612e7b83612e2e565b925050600181019050612e5c565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612eca8383612ccf565b60208301905092915050565b5f602082019050919050565b5f612eec82612e96565b612ef68185612ea0565b9350612f0183612eb0565b805f5b83811015612f31578151612f188882612ebf565b9750612f2383612ed6565b925050600181019050612f04565b5085935050505092915050565b5f6040820190508181035f830152612f568185612e3a565b90508181036020830152612f6a8184612ee2565b90509392505050565b5f82825260208201905092915050565b7f4e6f2072652d656e7472616e637920616c6c6f776564000000000000000000005f82015250565b5f612fb7601683612f73565b9150612fc282612f83565b602082019050919050565b5f6020820190508181035f830152612fe481612fab565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6130228261273c565b915061302d8361273c565b925082820261303b8161273c565b9150828204841483151761305257613051612feb565b5b5092915050565b5f60408201905061306c5f830185612803565b6130796020830184612803565b9392505050565b5f8151905061308e8161277e565b92915050565b5f602082840312156130a9576130a8612776565b5b5f6130b684828501613080565b91505092915050565b5f6060820190506130d25f830186612803565b6130df6020830185612803565b6130ec6040830184612745565b949350505050565b6130fd81612812565b8114613107575f80fd5b50565b5f81519050613118816130f4565b92915050565b5f6020828403121561313357613132612776565b5b5f6131408482850161310a565b91505092915050565b7f5472616e73666572206661696c6564206f7220496e73756666696369656e74205f8201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b5f6131a3602983612f73565b91506131ae82613149565b604082019050919050565b5f6020820190508181035f8301526131d081613197565b9050919050565b5f6131e18261273c565b91506131ec8361273c565b925082820190508082111561320457613203612feb565b5b92915050565b7f4e6f207265776172647320746f20636c61696d210000000000000000000000005f82015250565b5f61323e601483612f73565b91506132498261320a565b602082019050919050565b5f6020820190508181035f83015261326b81613232565b9050919050565b5f6040820190506132855f830185612803565b6132926020830184612745565b9392505050565b7f4e6f7420656e6f756768207469636b657473206c6f6164656420696e20796f755f8201527f72206163636f756e740000000000000000000000000000000000000000000000602082015250565b5f6132f3602983612f73565b91506132fe82613299565b604082019050919050565b5f6020820190508181035f830152613320816132e7565b9050919050565b5f6133318261273c565b915061333c8361273c565b925082820390508181111561335457613353612feb565b5b92915050565b5f6133648261273c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361339657613395612feb565b5b600182019050919050565b7f4e6f7420656e6f756768204e4654207469636b657473206c6f6164656420696e5f8201527f20796f7572206163636f756e7400000000000000000000000000000000000000602082015250565b5f6133fb602d83612f73565b9150613406826133a1565b604082019050919050565b5f6020820190508181035f830152613428816133ef565b9050919050565b7f53656e646572206e6f7420617574686f72697a65642e000000000000000000005f82015250565b5f613463601683612f73565b915061346e8261342f565b602082019050919050565b5f6020820190508181035f83015261349081613457565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f47616d6520616c726561647920736176656400000000000000000000000000005f82015250565b5f6134f8601283612f73565b9150613503826134c4565b602082019050919050565b5f6020820190508181035f830152613525816134ec565b9050919050565b7f546f75726e616d656e74206e6f74206f766572000000000000000000000000005f82015250565b5f613560601383612f73565b915061356b8261352c565b602082019050919050565b5f6020820190508181035f83015261358d81613554565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6135cb8261273c565b91506135d68361273c565b9250826135e6576135e5613594565b5b828204905092915050565b5f6080820190506136045f830187612745565b6136116020830186612745565b61361e6040830185612745565b61362b6060830184612745565b9594505050505056fea2646970667358221220ed007958a5e58d0b272cb864dc937f1034b78d7b912748fee372444712faa0b764736f6c63430008190033
Deployed Bytecode
0x6080604052600436106101c1575f3560e01c8063600c8827116100f6578063af37182111610094578063e3635f1e11610063578063e3635f1e146105cc578063e85d2289146105f6578063f18dba2614610633578063f2fde38b1461065b576101c1565b8063af3718211461050c578063d4b036aa14610516578063d99887a414610552578063e2eb41ff1461058e576101c1565b80637503e1b7116100d05780637503e1b7146104535780638da5cb5b146104925780638eec99c8146104bc5780639ff93088146104e4576101c1565b8063600c8827146103eb57806360b663bb14610413578063715018a61461043d576101c1565b80632f50d6dc1161016357806343d6582b1161013d57806343d6582b14610341578063563d50fa1461037d578063595a90f2146103a55780635c592afa146103c1576101c1565b80632f50d6dc146102f1578063372500ab1461031b578063401d448214610325576101c1565b80631209b1f61161019f5780631209b1f61461025957806313299b681461028357806315981650146102ad5780632f366637146102c9576101c1565b806303807ee5146101c557806304ef9d58146101ef578063117a5b9014610219575b5f80fd5b3480156101d0575f80fd5b506101d9610683565b6040516101e69190612754565b60405180910390f35b3480156101fa575f80fd5b50610203610689565b6040516102109190612754565b60405180910390f35b348015610224575f80fd5b5061023f600480360381019061023a91906127a8565b61068f565b60405161025095949392919061282c565b60405180910390f35b348015610264575f80fd5b5061026d6106ec565b60405161027a9190612754565b60405180910390f35b34801561028e575f80fd5b506102976106f2565b6040516102a4919061287d565b60405180910390f35b6102c760048036038101906102c291906127a8565b610717565b005b3480156102d4575f80fd5b506102ef60048036038101906102ea91906127a8565b610729565b005b3480156102fc575f80fd5b506103056109f0565b6040516103129190612754565b60405180910390f35b6103236109f6565b005b61033f600480360381019061033a91906128c0565b610c38565b005b34801561034c575f80fd5b50610367600480360381019061036291906127a8565b610d48565b6040516103749190612754565b60405180910390f35b348015610388575f80fd5b506103a3600480360381019061039e9190612b0e565b611153565b005b6103bf60048036038101906103ba9190612b0e565b61128f565b005b3480156103cc575f80fd5b506103d56113cb565b6040516103e2919061287d565b60405180910390f35b3480156103f6575f80fd5b50610411600480360381019061040c91906127a8565b6113f0565b005b34801561041e575f80fd5b50610427611402565b6040516104349190612754565b60405180910390f35b348015610448575f80fd5b50610451611408565b005b34801561045e575f80fd5b50610479600480360381019061047491906127a8565b61141b565b6040516104899493929190612b84565b60405180910390f35b34801561049d575f80fd5b506104a6611453565b6040516104b3919061287d565b60405180910390f35b3480156104c7575f80fd5b506104e260048036038101906104dd9190612bc7565b61147a565b005b3480156104ef575f80fd5b5061050a60048036038101906105059190612bf2565b6114da565b005b6105146116ad565b005b348015610521575f80fd5b5061053c60048036038101906105379190612c30565b611b11565b6040516105499190612d99565b60405180910390f35b34801561055d575f80fd5b5061057860048036038101906105739190612bf2565b612013565b6040516105859190612754565b60405180910390f35b348015610599575f80fd5b506105b460048036038101906105af9190612bc7565b61203e565b6040516105c393929190612db9565b60405180910390f35b3480156105d7575f80fd5b506105e0612064565b6040516105ed9190612754565b60405180910390f35b348015610601575f80fd5b5061061c600480360381019061061791906127a8565b6120a9565b60405161062a929190612f3e565b60405180910390f35b34801561063e575f80fd5b5061065960048036038101906106549190612bf2565b6124dc565b005b348015610666575f80fd5b50610681600480360381019061067c9190612bc7565b61250d565b005b60065481565b60085481565b600b602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003015490806004015f9054906101000a900460ff16905085565b60055481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61071f612591565b8060058190555050565b600f5f9054906101000a900460ff1615610778576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076f90612fcd565b60405180910390fd5b6001600f5f6101000a81548160ff0219169083151502179055505f3390505f3090505f836005546107a99190613018565b90508060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e85306040518363ffffffff1660e01b8152600401610808929190613059565b602060405180830381865afa158015610823573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108479190613094565b101580156108ef575060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8484846040518463ffffffff1660e01b81526004016108ae939291906130bf565b6020604051808303815f875af11580156108ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ee919061311e565b5b61092e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610925906131b9565b60405180910390fd5b83600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f82825461097c91906131d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fe11731cb4f1eb3ec3dd09bdc96809bb07365f4c881cda3192b397a4bc0b6da40856040516109c99190612754565b60405180910390a25050505f600f5f6101000a81548160ff02191690831515021790555050565b60035481565b600f5f9054906101000a900460ff1615610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c90612fcd565b60405180910390fd5b6001600f5f6101000a81548160ff0219169083151502179055505f3390505f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015490505f8111610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae090613254565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3084846040518463ffffffff1660e01b8152600401610b47939291906130bf565b6020604051808303815f875af1158015610b63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b87919061311e565b508173ffffffffffffffffffffffffffffffffffffffff167ffc30cddea38e2bf4d6ea7d3f9ed3b6ad7f176419f4963bd81318067a4aee73fe82604051610bce9190612754565b60405180910390a25f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002018190555050505f600f5f6101000a81548160ff021916908315150217905550565b610c40612591565b5f3390505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cc1578073ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f19350505050158015610cba573d5f803e3d5ffd5b5050610d44565b5f8390508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401610d00929190613272565b6020604051808303815f875af1158015610d1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d40919061311e565b5050505b5050565b5f600f5f9054906101000a900460ff1615610d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8f90612fcd565b60405180910390fd5b6001600f5f6101000a81548160ff0219169083151502179055505f33905060018303610ec7576001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01541015610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3890613309565b60405180910390fd5b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f828254610e909190613327565b92505081905550600c5f60035481526020019081526020015f206002015f815480929190610ebd9061335a565b9190505550610fac565b60028303610fab576001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101541015610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a90613411565b60405180910390fd5b6001600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015f828254610fa39190613327565b925050819055505b5b6040518060a001604052808273ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020014381526020015f81526020015f1515815250600b5f60045481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff021916908315150217905550905050600d5f60035481526020019081526020015f20600454908060018154018082558091505060019003905f5260205f20015f90919091909150556004548173ffffffffffffffffffffffffffffffffffffffff167f9a1a3c45c9a593fe515b398aac3639ed6ac33d78b8c7eeb8f81241e8ecf65ee9856040516111049190612754565b60405180910390a360045f81548092919061111e9061335a565b919050555060016004546111329190613327565b9150505f600f5f6101000a81548160ff021916908315150217905550919050565b5f33905060011515600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90613479565b60405180910390fd5b5f5b83518110156112895782818151811061120557611204613497565b5b6020026020010151600a5f86848151811061122357611222613497565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015f82825461127591906131d7565b9250508190555080806001019150506111e9565b50505050565b5f33905060011515600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514611323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131a90613479565b60405180910390fd5b5f5b83518110156113c55782818151811061134157611340613497565b5b6020026020010151600a5f86848151811061135f5761135e613497565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015f8282546113b191906131d7565b925050819055508080600101915050611325565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113f8612591565b8060028190555050565b60045481565b611410612591565b6114195f612618565b565b600c602052805f5260405f205f91509050805f015490806001015490806002015490806003015f9054906101000a900460ff16905084565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611482612591565b6001600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f33905060011515600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615151461156e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156590613479565b60405180910390fd5b5f600b5f8581526020019081526020015f20600101541480156115a457505f600b5f8581526020019081526020015f2060030154145b80156115d357505f1515600b5f8581526020019081526020015f206004015f9054906101000a900460ff161515145b611612576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116099061350e565b60405180910390fd5b81600b5f8581526020019081526020015f206001018190555043600b5f8581526020019081526020015f20600301819055506001600b5f8581526020019081526020015f206004015f6101000a81548160ff021916908315150217905550827f0c076aae091fc919e8f23294e4131683c901d239b789df8a4b92e402546f09a1836040516116a09190612754565b60405180910390a2505050565b5f33905060011515600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151514611741576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173890613479565b60405180910390fd5b43600c5f60035481526020019081526020015f2060010154111561179a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179190613576565b60405180910390fd5b5f1515600c5f60035481526020019081526020015f206003015f9054906101000a900460ff16151514611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613576565b60405180910390fd5b6001600c5f60035481526020019081526020015f206003015f6101000a81548160ff0219169083151502179055505f600c5f60035481526020019081526020015f206002015490505f60646006546005548461185e9190613018565b6118689190613018565b61187291906135c1565b90505f6064600854600554856118889190613018565b6118929190613018565b61189c91906135c1565b905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161191b929190613272565b6020604051808303815f875af1158015611937573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195b919061311e565b5060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016119d9929190613272565b6020604051808303815f875af11580156119f5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a19919061311e565b506003547fce16ddb24ef21ea1b5e1ca44ae4d099a651a45cb3ef02cdea6f571525258bc324360025443611a4d91906131d7565b8585604051611a5f94939291906135f1565b60405180910390a2604051806080016040528043815260200160025443611a8691906131d7565b81526020015f81526020015f1515815250600c5f6001600354611aa991906131d7565b81526020019081526020015f205f820151815f015560208201518160010155604082015181600201556060820151816003015f6101000a81548160ff02191690831515021790555090505060035f815480929190611b069061335a565b919050555050505050565b60605f600c5f60035481526020019081526020015f206002015490505f60646008546006546064611b429190613327565b611b4c9190613327565b83611b579190613018565b611b6191906135c1565b90505f60055482611b729190613018565b90505f865167ffffffffffffffff811115611b9057611b8f612912565b5b604051908082528060200260200182016040528015611bc957816020015b611bb66126e0565b815260200190600190039081611bae5790505b5090505f600567ffffffffffffffff811115611be857611be7612912565b5b604051908082528060200260200182016040528015611c165781602001602082028036833780820191505090505b5090506064600a84611c289190613018565b611c3291906135c1565b815f81518110611c4557611c44613497565b5b6020026020010181815250506064600884611c609190613018565b611c6a91906135c1565b81600181518110611c7e57611c7d613497565b5b6020026020010181815250506064600684611c999190613018565b611ca391906135c1565b81600281518110611cb757611cb6613497565b5b6020026020010181815250506064600484611cd29190613018565b611cdc91906135c1565b81600381518110611cf057611cef613497565b5b6020026020010181815250506064600384611d0b9190613018565b611d1591906135c1565b81600481518110611d2957611d28613497565b5b6020026020010181815250505f81600481518110611d4a57611d49613497565b5b602002602001015182600381518110611d6657611d65613497565b5b602002602001015183600281518110611d8257611d81613497565b5b602002602001015184600181518110611d9e57611d9d613497565b5b6020026020010151855f81518110611db957611db8613497565b5b6020026020010151611dcb91906131d7565b611dd591906131d7565b611ddf91906131d7565b611de991906131d7565b84611df49190613327565b90505f60048a51611e0591906135c1565b90505f60028b51611e1691906135c1565b90505f6064604185611e289190613018565b611e3291906135c1565b90505f6064602386611e449190613018565b611e4e91906135c1565b90505f5b84811015611ed55760405180604001604052808e8381518110611e7857611e77613497565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020018685611ea791906135c1565b815250888281518110611ebd57611ebc613497565b5b60200260200101819052508080600101915050611e52565b505f8490505b83811015611f695760405180604001604052808e8381518110611f0157611f00613497565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020018686611f309190613327565b84611f3b91906135c1565b815250888281518110611f5157611f50613497565b5b60200260200101819052508080600101915050611edb565b505f5b6005811015611fff5760405180604001604052808e8381518110611f9357611f92613497565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff168152602001888381518110611fc957611fc8613497565b5b6020026020010151815250888281518110611fe757611fe6613497565b5b60200260200101819052508080600101915050611f6c565b50869a505050505050505050505092915050565b600d602052815f5260405f20818154811061202c575f80fd5b905f5260205f20015f91509150505481565b600a602052805f5260405f205f91509050805f0154908060010154908060020154905083565b5f804390505f600c5f60035481526020019081526020015f20600101549050808210156120a05781816120979190613327565b925050506120a6565b5f925050505b90565b6060805f600d5f8581526020019081526020015f2080548060200260200160405190810160405280929190818152602001828054801561210657602002820191905f5260205f20905b8154815260200190600101908083116120f2575b505050505090505f815167ffffffffffffffff81111561212957612128612912565b5b6040519080825280602002602001820160405280156121575781602001602082028036833780820191505090505b5090505f825167ffffffffffffffff81111561217657612175612912565b5b6040519080825280602002602001820160405280156121a45781602001602082028036833780820191505090505b5090505f835167ffffffffffffffff8111156121c3576121c2612912565b5b6040519080825280602002602001820160405280156121fc57816020015b6121e961270e565b8152602001906001900390816121e15790505b5090505f5b84518110156122da576040518060400160405280600b5f88858151811061222b5761222a613497565b5b602002602001015181526020019081526020015f205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f88858151811061229357612292613497565b5b602002602001015181526020019081526020015f20600101548152508282815181106122c2576122c1613497565b5b60200260200101819052508080600101915050612201565b505f5b600182516122eb9190613327565b81101561240a575f5b60018284516123039190613327565b61230d9190613327565b8110156123fc578260018261232291906131d7565b8151811061233357612332613497565b5b60200260200101516020015183828151811061235257612351613497565b5b60200260200101516020015110156123ef578260018261237291906131d7565b8151811061238357612382613497565b5b602002602001015183828151811061239e5761239d613497565b5b60200260200101518483815181106123b9576123b8613497565b5b60200260200101856001856123ce91906131d7565b815181106123df576123de613497565b5b6020026020010182905282905250505b80806001019150506122f4565b5080806001019150506122dd565b505f5b81518110156124cc5781818151811061242957612428613497565b5b60200260200101516020015184828151811061244857612447613497565b5b60200260200101818152505081818151811061246757612466613497565b5b60200260200101515f015183828151811061248557612484613497565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808060010191505061240d565b5082829550955050505050915091565b6124e4612591565b600182036124f85780600681905550612509565b6002820361250857806008819055505b5b5050565b612515612591565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612585575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161257c919061287d565b60405180910390fd5b61258e81612618565b50565b6125996126d9565b73ffffffffffffffffffffffffffffffffffffffff166125b7611453565b73ffffffffffffffffffffffffffffffffffffffff1614612616576125da6126d9565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161260d919061287d565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b60405180604001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f819050919050565b61274e8161273c565b82525050565b5f6020820190506127675f830184612745565b92915050565b5f604051905090565b5f80fd5b5f80fd5b6127878161273c565b8114612791575f80fd5b50565b5f813590506127a28161277e565b92915050565b5f602082840312156127bd576127bc612776565b5b5f6127ca84828501612794565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6127fc826127d3565b9050919050565b61280c816127f2565b82525050565b5f8115159050919050565b61282681612812565b82525050565b5f60a08201905061283f5f830188612803565b61284c6020830187612745565b6128596040830186612745565b6128666060830185612745565b612873608083018461281d565b9695505050505050565b5f6020820190506128905f830184612803565b92915050565b61289f816127f2565b81146128a9575f80fd5b50565b5f813590506128ba81612896565b92915050565b5f80604083850312156128d6576128d5612776565b5b5f6128e3858286016128ac565b92505060206128f485828601612794565b9150509250929050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61294882612902565b810181811067ffffffffffffffff8211171561296757612966612912565b5b80604052505050565b5f61297961276d565b9050612985828261293f565b919050565b5f67ffffffffffffffff8211156129a4576129a3612912565b5b602082029050602081019050919050565b5f80fd5b5f6129cb6129c68461298a565b612970565b905080838252602082019050602084028301858111156129ee576129ed6129b5565b5b835b81811015612a175780612a0388826128ac565b8452602084019350506020810190506129f0565b5050509392505050565b5f82601f830112612a3557612a346128fe565b5b8135612a458482602086016129b9565b91505092915050565b5f67ffffffffffffffff821115612a6857612a67612912565b5b602082029050602081019050919050565b5f612a8b612a8684612a4e565b612970565b90508083825260208201905060208402830185811115612aae57612aad6129b5565b5b835b81811015612ad75780612ac38882612794565b845260208401935050602081019050612ab0565b5050509392505050565b5f82601f830112612af557612af46128fe565b5b8135612b05848260208601612a79565b91505092915050565b5f8060408385031215612b2457612b23612776565b5b5f83013567ffffffffffffffff811115612b4157612b4061277a565b5b612b4d85828601612a21565b925050602083013567ffffffffffffffff811115612b6e57612b6d61277a565b5b612b7a85828601612ae1565b9150509250929050565b5f608082019050612b975f830187612745565b612ba46020830186612745565b612bb16040830185612745565b612bbe606083018461281d565b95945050505050565b5f60208284031215612bdc57612bdb612776565b5b5f612be9848285016128ac565b91505092915050565b5f8060408385031215612c0857612c07612776565b5b5f612c1585828601612794565b9250506020612c2685828601612794565b9150509250929050565b5f8060408385031215612c4657612c45612776565b5b5f83013567ffffffffffffffff811115612c6357612c6261277a565b5b612c6f85828601612ae1565b925050602083013567ffffffffffffffff811115612c9057612c8f61277a565b5b612c9c85828601612a21565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612cd8816127f2565b82525050565b612ce78161273c565b82525050565b604082015f820151612d015f850182612ccf565b506020820151612d146020850182612cde565b50505050565b5f612d258383612ced565b60408301905092915050565b5f602082019050919050565b5f612d4782612ca6565b612d518185612cb0565b9350612d5c83612cc0565b805f5b83811015612d8c578151612d738882612d1a565b9750612d7e83612d31565b925050600181019050612d5f565b5085935050505092915050565b5f6020820190508181035f830152612db18184612d3d565b905092915050565b5f606082019050612dcc5f830186612745565b612dd96020830185612745565b612de66040830184612745565b949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612e228383612cde565b60208301905092915050565b5f602082019050919050565b5f612e4482612dee565b612e4e8185612df8565b9350612e5983612e08565b805f5b83811015612e89578151612e708882612e17565b9750612e7b83612e2e565b925050600181019050612e5c565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f612eca8383612ccf565b60208301905092915050565b5f602082019050919050565b5f612eec82612e96565b612ef68185612ea0565b9350612f0183612eb0565b805f5b83811015612f31578151612f188882612ebf565b9750612f2383612ed6565b925050600181019050612f04565b5085935050505092915050565b5f6040820190508181035f830152612f568185612e3a565b90508181036020830152612f6a8184612ee2565b90509392505050565b5f82825260208201905092915050565b7f4e6f2072652d656e7472616e637920616c6c6f776564000000000000000000005f82015250565b5f612fb7601683612f73565b9150612fc282612f83565b602082019050919050565b5f6020820190508181035f830152612fe481612fab565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6130228261273c565b915061302d8361273c565b925082820261303b8161273c565b9150828204841483151761305257613051612feb565b5b5092915050565b5f60408201905061306c5f830185612803565b6130796020830184612803565b9392505050565b5f8151905061308e8161277e565b92915050565b5f602082840312156130a9576130a8612776565b5b5f6130b684828501613080565b91505092915050565b5f6060820190506130d25f830186612803565b6130df6020830185612803565b6130ec6040830184612745565b949350505050565b6130fd81612812565b8114613107575f80fd5b50565b5f81519050613118816130f4565b92915050565b5f6020828403121561313357613132612776565b5b5f6131408482850161310a565b91505092915050565b7f5472616e73666572206661696c6564206f7220496e73756666696369656e74205f8201527f616c6c6f77616e63650000000000000000000000000000000000000000000000602082015250565b5f6131a3602983612f73565b91506131ae82613149565b604082019050919050565b5f6020820190508181035f8301526131d081613197565b9050919050565b5f6131e18261273c565b91506131ec8361273c565b925082820190508082111561320457613203612feb565b5b92915050565b7f4e6f207265776172647320746f20636c61696d210000000000000000000000005f82015250565b5f61323e601483612f73565b91506132498261320a565b602082019050919050565b5f6020820190508181035f83015261326b81613232565b9050919050565b5f6040820190506132855f830185612803565b6132926020830184612745565b9392505050565b7f4e6f7420656e6f756768207469636b657473206c6f6164656420696e20796f755f8201527f72206163636f756e740000000000000000000000000000000000000000000000602082015250565b5f6132f3602983612f73565b91506132fe82613299565b604082019050919050565b5f6020820190508181035f830152613320816132e7565b9050919050565b5f6133318261273c565b915061333c8361273c565b925082820390508181111561335457613353612feb565b5b92915050565b5f6133648261273c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361339657613395612feb565b5b600182019050919050565b7f4e6f7420656e6f756768204e4654207469636b657473206c6f6164656420696e5f8201527f20796f7572206163636f756e7400000000000000000000000000000000000000602082015250565b5f6133fb602d83612f73565b9150613406826133a1565b604082019050919050565b5f6020820190508181035f830152613428816133ef565b9050919050565b7f53656e646572206e6f7420617574686f72697a65642e000000000000000000005f82015250565b5f613463601683612f73565b915061346e8261342f565b602082019050919050565b5f6020820190508181035f83015261349081613457565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f47616d6520616c726561647920736176656400000000000000000000000000005f82015250565b5f6134f8601283612f73565b9150613503826134c4565b602082019050919050565b5f6020820190508181035f830152613525816134ec565b9050919050565b7f546f75726e616d656e74206e6f74206f766572000000000000000000000000005f82015250565b5f613560601383612f73565b915061356b8261352c565b602082019050919050565b5f6020820190508181035f83015261358d81613554565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6135cb8261273c565b91506135d68361273c565b9250826135e6576135e5613594565b5b828204905092915050565b5f6080820190506136045f830187612745565b6136116020830186612745565b61361e6040830185612745565b61362b6060830184612745565b9594505050505056fea2646970667358221220ed007958a5e58d0b272cb864dc937f1034b78d7b912748fee372444712faa0b764736f6c63430008190033
Deployed Bytecode Sourcemap
379:14815:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;797:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;978:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2598:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;710:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1049:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14170:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5598:509;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;572:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6181:347;;;:::i;:::-;;13682:366;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4611:865;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10716:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13104:255;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;861:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14662:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;639:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2293:101:0;;;;;;;;;;;;;:::i;:::-;;2692:49:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;1638:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14414:92:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11138:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11723:1161;;;:::i;:::-;;8193:2198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2801:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2512:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;7867:319;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6633:1137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;14919:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2543:215:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;797:31:3;;;;:::o;978:34::-;;;;:::o;2598:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;710:42::-;;;;:::o;1049:72::-;;;;;;;;;;;;;:::o;14170:104::-;1531:13:0;:11;:13::i;:::-;14260:7:3::1;14246:11;:21;;;;14170:104:::0;:::o;5598:509::-;3653:6;;;;;;;;;;;3652:7;3644:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3705:4;3696:6;;:13;;;;;;;;;;;;;;;;;;5667:14:::1;5684:10;5667:27;;5704:17;5732:4;5704:33;;5747:18;5782:7;5768:11;;:21;;;;:::i;:::-;5747:42;;5862:10;5821:4;;;;;;;;;;;:14;;;5836:6;5852:4;5821:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;:119;;;;;5892:4;;;;;;;;;;;:17;;;5910:6;5918:9;5929:10;5892:48;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5821:119;5800:207;;;;;;;;;;;;:::i;:::-;;;;;;;;;6045:7;6018;:15;6026:6;6018:15;;;;;;;;;;;;;;;:23;;;:34;;;;;;;:::i;:::-;;;;;;;;6084:6;6067:33;;;6092:7;6067:33;;;;;;:::i;:::-;;;;;;;;5657:450;;;3739:5:::0;3730:6;;:14;;;;;;;;;;;;;;;;;;5598:509;:::o;572:36::-;;;;:::o;6181:347::-;3653:6;;;;;;;;;;;3652:7;3644:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3705:4;3696:6;;:13;;;;;;;;;;;;;;;;;;6245:14:::1;6262:10;6245:27;;6282:15;6300:7;:15;6308:6;6300:15;;;;;;;;;;;;;;;:23;;;6282:41;;6351:1;6341:7;:11;6333:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;6388:4;;;;;;;;;;;:17;;;6414:4;6421:6;6429:7;6388:49;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6467:6;6452:31;;;6475:7;6452:31;;;;;;:::i;:::-;;;;;;;;6520:1;6494:7;:15;6502:6;6494:15;;;;;;;;;;;;;;;:23;;:27;;;;6235:293;;3739:5:::0;3730:6;;:14;;;;;;;;;;;;;;;;;;6181:347::o;13682:366::-;1531:13:0;:11;:13::i;:::-;13795:28:3::1;13834:10;13795:50;;13877:3;13859:22;;:6;:22;;::::0;13855:103:::1;;13897:12;:21;;:30;13919:7;13897:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;13941:7;;;13855:103;13967:12;13989:6;13967:29;;14006:5;:14;;;14021:10;14033:7;14006:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13785:263;;1554:1:0;13682:366:3::0;;:::o;4611:865::-;4676:7;3653:6;;;;;;;;;;;3652:7;3644:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3705:4;3696:6;;:13;;;;;;;;;;;;;;;;;;4695:14:::1;4712:10;4695:27;;4745:1;4736:5;:10:::0;4732:496:::1;;4814:1;4787:7;:15;4795:6;4787:15;;;;;;;;;;;;;;;:23;;;:28;;4762:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;4931:1;4904:7;:15;4912:6;4904:15;;;;;;;;;;;;;;;:23;;;:28;;;;;;;:::i;:::-;;;;;;;;4946:11;:30;4958:17;;4946:30;;;;;;;;;;;:42;;;:44;;;;;;;;;:::i;:::-;;;;;;4732:496;;;5020:1;5011:5;:10:::0;5007:221:::1;;5092:1;5062:7;:15;5070:6;5062:15;;;;;;;;;;;;;;;:26;;;:31;;5037:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;5216:1;5186:7;:15;5194:6;5186:15;;;;;;;;;;;;;;;:26;;;:31;;;;;;;:::i;:::-;;;;;;;;5007:221;4732:496;5259:39;;;;;;;;5264:6;5259:39;;;;;;5272:1;5259:39;;;;5275:12;5259:39;;;;5289:1;5259:39;;;;5292:5;5259:39;;;;::::0;5238:5:::1;:18;5244:11;;5238:18;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5308:15;:34;5324:17;;5308:34;;;;;;;;;;;5348:11;;5308:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5395:11;;5387:6;5375:39;;;5408:5;5375:39;;;;;;:::i;:::-;;;;;;;;5424:11;;:13;;;;;;;;;:::i;:::-;;;;;;5468:1;5454:11;;:15;;;;:::i;:::-;5447:22;;;3739:5:::0;3730:6;;:14;;;;;;;;;;;;;;;;;;4611:865;;;:::o;10716:264::-;3492:14;3509:10;3492:27;;3555:4;3537:22;;:6;:14;3544:6;3537:14;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;3529:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;10853:9:::1;10848:126;10872:13;:20;10868:1;:24;10848:126;;;10953:7;10961:1;10953:10;;;;;;;;:::i;:::-;;;;;;;;10913:7;:25;10921:13;10935:1;10921:16;;;;;;;;:::i;:::-;;;;;;;;10913:25;;;;;;;;;;;;;;;:36;;;:50;;;;;;;:::i;:::-;;;;;;;;10894:3;;;;;;;10848:126;;;;3482:122:::0;10716:264;;:::o;13104:255::-;3492:14;3509:10;3492:27;;3555:4;3537:22;;:6;:14;3544:6;3537:14;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;3529:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13242:9:::1;13237:116;13261:8;:15;13257:1;:19;13237:116;;;13329:10;13340:1;13329:13;;;;;;;;:::i;:::-;;;;;;;;13297:7;:20;13305:8;13314:1;13305:11;;;;;;;;:::i;:::-;;;;;;;;13297:20;;;;;;;;;;;;;;;:28;;;:45;;;;;;;:::i;:::-;;;;;;;;13278:3;;;;;;;13237:116;;;;3482:122:::0;13104:255;;:::o;861:68::-;;;;;;;;;;;;;:::o;14662:108::-;1531:13:0;:11;:13::i;:::-;14755:8:3::1;14734:18;:29;;;;14662:108:::0;:::o;639:30::-;;;;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;2692:49:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1638:85:0:-;1684:7;1710:6;;;;;;;;;;;1703:13;;1638:85;:::o;14414:92:3:-;1531:13:0;:11;:13::i;:::-;14495:4:3::1;14478:6;:14;14485:6;14478:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;14414:92:::0;:::o;11138:446::-;3492:14;3509:10;3492:27;;3555:4;3537:22;;:6;:14;3544:6;3537:14;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;3529:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;11265:1:::1;11241:5;:14;11247:7;11241:14;;;;;;;;;;;:20;;;:25;:73;;;;;11313:1;11286:5;:14;11292:7;11286:14;;;;;;;;;;;:23;;;:28;11241:73;:123;;;;;11359:5;11334:30;;:5;:14;11340:7;11334:14;;;;;;;;;;;:21;;;;;;;;;;;;:30;;;11241:123;11220:188;;;;;;;;;;;;:::i;:::-;;;;;;;;;11442:6;11419:5;:14;11425:7;11419:14;;;;;;;;;;;:20;;:29;;;;11484:12;11458:5;:14;11464:7;11458:14;;;;;;;;;;;:23;;:38;;;;11530:4;11506:5;:14;11512:7;11506:14;;;;;;;;;;;:21;;;:28;;;;;;;;;;;;;;;;;;11561:7;11549:28;11570:6;11549:28;;;;;;:::i;:::-;;;;;;;;3482:122:::0;11138:446;;:::o;11723:1161::-;3492:14;3509:10;3492:27;;3555:4;3537:22;;:6;:14;3544:6;3537:14;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;3529:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;11850:12:::1;11807:11;:30;11819:17;;11807:30;;;;;;;;;;;:39;;;:55;;11786:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;11979:5;11938:46;;:11;:30;11950:17;;11938:30;;;;;;;;;;;:37;;;;;;;;;;;;:46;;;11917:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;12080:4;12040:11;:30;12052:17;;12040:30;;;;;;;;;;;:37;;;:44;;;;;;;;;;;;;;;;;;12095:24;12122:11;:30;12134:17;;12122:30;;;;;;;;;;;:42;;;12095:69;;12174:18;12256:3;12229:11;;12215;;12196:16;:30;;;;:::i;:::-;:44;;;;:::i;:::-;12195:64;;;;:::i;:::-;12174:85;;12269:22;12371:3;12352:15;;12326:11;;12295:16;:42;;;;:::i;:::-;:72;;;;:::i;:::-;12294:80;;;;:::i;:::-;12269:105;;12385:4;;;;;;;;;;;:13;;;12399:8;;;;;;;;;;;12409:10;12385:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12430:4;;;;;;;;;;;:13;;;12444:12;;;;;;;;;;;12458:14;12430:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12520:17;;12489:183;12551:12;12592:18;;12577:12;:33;;;;:::i;:::-;12624:10;12648:14;12489:183;;;;;;;;;:::i;:::-;;;;;;;;12720:127;;;;;;;;12744:12;12720:127;;;;12785:18;;12770:12;:33;;;;:::i;:::-;12720:127;;;;12817:1;12720:127;;;;12832:5;12720:127;;;;::::0;12683:11:::1;:34;12715:1;12695:17;;:21;;;;:::i;:::-;12683:34;;;;;;;;;;;:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12858:17;;:19;;;;;;;;;:::i;:::-;;;;;;11776:1108;;;3482:122:::0;11723:1161::o;8193:2198::-;8308:21;8341:24;8368:11;:30;8380:17;;8368:30;;;;;;;;;;;:42;;;8341:69;;8420:29;8511:3;8492:15;;8478:11;;8472:3;:17;;;;:::i;:::-;:35;;;;:::i;:::-;8452:16;:56;;;;:::i;:::-;:62;;;;:::i;:::-;8420:94;;8524:24;8575:11;;8551:21;:35;;;;:::i;:::-;8524:62;;8596:29;8647:13;:20;8628:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;8596:72;;8757:29;8803:1;8789:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8757:48;;8857:3;8852:2;8833:16;:21;;;;:::i;:::-;:27;;;;:::i;:::-;8815:12;8828:1;8815:15;;;;;;;;:::i;:::-;;;;;;;:45;;;;;8932:3;8928:1;8909:16;:20;;;;:::i;:::-;:26;;;;:::i;:::-;8891:12;8904:1;8891:15;;;;;;;;:::i;:::-;;;;;;;:44;;;;;9007:3;9003:1;8984:16;:20;;;;:::i;:::-;:26;;;;:::i;:::-;8966:12;8979:1;8966:15;;;;;;;;:::i;:::-;;;;;;;:44;;;;;9082:3;9078:1;9059:16;:20;;;;:::i;:::-;:26;;;;:::i;:::-;9041:12;9054:1;9041:15;;;;;;;;:::i;:::-;;;;;;;:44;;;;;9157:3;9153:1;9134:16;:20;;;;:::i;:::-;:26;;;;:::i;:::-;9116:12;9129:1;9116:15;;;;;;;;:::i;:::-;;;;;;;:44;;;;;9247:24;9366:12;9379:1;9366:15;;;;;;;;:::i;:::-;;;;;;;;9348:12;9361:1;9348:15;;;;;;;;:::i;:::-;;;;;;;;9330:12;9343:1;9330:15;;;;;;;;:::i;:::-;;;;;;;;9312:12;9325:1;9312:15;;;;;;;;:::i;:::-;;;;;;;;9294:12;9307:1;9294:15;;;;;;;;:::i;:::-;;;;;;;;:33;;;;:::i;:::-;:51;;;;:::i;:::-;:69;;;;:::i;:::-;:87;;;;:::i;:::-;9274:16;:108;;;;:::i;:::-;9247:135;;9392:20;9438:1;9415:13;:20;:24;;;;:::i;:::-;9392:47;;9487:20;9533:1;9510:13;:20;:24;;;;:::i;:::-;9487:47;;9582:20;9629:3;9624:2;9605:16;:21;;;;:::i;:::-;:27;;;;:::i;:::-;9582:50;;9669:20;9716:3;9711:2;9692:16;:21;;;;:::i;:::-;:27;;;;:::i;:::-;9669:50;;9814:9;9809:138;9833:12;9829:1;:16;9809:138;;;9879:57;;;;;;;;9892:11;9904:1;9892:14;;;;;;;;:::i;:::-;;;;;;;;9879:57;;;;;;9923:12;9908;:27;;;;:::i;:::-;9879:57;;;9866:7;9874:1;9866:10;;;;;;;;:::i;:::-;;;;;;;:70;;;;9847:3;;;;;;;9809:138;;;;10020:9;10032:12;10020:24;;10015:166;10050:12;10046:1;:16;10015:166;;;10096:74;;;;;;;;10109:11;10121:1;10109:14;;;;;;;;:::i;:::-;;;;;;;;10096:74;;;;;;10156:12;10141;:27;;;;:::i;:::-;10125:12;:44;;;;:::i;:::-;10096:74;;;10083:7;10091:1;10083:10;;;;;;;;:::i;:::-;;;;;;;:87;;;;10064:3;;;;;;;10015:166;;;;10250:9;10245:115;10269:1;10265;:5;10245:115;;;10304:45;;;;;;;;10317:11;10329:1;10317:14;;;;;;;;:::i;:::-;;;;;;;;10304:45;;;;;;10333:12;10346:1;10333:15;;;;;;;;:::i;:::-;;;;;;;;10304:45;;;10291:7;10299:1;10291:10;;;;;;;;:::i;:::-;;;;;;;:58;;;;10272:3;;;;;;;10245:115;;;;10377:7;10370:14;;;;;;;;;;;;8193:2198;;;;:::o;2801:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2512:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7867:319::-;7924:7;7943:20;7966:12;7943:35;;7988:16;8007:11;:30;8019:17;;8007:30;;;;;;;;;;;:39;;;7988:58;;8076:8;8061:12;:23;8057:123;;;8118:12;8107:8;:23;;;;:::i;:::-;8100:30;;;;;;8057:123;8168:1;8161:8;;;;7867:319;;:::o;6633:1137::-;6703:16;6721;6749:24;6776:15;:30;6792:13;6776:30;;;;;;;;;;;6749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6816:30;6863:7;:14;6849:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6816:62;;6888:28;6933:7;:14;6919:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6888:60;;6959:33;7013:7;:14;6995:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;6959:69;;7044:9;7039:148;7063:7;:14;7059:1;:18;7039:148;;;7116:60;;;;;;;;7128:5;:17;7134:7;7142:1;7134:10;;;;;;;;:::i;:::-;;;;;;;;7128:17;;;;;;;;;;;:22;;;;;;;;;;;;7116:60;;;;;;7152:5;:17;7158:7;7166:1;7158:10;;;;;;;;:::i;:::-;;;;;;;;7152:17;;;;;;;;;;;:23;;;7116:60;;;7098:12;7111:1;7098:15;;;;;;;;:::i;:::-;;;;;;;:78;;;;7079:3;;;;;;;7039:148;;;;7202:9;7197:343;7243:1;7221:12;:19;:23;;;;:::i;:::-;7217:1;:27;7197:343;;;7270:9;7265:265;7315:1;7311;7289:12;:19;:23;;;;:::i;:::-;:27;;;;:::i;:::-;7285:1;:31;7265:265;;;7369:12;7386:1;7382;:5;;;;:::i;:::-;7369:19;;;;;;;;:::i;:::-;;;;;;;;:25;;;7345:12;7358:1;7345:15;;;;;;;;:::i;:::-;;;;;;;;:21;;;:49;7341:175;;;7460:12;7477:1;7473;:5;;;;:::i;:::-;7460:19;;;;;;;;:::i;:::-;;;;;;;;7481:12;7494:1;7481:15;;;;;;;;:::i;:::-;;;;;;;;7419:12;7432:1;7419:15;;;;;;;;:::i;:::-;;;;;;;7436:12;7453:1;7449;:5;;;;:::i;:::-;7436:19;;;;;;;;:::i;:::-;;;;;;;7418:79;;;;;;;;7341:175;7318:3;;;;;;;7265:265;;;;7246:3;;;;;;;7197:343;;;;7555:9;7550:168;7574:12;:19;7570:1;:23;7550:168;;;7633:12;7646:1;7633:15;;;;;;;;:::i;:::-;;;;;;;;:21;;;7614:13;7628:1;7614:16;;;;;;;;:::i;:::-;;;;;;;:40;;;;;7685:12;7698:1;7685:15;;;;;;;;:::i;:::-;;;;;;;;:22;;;7668:11;7680:1;7668:14;;;;;;;;:::i;:::-;;;;;;;:39;;;;;;;;;;;7595:3;;;;;;;7550:168;;;;7736:13;7751:11;7728:35;;;;;;;;6633:1137;;;:::o;14919:273::-;1531:13:0;:11;:13::i;:::-;15052:1:3::1;15038:10;:15:::0;15034:152:::1;;15083:11;15069;:25;;;;15034:152;;;15129:1;15115:10;:15:::0;15111:75:::1;;15164:11;15146:15;:29;;;;15111:75;15034:152;14919:273:::0;;:::o;2543:215:0:-;1531:13;:11;:13::i;:::-;2647:1:::1;2627:22;;:8;:22;;::::0;2623:91:::1;;2700:1;2672:31;;;;;;;;;;;:::i;:::-;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;1796:162::-;1866:12;:10;:12::i;:::-;1855:23;;:7;:5;:7::i;:::-;:23;;;1851:101;;1928:12;:10;:12::i;:::-;1901:40;;;;;;;;;;;:::i;:::-;;;;;;;;1851:101;1796:162::o;2912:187::-;2985:16;3004:6;;;;;;;;;;;2985:25;;3029:8;3020:6;;:17;;;;;;;;;;;;;;;;;;3083:8;3052:40;;3073:8;3052:40;;;;;;;;;;;;2975:124;2912:187;:::o;656:96:2:-;709:7;735:10;728:17;;656:96;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:4:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:126::-;1414:7;1454:42;1447:5;1443:54;1432:65;;1377:126;;;:::o;1509:96::-;1546:7;1575:24;1593:5;1575:24;:::i;:::-;1564:35;;1509:96;;;:::o;1611:118::-;1698:24;1716:5;1698:24;:::i;:::-;1693:3;1686:37;1611:118;;:::o;1735:90::-;1769:7;1812:5;1805:13;1798:21;1787:32;;1735:90;;;:::o;1831:109::-;1912:21;1927:5;1912:21;:::i;:::-;1907:3;1900:34;1831:109;;:::o;1946:652::-;2145:4;2183:3;2172:9;2168:19;2160:27;;2197:71;2265:1;2254:9;2250:17;2241:6;2197:71;:::i;:::-;2278:72;2346:2;2335:9;2331:18;2322:6;2278:72;:::i;:::-;2360;2428:2;2417:9;2413:18;2404:6;2360:72;:::i;:::-;2442;2510:2;2499:9;2495:18;2486:6;2442:72;:::i;:::-;2524:67;2586:3;2575:9;2571:19;2562:6;2524:67;:::i;:::-;1946:652;;;;;;;;:::o;2604:222::-;2697:4;2735:2;2724:9;2720:18;2712:26;;2748:71;2816:1;2805:9;2801:17;2792:6;2748:71;:::i;:::-;2604:222;;;;:::o;2832:122::-;2905:24;2923:5;2905:24;:::i;:::-;2898:5;2895:35;2885:63;;2944:1;2941;2934:12;2885:63;2832:122;:::o;2960:139::-;3006:5;3044:6;3031:20;3022:29;;3060:33;3087:5;3060:33;:::i;:::-;2960:139;;;;:::o;3105:474::-;3173:6;3181;3230:2;3218:9;3209:7;3205:23;3201:32;3198:119;;;3236:79;;:::i;:::-;3198:119;3356:1;3381:53;3426:7;3417:6;3406:9;3402:22;3381:53;:::i;:::-;3371:63;;3327:117;3483:2;3509:53;3554:7;3545:6;3534:9;3530:22;3509:53;:::i;:::-;3499:63;;3454:118;3105:474;;;;;:::o;3585:117::-;3694:1;3691;3684:12;3708:102;3749:6;3800:2;3796:7;3791:2;3784:5;3780:14;3776:28;3766:38;;3708:102;;;:::o;3816:180::-;3864:77;3861:1;3854:88;3961:4;3958:1;3951:15;3985:4;3982:1;3975:15;4002:281;4085:27;4107:4;4085:27;:::i;:::-;4077:6;4073:40;4215:6;4203:10;4200:22;4179:18;4167:10;4164:34;4161:62;4158:88;;;4226:18;;:::i;:::-;4158:88;4266:10;4262:2;4255:22;4045:238;4002:281;;:::o;4289:129::-;4323:6;4350:20;;:::i;:::-;4340:30;;4379:33;4407:4;4399:6;4379:33;:::i;:::-;4289:129;;;:::o;4424:311::-;4501:4;4591:18;4583:6;4580:30;4577:56;;;4613:18;;:::i;:::-;4577:56;4663:4;4655:6;4651:17;4643:25;;4723:4;4717;4713:15;4705:23;;4424:311;;;:::o;4741:117::-;4850:1;4847;4840:12;4881:710;4977:5;5002:81;5018:64;5075:6;5018:64;:::i;:::-;5002:81;:::i;:::-;4993:90;;5103:5;5132:6;5125:5;5118:21;5166:4;5159:5;5155:16;5148:23;;5219:4;5211:6;5207:17;5199:6;5195:30;5248:3;5240:6;5237:15;5234:122;;;5267:79;;:::i;:::-;5234:122;5382:6;5365:220;5399:6;5394:3;5391:15;5365:220;;;5474:3;5503:37;5536:3;5524:10;5503:37;:::i;:::-;5498:3;5491:50;5570:4;5565:3;5561:14;5554:21;;5441:144;5425:4;5420:3;5416:14;5409:21;;5365:220;;;5369:21;4983:608;;4881:710;;;;;:::o;5614:370::-;5685:5;5734:3;5727:4;5719:6;5715:17;5711:27;5701:122;;5742:79;;:::i;:::-;5701:122;5859:6;5846:20;5884:94;5974:3;5966:6;5959:4;5951:6;5947:17;5884:94;:::i;:::-;5875:103;;5691:293;5614:370;;;;:::o;5990:311::-;6067:4;6157:18;6149:6;6146:30;6143:56;;;6179:18;;:::i;:::-;6143:56;6229:4;6221:6;6217:17;6209:25;;6289:4;6283;6279:15;6271:23;;5990:311;;;:::o;6324:710::-;6420:5;6445:81;6461:64;6518:6;6461:64;:::i;:::-;6445:81;:::i;:::-;6436:90;;6546:5;6575:6;6568:5;6561:21;6609:4;6602:5;6598:16;6591:23;;6662:4;6654:6;6650:17;6642:6;6638:30;6691:3;6683:6;6680:15;6677:122;;;6710:79;;:::i;:::-;6677:122;6825:6;6808:220;6842:6;6837:3;6834:15;6808:220;;;6917:3;6946:37;6979:3;6967:10;6946:37;:::i;:::-;6941:3;6934:50;7013:4;7008:3;7004:14;6997:21;;6884:144;6868:4;6863:3;6859:14;6852:21;;6808:220;;;6812:21;6426:608;;6324:710;;;;;:::o;7057:370::-;7128:5;7177:3;7170:4;7162:6;7158:17;7154:27;7144:122;;7185:79;;:::i;:::-;7144:122;7302:6;7289:20;7327:94;7417:3;7409:6;7402:4;7394:6;7390:17;7327:94;:::i;:::-;7318:103;;7134:293;7057:370;;;;:::o;7433:894::-;7551:6;7559;7608:2;7596:9;7587:7;7583:23;7579:32;7576:119;;;7614:79;;:::i;:::-;7576:119;7762:1;7751:9;7747:17;7734:31;7792:18;7784:6;7781:30;7778:117;;;7814:79;;:::i;:::-;7778:117;7919:78;7989:7;7980:6;7969:9;7965:22;7919:78;:::i;:::-;7909:88;;7705:302;8074:2;8063:9;8059:18;8046:32;8105:18;8097:6;8094:30;8091:117;;;8127:79;;:::i;:::-;8091:117;8232:78;8302:7;8293:6;8282:9;8278:22;8232:78;:::i;:::-;8222:88;;8017:303;7433:894;;;;;:::o;8333:541::-;8504:4;8542:3;8531:9;8527:19;8519:27;;8556:71;8624:1;8613:9;8609:17;8600:6;8556:71;:::i;:::-;8637:72;8705:2;8694:9;8690:18;8681:6;8637:72;:::i;:::-;8719;8787:2;8776:9;8772:18;8763:6;8719:72;:::i;:::-;8801:66;8863:2;8852:9;8848:18;8839:6;8801:66;:::i;:::-;8333:541;;;;;;;:::o;8880:329::-;8939:6;8988:2;8976:9;8967:7;8963:23;8959:32;8956:119;;;8994:79;;:::i;:::-;8956:119;9114:1;9139:53;9184:7;9175:6;9164:9;9160:22;9139:53;:::i;:::-;9129:63;;9085:117;8880:329;;;;:::o;9215:474::-;9283:6;9291;9340:2;9328:9;9319:7;9315:23;9311:32;9308:119;;;9346:79;;:::i;:::-;9308:119;9466:1;9491:53;9536:7;9527:6;9516:9;9512:22;9491:53;:::i;:::-;9481:63;;9437:117;9593:2;9619:53;9664:7;9655:6;9644:9;9640:22;9619:53;:::i;:::-;9609:63;;9564:118;9215:474;;;;;:::o;9695:894::-;9813:6;9821;9870:2;9858:9;9849:7;9845:23;9841:32;9838:119;;;9876:79;;:::i;:::-;9838:119;10024:1;10013:9;10009:17;9996:31;10054:18;10046:6;10043:30;10040:117;;;10076:79;;:::i;:::-;10040:117;10181:78;10251:7;10242:6;10231:9;10227:22;10181:78;:::i;:::-;10171:88;;9967:302;10336:2;10325:9;10321:18;10308:32;10367:18;10359:6;10356:30;10353:117;;;10389:79;;:::i;:::-;10353:117;10494:78;10564:7;10555:6;10544:9;10540:22;10494:78;:::i;:::-;10484:88;;10279:303;9695:894;;;;;:::o;10595:143::-;10691:6;10725:5;10719:12;10709:22;;10595:143;;;:::o;10744:213::-;10872:11;10906:6;10901:3;10894:19;10946:4;10941:3;10937:14;10922:29;;10744:213;;;;:::o;10963:161::-;11059:4;11082:3;11074:11;;11112:4;11107:3;11103:14;11095:22;;10963:161;;;:::o;11130:108::-;11207:24;11225:5;11207:24;:::i;:::-;11202:3;11195:37;11130:108;;:::o;11244:::-;11321:24;11339:5;11321:24;:::i;:::-;11316:3;11309:37;11244:108;;:::o;11426:509::-;11571:4;11566:3;11562:14;11660:4;11653:5;11649:16;11643:23;11679:63;11736:4;11731:3;11727:14;11713:12;11679:63;:::i;:::-;11586:166;11836:4;11829:5;11825:16;11819:23;11855:63;11912:4;11907:3;11903:14;11889:12;11855:63;:::i;:::-;11762:166;11540:395;11426:509;;:::o;11941:295::-;12068:10;12089:104;12189:3;12181:6;12089:104;:::i;:::-;12225:4;12220:3;12216:14;12202:28;;11941:295;;;;:::o;12242:142::-;12341:4;12373;12368:3;12364:14;12356:22;;12242:142;;;:::o;12462:964::-;12639:3;12668:83;12745:5;12668:83;:::i;:::-;12767:115;12875:6;12870:3;12767:115;:::i;:::-;12760:122;;12906:85;12985:5;12906:85;:::i;:::-;13014:7;13045:1;13030:371;13055:6;13052:1;13049:13;13030:371;;;13131:6;13125:13;13158:121;13275:3;13260:13;13158:121;:::i;:::-;13151:128;;13302:89;13384:6;13302:89;:::i;:::-;13292:99;;13090:311;13077:1;13074;13070:9;13065:14;;13030:371;;;13034:14;13417:3;13410:10;;12644:782;;;12462:964;;;;:::o;13432:489::-;13633:4;13671:2;13660:9;13656:18;13648:26;;13720:9;13714:4;13710:20;13706:1;13695:9;13691:17;13684:47;13748:166;13909:4;13900:6;13748:166;:::i;:::-;13740:174;;13432:489;;;;:::o;13927:442::-;14076:4;14114:2;14103:9;14099:18;14091:26;;14127:71;14195:1;14184:9;14180:17;14171:6;14127:71;:::i;:::-;14208:72;14276:2;14265:9;14261:18;14252:6;14208:72;:::i;:::-;14290;14358:2;14347:9;14343:18;14334:6;14290:72;:::i;:::-;13927:442;;;;;;:::o;14375:114::-;14442:6;14476:5;14470:12;14460:22;;14375:114;;;:::o;14495:184::-;14594:11;14628:6;14623:3;14616:19;14668:4;14663:3;14659:14;14644:29;;14495:184;;;;:::o;14685:132::-;14752:4;14775:3;14767:11;;14805:4;14800:3;14796:14;14788:22;;14685:132;;;:::o;14823:179::-;14892:10;14913:46;14955:3;14947:6;14913:46;:::i;:::-;14991:4;14986:3;14982:14;14968:28;;14823:179;;;;:::o;15008:113::-;15078:4;15110;15105:3;15101:14;15093:22;;15008:113;;;:::o;15157:732::-;15276:3;15305:54;15353:5;15305:54;:::i;:::-;15375:86;15454:6;15449:3;15375:86;:::i;:::-;15368:93;;15485:56;15535:5;15485:56;:::i;:::-;15564:7;15595:1;15580:284;15605:6;15602:1;15599:13;15580:284;;;15681:6;15675:13;15708:63;15767:3;15752:13;15708:63;:::i;:::-;15701:70;;15794:60;15847:6;15794:60;:::i;:::-;15784:70;;15640:224;15627:1;15624;15620:9;15615:14;;15580:284;;;15584:14;15880:3;15873:10;;15281:608;;;15157:732;;;;:::o;15895:114::-;15962:6;15996:5;15990:12;15980:22;;15895:114;;;:::o;16015:184::-;16114:11;16148:6;16143:3;16136:19;16188:4;16183:3;16179:14;16164:29;;16015:184;;;;:::o;16205:132::-;16272:4;16295:3;16287:11;;16325:4;16320:3;16316:14;16308:22;;16205:132;;;:::o;16343:179::-;16412:10;16433:46;16475:3;16467:6;16433:46;:::i;:::-;16511:4;16506:3;16502:14;16488:28;;16343:179;;;;:::o;16528:113::-;16598:4;16630;16625:3;16621:14;16613:22;;16528:113;;;:::o;16677:732::-;16796:3;16825:54;16873:5;16825:54;:::i;:::-;16895:86;16974:6;16969:3;16895:86;:::i;:::-;16888:93;;17005:56;17055:5;17005:56;:::i;:::-;17084:7;17115:1;17100:284;17125:6;17122:1;17119:13;17100:284;;;17201:6;17195:13;17228:63;17287:3;17272:13;17228:63;:::i;:::-;17221:70;;17314:60;17367:6;17314:60;:::i;:::-;17304:70;;17160:224;17147:1;17144;17140:9;17135:14;;17100:284;;;17104:14;17400:3;17393:10;;16801:608;;;16677:732;;;;:::o;17415:634::-;17636:4;17674:2;17663:9;17659:18;17651:26;;17723:9;17717:4;17713:20;17709:1;17698:9;17694:17;17687:47;17751:108;17854:4;17845:6;17751:108;:::i;:::-;17743:116;;17906:9;17900:4;17896:20;17891:2;17880:9;17876:18;17869:48;17934:108;18037:4;18028:6;17934:108;:::i;:::-;17926:116;;17415:634;;;;;:::o;18055:169::-;18139:11;18173:6;18168:3;18161:19;18213:4;18208:3;18204:14;18189:29;;18055:169;;;;:::o;18230:172::-;18370:24;18366:1;18358:6;18354:14;18347:48;18230:172;:::o;18408:366::-;18550:3;18571:67;18635:2;18630:3;18571:67;:::i;:::-;18564:74;;18647:93;18736:3;18647:93;:::i;:::-;18765:2;18760:3;18756:12;18749:19;;18408:366;;;:::o;18780:419::-;18946:4;18984:2;18973:9;18969:18;18961:26;;19033:9;19027:4;19023:20;19019:1;19008:9;19004:17;18997:47;19061:131;19187:4;19061:131;:::i;:::-;19053:139;;18780:419;;;:::o;19205:180::-;19253:77;19250:1;19243:88;19350:4;19347:1;19340:15;19374:4;19371:1;19364:15;19391:410;19431:7;19454:20;19472:1;19454:20;:::i;:::-;19449:25;;19488:20;19506:1;19488:20;:::i;:::-;19483:25;;19543:1;19540;19536:9;19565:30;19583:11;19565:30;:::i;:::-;19554:41;;19744:1;19735:7;19731:15;19728:1;19725:22;19705:1;19698:9;19678:83;19655:139;;19774:18;;:::i;:::-;19655:139;19439:362;19391:410;;;;:::o;19807:332::-;19928:4;19966:2;19955:9;19951:18;19943:26;;19979:71;20047:1;20036:9;20032:17;20023:6;19979:71;:::i;:::-;20060:72;20128:2;20117:9;20113:18;20104:6;20060:72;:::i;:::-;19807:332;;;;;:::o;20145:143::-;20202:5;20233:6;20227:13;20218:22;;20249:33;20276:5;20249:33;:::i;:::-;20145:143;;;;:::o;20294:351::-;20364:6;20413:2;20401:9;20392:7;20388:23;20384:32;20381:119;;;20419:79;;:::i;:::-;20381:119;20539:1;20564:64;20620:7;20611:6;20600:9;20596:22;20564:64;:::i;:::-;20554:74;;20510:128;20294:351;;;;:::o;20651:442::-;20800:4;20838:2;20827:9;20823:18;20815:26;;20851:71;20919:1;20908:9;20904:17;20895:6;20851:71;:::i;:::-;20932:72;21000:2;20989:9;20985:18;20976:6;20932:72;:::i;:::-;21014;21082:2;21071:9;21067:18;21058:6;21014:72;:::i;:::-;20651:442;;;;;;:::o;21099:116::-;21169:21;21184:5;21169:21;:::i;:::-;21162:5;21159:32;21149:60;;21205:1;21202;21195:12;21149:60;21099:116;:::o;21221:137::-;21275:5;21306:6;21300:13;21291:22;;21322:30;21346:5;21322:30;:::i;:::-;21221:137;;;;:::o;21364:345::-;21431:6;21480:2;21468:9;21459:7;21455:23;21451:32;21448:119;;;21486:79;;:::i;:::-;21448:119;21606:1;21631:61;21684:7;21675:6;21664:9;21660:22;21631:61;:::i;:::-;21621:71;;21577:125;21364:345;;;;:::o;21715:228::-;21855:34;21851:1;21843:6;21839:14;21832:58;21924:11;21919:2;21911:6;21907:15;21900:36;21715:228;:::o;21949:366::-;22091:3;22112:67;22176:2;22171:3;22112:67;:::i;:::-;22105:74;;22188:93;22277:3;22188:93;:::i;:::-;22306:2;22301:3;22297:12;22290:19;;21949:366;;;:::o;22321:419::-;22487:4;22525:2;22514:9;22510:18;22502:26;;22574:9;22568:4;22564:20;22560:1;22549:9;22545:17;22538:47;22602:131;22728:4;22602:131;:::i;:::-;22594:139;;22321:419;;;:::o;22746:191::-;22786:3;22805:20;22823:1;22805:20;:::i;:::-;22800:25;;22839:20;22857:1;22839:20;:::i;:::-;22834:25;;22882:1;22879;22875:9;22868:16;;22903:3;22900:1;22897:10;22894:36;;;22910:18;;:::i;:::-;22894:36;22746:191;;;;:::o;22943:170::-;23083:22;23079:1;23071:6;23067:14;23060:46;22943:170;:::o;23119:366::-;23261:3;23282:67;23346:2;23341:3;23282:67;:::i;:::-;23275:74;;23358:93;23447:3;23358:93;:::i;:::-;23476:2;23471:3;23467:12;23460:19;;23119:366;;;:::o;23491:419::-;23657:4;23695:2;23684:9;23680:18;23672:26;;23744:9;23738:4;23734:20;23730:1;23719:9;23715:17;23708:47;23772:131;23898:4;23772:131;:::i;:::-;23764:139;;23491:419;;;:::o;23916:332::-;24037:4;24075:2;24064:9;24060:18;24052:26;;24088:71;24156:1;24145:9;24141:17;24132:6;24088:71;:::i;:::-;24169:72;24237:2;24226:9;24222:18;24213:6;24169:72;:::i;:::-;23916:332;;;;;:::o;24254:228::-;24394:34;24390:1;24382:6;24378:14;24371:58;24463:11;24458:2;24450:6;24446:15;24439:36;24254:228;:::o;24488:366::-;24630:3;24651:67;24715:2;24710:3;24651:67;:::i;:::-;24644:74;;24727:93;24816:3;24727:93;:::i;:::-;24845:2;24840:3;24836:12;24829:19;;24488:366;;;:::o;24860:419::-;25026:4;25064:2;25053:9;25049:18;25041:26;;25113:9;25107:4;25103:20;25099:1;25088:9;25084:17;25077:47;25141:131;25267:4;25141:131;:::i;:::-;25133:139;;24860:419;;;:::o;25285:194::-;25325:4;25345:20;25363:1;25345:20;:::i;:::-;25340:25;;25379:20;25397:1;25379:20;:::i;:::-;25374:25;;25423:1;25420;25416:9;25408:17;;25447:1;25441:4;25438:11;25435:37;;;25452:18;;:::i;:::-;25435:37;25285:194;;;;:::o;25485:233::-;25524:3;25547:24;25565:5;25547:24;:::i;:::-;25538:33;;25593:66;25586:5;25583:77;25580:103;;25663:18;;:::i;:::-;25580:103;25710:1;25703:5;25699:13;25692:20;;25485:233;;;:::o;25724:232::-;25864:34;25860:1;25852:6;25848:14;25841:58;25933:15;25928:2;25920:6;25916:15;25909:40;25724:232;:::o;25962:366::-;26104:3;26125:67;26189:2;26184:3;26125:67;:::i;:::-;26118:74;;26201:93;26290:3;26201:93;:::i;:::-;26319:2;26314:3;26310:12;26303:19;;25962:366;;;:::o;26334:419::-;26500:4;26538:2;26527:9;26523:18;26515:26;;26587:9;26581:4;26577:20;26573:1;26562:9;26558:17;26551:47;26615:131;26741:4;26615:131;:::i;:::-;26607:139;;26334:419;;;:::o;26759:172::-;26899:24;26895:1;26887:6;26883:14;26876:48;26759:172;:::o;26937:366::-;27079:3;27100:67;27164:2;27159:3;27100:67;:::i;:::-;27093:74;;27176:93;27265:3;27176:93;:::i;:::-;27294:2;27289:3;27285:12;27278:19;;26937:366;;;:::o;27309:419::-;27475:4;27513:2;27502:9;27498:18;27490:26;;27562:9;27556:4;27552:20;27548:1;27537:9;27533:17;27526:47;27590:131;27716:4;27590:131;:::i;:::-;27582:139;;27309:419;;;:::o;27734:180::-;27782:77;27779:1;27772:88;27879:4;27876:1;27869:15;27903:4;27900:1;27893:15;27920:168;28060:20;28056:1;28048:6;28044:14;28037:44;27920:168;:::o;28094:366::-;28236:3;28257:67;28321:2;28316:3;28257:67;:::i;:::-;28250:74;;28333:93;28422:3;28333:93;:::i;:::-;28451:2;28446:3;28442:12;28435:19;;28094:366;;;:::o;28466:419::-;28632:4;28670:2;28659:9;28655:18;28647:26;;28719:9;28713:4;28709:20;28705:1;28694:9;28690:17;28683:47;28747:131;28873:4;28747:131;:::i;:::-;28739:139;;28466:419;;;:::o;28891:169::-;29031:21;29027:1;29019:6;29015:14;29008:45;28891:169;:::o;29066:366::-;29208:3;29229:67;29293:2;29288:3;29229:67;:::i;:::-;29222:74;;29305:93;29394:3;29305:93;:::i;:::-;29423:2;29418:3;29414:12;29407:19;;29066:366;;;:::o;29438:419::-;29604:4;29642:2;29631:9;29627:18;29619:26;;29691:9;29685:4;29681:20;29677:1;29666:9;29662:17;29655:47;29719:131;29845:4;29719:131;:::i;:::-;29711:139;;29438:419;;;:::o;29863:180::-;29911:77;29908:1;29901:88;30008:4;30005:1;29998:15;30032:4;30029:1;30022:15;30049:185;30089:1;30106:20;30124:1;30106:20;:::i;:::-;30101:25;;30140:20;30158:1;30140:20;:::i;:::-;30135:25;;30179:1;30169:35;;30184:18;;:::i;:::-;30169:35;30226:1;30223;30219:9;30214:14;;30049:185;;;;:::o;30240:553::-;30417:4;30455:3;30444:9;30440:19;30432:27;;30469:71;30537:1;30526:9;30522:17;30513:6;30469:71;:::i;:::-;30550:72;30618:2;30607:9;30603:18;30594:6;30550:72;:::i;:::-;30632;30700:2;30689:9;30685:18;30676:6;30632:72;:::i;:::-;30714;30782:2;30771:9;30767:18;30758:6;30714:72;:::i;:::-;30240:553;;;;;;;:::o
Swarm Source
ipfs://ed007958a5e58d0b272cb864dc937f1034b78d7b912748fee372444712faa0b7
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$191.10
Net Worth in GLMR
Token Allocations
ETH
99.99%
MOVR
0.01%
GLMR
0.00%
Others
0.00%
Multichain Portfolio | 35 Chains
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.