Contract Overview
Balance:
11.8041225806451613 AVAX
AVAX Value:
$206.22 (@ $17.47/AVAX)
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
PlantATreeGame
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.14; import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; /* ▀▀█▀▀ █▀▀█ █▀▀ █▀▀ █▀▀ ─░█── █▄▄▀ █▀▀ █▀▀ ▀▀█ ─░█── ▀─▀▀ ▀▀▀ ▀▀▀ ▀▀▀ ░█▀▀█ █▀▀█ █▀▀ █▀▀ ░█▄▄▀ █▄▄█ █── █▀▀ ░█─░█ ▀──▀ ▀▀▀ ▀▀▀ ░█▀▀█ █▀▀█ █▀▄▀█ █▀▀ ░█─▄▄ █▄▄█ █─▀─█ █▀▀ ░█▄▄█ ▀──▀ ▀───▀ ▀▀▀ Discord: http://discord.io/PlantATree Website: https://treegame.live */ interface ERC721Interface { function ownerOf(uint256) external view returns (address); } interface PlantATreeRewardSystem { function PlantATree(address ref) external payable; } contract PlantATreeGame is VRFConsumerBaseV2, Ownable { // [Chainlink VRF config block] VRFCoordinatorV2Interface COORDINATOR; // subscription ID. uint64 s_subscriptionId; bytes32 keyHash; uint32 callbackGasLimit = 2500000; //100000; // The default is 3, but you can set this higher. uint16 requestConfirmations = 3; // For this example, retrieve 2 random values in one request. // Cannot exceed VRFCoordinatorV2.MAX_NUM_WORDS. uint32 constant numWords = 1; // [End of Chainlink VRF config block] // Win percentages and Race track values enum SORT_TYPE { TOTAL_WIN, TOTAL_GAMES } uint256[] private WIN_PERCENTAGES = [0, 25, 50, 75, 100]; string[] private TRACK_VALUES = [ "-2", "0", "2", "4", "3", "-1", "-3", "1", "-4", "2", " -1", "3", "-4", "1", "-3", "-2", "4", "0", "1", "-1", "-3", "3", "4", "-4", "2", "-2", "0", "1", "3", "0", "2", "-2", "-3", "-4", "-1", "4", "-1", "4", "1", "3", "-4", "2", "-2", "-3", "0", "-3", "2", "3", "1", "-1", "4", "-2", "-4", "0", "2", "0", "1", "-4", "3", "-3", "-1", "4", "-2", "0", "3", "-3", "2", "-1", "4", "-2", "-4", "1", "-2", "3", "0", "1", "-4", "-1", "-3", "2", "4" ]; uint256 public constant MAX_NFT_SUPPLY = 600; uint256 public constant PLAYERS_COUNT = 4; uint256 private pvtIndex; uint256 private pvtGamesCount; // TressGame Data Structure struct Game { uint256 id; uint256[PLAYERS_COUNT] players; uint256[PLAYERS_COUNT] effects; string[PLAYERS_COUNT] tracks; uint256 timestamp; uint256 winnerTokenId; uint256 map; uint256 text; uint256 rndResult; } struct TreesToken { uint256 tokenId; uint256 totalGamesPlayed; uint8 communityShareQualified; uint256 totalWonGames; uint256 totalLostGames; uint256 balance; } // Dev addresses address artist; address dev; address public PAT_Address; mapping(address => bool) private admins; address public ref; //for dev claim modifier onlyAdmin() { require(admins[msg.sender] == true); _; } // Total Games Value uint256 public totalGamesValues = 0 ether; // Balances & Shares uint256 public teamBalance = 0 ether; uint256 public communityBalance = 0 ether; // Minimum balance to distrubte for community only uint256 public constant MINIMUM_COMMUNITY_BALANCE = 1 ether; // NFT TressContract . Used to check ownership of a token ERC721Interface internal TREES_CONTRACT; address public TreesNFTContractAddress; // Minimum Game Value set to 0.4. This means minimum entry fee is 0.1 uint256 public constant MINIMUM_GAME_VALUE = 0.4 ether; // Initial values of total game value and their disturbtions. Initial values don't matter here as it has to be passed in the constructor anyway. uint256 public GAME_VALUE = 0.4 ether; // disturbtions based on total game value uint256 public ENTRY_FEE = 0.1 ether; uint256 public WIN_SHARE = 0.2 ether; uint256 public LOSS_SHARE = 0.0426 ether; uint256 public TEAM_SHARE = 0.024 ether; uint256 public COMMUNITY_SHARE = 0.0162 ether; uint256 public DynamicRewardsSystem_Share = 0.032 ether; uint256 public DynamicRewards_Balance = 0; // Minimum games played to be qualified for community shares. On the fifth game the nft holder will be qualified uint256 public constant COMMUNITY_MINIMUM_GAMES = 5; // Tokens count that are qulaified for getting community shares uint256 public qualifiedTokensCount = 0; // Players waiting to start the game mapping(uint256 => uint256) public pendingPlayers; uint256 public pendingPlayersCount; // Games & Tokens data mapping(uint256 => TreesToken) public treesTokens; mapping(uint256 => Game) public games; uint256 public gamesCounter; bool public GameIsAcive = false; // Random range minimum and maximum uint256 private constant min = 1; uint256 private constant max = 100; // VRF Request Id => Games Ids mapping(uint256 => uint256) public requestIdToGameId; // Limit of top trees uint256 public constant TOP_LIMIT = 30; // index to tokenId mapping(uint256 => uint256) public topTokensBytotalWonGames; mapping(uint256 => uint256) public topTokensByTotalGamesPlayed; // Game Events event GameJoined(uint256 _TreeTokenId); event GameStarted(Game _game); event GameEnded(uint256 _GameId, uint256 _TreeTokenId); // Config Events event VRFConfigUpdated( uint64 subscriptionId, uint32 _callbackGasLimit, uint16 _requestConfirmations, bytes32 _keyHash ); event EntryFeeUpdated(uint256 totalGameValue); event TeamAddressesUpdated(address artist, address dev); constructor( uint256 _pvtGamesCount, uint256 _gamesCounter, uint64 subscriptionId, bytes32 _keyHash, address _vrfCoordinator, address TreesNFTAddress_, address _PAT_Address, address _ref, address _dev, address _artist ) VRFConsumerBaseV2(_vrfCoordinator) { require(TreesNFTAddress_ != address(0)); require(_vrfCoordinator != address(0)); require(_pvtGamesCount > 0); pvtGamesCount = _pvtGamesCount; TreesNFTContractAddress = TreesNFTAddress_; TREES_CONTRACT = ERC721Interface(TreesNFTContractAddress); COORDINATOR = VRFCoordinatorV2Interface(_vrfCoordinator); s_subscriptionId = subscriptionId; keyHash = _keyHash; PAT_Address = _PAT_Address; ref = _ref; setTeamAddresses(_artist, _dev); //scores migrated from old contract gamesCounter = _gamesCounter; totalGamesValues = gamesCounter * GAME_VALUE; require( (gamesCounter % pvtGamesCount) == 0 , "err"); } // change VRF config if needed. for example, if subscription Id changed ...etc. function setVRFConfig( uint64 subscriptionId, uint32 _callbackGasLimit, uint16 _requestConfirmations, bytes32 _keyHash ) external onlyOwner { s_subscriptionId = subscriptionId; callbackGasLimit = _callbackGasLimit; requestConfirmations = _requestConfirmations; keyHash = _keyHash; emit VRFConfigUpdated( subscriptionId, _callbackGasLimit, _requestConfirmations, _keyHash ); } // Requets a random number from ChainLink function getRandomNumber() internal returns (uint256 requestId) { return COORDINATOR.requestRandomWords( keyHash, s_subscriptionId, requestConfirmations, callbackGasLimit, numWords ); } // Receive the requested random number from ChainLink function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal override { uint256 rndWord = randomWords[0]; pvtIndex = rndWord; uint256 gameId = requestIdToGameId[requestId]; uint256 rnd = getGameRandomNumber(games[gameId].players, rndWord); processGame(gameId, rnd); } function processGame(uint256 gameId, uint256 rnd) internal { pickWinner(gameId, rnd); } // get a track for a Trees token (player) function getTrack(uint256 baseNum, uint256 MBTokenId) internal view returns (string memory) { require( TRACK_VALUES.length > 72, "TRACK_VALUES length must be greater than 72" ); uint256 startIndex = (baseNum + MBTokenId) % (TRACK_VALUES.length - 72); uint256 endIndex = startIndex + 9; string memory track = TRACK_VALUES[startIndex]; for (uint256 i = startIndex + 1; i < endIndex; i++) { track = string(abi.encodePacked(track, ",", TRACK_VALUES[i])); } return track; } // get game map function getMap(uint256 baseNum) internal pure returns (uint256) { return ((baseNum * 7) % 4) + 1; } // get game text function getText(uint256 baseNum) internal pure returns (uint256) { return (baseNum % 10) + 1; } // get game effect function getEffect(uint256 baseNum, uint256 MBTokenId) internal pure returns (uint256) { return ((baseNum + MBTokenId) % 6) + 1; } // Select the winner based on the random result considering total games played for each player function pickWinner(uint256 gameId, uint256 randomResult) internal { //sortPlayersByTotalGamesPlayed(gameId); Game storage game = games[gameId]; game.winnerTokenId = getWinnerTokenId(gameId, randomResult); game.rndResult = randomResult; game.timestamp = block.timestamp; // randomResult is between 1 and 100 game.map = getMap(randomResult + gamesCounter); game.text = getText(randomResult + gamesCounter + 3); setPlayersEffects(gameId, randomResult); setPlayersTracks(gameId, randomResult); // Winner and Losers shares calculateShares(gameId); // Keep track of top winners bool alreadyAdded = false; uint256 smallestTokenIdIndex = 1; //topTokensBytotalWonGames[1]; if ( topTokensBytotalWonGames[smallestTokenIdIndex] == game.winnerTokenId ) { alreadyAdded = true; } if (!alreadyAdded) { for (uint256 k = 2; k <= TOP_LIMIT; k++) { if (topTokensBytotalWonGames[k] == game.winnerTokenId) { alreadyAdded = true; break; } if ( treesTokens[topTokensBytotalWonGames[k]].totalWonGames < treesTokens[topTokensBytotalWonGames[smallestTokenIdIndex]] .totalWonGames ) { smallestTokenIdIndex = k; } } } // update only if it wasn't added before if ( !alreadyAdded && treesTokens[topTokensBytotalWonGames[smallestTokenIdIndex]] .totalWonGames < treesTokens[game.winnerTokenId].totalWonGames ) { topTokensBytotalWonGames[smallestTokenIdIndex] = game.winnerTokenId; } emit GameEnded(gameId, games[gameId].winnerTokenId); } // set effects for each player except the winner function setPlayersEffects(uint256 gameId, uint256 randomResult) internal { Game storage game = games[gameId]; uint256 l = game.players.length; for (uint256 i = 0; i < l; i++) { if (games[gameId].winnerTokenId == game.players[i]) { game.effects[i] = 0; } else { game.effects[i] = getEffect(randomResult, game.players[i]); } } } // set the tracks for all players function setPlayersTracks(uint256 gameId, uint256 randomResult) internal { Game storage game = games[gameId]; uint256 l = game.players.length; for (uint256 i = 0; i < l; i++) { game.tracks[i] = getTrack(randomResult, game.players[i]); } } // sort players by total games played . index 0 -> lowest . index 3 -> highest function sortPlayersByTotalGamesPlayed(uint256 gameId) internal { Game storage game = games[gameId]; uint256 l = game.players.length; for (uint256 i = 0; i < l; i++) { for (uint256 j = i + 1; j < l; j++) { if ( treesTokens[game.players[i]].totalGamesPlayed > treesTokens[game.players[j]].totalGamesPlayed ) { uint256 temp = game.players[i]; game.players[i] = game.players[j]; game.players[j] = temp; } } } } // get the winner token id based on WIN_PERCENTAGES and the random result function getWinnerTokenId(uint256 gameId, uint256 randomResult) internal view returns (uint256 winnerTokenId) { require( randomResult >= 1 && randomResult <= 100, "Random result is out of range" ); uint256 l = WIN_PERCENTAGES.length; for (uint256 i = 1; i < l; i++) { if ( randomResult > WIN_PERCENTAGES[i - 1] && randomResult <= WIN_PERCENTAGES[i] ) { return games[gameId].players[i - 1]; } } } // get games as array within the range from-to function getGames(uint256 gameIdFrom, uint256 gameIdTo) external view returns (Game[] memory) { uint256 length = gameIdTo - gameIdFrom; Game[] memory gamesArr = new Game[](length + 1); uint256 j = 0; for (uint256 i = gameIdFrom; i <= gameIdTo; i++) { gamesArr[j] = games[i]; j++; } return gamesArr; } // get top Trees by wins or total played games function getTopTreesNFT(SORT_TYPE sortType) external view returns (TreesToken[] memory) { TreesToken[] memory treesArr = new TreesToken[](TOP_LIMIT); if (sortType == SORT_TYPE.TOTAL_WIN) { for (uint256 i = 1; i <= TOP_LIMIT; i++) { treesArr[i - 1] = treesTokens[topTokensBytotalWonGames[i]]; } } if (sortType == SORT_TYPE.TOTAL_GAMES) { for (uint256 i = 1; i <= TOP_LIMIT; i++) { treesArr[i - 1] = treesTokens[topTokensByTotalGamesPlayed[i]]; } } return treesArr; } // get players by game function getGamePlayers(uint256 gameId) external view returns (uint256[PLAYERS_COUNT] memory) { return games[gameId].players; } // get effects by gamee function getGameEffects(uint256 gameId) external view returns (uint256[PLAYERS_COUNT] memory) { return games[gameId].effects; } // calculate the players (including the winner), community and dev shares function calculateShares(uint256 gameId) internal { Game storage game = games[gameId]; // Winner specific // Add the wining share to the winner token uint256 winnerTokenId = game.winnerTokenId; treesTokens[winnerTokenId].totalWonGames++; treesTokens[winnerTokenId].totalGamesPlayed++; treesTokens[winnerTokenId].balance += WIN_SHARE; // Distribute the losing share to the losers tokens uint256 l = game.players.length; for (uint256 i = 0; i < l; i++) { uint256 tokenId = game.players[i]; if (tokenId != winnerTokenId) { treesTokens[tokenId].totalGamesPlayed++; treesTokens[tokenId].totalLostGames++; treesTokens[tokenId].balance += LOSS_SHARE; } } // Dev share teamBalance += TEAM_SHARE; // Community share communityBalance += COMMUNITY_SHARE; } // Distribute Community shares // Anyone can call this to distribute the shares to their respective balances function distributeCommunityShare() external { require( communityBalance >= MINIMUM_COMMUNITY_BALANCE, "Community balance must be 1 or greater" ); require(qualifiedTokensCount > 0, "There is no qualified tokens yet"); require( communityBalance >= qualifiedTokensCount, "Share per token is zero" ); // Distribute the community share to the qualified tokens // devide before multiply issue is skipped as it is checked above communityBalance >= qualifiedTokensCount // ref: https://github.com/crytic/slither/wiki/Detector-Documentation#divide-before-multiply uint256 sharePerToken = communityBalance / qualifiedTokensCount; communityBalance = 0; for (uint256 j = 1; j <= MAX_NFT_SUPPLY; j++) { treesTokens[j].balance += (sharePerToken * treesTokens[j].communityShareQualified); } } // Claim the balance of a Trees token function claim(uint256 _tokenId) external { require( _tokenId > 0 && _tokenId <= MAX_NFT_SUPPLY, "Tresstoken Id must be between 1 and 600" ); require( ownerOfTreesNFT(_tokenId), "Please make sure you own this Tresstoken" ); uint256 mbBalance = treesTokens[_tokenId].balance; require(mbBalance > 0, "Balance is zero"); require( address(this).balance >= mbBalance, "Insufficient contract balance" ); treesTokens[_tokenId].balance = 0; payable(msg.sender).transfer(mbBalance); } // Claim the balance of the dev function devClaim() external onlyAdmin { require(artist != address(0), "artist address can not be zero"); require(dev != address(0), "dev address can not be zero"); require(teamBalance > 0, "team Balance must be greater than zero"); require( address(this).balance >= teamBalance, "Insufficient contract balance" ); uint256 _teamBalance = teamBalance; teamBalance = 0; uint256 _artist = (_teamBalance * 40) / 100; uint256 _dev = (_teamBalance * 60) / 100; payable(artist).transfer(_artist); payable(dev).transfer(_dev); } // Set addresses of the team function setTeamAddresses(address _artist, address _dev) public onlyOwner { require(_artist != address(0) && _dev != address(0), "address can not be zero"); artist = _artist; dev = _dev; admins[artist] = true; admins[dev] = true; emit TeamAddressesUpdated(_artist, _dev); } // Set Entry Fee function setEntryFeeWithGameShare( uint256 totalGameValue, uint256 _WIN_SHARE, uint256 _LOSS_SHARE, uint256 _COMMUNITY_SHARE, uint256 _DyanmicRewardsSystem_Share, uint256 _totalGameValue ) public onlyOwner { require(totalGameValue >= MINIMUM_GAME_VALUE); // set the game value GAME_VALUE = _totalGameValue; WIN_SHARE = _WIN_SHARE; LOSS_SHARE = _LOSS_SHARE; COMMUNITY_SHARE = _COMMUNITY_SHARE; DynamicRewardsSystem_Share = _DyanmicRewardsSystem_Share; if ( WIN_SHARE + (LOSS_SHARE * 3) + TEAM_SHARE + COMMUNITY_SHARE + DynamicRewardsSystem_Share != totalGameValue ) { revert(); } emit EntryFeeUpdated(totalGameValue); } // Join a new game function joinGame(uint256 _tokenId) external payable { require(GameIsAcive == true, "Game not Active"); require(_tokenId > 0 && _tokenId <= MAX_NFT_SUPPLY); require(ownerOfTreesNFT(_tokenId)); require( treesTokenIsNotPlaying(_tokenId), "This Tress token is already in a game" ); require( pendingPlayersCount < PLAYERS_COUNT, "Please wait few seconds and try joining again" ); require(msg.value == ENTRY_FEE); pendingPlayersCount++; pendingPlayers[pendingPlayersCount] = _tokenId; treesTokens[_tokenId].tokenId = _tokenId; if ( qualifiedTokensCount < MAX_NFT_SUPPLY && treesTokens[_tokenId].communityShareQualified == 0 && treesTokens[_tokenId].totalGamesPlayed >= COMMUNITY_MINIMUM_GAMES ) { treesTokens[_tokenId].communityShareQualified = 1; qualifiedTokensCount++; } // Keep track of top by total games played // get top of the 4 players uint256 playerTokenId = _tokenId; bool alreadyAdded = false; uint256 smallestTokenIdIndex = 1; if ( topTokensByTotalGamesPlayed[smallestTokenIdIndex] == playerTokenId ) { alreadyAdded = true; } if (!alreadyAdded) { for (uint256 k = 2; k <= TOP_LIMIT; k++) { if (topTokensByTotalGamesPlayed[k] == playerTokenId) { alreadyAdded = true; break; } if ( treesTokens[topTokensByTotalGamesPlayed[k]] .totalGamesPlayed < treesTokens[ topTokensByTotalGamesPlayed[smallestTokenIdIndex] ].totalGamesPlayed ) { smallestTokenIdIndex = k; } } } // update only if it wasn't added before if ( !alreadyAdded && treesTokens[topTokensByTotalGamesPlayed[smallestTokenIdIndex]] .totalGamesPlayed < treesTokens[playerTokenId].totalGamesPlayed ) { topTokensByTotalGamesPlayed[smallestTokenIdIndex] = playerTokenId; } emit GameJoined(_tokenId); if (pendingPlayersCount == PLAYERS_COUNT) { // Start the game as we have already 4 players startGame(); } } function setTreeNFTContract(address TreesNFTAddress_) public onlyOwner { TreesNFTContractAddress = TreesNFTAddress_; TREES_CONTRACT = ERC721Interface(TreesNFTContractAddress); } function ownerOfTreesNFT(uint256 _tokenId) internal view returns (bool) { address tokenOwnerAddress = TREES_CONTRACT.ownerOf(_tokenId); return (tokenOwnerAddress == msg.sender); } function treesTokenIsNotPlaying(uint256 _tokenId) internal view returns (bool) { for (uint256 i = 0; i < pendingPlayersCount; i++) { if (pendingPlayers[i + 1] == _tokenId) { return false; } } return true; } // Start the game and clear daata including pending players for a new game function startGame() private { gamesCounter++; totalGamesValues += GAME_VALUE; uint256[PLAYERS_COUNT] memory _players; _players[0] = pendingPlayers[1]; _players[1] = pendingPlayers[2]; _players[2] = pendingPlayers[3]; _players[3] = pendingPlayers[4]; uint256[PLAYERS_COUNT] memory _effects = [uint256(0), 0, 0, 0]; string[PLAYERS_COUNT] memory _tracks = ["", "", "", ""]; games[gamesCounter] = Game( gamesCounter, _players, _effects, _tracks, 0, 0, 0, 0, 0 ); // reset pendingPlayers[1] = 0; pendingPlayers[2] = 0; pendingPlayers[3] = 0; pendingPlayers[4] = 0; pendingPlayersCount = 0; // end emit GameStarted(games[gamesCounter]); if ((gamesCounter - 1) % pvtGamesCount == 0) { uint256 requestId = getRandomNumber(); requestIdToGameId[requestId] = gamesCounter; } else { // uint256 rnd = getGameRandomNumber(_players, pvtIndex); processGame(gamesCounter, rnd); } // feed the DyanmicRewardsSystem DynamicRewards_Balance += DynamicRewardsSystem_Share; if (DynamicRewards_Balance >= 0.1 ether) { PlantATreeRewardSystem(PAT_Address).PlantATree{ value: DynamicRewards_Balance }(ref); DynamicRewards_Balance = 0; } } function getGameRandomNumber(uint256[4] memory _players, uint256 _rndFactor) internal view returns (uint256) { uint256 rnd = uint256( keccak256(abi.encodePacked(_rndFactor, block.timestamp, _players)) ); uint256 randomResult = (rnd % max) + min; return randomResult; } function setGameActive(bool _isActive) public onlyOwner { GameIsAcive = _isActive; } function setConfig( uint256 _pvtGamesCount, address TreesNFTContractAddress_, address PATaddr, address _ref ) external onlyOwner { if (_pvtGamesCount > 0) pvtGamesCount = _pvtGamesCount; if (TreesNFTContractAddress_ != address(0)) TreesNFTContractAddress = TreesNFTContractAddress_; if (PATaddr != address(0)) PAT_Address = PATaddr; if (_ref != address(0)) ref = _ref; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /** **************************************************************************** * @notice Interface for contracts using VRF randomness * ***************************************************************************** * @dev PURPOSE * * @dev Reggie the Random Oracle (not his real job) wants to provide randomness * @dev to Vera the verifier in such a way that Vera can be sure he's not * @dev making his output up to suit himself. Reggie provides Vera a public key * @dev to which he knows the secret key. Each time Vera provides a seed to * @dev Reggie, he gives back a value which is computed completely * @dev deterministically from the seed and the secret key. * * @dev Reggie provides a proof by which Vera can verify that the output was * @dev correctly computed once Reggie tells it to her, but without that proof, * @dev the output is indistinguishable to her from a uniform random sample * @dev from the output space. * * @dev The purpose of this contract is to make it easy for unrelated contracts * @dev to talk to Vera the verifier about the work Reggie is doing, to provide * @dev simple access to a verifiable source of randomness. It ensures 2 things: * @dev 1. The fulfillment came from the VRFCoordinator * @dev 2. The consumer contract implements fulfillRandomWords. * ***************************************************************************** * @dev USAGE * * @dev Calling contracts must inherit from VRFConsumerBase, and can * @dev initialize VRFConsumerBase's attributes in their constructor as * @dev shown: * * @dev contract VRFConsumer { * @dev constructor(<other arguments>, address _vrfCoordinator, address _link) * @dev VRFConsumerBase(_vrfCoordinator) public { * @dev <initialization with other arguments goes here> * @dev } * @dev } * * @dev The oracle will have given you an ID for the VRF keypair they have * @dev committed to (let's call it keyHash). Create subscription, fund it * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface * @dev subscription management functions). * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations, * @dev callbackGasLimit, numWords), * @dev see (VRFCoordinatorInterface for a description of the arguments). * * @dev Once the VRFCoordinator has received and validated the oracle's response * @dev to your request, it will call your contract's fulfillRandomWords method. * * @dev The randomness argument to fulfillRandomWords is a set of random words * @dev generated from your requestId and the blockHash of the request. * * @dev If your contract could have concurrent requests open, you can use the * @dev requestId returned from requestRandomWords to track which response is associated * @dev with which randomness request. * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind, * @dev if your contract could have multiple requests in flight simultaneously. * * @dev Colliding `requestId`s are cryptographically impossible as long as seeds * @dev differ. * * ***************************************************************************** * @dev SECURITY CONSIDERATIONS * * @dev A method with the ability to call your fulfillRandomness method directly * @dev could spoof a VRF response with any random value, so it's critical that * @dev it cannot be directly called by anything other than this base contract * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method). * * @dev For your users to trust that your contract's random behavior is free * @dev from malicious interference, it's best if you can write it so that all * @dev behaviors implied by a VRF response are executed *during* your * @dev fulfillRandomness method. If your contract must store the response (or * @dev anything derived from it) and use it later, you must ensure that any * @dev user-significant behavior which depends on that stored value cannot be * @dev manipulated by a subsequent VRF request. * * @dev Similarly, both miners and the VRF oracle itself have some influence * @dev over the order in which VRF responses appear on the blockchain, so if * @dev your contract could have multiple VRF requests in flight simultaneously, * @dev you must ensure that the order in which the VRF responses arrive cannot * @dev be used to manipulate your contract's user-significant behavior. * * @dev Since the block hash of the block which contains the requestRandomness * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful * @dev miner could, in principle, fork the blockchain to evict the block * @dev containing the request, forcing the request to be included in a * @dev different block with a different hash, and therefore a different input * @dev to the VRF. However, such an attack would incur a substantial economic * @dev cost. This cost scales with the number of blocks the VRF oracle waits * @dev until it calls responds to a request. It is for this reason that * @dev that you can signal to an oracle you'd like them to wait longer before * @dev responding to the request (however this is not enforced in the contract * @dev and so remains effective only in the case of unmodified oracle software). */ abstract contract VRFConsumerBaseV2 { error OnlyCoordinatorCanFulfill(address have, address want); address private immutable vrfCoordinator; /** * @param _vrfCoordinator address of VRFCoordinator contract */ constructor(address _vrfCoordinator) { vrfCoordinator = _vrfCoordinator; } /** * @notice fulfillRandomness handles the VRF response. Your contract must * @notice implement it. See "SECURITY CONSIDERATIONS" above for important * @notice principles to keep in mind when implementing your fulfillRandomness * @notice method. * * @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this * @dev signature, and will call it once it has verified the proof * @dev associated with the randomness. (It is triggered via a call to * @dev rawFulfillRandomness, below.) * * @param requestId The Id initially returned by requestRandomness * @param randomWords the VRF output expanded to the requested number of words */ function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual; // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF // proof. rawFulfillRandomness then calls fulfillRandomness, after validating // the origin of the call function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external { if (msg.sender != vrfCoordinator) { revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator); } fulfillRandomWords(requestId, randomWords); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface VRFCoordinatorV2Interface { /** * @notice Get configuration relevant for making requests * @return minimumRequestConfirmations global min for request confirmations * @return maxGasLimit global max for request gas limit * @return s_provingKeyHashes list of registered key hashes */ function getRequestConfig() external view returns ( uint16, uint32, bytes32[] memory ); /** * @notice Request a set of random words. * @param keyHash - Corresponds to a particular oracle job which uses * that key for generating the VRF proof. Different keyHash's have different gas price * ceilings, so you can select a specific one to bound your maximum per request cost. * @param subId - The ID of the VRF subscription. Must be funded * with the minimum subscription balance required for the selected keyHash. * @param minimumRequestConfirmations - How many blocks you'd like the * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS * for why you may want to request more. The acceptable range is * [minimumRequestBlockConfirmations, 200]. * @param callbackGasLimit - How much gas you'd like to receive in your * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords * may be slightly less than this amount because of gas used calling the function * (argument decoding etc.), so you may need to request slightly more than you expect * to have inside fulfillRandomWords. The acceptable range is * [0, maxGasLimit] * @param numWords - The number of uint256 random values you'd like to receive * in your fulfillRandomWords callback. Note these numbers are expanded in a * secure way by the VRFCoordinator from a single random value supplied by the oracle. * @return requestId - A unique identifier of the request. Can be used to match * a request to a response in fulfillRandomWords. */ function requestRandomWords( bytes32 keyHash, uint64 subId, uint16 minimumRequestConfirmations, uint32 callbackGasLimit, uint32 numWords ) external returns (uint256 requestId); /** * @notice Create a VRF subscription. * @return subId - A unique subscription id. * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer. * @dev Note to fund the subscription, use transferAndCall. For example * @dev LINKTOKEN.transferAndCall( * @dev address(COORDINATOR), * @dev amount, * @dev abi.encode(subId)); */ function createSubscription() external returns (uint64 subId); /** * @notice Get a VRF subscription. * @param subId - ID of the subscription * @return balance - LINK balance of the subscription in juels. * @return reqCount - number of requests for this subscription, determines fee tier. * @return owner - owner of the subscription. * @return consumers - list of consumer address which are able to use this subscription. */ function getSubscription(uint64 subId) external view returns ( uint96 balance, uint64 reqCount, address owner, address[] memory consumers ); /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @param newOwner - proposed new owner of the subscription */ function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external; /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @dev will revert if original owner of subId has * not requested that msg.sender become the new owner. */ function acceptSubscriptionOwnerTransfer(uint64 subId) external; /** * @notice Add a consumer to a VRF subscription. * @param subId - ID of the subscription * @param consumer - New consumer which can use the subscription */ function addConsumer(uint64 subId, address consumer) external; /** * @notice Remove a consumer from a VRF subscription. * @param subId - ID of the subscription * @param consumer - Consumer to remove from the subscription */ function removeConsumer(uint64 subId, address consumer) external; /** * @notice Cancel a subscription * @param subId - ID of the subscription * @param to - Where to send the remaining LINK to */ function cancelSubscription(uint64 subId, address to) external; /* * @notice Check to see if there exists a request commitment consumers * for all consumers and keyhashes for a given sub. * @param subId - ID of the subscription * @return true if there exists at least one unfulfilled request for the subscription, false * otherwise. */ function pendingRequestExists(uint64 subId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../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. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev 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 { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "london", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
[{"inputs":[{"internalType":"uint256","name":"_pvtGamesCount","type":"uint256"},{"internalType":"uint256","name":"_gamesCounter","type":"uint256"},{"internalType":"uint64","name":"subscriptionId","type":"uint64"},{"internalType":"bytes32","name":"_keyHash","type":"bytes32"},{"internalType":"address","name":"_vrfCoordinator","type":"address"},{"internalType":"address","name":"TreesNFTAddress_","type":"address"},{"internalType":"address","name":"_PAT_Address","type":"address"},{"internalType":"address","name":"_ref","type":"address"},{"internalType":"address","name":"_dev","type":"address"},{"internalType":"address","name":"_artist","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalGameValue","type":"uint256"}],"name":"EntryFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_GameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_TreeTokenId","type":"uint256"}],"name":"GameEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_TreeTokenId","type":"uint256"}],"name":"GameJoined","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256[4]","name":"players","type":"uint256[4]"},{"internalType":"uint256[4]","name":"effects","type":"uint256[4]"},{"internalType":"string[4]","name":"tracks","type":"string[4]"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"winnerTokenId","type":"uint256"},{"internalType":"uint256","name":"map","type":"uint256"},{"internalType":"uint256","name":"text","type":"uint256"},{"internalType":"uint256","name":"rndResult","type":"uint256"}],"indexed":false,"internalType":"struct PlantATreeGame.Game","name":"_game","type":"tuple"}],"name":"GameStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"artist","type":"address"},{"indexed":false,"internalType":"address","name":"dev","type":"address"}],"name":"TeamAddressesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"subscriptionId","type":"uint64"},{"indexed":false,"internalType":"uint32","name":"_callbackGasLimit","type":"uint32"},{"indexed":false,"internalType":"uint16","name":"_requestConfirmations","type":"uint16"},{"indexed":false,"internalType":"bytes32","name":"_keyHash","type":"bytes32"}],"name":"VRFConfigUpdated","type":"event"},{"inputs":[],"name":"COMMUNITY_MINIMUM_GAMES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COMMUNITY_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DynamicRewardsSystem_Share","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DynamicRewards_Balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENTRY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAME_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GameIsAcive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LOSS_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NFT_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_COMMUNITY_BALANCE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_GAME_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAT_Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PLAYERS_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOP_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TreesNFTContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WIN_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"communityBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeCommunityShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"winnerTokenId","type":"uint256"},{"internalType":"uint256","name":"map","type":"uint256"},{"internalType":"uint256","name":"text","type":"uint256"},{"internalType":"uint256","name":"rndResult","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gamesCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"getGameEffects","outputs":[{"internalType":"uint256[4]","name":"","type":"uint256[4]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"getGamePlayers","outputs":[{"internalType":"uint256[4]","name":"","type":"uint256[4]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameIdFrom","type":"uint256"},{"internalType":"uint256","name":"gameIdTo","type":"uint256"}],"name":"getGames","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256[4]","name":"players","type":"uint256[4]"},{"internalType":"uint256[4]","name":"effects","type":"uint256[4]"},{"internalType":"string[4]","name":"tracks","type":"string[4]"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"winnerTokenId","type":"uint256"},{"internalType":"uint256","name":"map","type":"uint256"},{"internalType":"uint256","name":"text","type":"uint256"},{"internalType":"uint256","name":"rndResult","type":"uint256"}],"internalType":"struct PlantATreeGame.Game[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum PlantATreeGame.SORT_TYPE","name":"sortType","type":"uint8"}],"name":"getTopTreesNFT","outputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"totalGamesPlayed","type":"uint256"},{"internalType":"uint8","name":"communityShareQualified","type":"uint8"},{"internalType":"uint256","name":"totalWonGames","type":"uint256"},{"internalType":"uint256","name":"totalLostGames","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"internalType":"struct PlantATreeGame.TreesToken[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"joinGame","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pendingPlayers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingPlayersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"qualifiedTokensCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ref","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestIdToGameId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pvtGamesCount","type":"uint256"},{"internalType":"address","name":"TreesNFTContractAddress_","type":"address"},{"internalType":"address","name":"PATaddr","type":"address"},{"internalType":"address","name":"_ref","type":"address"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalGameValue","type":"uint256"},{"internalType":"uint256","name":"_WIN_SHARE","type":"uint256"},{"internalType":"uint256","name":"_LOSS_SHARE","type":"uint256"},{"internalType":"uint256","name":"_COMMUNITY_SHARE","type":"uint256"},{"internalType":"uint256","name":"_DyanmicRewardsSystem_Share","type":"uint256"},{"internalType":"uint256","name":"_totalGameValue","type":"uint256"}],"name":"setEntryFeeWithGameShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setGameActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_artist","type":"address"},{"internalType":"address","name":"_dev","type":"address"}],"name":"setTeamAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"TreesNFTAddress_","type":"address"}],"name":"setTreeNFTContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"subscriptionId","type":"uint64"},{"internalType":"uint32","name":"_callbackGasLimit","type":"uint32"},{"internalType":"uint16","name":"_requestConfirmations","type":"uint16"},{"internalType":"bytes32","name":"_keyHash","type":"bytes32"}],"name":"setVRFConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"topTokensByTotalGamesPlayed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"topTokensBytotalWonGames","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGamesValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"treesTokens","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"totalGamesPlayed","type":"uint256"},{"internalType":"uint8","name":"communityShareQualified","type":"uint8"},{"internalType":"uint256","name":"totalWonGames","type":"uint256"},{"internalType":"uint256","name":"totalLostGames","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a0604052622625a0600360006101000a81548163ffffffff021916908363ffffffff16021790555060038060046101000a81548161ffff021916908361ffff1602179055506040518060a00160405280600060ff168152602001601960ff168152602001603260ff168152602001604b60ff168152602001606460ff1681525060049060056200009292919062001b18565b5060405180610a2001604052806040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f202d31000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3200000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3400000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3100000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600281526020017f2d3300000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081525060059060516200135a92919062001b6f565b506000600d556000600e556000600f5567058d15e17628000060125567016345785d8a00006013556702c68af0bb140000601455669758796b6e8000601555665543df729c000060165566398dd06d5c80006017556671afd498d0000060185560006019556000601a556000602060006101000a81548160ff021916908315150217905550348015620013ec57600080fd5b5060405162007a3738038062007a37833981810160405281019062001412919062001e19565b858073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620014686200145c6200172060201b60201c565b6200172860201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603620014a257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603620014dc57600080fd5b60008a11620014ea57600080fd5b8960078190555084601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508660028190555083600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200169a8183620017ec60201b60201c565b88601f81905550601254601f54620016b3919062001f3e565b600d819055506000600754601f54620016cd919062001fce565b1462001710576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620017079062002067565b60405180910390fd5b505050505050505050506200220f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620017fc62001a5e60201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015620018675750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b620018a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018a090620020d9565b60405180910390fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f5b65288e2d560d9dd6a3f51aeacd4a1b63fd42c65a06e25cc090f3443a7eb055828260405162001a529291906200210c565b60405180910390a15050565b62001a6e6200172060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662001a9462001aef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462001aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001ae49062002189565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805482825590600052602060002090810192821562001b5c579160200282015b8281111562001b5b578251829060ff1690559160200191906001019062001b39565b5b50905062001b6b919062001bd6565b5090565b82805482825590600052602060002090810192821562001bc3579160200282015b8281111562001bc257825182908051906020019062001bb192919062001bf5565b509160200191906001019062001b90565b5b50905062001bd2919062001c86565b5090565b5b8082111562001bf157600081600090555060010162001bd7565b5090565b82805462001c0390620021da565b90600052602060002090601f01602090048101928262001c27576000855562001c73565b82601f1062001c4257805160ff191683800117855562001c73565b8280016001018555821562001c73579182015b8281111562001c7257825182559160200191906001019062001c55565b5b50905062001c82919062001bd6565b5090565b5b8082111562001caa576000818162001ca0919062001cae565b5060010162001c87565b5090565b50805462001cbc90620021da565b6000825580601f1062001cd0575062001cf1565b601f01602090049060005260206000209081019062001cf0919062001bd6565b5b50565b600080fd5b6000819050919050565b62001d0e8162001cf9565b811462001d1a57600080fd5b50565b60008151905062001d2e8162001d03565b92915050565b600067ffffffffffffffff82169050919050565b62001d538162001d34565b811462001d5f57600080fd5b50565b60008151905062001d738162001d48565b92915050565b6000819050919050565b62001d8e8162001d79565b811462001d9a57600080fd5b50565b60008151905062001dae8162001d83565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001de18262001db4565b9050919050565b62001df38162001dd4565b811462001dff57600080fd5b50565b60008151905062001e138162001de8565b92915050565b6000806000806000806000806000806101408b8d03121562001e405762001e3f62001cf4565b5b600062001e508d828e0162001d1d565b9a5050602062001e638d828e0162001d1d565b995050604062001e768d828e0162001d62565b985050606062001e898d828e0162001d9d565b975050608062001e9c8d828e0162001e02565b96505060a062001eaf8d828e0162001e02565b95505060c062001ec28d828e0162001e02565b94505060e062001ed58d828e0162001e02565b93505061010062001ee98d828e0162001e02565b92505061012062001efd8d828e0162001e02565b9150509295989b9194979a5092959850565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062001f4b8262001cf9565b915062001f588362001cf9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001f945762001f9362001f0f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062001fdb8262001cf9565b915062001fe88362001cf9565b92508262001ffb5762001ffa62001f9f565b5b828206905092915050565b600082825260208201905092915050565b7f6572720000000000000000000000000000000000000000000000000000000000600082015250565b60006200204f60038362002006565b91506200205c8262002017565b602082019050919050565b60006020820190508181036000830152620020828162002040565b9050919050565b7f616464726573732063616e206e6f74206265207a65726f000000000000000000600082015250565b6000620020c160178362002006565b9150620020ce8262002089565b602082019050919050565b60006020820190508181036000830152620020f481620020b2565b9050919050565b620021068162001dd4565b82525050565b6000604082019050620021236000830185620020fb565b620021326020830184620020fb565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200217160208362002006565b91506200217e8262002139565b602082019050919050565b60006020820190508181036000830152620021a48162002162565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620021f357607f821691505b602082108103620022095762002208620021ab565b5b50919050565b6080516158056200223260003960008181610ca90152610cfd01526158056000f3fe6080604052600436106102935760003560e01c80637ec9ff961161015a578063bf8a0d1d116100c1578063e9f1cc6b1161007a578063e9f1cc6b14610a06578063ece31e7914610a31578063efaa55a014610a6e578063f2879bf114610a8a578063f2fde38b14610ab5578063f6d361cc14610ade57610293565b8063bf8a0d1d146108f6578063c1a454171461091f578063c2463d881461094a578063ccc0897414610975578063dbede0f01461099e578063e6094261146109c957610293565b80638e4cbc83116101135780638e4cbc831461080a578063ac45118514610835578063ae979ae614610872578063b0c6825414610889578063b5077f44146108b4578063b58fea3b146108df57610293565b80637ec9ff96146106f6578063825cedd91461072157806389e852171461074c5780638b470d86146107775780638da5cb5b146107b45780638de3130b146107df57610293565b806335760c14116101fe5780635eb6a78f116101b75780635eb6a78f146106085780636099beec14610633578063666352d41461065e5780636d0083e814610689578063714d4370146106b4578063715018a6146106df57610293565b806335760c14146104e357806335e4b8f61461050e578063365d78a814610550578063379607f51461057957806342b75595146105a25780634f84e128146105cb57610293565b806315a40f491161025057806315a40f49146103af5780631aff478b146103ec5780631fa072db146104295780631fe543e31461046657806321a78f681461048f578063299ae8ad146104ba57610293565b806305943a151461029857806307bcd85f146102c357806309e7d2de146102ec5780630b045c6714610317578063109ad32f14610342578063117a5b901461036d575b600080fd5b3480156102a457600080fd5b506102ad610b09565b6040516102ba919061386f565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061398a565b610b0f565b005b3480156102f857600080fd5b50610301610bc8565b60405161030e919061386f565b60405180910390f35b34801561032357600080fd5b5061032c610bce565b604051610339919061386f565b60405180910390f35b34801561034e57600080fd5b50610357610bd4565b604051610364919061386f565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f9190613a1d565b610bda565b6040516103a696959493929190613a4a565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190613a1d565b610c16565b6040516103e39190613b56565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e9190613a1d565b610c77565b604051610420919061386f565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b9190613a1d565b610c8f565b60405161045d919061386f565b60405180910390f35b34801561047257600080fd5b5061048d60048036038101906104889190613cca565b610ca7565b005b34801561049b57600080fd5b506104a4610d67565b6040516104b19190613d67565b60405180910390f35b3480156104c657600080fd5b506104e160048036038101906104dc9190613dae565b610d8d565b005b3480156104ef57600080fd5b506104f8610e3c565b604051610505919061386f565b60405180910390f35b34801561051a57600080fd5b5061053560048036038101906105309190613a1d565b610e41565b60405161054796959493929190613df7565b60405180910390f35b34801561055c57600080fd5b5061057760048036038101906105729190613e58565b610e8a565b005b34801561058557600080fd5b506105a0600480360381019061059b9190613a1d565b610f57565b005b3480156105ae57600080fd5b506105c960048036038101906105c49190613ee5565b6110f8565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190613a1d565b61135c565b6040516105ff9190613b56565b60405180910390f35b34801561061457600080fd5b5061061d6113bd565b60405161062a919061386f565b60405180910390f35b34801561063f57600080fd5b506106486113c3565b604051610655919061386f565b60405180910390f35b34801561066a57600080fd5b506106736113c9565b604051610680919061386f565b60405180910390f35b34801561069557600080fd5b5061069e6113cf565b6040516106ab919061386f565b60405180910390f35b3480156106c057600080fd5b506106c96113d4565b6040516106d69190613d67565b60405180910390f35b3480156106eb57600080fd5b506106f46113fa565b005b34801561070257600080fd5b5061070b61140e565b604051610718919061386f565b60405180910390f35b34801561072d57600080fd5b50610736611413565b604051610743919061386f565b60405180910390f35b34801561075857600080fd5b5061076161141f565b60405161076e919061386f565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190613a1d565b611425565b6040516107ab919061386f565b60405180910390f35b3480156107c057600080fd5b506107c961143d565b6040516107d69190613d67565b60405180910390f35b3480156107eb57600080fd5b506107f4611466565b604051610801919061386f565b60405180910390f35b34801561081657600080fd5b5061081f61146c565b60405161082c919061386f565b60405180910390f35b34801561084157600080fd5b5061085c60048036038101906108579190613f25565b611472565b6040516108699190614291565b60405180910390f35b34801561087e57600080fd5b506108876116ee565b005b34801561089557600080fd5b5061089e611a17565b6040516108ab919061386f565b60405180910390f35b3480156108c057600080fd5b506108c9611a1d565b6040516108d6919061386f565b60405180910390f35b3480156108eb57600080fd5b506108f4611a23565b005b34801561090257600080fd5b5061091d600480360381019061091891906142b3565b611b9d565b005b34801561092b57600080fd5b50610934611d1e565b604051610941919061386f565b60405180910390f35b34801561095657600080fd5b5061095f611d24565b60405161096c9190614335565b60405180910390f35b34801561098157600080fd5b5061099c6004803603810190610997919061437c565b611d37565b005b3480156109aa57600080fd5b506109b3611d5c565b6040516109c09190613d67565b60405180910390f35b3480156109d557600080fd5b506109f060048036038101906109eb9190613a1d565b611d82565b6040516109fd919061386f565b60405180910390f35b348015610a1257600080fd5b50610a1b611d9a565b604051610a28919061386f565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a5391906143ce565b611da0565b604051610a659190614534565b60405180910390f35b610a886004803603810190610a839190613a1d565b611ff7565b005b348015610a9657600080fd5b50610a9f61239b565b604051610aac919061386f565b60405180910390f35b348015610ac157600080fd5b50610adc6004803603810190610ad79190613dae565b6123a7565b005b348015610aea57600080fd5b50610af361242a565b604051610b00919061386f565b60405180910390f35b60165481565b610b17612430565b83600160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600360006101000a81548163ffffffff021916908363ffffffff16021790555081600360046101000a81548161ffff021916908361ffff160217905550806002819055507f21c3280824c4b41c8107036783a63f9dc0ac271a24f7b296ce7e05811b12e32184848484604051610bba9493929190614592565b60405180910390a150505050565b600d5481565b60175481565b60195481565b601e60205280600052604060002060009150905080600001549080600d01549080600e01549080600f0154908060100154908060110154905086565b610c1e6135dc565b601e6000838152602001908152602001600020600101600480602002604051908101604052809291908260048015610c6b576020028201915b815481526020019060010190808311610c57575b50505050509050919050565b60236020528060005260406000206000915090505481565b60216020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d5957337f00000000000000000000000000000000000000000000000000000000000000006040517f1cf993f4000000000000000000000000000000000000000000000000000000008152600401610d509291906145d7565b60405180910390fd5b610d6382826124ae565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d95612430565b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600581565b601d6020528060005260406000206000915090508060000154908060010154908060020160009054906101000a900460ff16908060030154908060040154908060050154905086565b610e92612430565b67058d15e176280000861015610ea757600080fd5b8060128190555084601481905550836015819055508260178190555081601881905550856018546017546016546003601554610ee3919061462f565b601454610ef09190614689565b610efa9190614689565b610f049190614689565b610f0e9190614689565b14610f1857600080fd5b7f24a0b2e591795f2c27be52ff14a57d0a39ac957304305bc05e8b04be49e8fe1586604051610f47919061386f565b60405180910390a1505050505050565b600081118015610f6957506102588111155b610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90614762565b60405180910390fd5b610fb18161255d565b610ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe7906147f4565b60405180910390fd5b6000601d60008381526020019081526020016000206005015490506000811161104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104590614860565b60405180910390fd5b80471015611091576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611088906148cc565b60405180910390fd5b6000601d6000848152602001908152602001600020600501819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110f3573d6000803e3d6000fd5b505050565b611100612430565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561116a5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a090614938565b60405180910390fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f5b65288e2d560d9dd6a3f51aeacd4a1b63fd42c65a06e25cc090f3443a7eb05582826040516113509291906145d7565b60405180910390a15050565b6113646135dc565b601e60008381526020019081526020016000206005016004806020026040519081016040528092919082600480156113b1576020028201915b81548152602001906001019080831161139d575b50505050509050919050565b601f5481565b60155481565b60145481565b600481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611402612430565b61140c6000612635565b565b601e81565b670de0b6b3a764000081565b600e5481565b601b6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60185481565b600f5481565b6060600083836114829190614958565b905060006001826114939190614689565b67ffffffffffffffff8111156114ac576114ab613b87565b5b6040519080825280602002602001820160405280156114e557816020015b6114d26135fe565b8152602001906001900390816114ca5790505b5090506000808690505b8581116116e157601e600082815260200190815260200160002060405180610120016040529081600082015481526020016001820160048060200260405190810160405280929190826004801561155b576020028201915b815481526020019060010190808311611547575b50505050508152602001600582016004806020026040519081016040528092919082600480156115a0576020028201915b81548152602001906001019080831161158c575b5050505050815260200160098201600480602002604051908101604052809291906000905b828210156116685783820180546115db906149bb565b80601f0160208091040260200160405190810160405280929190818152602001828054611607906149bb565b80156116545780601f1061162957610100808354040283529160200191611654565b820191906000526020600020905b81548152906001019060200180831161163757829003601f168201915b5050505050815260200190600101906115c5565b505050508152602001600d8201548152602001600e8201548152602001600f8201548152602001601082015481526020016011820154815250508383815181106116b5576116b46149ec565b5b602002602001018190525081806116cb90614a1b565b92505080806116d990614a1b565b9150506114ef565b5081935050505092915050565b60011515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461174b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036117dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d390614aaf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361186d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186490614b1b565b60405180910390fd5b6000600e54116118b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a990614bad565b60405180910390fd5b600e544710156118f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ee906148cc565b60405180910390fd5b6000600e5490506000600e8190555060006064602883611917919061462f565b6119219190614bfc565b905060006064603c84611934919061462f565b61193e9190614bfc565b9050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156119a8573d6000803e3d6000fd5b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611a11573d6000803e3d6000fd5b50505050565b601a5481565b61025881565b670de0b6b3a7640000600f541015611a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6790614c9f565b60405180910390fd5b6000601a5411611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac90614d0b565b60405180910390fd5b601a54600f541015611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614d77565b60405180910390fd5b6000601a54600f54611b0e9190614bfc565b90506000600f819055506000600190505b6102588111611b9957601d600082815260200190815260200160002060020160009054906101000a900460ff1660ff1682611b5a919061462f565b601d60008381526020019081526020016000206005016000828254611b7f9190614689565b925050819055508080611b9190614a1b565b915050611b1f565b5050565b611ba5612430565b6000841115611bb657836007819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611c2c5782601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611ca25781600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611d185780600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50505050565b60125481565b602060009054906101000a900460ff1681565b611d3f612430565b80602060006101000a81548160ff02191690831515021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60226020528060005260406000206000915090505481565b601c5481565b60606000601e67ffffffffffffffff811115611dbf57611dbe613b87565b5b604051908082528060200260200182016040528015611df857816020015b611de561365c565b815260200190600190039081611ddd5790505b50905060006001811115611e0f57611e0e614d97565b5b836001811115611e2257611e21614d97565b5b03611ef5576000600190505b601e8111611ef357601d6000602260008481526020019081526020016000205481526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff1660ff1660ff168152602001600382015481526020016004820154815260200160058201548152505082600183611ec49190614958565b81518110611ed557611ed46149ec565b5b60200260200101819052508080611eeb90614a1b565b915050611e2e565b505b600180811115611f0857611f07614d97565b5b836001811115611f1b57611f1a614d97565b5b03611fee576000600190505b601e8111611fec57601d6000602360008481526020019081526020016000205481526020019081526020016000206040518060c001604052908160008201548152602001600182015481526020016002820160009054906101000a900460ff1660ff1660ff168152602001600382015481526020016004820154815260200160058201548152505082600183611fbd9190614958565b81518110611fce57611fcd6149ec565b5b60200260200101819052508080611fe490614a1b565b915050611f27565b505b80915050919050565b60011515602060009054906101000a900460ff1615151461204d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204490614e12565b60405180910390fd5b60008111801561205f57506102588111155b61206857600080fd5b6120718161255d565b61207a57600080fd5b612083816126f9565b6120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b990614ea4565b60405180910390fd5b6004601c5410612107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fe90614f36565b60405180910390fd5b601354341461211557600080fd5b601c600081548092919061212890614a1b565b919050555080601b6000601c5481526020019081526020016000208190555080601d600083815260200190815260200160002060000181905550610258601a5410801561219b57506000601d600083815260200190815260200160002060020160009054906101000a900460ff1660ff16145b80156121be57506005601d60008381526020019081526020016000206001015410155b1561220c576001601d600083815260200190815260200160002060020160006101000a81548160ff021916908360ff160217905550601a600081548092919061220690614a1b565b91905055505b6000819050600080600190508260236000838152602001908152602001600020540361223757600191505b816122e1576000600290505b601e81116122df578360236000838152602001908152602001600020540361226e57600192506122df565b601d60006023600085815260200190815260200160002054815260200190815260200160002060010154601d6000602360008581526020019081526020016000205481526020019081526020016000206001015410156122cc578091505b80806122d790614a1b565b915050612243565b505b8115801561232d5750601d600084815260200190815260200160002060010154601d60006023600085815260200190815260200160002054815260200190815260200160002060010154105b1561234b578260236000838152602001908152602001600020819055505b7ffe9befc84fdb142bebdf33b7564a6dc1d47e60864b996a5f6c7949c210d1f5448460405161237a919061386f565b60405180910390a16004601c540361239557612394612759565b5b50505050565b67058d15e17628000081565b6123af612430565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590614fc8565b60405180910390fd5b61242781612635565b50565b60135481565b612438612bde565b73ffffffffffffffffffffffffffffffffffffffff1661245661143d565b73ffffffffffffffffffffffffffffffffffffffff16146124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a390615034565b60405180910390fd5b565b6000816000815181106124c4576124c36149ec565b5b6020026020010151905080600681905550600060216000858152602001908152602001600020549050600061254a601e600084815260200190815260200160002060010160048060200260405190810160405280929190826004801561253f576020028201915b81548152602001906001019080831161252b575b505050505084612be6565b90506125568282612c41565b5050505050565b600080601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016125bb919061386f565b602060405180830381865afa1580156125d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fc9190615069565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600090505b601c5481101561274e5782601b600060018461271d9190614689565b8152602001908152602001600020540361273b576000915050612754565b808061274690614a1b565b915050612701565b50600190505b919050565b601f600081548092919061276c90614a1b565b9190505550601254600d60008282546127859190614689565b925050819055506127946135dc565b601b60006001815260200190815260200160002054816000600481106127bd576127bc6149ec565b5b602002018181525050601b60006002815260200190815260200160002054816001600481106127ef576127ee6149ec565b5b602002018181525050601b6000600381526020019081526020016000205481600260048110612821576128206149ec565b5b602002018181525050601b6000600481526020019081526020016000205481600360048110612853576128526149ec565b5b602002018181525050600060405180608001604052806000815260200160008152602001600081526020016000815250905060006040518060800160405280604051806020016040528060008152508152602001604051806020016040528060008152508152602001604051806020016040528060008152508152602001604051806020016040528060008152508152509050604051806101200160405280601f548152602001848152602001838152602001828152602001600081526020016000815260200160008152602001600081526020016000815250601e6000601f54815260200190815260200160002060008201518160000155602082015181600101906004612963929190613695565b5060408201518160050190600461297b929190613695565b506060820151816009019060046129939291906136d5565b50608082015181600d015560a082015181600e015560c082015181600f015560e0820151816010015561010082015181601101559050506000601b600060018152602001908152602001600020819055506000601b600060028152602001908152602001600020819055506000601b600060038152602001908152602001600020819055506000601b600060048152602001908152602001600020819055506000601c819055507f52e1c72d80850618c805768e266b9f1959adfcdb06464930b838a1016e399cb3601e6000601f548152602001908152602001600020604051612a7d91906153a3565b60405180910390a160006007546001601f54612a999190614958565b612aa391906153c5565b03612ad4576000612ab2612c4f565b9050601f54602160008381526020019081526020016000208190555050612af2565b6000612ae284600654612be6565b9050612af0601f5482612c41565b505b60185460196000828254612b069190614689565b9250508190555067016345785d8a000060195410612bd957600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d3e7807601954600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401612b9e9190613d67565b6000604051808303818588803b158015612bb757600080fd5b505af1158015612bcb573d6000803e3d6000fd5b505050505060006019819055505b505050565b600033905090565b600080824285604051602001612bfe939291906154a0565b6040516020818303038152906040528051906020012060001c905060006001606483612c2a91906153c5565b612c349190614689565b9050809250505092915050565b612c4b8282612d37565b5050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30600254600160149054906101000a900467ffffffffffffffff16600360049054906101000a900461ffff16600360009054906101000a900463ffffffff1660016040518663ffffffff1660e01b8152600401612cef9594939291906154dd565b6020604051808303816000875af1158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615545565b905090565b6000601e60008481526020019081526020016000209050612d588383612f77565b81600e01819055508181601101819055504281600d0181905550612d88601f5483612d839190614689565b61309a565b81600f0181905550612db26003601f5484612da39190614689565b612dad9190614689565b6130c8565b8160100181905550612dc483836130ea565b612dce83836131bf565b612dd78361324d565b6000806001905082600e0154602260008381526020019081526020016000205403612e0157600191505b81612eaf576000600290505b601e8111612ead5783600e0154602260008381526020019081526020016000205403612e3c5760019250612ead565b601d60006022600085815260200190815260200160002054815260200190815260200160002060030154601d600060226000858152602001908152602001600020548152602001908152602001600020600301541015612e9a578091505b8080612ea590614a1b565b915050612e0d565b505b81158015612eff5750601d600084600e0154815260200190815260200160002060030154601d60006022600085815260200190815260200160002054815260200190815260200160002060030154105b15612f215782600e015460226000838152602001908152602001600020819055505b7f4c4660db760944215f41e957066d756ad5fd0eed1b4640632322eb06f77b034d85601e6000888152602001908152602001600020600e0154604051612f68929190615572565b60405180910390a15050505050565b600060018210158015612f8b575060648211155b612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc1906155e7565b60405180910390fd5b600060048054905090506000600190505b81811015613091576004600182612ff29190614958565b81548110613003576130026149ec565b5b90600052602060002001548411801561303a57506004818154811061302b5761302a6149ec565b5b90600052602060002001548411155b1561307e57601e60008681526020019081526020016000206001016001826130629190614958565b60048110613073576130726149ec565b5b015492505050613094565b808061308990614a1b565b915050612fdb565b50505b92915050565b6000600160046007846130ad919061462f565b6130b791906153c5565b6130c19190614689565b9050919050565b60006001600a836130d991906153c5565b6130e39190614689565b9050919050565b6000601e6000848152602001908152602001600020905060006004905060005b818110156131b857826001018160048110613128576131276149ec565b5b0154601e6000878152602001908152602001600020600e01540361316857600083600501826004811061315e5761315d6149ec565b5b01819055506131a5565b61318984846001018360048110613182576131816149ec565b5b0154613401565b83600501826004811061319f5761319e6149ec565b5b01819055505b80806131b090614a1b565b91505061310a565b5050505050565b6000601e6000848152602001908152602001600020905060006004905060005b818110156132465761320884846001018360048110613201576132006149ec565b5b015461342f565b83600901826004811061321e5761321d6149ec565b5b019080519060200190613232929190613728565b50808061323e90614a1b565b9150506131df565b5050505050565b6000601e60008381526020019081526020016000209050600081600e01549050601d6000828152602001908152602001600020600301600081548092919061329490614a1b565b9190505550601d600082815260200190815260200160002060010160008154809291906132c090614a1b565b9190505550601454601d600083815260200190815260200160002060050160008282546132ed9190614689565b9250508190555060006004905060005b818110156133c457600084600101826004811061331d5761331c6149ec565b5b015490508381146133b057601d6000828152602001908152602001600020600101600081548092919061334f90614a1b565b9190505550601d6000828152602001908152602001600020600401600081548092919061337b90614a1b565b9190505550601554601d600083815260200190815260200160002060050160008282546133a89190614689565b925050819055505b5080806133bc90614a1b565b9150506132fd565b50601654600e60008282546133d99190614689565b92505081905550601754600f60008282546133f49190614689565b9250508190555050505050565b60006001600683856134139190614689565b61341d91906153c5565b6134279190614689565b905092915050565b6060604860058054905011613479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347090615679565b60405180910390fd5b6000604860058054905061348d9190614958565b83856134999190614689565b6134a391906153c5565b905060006009826134b49190614689565b90506000600583815481106134cc576134cb6149ec565b5b9060005260206000200180546134e1906149bb565b80601f016020809104026020016040519081016040528092919081815260200182805461350d906149bb565b801561355a5780601f1061352f5761010080835404028352916020019161355a565b820191906000526020600020905b81548152906001019060200180831161353d57829003601f168201915b5050505050905060006001846135709190614689565b90505b828110156135cf5781600582815481106135905761358f6149ec565b5b906000526020600020016040516020016135ab9291906157a0565b604051602081830303815290604052915080806135c790614a1b565b915050613573565b5080935050505092915050565b6040518060800160405280600490602082028036833780820191505090505090565b604051806101200160405280600081526020016136196135dc565b81526020016136266135dc565b81526020016136336137ae565b815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060c001604052806000815260200160008152602001600060ff1681526020016000815260200160008152602001600081525090565b82600481019282156136c4579160200282015b828111156136c35782518255916020019190600101906136a8565b5b5090506136d191906137d5565b5090565b8260048101928215613717579160200282015b82811115613716578251829080519060200190613706929190613728565b50916020019190600101906136e8565b5b50905061372491906137f2565b5090565b828054613734906149bb565b90600052602060002090601f016020900481019282613756576000855561379d565b82601f1061376f57805160ff191683800117855561379d565b8280016001018555821561379d579182015b8281111561379c578251825591602001919060010190613781565b5b5090506137aa91906137d5565b5090565b60405180608001604052806004905b60608152602001906001900390816137bd5790505090565b5b808211156137ee5760008160009055506001016137d6565b5090565b5b8082111561381257600081816138099190613816565b506001016137f3565b5090565b508054613822906149bb565b6000825580601f106138345750613853565b601f01602090049060005260206000209081019061385291906137d5565b5b50565b6000819050919050565b61386981613856565b82525050565b60006020820190506138846000830184613860565b92915050565b6000604051905090565b600080fd5b600080fd5b600067ffffffffffffffff82169050919050565b6138bb8161389e565b81146138c657600080fd5b50565b6000813590506138d8816138b2565b92915050565b600063ffffffff82169050919050565b6138f7816138de565b811461390257600080fd5b50565b600081359050613914816138ee565b92915050565b600061ffff82169050919050565b6139318161391a565b811461393c57600080fd5b50565b60008135905061394e81613928565b92915050565b6000819050919050565b61396781613954565b811461397257600080fd5b50565b6000813590506139848161395e565b92915050565b600080600080608085870312156139a4576139a3613894565b5b60006139b2878288016138c9565b94505060206139c387828801613905565b93505060406139d48782880161393f565b92505060606139e587828801613975565b91505092959194509250565b6139fa81613856565b8114613a0557600080fd5b50565b600081359050613a17816139f1565b92915050565b600060208284031215613a3357613a32613894565b5b6000613a4184828501613a08565b91505092915050565b600060c082019050613a5f6000830189613860565b613a6c6020830188613860565b613a796040830187613860565b613a866060830186613860565b613a936080830185613860565b613aa060a0830184613860565b979650505050505050565b600060049050919050565b600081905092915050565b6000819050919050565b613ad481613856565b82525050565b6000613ae68383613acb565b60208301905092915050565b6000602082019050919050565b613b0881613aab565b613b128184613ab6565b9250613b1d82613ac1565b8060005b83811015613b4e578151613b358782613ada565b9650613b4083613af2565b925050600181019050613b21565b505050505050565b6000608082019050613b6b6000830184613aff565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613bbf82613b76565b810181811067ffffffffffffffff82111715613bde57613bdd613b87565b5b80604052505050565b6000613bf161388a565b9050613bfd8282613bb6565b919050565b600067ffffffffffffffff821115613c1d57613c1c613b87565b5b602082029050602081019050919050565b600080fd5b6000613c46613c4184613c02565b613be7565b90508083825260208201905060208402830185811115613c6957613c68613c2e565b5b835b81811015613c925780613c7e8882613a08565b845260208401935050602081019050613c6b565b5050509392505050565b600082601f830112613cb157613cb0613b71565b5b8135613cc1848260208601613c33565b91505092915050565b60008060408385031215613ce157613ce0613894565b5b6000613cef85828601613a08565b925050602083013567ffffffffffffffff811115613d1057613d0f613899565b5b613d1c85828601613c9c565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d5182613d26565b9050919050565b613d6181613d46565b82525050565b6000602082019050613d7c6000830184613d58565b92915050565b613d8b81613d46565b8114613d9657600080fd5b50565b600081359050613da881613d82565b92915050565b600060208284031215613dc457613dc3613894565b5b6000613dd284828501613d99565b91505092915050565b600060ff82169050919050565b613df181613ddb565b82525050565b600060c082019050613e0c6000830189613860565b613e196020830188613860565b613e266040830187613de8565b613e336060830186613860565b613e406080830185613860565b613e4d60a0830184613860565b979650505050505050565b60008060008060008060c08789031215613e7557613e74613894565b5b6000613e8389828a01613a08565b9650506020613e9489828a01613a08565b9550506040613ea589828a01613a08565b9450506060613eb689828a01613a08565b9350506080613ec789828a01613a08565b92505060a0613ed889828a01613a08565b9150509295509295509295565b60008060408385031215613efc57613efb613894565b5b6000613f0a85828601613d99565b9250506020613f1b85828601613d99565b9150509250929050565b60008060408385031215613f3c57613f3b613894565b5b6000613f4a85828601613a08565b9250506020613f5b85828601613a08565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081905092915050565b613fa581613aab565b613faf8184613f91565b9250613fba82613ac1565b8060005b83811015613feb578151613fd28782613ada565b9650613fdd83613af2565b925050600181019050613fbe565b505050505050565b600060049050919050565b600081905092915050565b6000819050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561404d578082015181840152602081019050614032565b8381111561405c576000848401525b50505050565b600061406d82614013565b614077818561401e565b935061408781856020860161402f565b61409081613b76565b840191505092915050565b60006140a78383614062565b905092915050565b6000602082019050919050565b60006140c782613ff3565b6140d18185613ffe565b9350836020820285016140e385614009565b8060005b8581101561411f5784840389528151614100858261409b565b945061410b836140af565b925060208a019950506001810190506140e7565b50829750879550505050505092915050565b60006101e08301600083015161414a6000860182613acb565b50602083015161415d6020860182613f9c565b50604083015161417060a0860182613f9c565b50606083015184820361012086015261418982826140bc565b915050608083015161419f610140860182613acb565b5060a08301516141b3610160860182613acb565b5060c08301516141c7610180860182613acb565b5060e08301516141db6101a0860182613acb565b506101008301516141f06101c0860182613acb565b508091505092915050565b60006142078383614131565b905092915050565b6000602082019050919050565b600061422782613f65565b6142318185613f70565b93508360208202850161424385613f81565b8060005b8581101561427f578484038952815161426085826141fb565b945061426b8361420f565b925060208a01995050600181019050614247565b50829750879550505050505092915050565b600060208201905081810360008301526142ab818461421c565b905092915050565b600080600080608085870312156142cd576142cc613894565b5b60006142db87828801613a08565b94505060206142ec87828801613d99565b93505060406142fd87828801613d99565b925050606061430e87828801613d99565b91505092959194509250565b60008115159050919050565b61432f8161431a565b82525050565b600060208201905061434a6000830184614326565b92915050565b6143598161431a565b811461436457600080fd5b50565b60008135905061437681614350565b92915050565b60006020828403121561439257614391613894565b5b60006143a084828501614367565b91505092915050565b600281106143b657600080fd5b50565b6000813590506143c8816143a9565b92915050565b6000602082840312156143e4576143e3613894565b5b60006143f2848285016143b9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61443081613ddb565b82525050565b60c08201600082015161444c6000850182613acb565b50602082015161445f6020850182613acb565b5060408201516144726040850182614427565b5060608201516144856060850182613acb565b5060808201516144986080850182613acb565b5060a08201516144ab60a0850182613acb565b50505050565b60006144bd8383614436565b60c08301905092915050565b6000602082019050919050565b60006144e1826143fb565b6144eb8185614406565b93506144f683614417565b8060005b8381101561452757815161450e88826144b1565b9750614519836144c9565b9250506001810190506144fa565b5085935050505092915050565b6000602082019050818103600083015261454e81846144d6565b905092915050565b61455f8161389e565b82525050565b61456e816138de565b82525050565b61457d8161391a565b82525050565b61458c81613954565b82525050565b60006080820190506145a76000830187614556565b6145b46020830186614565565b6145c16040830185614574565b6145ce6060830184614583565b95945050505050565b60006040820190506145ec6000830185613d58565b6145f96020830184613d58565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061463a82613856565b915061464583613856565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561467e5761467d614600565b5b828202905092915050565b600061469482613856565b915061469f83613856565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146d4576146d3614600565b5b828201905092915050565b600082825260208201905092915050565b7f5472657373746f6b656e204964206d757374206265206265747765656e20312060008201527f616e642036303000000000000000000000000000000000000000000000000000602082015250565b600061474c6027836146df565b9150614757826146f0565b604082019050919050565b6000602082019050818103600083015261477b8161473f565b9050919050565b7f506c65617365206d616b65207375726520796f75206f776e207468697320547260008201527f657373746f6b656e000000000000000000000000000000000000000000000000602082015250565b60006147de6028836146df565b91506147e982614782565b604082019050919050565b6000602082019050818103600083015261480d816147d1565b9050919050565b7f42616c616e6365206973207a65726f0000000000000000000000000000000000600082015250565b600061484a600f836146df565b915061485582614814565b602082019050919050565b600060208201905081810360008301526148798161483d565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e6365000000600082015250565b60006148b6601d836146df565b91506148c182614880565b602082019050919050565b600060208201905081810360008301526148e5816148a9565b9050919050565b7f616464726573732063616e206e6f74206265207a65726f000000000000000000600082015250565b60006149226017836146df565b915061492d826148ec565b602082019050919050565b6000602082019050818103600083015261495181614915565b9050919050565b600061496382613856565b915061496e83613856565b92508282101561498157614980614600565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149d357607f821691505b6020821081036149e6576149e561498c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a2682613856565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a5857614a57614600565b5b600182019050919050565b7f61727469737420616464726573732063616e206e6f74206265207a65726f0000600082015250565b6000614a99601e836146df565b9150614aa482614a63565b602082019050919050565b60006020820190508181036000830152614ac881614a8c565b9050919050565b7f64657620616464726573732063616e206e6f74206265207a65726f0000000000600082015250565b6000614b05601b836146df565b9150614b1082614acf565b602082019050919050565b60006020820190508181036000830152614b3481614af8565b9050919050565b7f7465616d2042616c616e6365206d75737420626520677265617465722074686160008201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b6000614b976026836146df565b9150614ba282614b3b565b604082019050919050565b60006020820190508181036000830152614bc681614b8a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614c0782613856565b9150614c1283613856565b925082614c2257614c21614bcd565b5b828204905092915050565b7f436f6d6d756e6974792062616c616e6365206d7573742062652031206f72206760008201527f7265617465720000000000000000000000000000000000000000000000000000602082015250565b6000614c896026836146df565b9150614c9482614c2d565b604082019050919050565b60006020820190508181036000830152614cb881614c7c565b9050919050565b7f5468657265206973206e6f207175616c696669656420746f6b656e7320796574600082015250565b6000614cf56020836146df565b9150614d0082614cbf565b602082019050919050565b60006020820190508181036000830152614d2481614ce8565b9050919050565b7f53686172652070657220746f6b656e206973207a65726f000000000000000000600082015250565b6000614d616017836146df565b9150614d6c82614d2b565b602082019050919050565b60006020820190508181036000830152614d9081614d54565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f47616d65206e6f74204163746976650000000000000000000000000000000000600082015250565b6000614dfc600f836146df565b9150614e0782614dc6565b602082019050919050565b60006020820190508181036000830152614e2b81614def565b9050919050565b7f5468697320547265737320746f6b656e20697320616c726561647920696e206160008201527f2067616d65000000000000000000000000000000000000000000000000000000602082015250565b6000614e8e6025836146df565b9150614e9982614e32565b604082019050919050565b60006020820190508181036000830152614ebd81614e81565b9050919050565b7f506c65617365207761697420666577207365636f6e647320616e64207472792060008201527f6a6f696e696e6720616761696e00000000000000000000000000000000000000602082015250565b6000614f20602d836146df565b9150614f2b82614ec4565b604082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614fb26026836146df565b9150614fbd82614f56565b604082019050919050565b60006020820190508181036000830152614fe181614fa5565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061501e6020836146df565b915061502982614fe8565b602082019050919050565b6000602082019050818103600083015261504d81615011565b9050919050565b60008151905061506381613d82565b92915050565b60006020828403121561507f5761507e613894565b5b600061508d84828501615054565b91505092915050565b60008160001c9050919050565b6000819050919050565b60006150c06150bb83615096565b6150a3565b9050919050565b600060049050919050565b6000819050919050565b60006150e882546150ad565b9050919050565b6000600182019050919050565b615105816150c7565b61510f8184613f91565b925061511a826150d2565b8060005b838110156151525761512f826150dc565b6151398782613ada565b9650615144836150ef565b92505060018101905061511e565b505050505050565b600060049050919050565b6000819050919050565b60008190508160005260206000209050919050565b60008154615191816149bb565b61519b818661401e565b945060018216600081146151b657600181146151c8576151fb565b60ff19831686526020860193506151fb565b6151d18561516f565b60005b838110156151f3578154818901526001820191506020810190506151d4565b808801955050505b50505092915050565b60006152108383615184565b905092915050565b6000600182019050919050565b60006152308261515a565b61523a8185613ffe565b93508360208202850161524c85615165565b8060005b85811015615287578484038952816152688582615204565b945061527383615218565b925060208a01995050600181019050615250565b50829750879550505050505092915050565b60006101e0830160008084015490506152b1816150ad565b6152be6000870182613acb565b50600184016152d060208701826150fc565b50600584016152e260a08701826150fc565b50600984018583036101208701526152fa8382615225565b925050600d840154905061530d816150ad565b61531b610140870182613acb565b50600e840154905061532c816150ad565b61533a610160870182613acb565b50600f840154905061534b816150ad565b615359610180870182613acb565b506010840154905061536a816150ad565b6153786101a0870182613acb565b5060118401549050615389816150ad565b6153976101c0870182613acb565b50819250505092915050565b600060208201905081810360008301526153bd8184615299565b905092915050565b60006153d082613856565b91506153db83613856565b9250826153eb576153ea614bcd565b5b828206905092915050565b6000819050919050565b61541161540c82613856565b6153f6565b82525050565b600081905092915050565b61542b81613856565b82525050565b600061543d8383615422565b60208301905092915050565b61545281613aab565b61545c8184615417565b925061546782613ac1565b8060005b8381101561549857815161547f8782615431565b965061548a83613af2565b92505060018101905061546b565b505050505050565b60006154ac8286615400565b6020820191506154bc8285615400565b6020820191506154cc8284615449565b608082019150819050949350505050565b600060a0820190506154f26000830188614583565b6154ff6020830187614556565b61550c6040830186614574565b6155196060830185614565565b6155266080830184614565565b9695505050505050565b60008151905061553f816139f1565b92915050565b60006020828403121561555b5761555a613894565b5b600061556984828501615530565b91505092915050565b60006040820190506155876000830185613860565b6155946020830184613860565b9392505050565b7f52616e646f6d20726573756c74206973206f7574206f662072616e6765000000600082015250565b60006155d1601d836146df565b91506155dc8261559b565b602082019050919050565b60006020820190508181036000830152615600816155c4565b9050919050565b7f545241434b5f56414c554553206c656e677468206d757374206265206772656160008201527f746572207468616e203732000000000000000000000000000000000000000000602082015250565b6000615663602b836146df565b915061566e82615607565b604082019050919050565b6000602082019050818103600083015261569281615656565b9050919050565b600081905092915050565b60006156af82614013565b6156b98185615699565b93506156c981856020860161402f565b80840191505092915050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b600061570b600183615699565b9150615716826156d5565b600182019050919050565b6000815461572e816149bb565b6157388186615699565b94506001821660008114615753576001811461576457615797565b60ff19831686528186019350615797565b61576d8561516f565b60005b8381101561578f57815481890152600182019150602081019050615770565b838801955050505b50505092915050565b60006157ac82856156a4565b91506157b7826156fe565b91506157c38284615721565b9150819050939250505056fea2646970667358221220a8736069497c4a6bd26f41c8d996ece93cbf9a974921b00dcb3d4c80b9d917b064736f6c634300080e0033000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000004f83250c5584ffa93feb6ee082981c5ebe484c865196750b39835ad4f13780435d000000000000000000000000d5d517abe5cf79b7e95ec98db0f0277788aff63400000000000000000000000055a41741a5f737ce420156081f9145b444d41636000000000000000000000000fd97c61962ff2ae3d08491db4805e7e46f38c50200000000000000000000000098ab9ba6ae262abf61dfde07fc04ba7006696e1300000000000000000000000098ab9ba6ae262abf61dfde07fc04ba7006696e13000000000000000000000000b69a4f612a8378c64a4153182068479f74789134
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000068000000000000000000000000000000000000000000000000000000000000004f83250c5584ffa93feb6ee082981c5ebe484c865196750b39835ad4f13780435d000000000000000000000000d5d517abe5cf79b7e95ec98db0f0277788aff63400000000000000000000000055a41741a5f737ce420156081f9145b444d41636000000000000000000000000fd97c61962ff2ae3d08491db4805e7e46f38c50200000000000000000000000098ab9ba6ae262abf61dfde07fc04ba7006696e1300000000000000000000000098ab9ba6ae262abf61dfde07fc04ba7006696e13000000000000000000000000b69a4f612a8378c64a4153182068479f74789134
-----Decoded View---------------
Arg [0] : _pvtGamesCount (uint256): 13
Arg [1] : _gamesCounter (uint256): 104
Arg [2] : subscriptionId (uint64): 79
Arg [3] : _keyHash (bytes32): 0x83250c5584ffa93feb6ee082981c5ebe484c865196750b39835ad4f13780435d
Arg [4] : _vrfCoordinator (address): 0xd5d517abe5cf79b7e95ec98db0f0277788aff634
Arg [5] : TreesNFTAddress_ (address): 0x55a41741a5f737ce420156081f9145b444d41636
Arg [6] : _PAT_Address (address): 0xfd97c61962ff2ae3d08491db4805e7e46f38c502
Arg [7] : _ref (address): 0x98ab9ba6ae262abf61dfde07fc04ba7006696e13
Arg [8] : _dev (address): 0x98ab9ba6ae262abf61dfde07fc04ba7006696e13
Arg [9] : _artist (address): 0xb69a4f612a8378c64a4153182068479f74789134
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000068
Arg [2] : 000000000000000000000000000000000000000000000000000000000000004f
Arg [3] : 83250c5584ffa93feb6ee082981c5ebe484c865196750b39835ad4f13780435d
Arg [4] : 000000000000000000000000d5d517abe5cf79b7e95ec98db0f0277788aff634
Arg [5] : 00000000000000000000000055a41741a5f737ce420156081f9145b444d41636
Arg [6] : 000000000000000000000000fd97c61962ff2ae3d08491db4805e7e46f38c502
Arg [7] : 00000000000000000000000098ab9ba6ae262abf61dfde07fc04ba7006696e13
Arg [8] : 00000000000000000000000098ab9ba6ae262abf61dfde07fc04ba7006696e13
Arg [9] : 000000000000000000000000b69a4f612a8378c64a4153182068479f74789134
Deployed ByteCode Sourcemap
1061:26327:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5042:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8012:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4078:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5088:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5202:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5772:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;16153:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6275:62;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6049:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6618:256:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3909:18:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24024:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5370:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5716:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;20504:894;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18755:648;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20140:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16363:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5816:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4995:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4952:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3088:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4482:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1831:101:3;;;;;;;;;;;;;:::i;:::-;;6137:38:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4305:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4156:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5589:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1201:85:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5140:55:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4199:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14998:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19448:650;;;;;;;;;;;;;:::i;:::-;;5499:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3037:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17731:973;;;;;;;;;;;;;:::i;:::-;;26920:465;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4818:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5850:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26814:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3830:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6209:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5645:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15475:642;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21430:2586;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4605:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2081:198:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4909:36:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5042:39;;;;:::o;8012:527::-;1094:13:3;:11;:13::i;:::-;8223:14:0::1;8204:16;;:33;;;;;;;;;;;;;;;;;;8267:17;8248:16;;:36;;;;;;;;;;;;;;;;;;8318:21;8295:20;;:44;;;;;;;;;;;;;;;;;;8360:8;8350:7;:18;;;;8384:147;8415:14;8444:17;8476:21;8512:8;8384:147;;;;;;;;;:::i;:::-;;;;;;;;8012:527:::0;;;;:::o;4078:41::-;;;;:::o;5088:45::-;;;;:::o;5202:41::-;;;;:::o;5772:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16153:173::-;16243:29;;:::i;:::-;16297:5;:13;16303:6;16297:13;;;;;;;;;;;:21;;16290:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16153:173;;;:::o;6275:62::-;;;;;;;;;;;;;;;;;:::o;6049:52::-;;;;;;;;;;;;;;;;;:::o;6618:256:1:-;6731:14;6717:28;;:10;:28;;;6713:109;;6788:10;6800:14;6762:53;;;;;;;;;;;;:::i;:::-;;;;;;;;6713:109;6827:42;6846:9;6857:11;6827:18;:42::i;:::-;6618:256;;:::o;3909:18:0:-;;;;;;;;;;;;;:::o;24024:200::-;1094:13:3;:11;:13::i;:::-;24132:16:0::1;24106:23;;:42;;;;;;;;;;;;;;;;;;24192:23;;;;;;;;;;;24159:14;;:57;;;;;;;;;;;;;;;;;;24024:200:::0;:::o;5370:51::-;5420:1;5370:51;:::o;5716:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20504:894::-;1094:13:3;:11;:13::i;:::-;4650:9:0::1;20788:14;:36;;20780:45;;;::::0;::::1;;20882:15;20869:10;:28;;;;20920:10;20908:9;:22;;;;20954:11;20941:10;:24;;;;20994:16;20976:15;:34;;;;21050:27;21021:26;:56;;;;21281:14;21238:26;;21203:15;;21173:10;;21151:1;21138:10;;:14;;;;:::i;:::-;21108:9;;:45;;;;:::i;:::-;:75;;;;:::i;:::-;:110;;;;:::i;:::-;:156;;;;:::i;:::-;:187;21090:252;;21322:8;::::0;::::1;21090:252;21359:31;21375:14;21359:31;;;;;;:::i;:::-;;;;;;;;20504:894:::0;;;;;;:::o;18755:648::-;18841:1;18830:8;:12;:42;;;;;3078:3;18846:8;:26;;18830:42;18808:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;18972:25;18988:8;18972:15;:25::i;:::-;18950:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;19076:17;19096:11;:21;19108:8;19096:21;;;;;;;;;;;:29;;;19076:49;;19156:1;19144:9;:13;19136:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;19235:9;19210:21;:34;;19188:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;19344:1;19312:11;:21;19324:8;19312:21;;;;;;;;;;;:29;;:33;;;;19364:10;19356:28;;:39;19385:9;19356:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18797:606;18755:648;:::o;20140:334::-;1094:13:3;:11;:13::i;:::-;20252:1:0::1;20233:21;;:7;:21;;;;:43;;;;;20274:1;20258:18;;:4;:18;;;;20233:43;20225:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;20324:7;20315:6;;:16;;;;;;;;;;;;;;;;;;20348:4;20342:3;;:10;;;;;;;;;;;;;;;;;;20380:4;20363:6;:14;20370:6;;;;;;;;;;;20363:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;20409:4;20395:6;:11;20402:3;;;;;;;;;;;20395:11;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;20431:35;20452:7;20461:4;20431:35;;;;;;;:::i;:::-;;;;;;;;20140:334:::0;;:::o;16363:173::-;16453:29;;:::i;:::-;16507:5;:13;16513:6;16507:13;;;;;;;;;;;:21;;16500:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16363:173;;;:::o;5816:27::-;;;;:::o;4995:40::-;;;;:::o;4952:36::-;;;;:::o;3088:41::-;3128:1;3088:41;:::o;4482:38::-;;;;;;;;;;;;;:::o;1831:101:3:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;6137:38:0:-;6173:2;6137:38;:::o;4305:59::-;4357:7;4305:59;:::o;4156:36::-;;;;:::o;5589:49::-;;;;;;;;;;;;;;;;;:::o;1201:85:3:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;5140:55:0:-;;;;:::o;4199:41::-;;;;:::o;14998:417::-;15104:13;15135:14;15163:10;15152:8;:21;;;;:::i;:::-;15135:38;;15184:22;15229:1;15220:6;:10;;;;:::i;:::-;15209:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;15184:47;;15242:9;15271;15283:10;15271:22;;15266:116;15300:8;15295:1;:13;15266:116;;15344:5;:8;15350:1;15344:8;;;;;;;;;;;15330:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;15339:1;15330:11;;;;;;;;:::i;:::-;;;;;;;:22;;;;15367:3;;;;;:::i;:::-;;;;15310;;;;;:::i;:::-;;;;15266:116;;;;15399:8;15392:15;;;;;14998:417;;;;:::o;19448:650::-;4019:4;3997:26;;:6;:18;4004:10;3997:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;3989:35;;;;;;19524:1:::1;19506:20;;:6;;;;;;;;;;;:20;;::::0;19498:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19595:1;19580:17;;:3;;;;;;;;;;;:17;;::::0;19572:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19662:1;19648:11;;:15;19640:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;19764:11;;19739:21;:36;;19717:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;19843:20;19866:11;;19843:34;;19902:1;19888:11;:15;;;;19914;19954:3;19948:2;19933:12;:17;;;;:::i;:::-;19932:25;;;;:::i;:::-;19914:43;;19968:12;20005:3;19999:2;19984:12;:17;;;;:::i;:::-;19983:25;;;;:::i;:::-;19968:40;;20027:6;;;;;;;;;;;20019:24;;:33;20044:7;20019:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20071:3;;;;;;;;;;;20063:21;;:27;20085:4;20063:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;19487:611;;;19448:650::o:0;5499:39::-;;;;:::o;3037:44::-;3078:3;3037:44;:::o;17731:973::-;4357:7;17809:16;;:45;;17787:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;17962:1;17939:20;;:24;17931:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;18053:20;;18033:16;;:40;;18011:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;18420:21;18463:20;;18444:16;;:39;;;;:::i;:::-;18420:63;;18513:1;18494:16;:20;;;;18530:9;18542:1;18530:13;;18525:172;3078:3;18545:1;:19;18525:172;;18646:11;:14;18658:1;18646:14;;;;;;;;;;;:38;;;;;;;;;;;;18613:71;;:13;:71;;;;:::i;:::-;18586:11;:14;18598:1;18586:14;;;;;;;;;;;:22;;;:99;;;;;;;:::i;:::-;;;;;;;;18566:3;;;;;:::i;:::-;;;;18525:172;;;;17776:928;17731:973::o;26920:465::-;1094:13:3;:11;:13::i;:::-;27122:1:0::1;27105:14;:18;27101:54;;;27141:14;27125:13;:30;;;;27101:54;27206:1;27170:38;;:24;:38;;;27166:107;;27249:24;27223:23;;:50;;;;;;;;;;;;;;;;;;27166:107;27307:1;27288:21;;:7;:21;;;27284:48;;27325:7;27311:11;;:21;;;;;;;;;;;;;;;;;;27284:48;27363:1;27347:18;;:4;:18;;;27343:34;;27373:4;27367:3;;:10;;;;;;;;;;;;;;;;;;27343:34;26920:465:::0;;;;:::o;4818:37::-;;;;:::o;5850:31::-;;;;;;;;;;;;;:::o;26814:98::-;1094:13:3;:11;:13::i;:::-;26895:9:0::1;26881:11;;:23;;;;;;;;;;;;;;;;;;26814:98:::0;:::o;3830:26::-;;;;;;;;;;;;;:::o;6209:59::-;;;;;;;;;;;;;;;;;:::o;5645:34::-;;;;:::o;15475:642::-;15569:19;15606:28;6173:2;15637:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;15606:58;;15691:19;15679:31;;;;;;;;:::i;:::-;;:8;:31;;;;;;;;:::i;:::-;;;15675:197;;15732:9;15744:1;15732:13;;15727:134;6173:2;15747:1;:14;15727:134;;15805:11;:40;15817:24;:27;15842:1;15817:27;;;;;;;;;;;;15805:40;;;;;;;;;;;15787:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;15800:1;15796;:5;;;;:::i;:::-;15787:15;;;;;;;;:::i;:::-;;;;;;;:58;;;;15763:3;;;;;:::i;:::-;;;;15727:134;;;;15675:197;15898:21;15886:33;;;;;;;;:::i;:::-;;:8;:33;;;;;;;;:::i;:::-;;;15882:202;;15941:9;15953:1;15941:13;;15936:137;6173:2;15956:1;:14;15936:137;;16014:11;:43;16026:27;:30;16054:1;16026:30;;;;;;;;;;;;16014:43;;;;;;;;;;;15996:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;16009:1;16005;:5;;;;:::i;:::-;15996:15;;;;;;;;:::i;:::-;;;;;;;:61;;;;15972:3;;;;;:::i;:::-;;;;15936:137;;;;15882:202;16101:8;16094:15;;;15475:642;;;:::o;21430:2586::-;21517:4;21502:19;;:11;;;;;;;;;;;:19;;;21494:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;21573:1;21562:8;:12;:42;;;;;3078:3;21578:8;:26;;21562:42;21554:51;;;;;;21624:25;21640:8;21624:15;:25::i;:::-;21616:34;;;;;;21683:32;21706:8;21683:22;:32::i;:::-;21661:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;3128:1;21813:19;;:35;21791:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;21953:9;;21940;:22;21932:31;;;;;;21976:19;;:21;;;;;;;;;:::i;:::-;;;;;;22046:8;22008:14;:35;22023:19;;22008:35;;;;;;;;;;;:46;;;;22097:8;22065:11;:21;22077:8;22065:21;;;;;;;;;;;:29;;:40;;;;3078:3;22134:20;;:37;:104;;;;;22237:1;22188:11;:21;22200:8;22188:21;;;;;;;;;;;:45;;;;;;;;;;;;:50;;;22134:104;:186;;;;;5420:1;22255:11;:21;22267:8;22255:21;;;;;;;;;;;:38;;;:65;;22134:186;22116:329;;;22395:1;22347:11;:21;22359:8;22347:21;;;;;;;;;;;:45;;;:49;;;;;;;;;;;;;;;;;;22411:20;;:22;;;;;;;;;:::i;:::-;;;;;;22116:329;22546:21;22570:8;22546:32;;22589:17;22625:28;22656:1;22625:32;;22739:13;22686:27;:49;22714:20;22686:49;;;;;;;;;;;;:66;22668:142;;22794:4;22779:19;;22668:142;22825:12;22820:631;;22859:9;22871:1;22859:13;;22854:586;6173:2;22874:1;:14;22854:586;;22952:13;22918:27;:30;22946:1;22918:30;;;;;;;;;;;;:47;22914:143;;23005:4;22990:19;;23032:5;;22914:143;23211:11;:110;23249:27;:49;23277:20;23249:49;;;;;;;;;;;;23211:110;;;;;;;;;;;:127;;;23101:11;:43;23113:27;:30;23141:1;23113:30;;;;;;;;;;;;23101:43;;;;;;;;;;;:86;;;:237;23075:350;;;23404:1;23381:24;;23075:350;22890:3;;;;;:::i;:::-;;;;22854:586;;;;22820:631;23530:12;23529:13;:186;;;;;23672:11;:26;23684:13;23672:26;;;;;;;;;;;:43;;;23559:11;:62;23571:27;:49;23599:20;23571:49;;;;;;;;;;;;23559:62;;;;;;;;;;;:97;;;:156;23529:186;23511:308;;;23794:13;23742:27;:49;23770:20;23742:49;;;;;;;;;;;:65;;;;23511:308;23836:20;23847:8;23836:20;;;;;;:::i;:::-;;;;;;;;3128:1;23873:19;;:36;23869:140;;23986:11;:9;:11::i;:::-;23869:140;21483:2533;;;21430:2586;:::o;4605:54::-;4650:9;4605:54;:::o;2081:198:3:-;1094:13;:11;:13::i;:::-;2189:1:::1;2169:22;;:8;:22;;::::0;2161:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;4909:36:0:-;;;;:::o;1359:130:3:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;8973:365:0:-;9102:15;9120:11;9132:1;9120:14;;;;;;;;:::i;:::-;;;;;;;;9102:32;;9156:7;9145:8;:18;;;;9174:14;9191:17;:28;9209:9;9191:28;;;;;;;;;;;;9174:45;;9230:11;9244:51;9264:5;:13;9270:6;9264:13;;;;;;;;;;;:21;;9244:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9287:7;9244:19;:51::i;:::-;9230:65;;9306:24;9318:6;9326:3;9306:11;:24::i;:::-;9091:247;;;8973:365;;:::o;24232:202::-;24298:4;24315:25;24343:14;;;;;;;;;;;:22;;;24366:8;24343:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24315:60;;24415:10;24394:31;;:17;:31;;;24386:40;;;24232:202;;;:::o;2433:187:3:-;2506:16;2525:6;;;;;;;;;;;2506:25;;2550:8;2541:6;;:17;;;;;;;;;;;;;;;;;;2604:8;2573:40;;2594:8;2573:40;;;;;;;;;;;;2496:124;2433:187;:::o;24442:313:0:-;24542:4;24569:9;24581:1;24569:13;;24564:162;24588:19;;24584:1;:23;24564:162;;;24658:8;24633:14;:21;24652:1;24648;:5;;;;:::i;:::-;24633:21;;;;;;;;;;;;:33;24629:86;;24694:5;24687:12;;;;;24629:86;24609:3;;;;;:::i;:::-;;;;24564:162;;;;24743:4;24736:11;;24442:313;;;;:::o;24843:1600::-;24883:12;;:14;;;;;;;;;:::i;:::-;;;;;;24928:10;;24908:16;;:30;;;;;;;:::i;:::-;;;;;;;;24949:38;;:::i;:::-;25012:14;:17;25027:1;25012:17;;;;;;;;;;;;24998:8;25007:1;24998:11;;;;;;;:::i;:::-;;;;;:31;;;;;25054:14;:17;25069:1;25054:17;;;;;;;;;;;;25040:8;25049:1;25040:11;;;;;;;:::i;:::-;;;;;:31;;;;;25096:14;:17;25111:1;25096:17;;;;;;;;;;;;25082:8;25091:1;25082:11;;;;;;;:::i;:::-;;;;;:31;;;;;25138:14;:17;25153:1;25138:17;;;;;;;;;;;;25124:8;25133:1;25124:11;;;;;;;:::i;:::-;;;;;:31;;;;;25168:38;:62;;;;;;;;25218:1;25168:62;;;;25222:1;25168:62;;;;25225:1;25168:62;;;;25228:1;25168:62;;;;;25241:36;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25331:190;;;;;;;;25350:12;;25331:190;;;;25377:8;25331:190;;;;25400:8;25331:190;;;;25423:7;25331:190;;;;25445:1;25331:190;;;;25461:1;25331:190;;;;25477:1;25331:190;;;;25493:1;25331:190;;;;25509:1;25331:190;;;25309:5;:19;25315:12;;25309:19;;;;;;;;;;;:212;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25572:1;25552:14;:17;25567:1;25552:17;;;;;;;;;;;:21;;;;25604:1;25584:14;:17;25599:1;25584:17;;;;;;;;;;;:21;;;;25636:1;25616:14;:17;25631:1;25616:17;;;;;;;;;;;:21;;;;25668:1;25648:14;:17;25663:1;25648:17;;;;;;;;;;;:21;;;;25702:1;25680:19;:23;;;;25737:32;25749:5;:19;25755:12;;25749:19;;;;;;;;;;;25737:32;;;;;;:::i;:::-;;;;;;;;25824:1;25807:13;;25802:1;25787:12;;:16;;;;:::i;:::-;25786:34;;;;:::i;:::-;:39;25782:314;;25842:17;25862;:15;:17::i;:::-;25842:37;;25925:12;;25894:17;:28;25912:9;25894:28;;;;;;;;;;;:43;;;;25827:122;25782:314;;;25986:11;26000:39;26020:8;26030;;26000:19;:39::i;:::-;25986:53;;26054:30;26066:12;;26080:3;26054:11;:30::i;:::-;25955:141;25782:314;26176:26;;26150:22;;:52;;;;;;;:::i;:::-;;;;;;;;26243:9;26217:22;;:35;26213:223;;26292:11;;;;;;;;;;;26269:46;;;26341:22;;26379:3;;;;;;;;;;;26269:114;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26423:1;26398:22;:26;;;;26213:223;24872:1571;;;24843:1600::o;640:96:4:-;693:7;719:10;712:17;;640:96;:::o;26451:355:0:-;26579:7;26604:11;26667:10;26679:15;26696:8;26650:55;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26640:66;;;;;;26618:99;;26604:113;;26728:20;5962:1;6001:3;26752;:9;;;;:::i;:::-;26751:17;;;;:::i;:::-;26728:40;;26786:12;26779:19;;;;26451:355;;;;:::o;9346:101::-;9416:23;9427:6;9435:3;9416:10;:23::i;:::-;9346:101;;:::o;8596:310::-;8641:17;8691:11;;;;;;;;;;;:30;;;8740:7;;8766:16;;;;;;;;;;;8801:20;;;;;;;;;;;8840:16;;;;;;;;;;;1579:1;8691:207;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8671:227;;8596:310;:::o;10717:1977::-;10845:17;10865:5;:13;10871:6;10865:13;;;;;;;;;;;10845:33;;10910:38;10927:6;10935:12;10910:16;:38::i;:::-;10889:4;:18;;:59;;;;10976:12;10959:4;:14;;:29;;;;11016:15;10999:4;:14;;:32;;;;11099:35;11121:12;;11106;:27;;;;:::i;:::-;11099:6;:35::i;:::-;11088:4;:8;;:46;;;;11157:40;11195:1;11180:12;;11165;:27;;;;:::i;:::-;:31;;;;:::i;:::-;11157:7;:40::i;:::-;11145:4;:9;;:52;;;;11208:39;11226:6;11234:12;11208:17;:39::i;:::-;11258:38;11275:6;11283:12;11258:16;:38::i;:::-;11346:23;11362:6;11346:15;:23::i;:::-;11420:17;11456:28;11487:1;11456:32;;11598:4;:18;;;11548:24;:46;11573:20;11548:46;;;;;;;;;;;;:68;11530:144;;11658:4;11643:19;;11530:144;11689:12;11684:573;;11723:9;11735:1;11723:13;;11718:528;6173:2;11738:1;:14;11718:528;;11813:4;:18;;;11782:24;:27;11807:1;11782:27;;;;;;;;;;;;:49;11778:145;;11871:4;11856:19;;11898:5;;11778:145;12045:11;:59;12057:24;:46;12082:20;12057:46;;;;;;;;;;;;12045:59;;;;;;;;;;;:99;;;11967:11;:40;11979:24;:27;12004:1;11979:27;;;;;;;;;;;;11967:40;;;;;;;;;;;:54;;;:177;11941:290;;;12210:1;12187:24;;11941:290;11754:3;;;;;:::i;:::-;;;;11718:528;;;;11684:573;12336:12;12335:13;:182;;;;;12472:11;:31;12484:4;:18;;;12472:31;;;;;;;;;;;:45;;;12365:11;:59;12377:24;:46;12402:20;12377:46;;;;;;;;;;;;12365:59;;;;;;;;;;;:91;;;:152;12335:182;12317:306;;;12593:4;:18;;;12544:24;:46;12569:20;12544:46;;;;;;;;;;;:67;;;;12317:306;12640:46;12650:6;12658:5;:13;12664:6;12658:13;;;;;;;;;;;:27;;;12640:46;;;;;;;:::i;:::-;;;;;;;;10784:1910;;;10717:1977;;:::o;14345:593::-;14459:21;14536:1;14520:12;:17;;:40;;;;;14557:3;14541:12;:19;;14520:40;14498:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;14628:9;14640:15;:22;;;;14628:34;;14678:9;14690:1;14678:13;;14673:258;14697:1;14693;:5;14673:258;;;14757:15;14777:1;14773;:5;;;;:::i;:::-;14757:22;;;;;;;;:::i;:::-;;;;;;;;;;14742:12;:37;:92;;;;;14816:15;14832:1;14816:18;;;;;;;;:::i;:::-;;;;;;;;;;14800:12;:34;;14742:92;14720:200;;;14876:5;:13;14882:6;14876:13;;;;;;;;;;;:21;;14902:1;14898;:5;;;;:::i;:::-;14876:28;;;;;;;:::i;:::-;;;;14869:35;;;;;;14720:200;14700:3;;;;;:::i;:::-;;;;14673:258;;;;14487:451;14345:593;;;;;:::o;10147:114::-;10203:7;10252:1;10247;10242;10232:7;:11;;;;:::i;:::-;10231:17;;;;:::i;:::-;10230:23;;;;:::i;:::-;10223:30;;10147:114;;;:::o;10291:110::-;10348:7;10392:1;10386:2;10376:7;:12;;;;:::i;:::-;10375:18;;;;:::i;:::-;10368:25;;10291:110;;;:::o;12756:441::-;12841:17;12861:5;:13;12867:6;12861:13;;;;;;;;;;;12841:33;;12885:9;12897:19;12885:31;;12932:9;12927:263;12951:1;12947;:5;12927:263;;;13009:4;:12;;13022:1;13009:15;;;;;;;:::i;:::-;;;;12978:5;:13;12984:6;12978:13;;;;;;;;;;;:27;;;:46;12974:205;;13063:1;13045:4;:12;;13058:1;13045:15;;;;;;;:::i;:::-;;;:19;;;;12974:205;;;13123:40;13133:12;13147:4;:12;;13160:1;13147:15;;;;;;;:::i;:::-;;;;13123:9;:40::i;:::-;13105:4;:12;;13118:1;13105:15;;;;;;;:::i;:::-;;;:58;;;;12974:205;12954:3;;;;;:::i;:::-;;;;12927:263;;;;12830:367;;12756:441;;:::o;13244:292::-;13328:17;13348:5;:13;13354:6;13348:13;;;;;;;;;;;13328:33;;13372:9;13384:19;13372:31;;13419:9;13414:115;13438:1;13434;:5;13414:115;;;13478:39;13487:12;13501:4;:12;;13514:1;13501:15;;;;;;;:::i;:::-;;;;13478:8;:39::i;:::-;13461:4;:11;;13473:1;13461:14;;;;;;;:::i;:::-;;;:56;;;;;;;;;;;;:::i;:::-;;13441:3;;;;;:::i;:::-;;;;13414:115;;;;13317:219;;13244:292;;:::o;16623:981::-;16684:17;16704:5;:13;16710:6;16704:13;;;;;;;;;;;16684:33;;16809:21;16833:4;:18;;;16809:42;;16862:11;:26;16874:13;16862:26;;;;;;;;;;;:40;;;:42;;;;;;;;;:::i;:::-;;;;;;16915:11;:26;16927:13;16915:26;;;;;;;;;;;:43;;;:45;;;;;;;;;:::i;:::-;;;;;;17009:9;;16971:11;:26;16983:13;16971:26;;;;;;;;;;;:34;;;:47;;;;;;;:::i;:::-;;;;;;;;17092:9;17104:19;17092:31;;17139:9;17134:327;17158:1;17154;:5;17134:327;;;17181:15;17199:4;:12;;17212:1;17199:15;;;;;;;:::i;:::-;;;;17181:33;;17244:13;17233:7;:24;17229:221;;17278:11;:20;17290:7;17278:20;;;;;;;;;;;:37;;;:39;;;;;;;;;:::i;:::-;;;;;;17336:11;:20;17348:7;17336:20;;;;;;;;;;;:35;;;:37;;;;;;;;;:::i;:::-;;;;;;17424:10;;17392:11;:20;17404:7;17392:20;;;;;;;;;;;:28;;;:42;;;;;;;:::i;:::-;;;;;;;;17229:221;17166:295;17161:3;;;;;:::i;:::-;;;;17134:327;;;;17510:10;;17495:11;;:25;;;;;;;:::i;:::-;;;;;;;;17581:15;;17561:16;;:35;;;;;;;:::i;:::-;;;;;;;;16673:931;;;16623:981;:::o;10433:176::-;10538:7;10600:1;10595;10582:9;10572:7;:19;;;;:::i;:::-;10571:25;;;;:::i;:::-;10570:31;;;;:::i;:::-;10563:38;;10433:176;;;;:::o;9502:616::-;9606:13;9681:2;9659:12;:19;;;;:24;9637:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;9765:18;9833:2;9811:12;:19;;;;:24;;;;:::i;:::-;9797:9;9787:7;:19;;;;:::i;:::-;9786:50;;;;:::i;:::-;9765:71;;9847:16;9879:1;9866:10;:14;;;;:::i;:::-;9847:33;;9891:19;9913:12;9926:10;9913:24;;;;;;;;:::i;:::-;;;;;;;;;9891:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9953:9;9978:1;9965:10;:14;;;;:::i;:::-;9953:26;;9948:140;9985:8;9981:1;:12;9948:140;;;10047:5;10059:12;10072:1;10059:15;;;;;;;;:::i;:::-;;;;;;;;;10030:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10015:61;;9995:3;;;;;:::i;:::-;;;;9948:140;;;;10105:5;10098:12;;;;;9502:616;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;7:77:5:-;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:101;805:7;845:18;838:5;834:30;823:41;;769:101;;;:::o;876:120::-;948:23;965:5;948:23;:::i;:::-;941:5;938:34;928:62;;986:1;983;976:12;928:62;876:120;:::o;1002:137::-;1047:5;1085:6;1072:20;1063:29;;1101:32;1127:5;1101:32;:::i;:::-;1002:137;;;;:::o;1145:93::-;1181:7;1221:10;1214:5;1210:22;1199:33;;1145:93;;;:::o;1244:120::-;1316:23;1333:5;1316:23;:::i;:::-;1309:5;1306:34;1296:62;;1354:1;1351;1344:12;1296:62;1244:120;:::o;1370:137::-;1415:5;1453:6;1440:20;1431:29;;1469:32;1495:5;1469:32;:::i;:::-;1370:137;;;;:::o;1513:89::-;1549:7;1589:6;1582:5;1578:18;1567:29;;1513:89;;;:::o;1608:120::-;1680:23;1697:5;1680:23;:::i;:::-;1673:5;1670:34;1660:62;;1718:1;1715;1708:12;1660:62;1608:120;:::o;1734:137::-;1779:5;1817:6;1804:20;1795:29;;1833:32;1859:5;1833:32;:::i;:::-;1734:137;;;;:::o;1877:77::-;1914:7;1943:5;1932:16;;1877:77;;;:::o;1960:122::-;2033:24;2051:5;2033:24;:::i;:::-;2026:5;2023:35;2013:63;;2072:1;2069;2062:12;2013:63;1960:122;:::o;2088:139::-;2134:5;2172:6;2159:20;2150:29;;2188:33;2215:5;2188:33;:::i;:::-;2088:139;;;;:::o;2233:759::-;2316:6;2324;2332;2340;2389:3;2377:9;2368:7;2364:23;2360:33;2357:120;;;2396:79;;:::i;:::-;2357:120;2516:1;2541:52;2585:7;2576:6;2565:9;2561:22;2541:52;:::i;:::-;2531:62;;2487:116;2642:2;2668:52;2712:7;2703:6;2692:9;2688:22;2668:52;:::i;:::-;2658:62;;2613:117;2769:2;2795:52;2839:7;2830:6;2819:9;2815:22;2795:52;:::i;:::-;2785:62;;2740:117;2896:2;2922:53;2967:7;2958:6;2947:9;2943:22;2922:53;:::i;:::-;2912:63;;2867:118;2233:759;;;;;;;:::o;2998:122::-;3071:24;3089:5;3071:24;:::i;:::-;3064:5;3061:35;3051:63;;3110:1;3107;3100:12;3051:63;2998:122;:::o;3126:139::-;3172:5;3210:6;3197:20;3188:29;;3226:33;3253:5;3226:33;:::i;:::-;3126:139;;;;:::o;3271:329::-;3330:6;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3505:1;3530:53;3575:7;3566:6;3555:9;3551:22;3530:53;:::i;:::-;3520:63;;3476:117;3271:329;;;;:::o;3606:775::-;3839:4;3877:3;3866:9;3862:19;3854:27;;3891:71;3959:1;3948:9;3944:17;3935:6;3891:71;:::i;:::-;3972:72;4040:2;4029:9;4025:18;4016:6;3972:72;:::i;:::-;4054;4122:2;4111:9;4107:18;4098:6;4054:72;:::i;:::-;4136;4204:2;4193:9;4189:18;4180:6;4136:72;:::i;:::-;4218:73;4286:3;4275:9;4271:19;4262:6;4218:73;:::i;:::-;4301;4369:3;4358:9;4354:19;4345:6;4301:73;:::i;:::-;3606:775;;;;;;;;;:::o;4387:104::-;4452:6;4480:4;4470:14;;4387:104;;;:::o;4497:143::-;4594:11;4631:3;4616:18;;4497:143;;;;:::o;4646:98::-;4711:4;4734:3;4726:11;;4646:98;;;:::o;4750:108::-;4827:24;4845:5;4827:24;:::i;:::-;4822:3;4815:37;4750:108;;:::o;4864:179::-;4933:10;4954:46;4996:3;4988:6;4954:46;:::i;:::-;5032:4;5027:3;5023:14;5009:28;;4864:179;;;;:::o;5049:111::-;5117:4;5149;5144:3;5140:14;5132:22;;5049:111;;;:::o;5198:694::-;5334:52;5380:5;5334:52;:::i;:::-;5402:84;5479:6;5474:3;5402:84;:::i;:::-;5395:91;;5510:54;5558:5;5510:54;:::i;:::-;5587:7;5618:1;5603:282;5628:6;5625:1;5622:13;5603:282;;;5704:6;5698:13;5731:63;5790:3;5775:13;5731:63;:::i;:::-;5724:70;;5817:58;5868:6;5817:58;:::i;:::-;5807:68;;5663:222;5650:1;5647;5643:9;5638:14;;5603:282;;;5607:14;5310:582;;;5198:694;;:::o;5898:315::-;6037:4;6075:3;6064:9;6060:19;6052:27;;6089:117;6203:1;6192:9;6188:17;6179:6;6089:117;:::i;:::-;5898:315;;;;:::o;6219:117::-;6328:1;6325;6318:12;6342:102;6383:6;6434:2;6430:7;6425:2;6418:5;6414:14;6410:28;6400:38;;6342:102;;;:::o;6450:180::-;6498:77;6495:1;6488:88;6595:4;6592:1;6585:15;6619:4;6616:1;6609:15;6636:281;6719:27;6741:4;6719:27;:::i;:::-;6711:6;6707:40;6849:6;6837:10;6834:22;6813:18;6801:10;6798:34;6795:62;6792:88;;;6860:18;;:::i;:::-;6792:88;6900:10;6896:2;6889:22;6679:238;6636:281;;:::o;6923:129::-;6957:6;6984:20;;:::i;:::-;6974:30;;7013:33;7041:4;7033:6;7013:33;:::i;:::-;6923:129;;;:::o;7058:311::-;7135:4;7225:18;7217:6;7214:30;7211:56;;;7247:18;;:::i;:::-;7211:56;7297:4;7289:6;7285:17;7277:25;;7357:4;7351;7347:15;7339:23;;7058:311;;;:::o;7375:117::-;7484:1;7481;7474:12;7515:710;7611:5;7636:81;7652:64;7709:6;7652:64;:::i;:::-;7636:81;:::i;:::-;7627:90;;7737:5;7766:6;7759:5;7752:21;7800:4;7793:5;7789:16;7782:23;;7853:4;7845:6;7841:17;7833:6;7829:30;7882:3;7874:6;7871:15;7868:122;;;7901:79;;:::i;:::-;7868:122;8016:6;7999:220;8033:6;8028:3;8025:15;7999:220;;;8108:3;8137:37;8170:3;8158:10;8137:37;:::i;:::-;8132:3;8125:50;8204:4;8199:3;8195:14;8188:21;;8075:144;8059:4;8054:3;8050:14;8043:21;;7999:220;;;8003:21;7617:608;;7515:710;;;;;:::o;8248:370::-;8319:5;8368:3;8361:4;8353:6;8349:17;8345:27;8335:122;;8376:79;;:::i;:::-;8335:122;8493:6;8480:20;8518:94;8608:3;8600:6;8593:4;8585:6;8581:17;8518:94;:::i;:::-;8509:103;;8325:293;8248:370;;;;:::o;8624:684::-;8717:6;8725;8774:2;8762:9;8753:7;8749:23;8745:32;8742:119;;;8780:79;;:::i;:::-;8742:119;8900:1;8925:53;8970:7;8961:6;8950:9;8946:22;8925:53;:::i;:::-;8915:63;;8871:117;9055:2;9044:9;9040:18;9027:32;9086:18;9078:6;9075:30;9072:117;;;9108:79;;:::i;:::-;9072:117;9213:78;9283:7;9274:6;9263:9;9259:22;9213:78;:::i;:::-;9203:88;;8998:303;8624:684;;;;;:::o;9314:126::-;9351:7;9391:42;9384:5;9380:54;9369:65;;9314:126;;;:::o;9446:96::-;9483:7;9512:24;9530:5;9512:24;:::i;:::-;9501:35;;9446:96;;;:::o;9548:118::-;9635:24;9653:5;9635:24;:::i;:::-;9630:3;9623:37;9548:118;;:::o;9672:222::-;9765:4;9803:2;9792:9;9788:18;9780:26;;9816:71;9884:1;9873:9;9869:17;9860:6;9816:71;:::i;:::-;9672:222;;;;:::o;9900:122::-;9973:24;9991:5;9973:24;:::i;:::-;9966:5;9963:35;9953:63;;10012:1;10009;10002:12;9953:63;9900:122;:::o;10028:139::-;10074:5;10112:6;10099:20;10090:29;;10128:33;10155:5;10128:33;:::i;:::-;10028:139;;;;:::o;10173:329::-;10232:6;10281:2;10269:9;10260:7;10256:23;10252:32;10249:119;;;10287:79;;:::i;:::-;10249:119;10407:1;10432:53;10477:7;10468:6;10457:9;10453:22;10432:53;:::i;:::-;10422:63;;10378:117;10173:329;;;;:::o;10508:86::-;10543:7;10583:4;10576:5;10572:16;10561:27;;10508:86;;;:::o;10600:112::-;10683:22;10699:5;10683:22;:::i;:::-;10678:3;10671:35;10600:112;;:::o;10718:767::-;10947:4;10985:3;10974:9;10970:19;10962:27;;10999:71;11067:1;11056:9;11052:17;11043:6;10999:71;:::i;:::-;11080:72;11148:2;11137:9;11133:18;11124:6;11080:72;:::i;:::-;11162:68;11226:2;11215:9;11211:18;11202:6;11162:68;:::i;:::-;11240:72;11308:2;11297:9;11293:18;11284:6;11240:72;:::i;:::-;11322:73;11390:3;11379:9;11375:19;11366:6;11322:73;:::i;:::-;11405;11473:3;11462:9;11458:19;11449:6;11405:73;:::i;:::-;10718:767;;;;;;;;;:::o;11491:1057::-;11595:6;11603;11611;11619;11627;11635;11684:3;11672:9;11663:7;11659:23;11655:33;11652:120;;;11691:79;;:::i;:::-;11652:120;11811:1;11836:53;11881:7;11872:6;11861:9;11857:22;11836:53;:::i;:::-;11826:63;;11782:117;11938:2;11964:53;12009:7;12000:6;11989:9;11985:22;11964:53;:::i;:::-;11954:63;;11909:118;12066:2;12092:53;12137:7;12128:6;12117:9;12113:22;12092:53;:::i;:::-;12082:63;;12037:118;12194:2;12220:53;12265:7;12256:6;12245:9;12241:22;12220:53;:::i;:::-;12210:63;;12165:118;12322:3;12349:53;12394:7;12385:6;12374:9;12370:22;12349:53;:::i;:::-;12339:63;;12293:119;12451:3;12478:53;12523:7;12514:6;12503:9;12499:22;12478:53;:::i;:::-;12468:63;;12422:119;11491:1057;;;;;;;;:::o;12554:474::-;12622:6;12630;12679:2;12667:9;12658:7;12654:23;12650:32;12647:119;;;12685:79;;:::i;:::-;12647:119;12805:1;12830:53;12875:7;12866:6;12855:9;12851:22;12830:53;:::i;:::-;12820:63;;12776:117;12932:2;12958:53;13003:7;12994:6;12983:9;12979:22;12958:53;:::i;:::-;12948:63;;12903:118;12554:474;;;;;:::o;13034:::-;13102:6;13110;13159:2;13147:9;13138:7;13134:23;13130:32;13127:119;;;13165:79;;:::i;:::-;13127:119;13285:1;13310:53;13355:7;13346:6;13335:9;13331:22;13310:53;:::i;:::-;13300:63;;13256:117;13412:2;13438:53;13483:7;13474:6;13463:9;13459:22;13438:53;:::i;:::-;13428:63;;13383:118;13034:474;;;;;:::o;13514:135::-;13602:6;13636:5;13630:12;13620:22;;13514:135;;;:::o;13655:205::-;13775:11;13809:6;13804:3;13797:19;13849:4;13844:3;13840:14;13825:29;;13655:205;;;;:::o;13866:153::-;13954:4;13977:3;13969:11;;14007:4;14002:3;13998:14;13990:22;;13866:153;;;:::o;14025:133::-;14112:11;14149:3;14134:18;;14025:133;;;;:::o;14196:674::-;14322:52;14368:5;14322:52;:::i;:::-;14390:74;14457:6;14452:3;14390:74;:::i;:::-;14383:81;;14488:54;14536:5;14488:54;:::i;:::-;14565:7;14596:1;14581:282;14606:6;14603:1;14600:13;14581:282;;;14682:6;14676:13;14709:63;14768:3;14753:13;14709:63;:::i;:::-;14702:70;;14795:58;14846:6;14795:58;:::i;:::-;14785:68;;14641:222;14628:1;14625;14621:9;14616:14;;14581:282;;;14585:14;14298:572;;;14196:674;;:::o;14876:114::-;14951:6;14979:4;14969:14;;14876:114;;;:::o;14996:143::-;15093:11;15130:3;15115:18;;14996:143;;;;:::o;15145:108::-;15220:4;15243:3;15235:11;;15145:108;;;:::o;15259:99::-;15311:6;15345:5;15339:12;15329:22;;15259:99;;;:::o;15364:159::-;15438:11;15472:6;15467:3;15460:19;15512:4;15507:3;15503:14;15488:29;;15364:159;;;;:::o;15529:307::-;15597:1;15607:113;15621:6;15618:1;15615:13;15607:113;;;15706:1;15701:3;15697:11;15691:18;15687:1;15682:3;15678:11;15671:39;15643:2;15640:1;15636:10;15631:15;;15607:113;;;15738:6;15735:1;15732:13;15729:101;;;15818:1;15809:6;15804:3;15800:16;15793:27;15729:101;15578:258;15529:307;;;:::o;15842:344::-;15920:3;15948:39;15981:5;15948:39;:::i;:::-;16003:61;16057:6;16052:3;16003:61;:::i;:::-;15996:68;;16073:52;16118:6;16113:3;16106:4;16099:5;16095:16;16073:52;:::i;:::-;16150:29;16172:6;16150:29;:::i;:::-;16145:3;16141:39;16134:46;;15924:262;15842:344;;;;:::o;16192:196::-;16281:10;16316:66;16378:3;16370:6;16316:66;:::i;:::-;16302:80;;16192:196;;;;:::o;16394:121::-;16472:4;16504;16499:3;16495:14;16487:22;;16394:121;;;:::o;16551:959::-;16676:3;16705:62;16761:5;16705:62;:::i;:::-;16783:84;16860:6;16855:3;16783:84;:::i;:::-;16776:91;;16893:3;16938:4;16930:6;16926:17;16921:3;16917:27;16968:64;17026:5;16968:64;:::i;:::-;17055:7;17086:1;17071:394;17096:6;17093:1;17090:13;17071:394;;;17167:9;17161:4;17157:20;17152:3;17145:33;17218:6;17212:13;17246:84;17325:4;17310:13;17246:84;:::i;:::-;17238:92;;17353:68;17414:6;17353:68;:::i;:::-;17343:78;;17450:4;17445:3;17441:14;17434:21;;17131:334;17118:1;17115;17111:9;17106:14;;17071:394;;;17075:14;17481:4;17474:11;;17501:3;17494:10;;16681:829;;;;;16551:959;;;;:::o;17580:1984::-;17681:3;17717:6;17712:3;17708:16;17804:4;17797:5;17793:16;17787:23;17823:63;17880:4;17875:3;17871:14;17857:12;17823:63;:::i;:::-;17734:162;17981:4;17974:5;17970:16;17964:23;18000:109;18103:4;18098:3;18094:14;18080:12;18000:109;:::i;:::-;17906:213;18204:4;18197:5;18193:16;18187:23;18223:109;18326:4;18321:3;18317:14;18303:12;18223:109;:::i;:::-;18129:213;18426:4;18419:5;18415:16;18409:23;18481:3;18475:4;18471:14;18462:6;18457:3;18453:16;18446:40;18507:119;18621:4;18607:12;18507:119;:::i;:::-;18499:127;;18352:285;18724:4;18717:5;18713:16;18707:23;18743:65;18800:6;18795:3;18791:16;18777:12;18743:65;:::i;:::-;18647:171;18909:4;18902:5;18898:16;18892:23;18928:65;18985:6;18980:3;18976:16;18962:12;18928:65;:::i;:::-;18828:175;19084:4;19077:5;19073:16;19067:23;19103:65;19160:6;19155:3;19151:16;19137:12;19103:65;:::i;:::-;19013:165;19260:4;19253:5;19249:16;19243:23;19279:65;19336:6;19331:3;19327:16;19313:12;19279:65;:::i;:::-;19188:166;19441:6;19434:5;19430:18;19424:25;19462:65;19519:6;19514:3;19510:16;19496:12;19462:65;:::i;:::-;19364:173;19554:4;19547:11;;17686:1878;17580:1984;;;;:::o;19570:240::-;19681:10;19716:88;19800:3;19792:6;19716:88;:::i;:::-;19702:102;;19570:240;;;;:::o;19816:134::-;19907:4;19939;19934:3;19930:14;19922:22;;19816:134;;;:::o;20024:1079::-;20185:3;20214:75;20283:5;20214:75;:::i;:::-;20305:107;20405:6;20400:3;20305:107;:::i;:::-;20298:114;;20438:3;20483:4;20475:6;20471:17;20466:3;20462:27;20513:77;20584:5;20513:77;:::i;:::-;20613:7;20644:1;20629:429;20654:6;20651:1;20648:13;20629:429;;;20725:9;20719:4;20715:20;20710:3;20703:33;20776:6;20770:13;20804:106;20905:4;20890:13;20804:106;:::i;:::-;20796:114;;20933:81;21007:6;20933:81;:::i;:::-;20923:91;;21043:4;21038:3;21034:14;21027:21;;20689:369;20676:1;20673;20669:9;20664:14;;20629:429;;;20633:14;21074:4;21067:11;;21094:3;21087:10;;20190:913;;;;;20024:1079;;;;:::o;21109:457::-;21294:4;21332:2;21321:9;21317:18;21309:26;;21381:9;21375:4;21371:20;21367:1;21356:9;21352:17;21345:47;21409:150;21554:4;21545:6;21409:150;:::i;:::-;21401:158;;21109:457;;;;:::o;21572:765::-;21658:6;21666;21674;21682;21731:3;21719:9;21710:7;21706:23;21702:33;21699:120;;;21738:79;;:::i;:::-;21699:120;21858:1;21883:53;21928:7;21919:6;21908:9;21904:22;21883:53;:::i;:::-;21873:63;;21829:117;21985:2;22011:53;22056:7;22047:6;22036:9;22032:22;22011:53;:::i;:::-;22001:63;;21956:118;22113:2;22139:53;22184:7;22175:6;22164:9;22160:22;22139:53;:::i;:::-;22129:63;;22084:118;22241:2;22267:53;22312:7;22303:6;22292:9;22288:22;22267:53;:::i;:::-;22257:63;;22212:118;21572:765;;;;;;;:::o;22343:90::-;22377:7;22420:5;22413:13;22406:21;22395:32;;22343:90;;;:::o;22439:109::-;22520:21;22535:5;22520:21;:::i;:::-;22515:3;22508:34;22439:109;;:::o;22554:210::-;22641:4;22679:2;22668:9;22664:18;22656:26;;22692:65;22754:1;22743:9;22739:17;22730:6;22692:65;:::i;:::-;22554:210;;;;:::o;22770:116::-;22840:21;22855:5;22840:21;:::i;:::-;22833:5;22830:32;22820:60;;22876:1;22873;22866:12;22820:60;22770:116;:::o;22892:133::-;22935:5;22973:6;22960:20;22951:29;;22989:30;23013:5;22989:30;:::i;:::-;22892:133;;;;:::o;23031:323::-;23087:6;23136:2;23124:9;23115:7;23111:23;23107:32;23104:119;;;23142:79;;:::i;:::-;23104:119;23262:1;23287:50;23329:7;23320:6;23309:9;23305:22;23287:50;:::i;:::-;23277:60;;23233:114;23031:323;;;;:::o;23360:111::-;23445:1;23438:5;23435:12;23425:40;;23461:1;23458;23451:12;23425:40;23360:111;:::o;23477:163::-;23535:5;23573:6;23560:20;23551:29;;23589:45;23628:5;23589:45;:::i;:::-;23477:163;;;;:::o;23646:353::-;23717:6;23766:2;23754:9;23745:7;23741:23;23737:32;23734:119;;;23772:79;;:::i;:::-;23734:119;23892:1;23917:65;23974:7;23965:6;23954:9;23950:22;23917:65;:::i;:::-;23907:75;;23863:129;23646:353;;;;:::o;24005:141::-;24099:6;24133:5;24127:12;24117:22;;24005:141;;;:::o;24152:211::-;24278:11;24312:6;24307:3;24300:19;24352:4;24347:3;24343:14;24328:29;;24152:211;;;;:::o;24369:159::-;24463:4;24486:3;24478:11;;24516:4;24511:3;24507:14;24499:22;;24369:159;;;:::o;24534:102::-;24607:22;24623:5;24607:22;:::i;:::-;24602:3;24595:35;24534:102;;:::o;24718:1249::-;24859:4;24854:3;24850:14;24949:4;24942:5;24938:16;24932:23;24968:63;25025:4;25020:3;25016:14;25002:12;24968:63;:::i;:::-;24874:167;25135:4;25128:5;25124:16;25118:23;25154:63;25211:4;25206:3;25202:14;25188:12;25154:63;:::i;:::-;25051:176;25328:4;25321:5;25317:16;25311:23;25347:59;25400:4;25395:3;25391:14;25377:12;25347:59;:::i;:::-;25237:179;25507:4;25500:5;25496:16;25490:23;25526:63;25583:4;25578:3;25574:14;25560:12;25526:63;:::i;:::-;25426:173;25691:4;25684:5;25680:16;25674:23;25710:63;25767:4;25762:3;25758:14;25744:12;25710:63;:::i;:::-;25609:174;25868:4;25861:5;25857:16;25851:23;25887:63;25944:4;25939:3;25935:14;25921:12;25887:63;:::i;:::-;25793:167;24828:1139;24718:1249;;:::o;25973:287::-;26096:10;26117:100;26213:3;26205:6;26117:100;:::i;:::-;26249:4;26244:3;26240:14;26226:28;;25973:287;;;;:::o;26266:140::-;26363:4;26395;26390:3;26386:14;26378:22;;26266:140;;;:::o;26492:948::-;26665:3;26694:81;26769:5;26694:81;:::i;:::-;26791:113;26897:6;26892:3;26791:113;:::i;:::-;26784:120;;26928:83;27005:5;26928:83;:::i;:::-;27034:7;27065:1;27050:365;27075:6;27072:1;27069:13;27050:365;;;27151:6;27145:13;27178:117;27291:3;27276:13;27178:117;:::i;:::-;27171:124;;27318:87;27398:6;27318:87;:::i;:::-;27308:97;;27110:305;27097:1;27094;27090:9;27085:14;;27050:365;;;27054:14;27431:3;27424:10;;26670:770;;;26492:948;;;;:::o;27446:481::-;27643:4;27681:2;27670:9;27666:18;27658:26;;27730:9;27724:4;27720:20;27716:1;27705:9;27701:17;27694:47;27758:162;27915:4;27906:6;27758:162;:::i;:::-;27750:170;;27446:481;;;;:::o;27933:115::-;28018:23;28035:5;28018:23;:::i;:::-;28013:3;28006:36;27933:115;;:::o;28054:::-;28139:23;28156:5;28139:23;:::i;:::-;28134:3;28127:36;28054:115;;:::o;28175:::-;28260:23;28277:5;28260:23;:::i;:::-;28255:3;28248:36;28175:115;;:::o;28296:118::-;28383:24;28401:5;28383:24;:::i;:::-;28378:3;28371:37;28296:118;;:::o;28420:541::-;28591:4;28629:3;28618:9;28614:19;28606:27;;28643:69;28709:1;28698:9;28694:17;28685:6;28643:69;:::i;:::-;28722:70;28788:2;28777:9;28773:18;28764:6;28722:70;:::i;:::-;28802;28868:2;28857:9;28853:18;28844:6;28802:70;:::i;:::-;28882:72;28950:2;28939:9;28935:18;28926:6;28882:72;:::i;:::-;28420:541;;;;;;;:::o;28967:332::-;29088:4;29126:2;29115:9;29111:18;29103:26;;29139:71;29207:1;29196:9;29192:17;29183:6;29139:71;:::i;:::-;29220:72;29288:2;29277:9;29273:18;29264:6;29220:72;:::i;:::-;28967:332;;;;;:::o;29305:180::-;29353:77;29350:1;29343:88;29450:4;29447:1;29440:15;29474:4;29471:1;29464:15;29491:348;29531:7;29554:20;29572:1;29554:20;:::i;:::-;29549:25;;29588:20;29606:1;29588:20;:::i;:::-;29583:25;;29776:1;29708:66;29704:74;29701:1;29698:81;29693:1;29686:9;29679:17;29675:105;29672:131;;;29783:18;;:::i;:::-;29672:131;29831:1;29828;29824:9;29813:20;;29491:348;;;;:::o;29845:305::-;29885:3;29904:20;29922:1;29904:20;:::i;:::-;29899:25;;29938:20;29956:1;29938:20;:::i;:::-;29933:25;;30092:1;30024:66;30020:74;30017:1;30014:81;30011:107;;;30098:18;;:::i;:::-;30011:107;30142:1;30139;30135:9;30128:16;;29845:305;;;;:::o;30156:169::-;30240:11;30274:6;30269:3;30262:19;30314:4;30309:3;30305:14;30290:29;;30156:169;;;;:::o;30331:226::-;30471:34;30467:1;30459:6;30455:14;30448:58;30540:9;30535:2;30527:6;30523:15;30516:34;30331:226;:::o;30563:366::-;30705:3;30726:67;30790:2;30785:3;30726:67;:::i;:::-;30719:74;;30802:93;30891:3;30802:93;:::i;:::-;30920:2;30915:3;30911:12;30904:19;;30563:366;;;:::o;30935:419::-;31101:4;31139:2;31128:9;31124:18;31116:26;;31188:9;31182:4;31178:20;31174:1;31163:9;31159:17;31152:47;31216:131;31342:4;31216:131;:::i;:::-;31208:139;;30935:419;;;:::o;31360:227::-;31500:34;31496:1;31488:6;31484:14;31477:58;31569:10;31564:2;31556:6;31552:15;31545:35;31360:227;:::o;31593:366::-;31735:3;31756:67;31820:2;31815:3;31756:67;:::i;:::-;31749:74;;31832:93;31921:3;31832:93;:::i;:::-;31950:2;31945:3;31941:12;31934:19;;31593:366;;;:::o;31965:419::-;32131:4;32169:2;32158:9;32154:18;32146:26;;32218:9;32212:4;32208:20;32204:1;32193:9;32189:17;32182:47;32246:131;32372:4;32246:131;:::i;:::-;32238:139;;31965:419;;;:::o;32390:165::-;32530:17;32526:1;32518:6;32514:14;32507:41;32390:165;:::o;32561:366::-;32703:3;32724:67;32788:2;32783:3;32724:67;:::i;:::-;32717:74;;32800:93;32889:3;32800:93;:::i;:::-;32918:2;32913:3;32909:12;32902:19;;32561:366;;;:::o;32933:419::-;33099:4;33137:2;33126:9;33122:18;33114:26;;33186:9;33180:4;33176:20;33172:1;33161:9;33157:17;33150:47;33214:131;33340:4;33214:131;:::i;:::-;33206:139;;32933:419;;;:::o;33358:179::-;33498:31;33494:1;33486:6;33482:14;33475:55;33358:179;:::o;33543:366::-;33685:3;33706:67;33770:2;33765:3;33706:67;:::i;:::-;33699:74;;33782:93;33871:3;33782:93;:::i;:::-;33900:2;33895:3;33891:12;33884:19;;33543:366;;;:::o;33915:419::-;34081:4;34119:2;34108:9;34104:18;34096:26;;34168:9;34162:4;34158:20;34154:1;34143:9;34139:17;34132:47;34196:131;34322:4;34196:131;:::i;:::-;34188:139;;33915:419;;;:::o;34340:173::-;34480:25;34476:1;34468:6;34464:14;34457:49;34340:173;:::o;34519:366::-;34661:3;34682:67;34746:2;34741:3;34682:67;:::i;:::-;34675:74;;34758:93;34847:3;34758:93;:::i;:::-;34876:2;34871:3;34867:12;34860:19;;34519:366;;;:::o;34891:419::-;35057:4;35095:2;35084:9;35080:18;35072:26;;35144:9;35138:4;35134:20;35130:1;35119:9;35115:17;35108:47;35172:131;35298:4;35172:131;:::i;:::-;35164:139;;34891:419;;;:::o;35316:191::-;35356:4;35376:20;35394:1;35376:20;:::i;:::-;35371:25;;35410:20;35428:1;35410:20;:::i;:::-;35405:25;;35449:1;35446;35443:8;35440:34;;;35454:18;;:::i;:::-;35440:34;35499:1;35496;35492:9;35484:17;;35316:191;;;;:::o;35513:180::-;35561:77;35558:1;35551:88;35658:4;35655:1;35648:15;35682:4;35679:1;35672:15;35699:320;35743:6;35780:1;35774:4;35770:12;35760:22;;35827:1;35821:4;35817:12;35848:18;35838:81;;35904:4;35896:6;35892:17;35882:27;;35838:81;35966:2;35958:6;35955:14;35935:18;35932:38;35929:84;;35985:18;;:::i;:::-;35929:84;35750:269;35699:320;;;:::o;36025:180::-;36073:77;36070:1;36063:88;36170:4;36167:1;36160:15;36194:4;36191:1;36184:15;36211:233;36250:3;36273:24;36291:5;36273:24;:::i;:::-;36264:33;;36319:66;36312:5;36309:77;36306:103;;36389:18;;:::i;:::-;36306:103;36436:1;36429:5;36425:13;36418:20;;36211:233;;;:::o;36450:180::-;36590:32;36586:1;36578:6;36574:14;36567:56;36450:180;:::o;36636:366::-;36778:3;36799:67;36863:2;36858:3;36799:67;:::i;:::-;36792:74;;36875:93;36964:3;36875:93;:::i;:::-;36993:2;36988:3;36984:12;36977:19;;36636:366;;;:::o;37008:419::-;37174:4;37212:2;37201:9;37197:18;37189:26;;37261:9;37255:4;37251:20;37247:1;37236:9;37232:17;37225:47;37289:131;37415:4;37289:131;:::i;:::-;37281:139;;37008:419;;;:::o;37433:177::-;37573:29;37569:1;37561:6;37557:14;37550:53;37433:177;:::o;37616:366::-;37758:3;37779:67;37843:2;37838:3;37779:67;:::i;:::-;37772:74;;37855:93;37944:3;37855:93;:::i;:::-;37973:2;37968:3;37964:12;37957:19;;37616:366;;;:::o;37988:419::-;38154:4;38192:2;38181:9;38177:18;38169:26;;38241:9;38235:4;38231:20;38227:1;38216:9;38212:17;38205:47;38269:131;38395:4;38269:131;:::i;:::-;38261:139;;37988:419;;;:::o;38413:225::-;38553:34;38549:1;38541:6;38537:14;38530:58;38622:8;38617:2;38609:6;38605:15;38598:33;38413:225;:::o;38644:366::-;38786:3;38807:67;38871:2;38866:3;38807:67;:::i;:::-;38800:74;;38883:93;38972:3;38883:93;:::i;:::-;39001:2;38996:3;38992:12;38985:19;;38644:366;;;:::o;39016:419::-;39182:4;39220:2;39209:9;39205:18;39197:26;;39269:9;39263:4;39259:20;39255:1;39244:9;39240:17;39233:47;39297:131;39423:4;39297:131;:::i;:::-;39289:139;;39016:419;;;:::o;39441:180::-;39489:77;39486:1;39479:88;39586:4;39583:1;39576:15;39610:4;39607:1;39600:15;39627:185;39667:1;39684:20;39702:1;39684:20;:::i;:::-;39679:25;;39718:20;39736:1;39718:20;:::i;:::-;39713:25;;39757:1;39747:35;;39762:18;;:::i;:::-;39747:35;39804:1;39801;39797:9;39792:14;;39627:185;;;;:::o;39818:225::-;39958:34;39954:1;39946:6;39942:14;39935:58;40027:8;40022:2;40014:6;40010:15;40003:33;39818:225;:::o;40049:366::-;40191:3;40212:67;40276:2;40271:3;40212:67;:::i;:::-;40205:74;;40288:93;40377:3;40288:93;:::i;:::-;40406:2;40401:3;40397:12;40390:19;;40049:366;;;:::o;40421:419::-;40587:4;40625:2;40614:9;40610:18;40602:26;;40674:9;40668:4;40664:20;40660:1;40649:9;40645:17;40638:47;40702:131;40828:4;40702:131;:::i;:::-;40694:139;;40421:419;;;:::o;40846:182::-;40986:34;40982:1;40974:6;40970:14;40963:58;40846:182;:::o;41034:366::-;41176:3;41197:67;41261:2;41256:3;41197:67;:::i;:::-;41190:74;;41273:93;41362:3;41273:93;:::i;:::-;41391:2;41386:3;41382:12;41375:19;;41034:366;;;:::o;41406:419::-;41572:4;41610:2;41599:9;41595:18;41587:26;;41659:9;41653:4;41649:20;41645:1;41634:9;41630:17;41623:47;41687:131;41813:4;41687:131;:::i;:::-;41679:139;;41406:419;;;:::o;41831:173::-;41971:25;41967:1;41959:6;41955:14;41948:49;41831:173;:::o;42010:366::-;42152:3;42173:67;42237:2;42232:3;42173:67;:::i;:::-;42166:74;;42249:93;42338:3;42249:93;:::i;:::-;42367:2;42362:3;42358:12;42351:19;;42010:366;;;:::o;42382:419::-;42548:4;42586:2;42575:9;42571:18;42563:26;;42635:9;42629:4;42625:20;42621:1;42610:9;42606:17;42599:47;42663:131;42789:4;42663:131;:::i;:::-;42655:139;;42382:419;;;:::o;42807:180::-;42855:77;42852:1;42845:88;42952:4;42949:1;42942:15;42976:4;42973:1;42966:15;42993:165;43133:17;43129:1;43121:6;43117:14;43110:41;42993:165;:::o;43164:366::-;43306:3;43327:67;43391:2;43386:3;43327:67;:::i;:::-;43320:74;;43403:93;43492:3;43403:93;:::i;:::-;43521:2;43516:3;43512:12;43505:19;;43164:366;;;:::o;43536:419::-;43702:4;43740:2;43729:9;43725:18;43717:26;;43789:9;43783:4;43779:20;43775:1;43764:9;43760:17;43753:47;43817:131;43943:4;43817:131;:::i;:::-;43809:139;;43536:419;;;:::o;43961:224::-;44101:34;44097:1;44089:6;44085:14;44078:58;44170:7;44165:2;44157:6;44153:15;44146:32;43961:224;:::o;44191:366::-;44333:3;44354:67;44418:2;44413:3;44354:67;:::i;:::-;44347:74;;44430:93;44519:3;44430:93;:::i;:::-;44548:2;44543:3;44539:12;44532:19;;44191:366;;;:::o;44563:419::-;44729:4;44767:2;44756:9;44752:18;44744:26;;44816:9;44810:4;44806:20;44802:1;44791:9;44787:17;44780:47;44844:131;44970:4;44844:131;:::i;:::-;44836:139;;44563:419;;;:::o;44988:232::-;45128:34;45124:1;45116:6;45112:14;45105:58;45197:15;45192:2;45184:6;45180:15;45173:40;44988:232;:::o;45226:366::-;45368:3;45389:67;45453:2;45448:3;45389:67;:::i;:::-;45382:74;;45465:93;45554:3;45465:93;:::i;:::-;45583:2;45578:3;45574:12;45567:19;;45226:366;;;:::o;45598:419::-;45764:4;45802:2;45791:9;45787:18;45779:26;;45851:9;45845:4;45841:20;45837:1;45826:9;45822:17;45815:47;45879:131;46005:4;45879:131;:::i;:::-;45871:139;;45598:419;;;:::o;46023:225::-;46163:34;46159:1;46151:6;46147:14;46140:58;46232:8;46227:2;46219:6;46215:15;46208:33;46023:225;:::o;46254:366::-;46396:3;46417:67;46481:2;46476:3;46417:67;:::i;:::-;46410:74;;46493:93;46582:3;46493:93;:::i;:::-;46611:2;46606:3;46602:12;46595:19;;46254:366;;;:::o;46626:419::-;46792:4;46830:2;46819:9;46815:18;46807:26;;46879:9;46873:4;46869:20;46865:1;46854:9;46850:17;46843:47;46907:131;47033:4;46907:131;:::i;:::-;46899:139;;46626:419;;;:::o;47051:182::-;47191:34;47187:1;47179:6;47175:14;47168:58;47051:182;:::o;47239:366::-;47381:3;47402:67;47466:2;47461:3;47402:67;:::i;:::-;47395:74;;47478:93;47567:3;47478:93;:::i;:::-;47596:2;47591:3;47587:12;47580:19;;47239:366;;;:::o;47611:419::-;47777:4;47815:2;47804:9;47800:18;47792:26;;47864:9;47858:4;47854:20;47850:1;47839:9;47835:17;47828:47;47892:131;48018:4;47892:131;:::i;:::-;47884:139;;47611:419;;;:::o;48036:143::-;48093:5;48124:6;48118:13;48109:22;;48140:33;48167:5;48140:33;:::i;:::-;48036:143;;;;:::o;48185:351::-;48255:6;48304:2;48292:9;48283:7;48279:23;48275:32;48272:119;;;48310:79;;:::i;:::-;48272:119;48430:1;48455:64;48511:7;48502:6;48491:9;48487:22;48455:64;:::i;:::-;48445:74;;48401:128;48185:351;;;;:::o;48542:102::-;48584:8;48631:5;48628:1;48624:13;48603:34;;48542:102;;;:::o;48650:90::-;48700:7;48729:5;48718:16;;48650:90;;;:::o;48746:166::-;48815:5;48840:66;48871:34;48894:10;48871:34;:::i;:::-;48840:66;:::i;:::-;48831:75;;48746:166;;;:::o;48918:101::-;48980:6;49008:4;48998:14;;48918:101;;;:::o;49025:95::-;49087:4;49110:3;49102:11;;49025:95;;;:::o;49126:144::-;49181:5;49206:57;49257:4;49251:11;49206:57;:::i;:::-;49197:66;;49126:144;;;:::o;49276:108::-;49341:4;49373;49368:3;49364:14;49356:22;;49276:108;;;:::o;49422:693::-;49545:49;49588:5;49545:49;:::i;:::-;49610:74;49677:6;49672:3;49610:74;:::i;:::-;49603:81;;49708:51;49753:5;49708:51;:::i;:::-;49782:7;49813:1;49798:310;49823:6;49820:1;49817:13;49798:310;;;49893:44;49930:6;49893:44;:::i;:::-;49957:63;50016:3;50001:13;49957:63;:::i;:::-;49950:70;;50043:55;50091:6;50043:55;:::i;:::-;50033:65;;49858:250;49845:1;49842;49838:9;49833:14;;49798:310;;;49802:14;49521:594;;;49422:693;;:::o;50121:108::-;50190:6;50218:4;50208:14;;50121:108;;;:::o;50235:102::-;50304:4;50327:3;50319:11;;50235:102;;;:::o;50343:141::-;50392:4;50415:3;50407:11;;50438:3;50435:1;50428:14;50472:4;50469:1;50459:18;50451:26;;50343:141;;;:::o;50514:782::-;50589:3;50626:5;50620:12;50655:36;50681:9;50655:36;:::i;:::-;50707:61;50761:6;50756:3;50707:61;:::i;:::-;50700:68;;50799:1;50788:9;50784:17;50815:1;50810:135;;;;50959:1;50954:336;;;;50777:513;;50810:135;50894:4;50890:9;50879;50875:25;50870:3;50863:38;50930:4;50925:3;50921:14;50914:21;;50810:135;;50954:336;51021:38;51053:5;51021:38;:::i;:::-;51081:1;51095:154;51109:6;51106:1;51103:13;51095:154;;;51183:7;51177:14;51173:1;51168:3;51164:11;51157:35;51233:1;51224:7;51220:15;51209:26;;51131:4;51128:1;51124:12;51119:17;;51095:154;;;51278:1;51273:3;51269:11;51262:18;;50961:329;;50777:513;;50593:703;;50514:782;;;;:::o;51302:190::-;51388:10;51423:63;51482:3;51474:6;51423:63;:::i;:::-;51409:77;;51302:190;;;;:::o;51498:115::-;51570:4;51602;51597:3;51593:14;51585:22;;51498:115;;;:::o;51649:925::-;51768:3;51797:56;51847:5;51797:56;:::i;:::-;51869:84;51946:6;51941:3;51869:84;:::i;:::-;51862:91;;51979:3;52024:4;52016:6;52012:17;52007:3;52003:27;52054:58;52106:5;52054:58;:::i;:::-;52135:7;52166:1;52151:378;52176:6;52173:1;52170:13;52151:378;;;52247:9;52241:4;52237:20;52232:3;52225:33;52292:6;52319:81;52395:4;52380:13;52319:81;:::i;:::-;52311:89;;52423:62;52478:6;52423:62;:::i;:::-;52413:72;;52514:4;52509:3;52505:14;52498:21;;52211:318;52198:1;52195;52191:9;52186:14;;52151:378;;;52155:14;52545:4;52538:11;;52565:3;52558:10;;51773:801;;;;;51649:925;;;;:::o;52644:2463::-;52752:3;52788:6;52783:3;52779:16;52821:1;52894:4;52887:5;52883:16;52877:23;52864:36;;52933:55;52978:9;52933:55;:::i;:::-;53001:63;53058:4;53053:3;53049:14;53035:12;53001:63;:::i;:::-;52832:242;53153:4;53146:5;53142:16;53171:106;53271:4;53266:3;53262:14;53248:12;53171:106;:::i;:::-;53084:203;53366:4;53359:5;53355:16;53384:106;53484:4;53479:3;53475:14;53461:12;53384:106;:::i;:::-;53297:203;53578:4;53571:5;53567:16;53632:3;53626:4;53622:14;53613:6;53608:3;53604:16;53597:40;53658:113;53766:4;53752:12;53658:113;:::i;:::-;53650:121;;53510:272;53861:4;53854:5;53850:16;53844:23;53831:36;;53900:55;53945:9;53900:55;:::i;:::-;53968:65;54025:6;54020:3;54016:16;54002:12;53968:65;:::i;:::-;53792:251;54126:4;54119:5;54115:16;54109:23;54096:36;;54165:55;54210:9;54165:55;:::i;:::-;54233:65;54290:6;54285:3;54281:16;54267:12;54233:65;:::i;:::-;54053:255;54381:4;54374:5;54370:16;54364:23;54351:36;;54420:55;54465:9;54420:55;:::i;:::-;54488:65;54545:6;54540:3;54536:16;54522:12;54488:65;:::i;:::-;54318:245;54637:4;54630:5;54626:16;54620:23;54607:36;;54676:55;54721:9;54676:55;:::i;:::-;54744:65;54801:6;54796:3;54792:16;54778:12;54744:65;:::i;:::-;54573:246;54898:4;54891:5;54887:16;54881:23;54868:36;;54937:55;54982:9;54937:55;:::i;:::-;55005:65;55062:6;55057:3;55053:16;55039:12;55005:65;:::i;:::-;54829:251;55097:4;55090:11;;52757:2350;;52644:2463;;;;:::o;55113:351::-;55245:4;55283:2;55272:9;55268:18;55260:26;;55332:9;55326:4;55322:20;55318:1;55307:9;55303:17;55296:47;55360:97;55452:4;55443:6;55360:97;:::i;:::-;55352:105;;55113:351;;;;:::o;55470:176::-;55502:1;55519:20;55537:1;55519:20;:::i;:::-;55514:25;;55553:20;55571:1;55553:20;:::i;:::-;55548:25;;55592:1;55582:35;;55597:18;;:::i;:::-;55582:35;55638:1;55635;55631:9;55626:14;;55470:176;;;;:::o;55652:79::-;55691:7;55720:5;55709:16;;55652:79;;;:::o;55737:157::-;55842:45;55862:24;55880:5;55862:24;:::i;:::-;55842:45;:::i;:::-;55837:3;55830:58;55737:157;;:::o;55900:161::-;56015:11;56052:3;56037:18;;55900:161;;;;:::o;56067:116::-;56152:24;56170:5;56152:24;:::i;:::-;56147:3;56140:37;56067:116;;:::o;56189:195::-;56266:10;56287:54;56337:3;56329:6;56287:54;:::i;:::-;56373:4;56368:3;56364:14;56350:28;;56189:195;;;;:::o;56422:738::-;56576:52;56622:5;56576:52;:::i;:::-;56644:102;56739:6;56734:3;56644:102;:::i;:::-;56637:109;;56770:54;56818:5;56770:54;:::i;:::-;56847:7;56878:1;56863:290;56888:6;56885:1;56882:13;56863:290;;;56964:6;56958:13;56991:71;57058:3;57043:13;56991:71;:::i;:::-;56984:78;;57085:58;57136:6;57085:58;:::i;:::-;57075:68;;56923:230;56910:1;56907;56903:9;56898:14;;56863:290;;;56867:14;56552:608;;;56422:738;;:::o;57166:631::-;57380:3;57395:75;57466:3;57457:6;57395:75;:::i;:::-;57495:2;57490:3;57486:12;57479:19;;57508:75;57579:3;57570:6;57508:75;:::i;:::-;57608:2;57603:3;57599:12;57592:19;;57621:121;57738:3;57729:6;57621:121;:::i;:::-;57767:3;57762;57758:13;57751:20;;57788:3;57781:10;;57166:631;;;;;;:::o;57803:648::-;58000:4;58038:3;58027:9;58023:19;58015:27;;58052:71;58120:1;58109:9;58105:17;58096:6;58052:71;:::i;:::-;58133:70;58199:2;58188:9;58184:18;58175:6;58133:70;:::i;:::-;58213;58279:2;58268:9;58264:18;58255:6;58213:70;:::i;:::-;58293;58359:2;58348:9;58344:18;58335:6;58293:70;:::i;:::-;58373:71;58439:3;58428:9;58424:19;58415:6;58373:71;:::i;:::-;57803:648;;;;;;;;:::o;58457:143::-;58514:5;58545:6;58539:13;58530:22;;58561:33;58588:5;58561:33;:::i;:::-;58457:143;;;;:::o;58606:351::-;58676:6;58725:2;58713:9;58704:7;58700:23;58696:32;58693:119;;;58731:79;;:::i;:::-;58693:119;58851:1;58876:64;58932:7;58923:6;58912:9;58908:22;58876:64;:::i;:::-;58866:74;;58822:128;58606:351;;;;:::o;58963:332::-;59084:4;59122:2;59111:9;59107:18;59099:26;;59135:71;59203:1;59192:9;59188:17;59179:6;59135:71;:::i;:::-;59216:72;59284:2;59273:9;59269:18;59260:6;59216:72;:::i;:::-;58963:332;;;;;:::o;59301:179::-;59441:31;59437:1;59429:6;59425:14;59418:55;59301:179;:::o;59486:366::-;59628:3;59649:67;59713:2;59708:3;59649:67;:::i;:::-;59642:74;;59725:93;59814:3;59725:93;:::i;:::-;59843:2;59838:3;59834:12;59827:19;;59486:366;;;:::o;59858:419::-;60024:4;60062:2;60051:9;60047:18;60039:26;;60111:9;60105:4;60101:20;60097:1;60086:9;60082:17;60075:47;60139:131;60265:4;60139:131;:::i;:::-;60131:139;;59858:419;;;:::o;60283:230::-;60423:34;60419:1;60411:6;60407:14;60400:58;60492:13;60487:2;60479:6;60475:15;60468:38;60283:230;:::o;60519:366::-;60661:3;60682:67;60746:2;60741:3;60682:67;:::i;:::-;60675:74;;60758:93;60847:3;60758:93;:::i;:::-;60876:2;60871:3;60867:12;60860:19;;60519:366;;;:::o;60891:419::-;61057:4;61095:2;61084:9;61080:18;61072:26;;61144:9;61138:4;61134:20;61130:1;61119:9;61115:17;61108:47;61172:131;61298:4;61172:131;:::i;:::-;61164:139;;60891:419;;;:::o;61316:148::-;61418:11;61455:3;61440:18;;61316:148;;;;:::o;61470:377::-;61576:3;61604:39;61637:5;61604:39;:::i;:::-;61659:89;61741:6;61736:3;61659:89;:::i;:::-;61652:96;;61757:52;61802:6;61797:3;61790:4;61783:5;61779:16;61757:52;:::i;:::-;61834:6;61829:3;61825:16;61818:23;;61580:267;61470:377;;;;:::o;61853:151::-;61993:3;61989:1;61981:6;61977:14;61970:27;61853:151;:::o;62010:400::-;62170:3;62191:84;62273:1;62268:3;62191:84;:::i;:::-;62184:91;;62284:93;62373:3;62284:93;:::i;:::-;62402:1;62397:3;62393:11;62386:18;;62010:400;;;:::o;62440:845::-;62543:3;62580:5;62574:12;62609:36;62635:9;62609:36;:::i;:::-;62661:89;62743:6;62738:3;62661:89;:::i;:::-;62654:96;;62781:1;62770:9;62766:17;62797:1;62792:137;;;;62943:1;62938:341;;;;62759:520;;62792:137;62876:4;62872:9;62861;62857:25;62852:3;62845:38;62912:6;62907:3;62903:16;62896:23;;62792:137;;62938:341;63005:38;63037:5;63005:38;:::i;:::-;63065:1;63079:154;63093:6;63090:1;63087:13;63079:154;;;63167:7;63161:14;63157:1;63152:3;63148:11;63141:35;63217:1;63208:7;63204:15;63193:26;;63115:4;63112:1;63108:12;63103:17;;63079:154;;;63262:6;63257:3;63253:16;63246:23;;62945:334;;62759:520;;62547:738;;62440:845;;;;:::o;63291:695::-;63569:3;63591:95;63682:3;63673:6;63591:95;:::i;:::-;63584:102;;63703:148;63847:3;63703:148;:::i;:::-;63696:155;;63868:92;63956:3;63947:6;63868:92;:::i;:::-;63861:99;;63977:3;63970:10;;63291:695;;;;;:::o
Swarm Source
ipfs://a8736069497c4a6bd26f41c8d996ece93cbf9a974921b00dcb3d4c80b9d917b0
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.