Polygon Sponsored slots available. Book your slot here!
ERC-20
Overview
Max Total Supply
10,000,000 Test2
Holders
3
Total Transfers
-
Market
Price
$0.00 @ 0.000000 POL
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xBd886d5E...80dfFB4b2 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
TFCWageDapp
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2025-02-03 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; /** * @title TFCWageDapp * @notice Combines an ERC20-like token (with daily-compounding “staking”) * and a DApp layer that minutes tokens for registered players * if certain gating conditions pass (e.g., Gateway Token). * */ interface IGatewayTokenVerifier { function verifyToken(address owner, uint256 network) external view returns (bool); } contract TFCWageDapp { // ------------------------------------------------------------------------ // Admin (formerly "Owner") Logic // ------------------------------------------------------------------------ address private _admin; // formerly _owner error AdminUnauthorizedAccount(address account); error AdminInvalidAccount(address account); event AdministrationTransferred(address indexed previousAdmin, address indexed newAdmin); modifier onlyAdmin() { _checkAdmin(); _; } function _checkAdmin() internal view { if (msg.sender != _admin) { revert AdminUnauthorizedAccount(msg.sender); } } function _transferAdministration(address newAdmin) internal { if (newAdmin == address(0)) { revert AdminInvalidAccount(address(0)); } address oldAdmin = _admin; _admin = newAdmin; emit AdministrationTransferred(oldAdmin, newAdmin); } function transferAdministration(address newAdmin) external onlyAdmin { _transferAdministration(newAdmin); } function renounceAdministration() external onlyAdmin { _transferAdministration(address(0)); } function admin() public view returns (address) { return _admin; } // ------------------------------------------------------------------------ // Validator Management // ------------------------------------------------------------------------ mapping(address => bool) public validators; event ValidatorSet(address indexed validator, bool status); modifier onlyValidator() { require(validators[msg.sender], "Caller is not a validator"); _; } function setValidator(address validatorAddress, bool status) external onlyAdmin { validators[validatorAddress] = status; emit ValidatorSet(validatorAddress, status); } address public constant ADMIN_ADDRESS = 0xb69f3807EB3E415756426Fa5DEfA6Fc97a167fd0; // ------------------------------------------------------------------------ // External references (for gating) // ------------------------------------------------------------------------ IGatewayTokenVerifier public gatewayVerifier; uint256 public gatekeeperNetwork; // ------------------------------------------------------------------------ // ERC20 Core Storage // ------------------------------------------------------------------------ mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; // e.g. "WageMinute Token" string private _symbol; // e.g. "WMIN" // ------------------------------------------------------------------------ // Events // ------------------------------------------------------------------------ event Minuted(address indexed minuter, address indexed account, uint256 amount); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed acctholder, address indexed spender, uint256 value); // ------------------------------------------------------------------------ // Staking Storage // ------------------------------------------------------------------------ // Each user’s staked balance is physically held in this contract’s _balances[address(this)] mapping(address => uint256) private _stakedBalances; // Track last time user staked/updated mapping(address => uint256) private _lastStakedTime; // Annual rate in "parts per 1e8" (e.g., 55556 => 0.00055556 ~ 0.055556% per year) uint256 private _annualStakingRate = 55556; // 1-day interval (seconds) uint256 private _stakingInterval = 1 days; // Staking events event Staked(address indexed staker, uint256 amount); event Unstaked(address indexed staker, uint256 amount); // ------------------------------------------------------------------------ // DApp Player Data // ------------------------------------------------------------------------ struct Player { address gatingAddress; string playerName; uint256 lastMinuteTime; bool exists; } mapping(address => Player) private players; mapping(string => address) private nameToAddress; string[] private allPlayerNames; // Basic “reward per hour” used in minuteForPlayersBatch() logic uint256 private constant REWARD_PER_HOUR = 170 ether; // Fire when a player is onboarded or minuted event PlayerOnboarded(address indexed gatingAddress, string playerName); event PlayerMinuted(address indexed gatingAddress, uint256 amountToPlayer, uint256 amountToValidator); // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ constructor( string memory tokenName, string memory tokenSymbol ) { _name = tokenName; _symbol = tokenSymbol; gatewayVerifier = IGatewayTokenVerifier(0xF65b6396dF6B7e2D8a6270E3AB6c7BB08BAEF22E); gatekeeperNetwork = 10; // Initialize admin to deployer, also set them as validator _transferAdministration(msg.sender); validators[msg.sender] = true; _minute(ADMIN_ADDRESS, 1e25); } // ------------------------------------------------------------------------ // Internal Gating Check // ------------------------------------------------------------------------ function _checkPassOk(address addr) internal view returns (bool) { // // Admin address automatically passes // if (addr == ADMIN_ADDRESS) { // return true; // } // Otherwise check the Gateway Token return gatewayVerifier.verifyToken(addr, gatekeeperNetwork); } // ------------------------------------------------------------------------ // Player Onboarding (Requires Gating) // ------------------------------------------------------------------------ modifier gated() { require(_checkPassOk(msg.sender), "Invalid gateway token"); _; } function onboardPlayerGated(string calldata _playerName) external gated { require(bytes(_playerName).length > 0, "Empty name"); require(!players[msg.sender].exists, "Address already onboarded"); require(nameToAddress[_playerName] == address(0), "Name already in use"); players[msg.sender] = Player({ gatingAddress: msg.sender, playerName: _playerName, lastMinuteTime: block.timestamp, exists: true }); nameToAddress[_playerName] = msg.sender; allPlayerNames.push(_playerName); emit PlayerOnboarded(msg.sender, _playerName); } function minuteForPlayersBatch(string[] calldata _playerNames) external onlyValidator { address[] memory recipients = new address[](_playerNames.length * 2); uint256[] memory amounts = new uint256[](_playerNames.length * 2); uint256 arrayIndex = 0; for (uint256 i = 0; i < _playerNames.length; i++) { address gatingAddr = nameToAddress[_playerNames[i]]; if (gatingAddr == address(0)) { // No record -> skip continue; } Player storage p = players[gatingAddr]; if (!p.exists) { // Deleted or never existed -> skip continue; } // Must pass gating if (!_checkPassOk(gatingAddr)) { continue; } // Time check uint256 delta = block.timestamp - p.lastMinuteTime; if (delta == 0) { continue; } // If delta < 4 min => skip, if delta > 34 min => skip but reset if (delta < 4 minutes) { continue; } if (delta > 200 minutes) { p.lastMinuteTime = block.timestamp; continue; } // Normal minute p.lastMinuteTime = block.timestamp; uint256 totalMinute = (delta * REWARD_PER_HOUR) / 3600; uint256 validatorCut = (totalMinute * 20) / 100; // 20% to validator uint256 playerCut = totalMinute - validatorCut; recipients[arrayIndex] = gatingAddr; amounts[arrayIndex] = playerCut; arrayIndex++; recipients[arrayIndex] = msg.sender; amounts[arrayIndex] = validatorCut; arrayIndex++; emit PlayerMinuted(gatingAddr, playerCut, validatorCut); } if (arrayIndex == 0) { // No actual minuting to do return; } // Build final arrays address[] memory finalRecipients = new address[](arrayIndex); uint256[] memory finalAmounts = new uint256[](arrayIndex); for (uint256 j = 0; j < arrayIndex; j++) { finalRecipients[j] = recipients[j]; finalAmounts[j] = amounts[j]; } _batchMinute(finalRecipients, finalAmounts); } // ------------------------------------------------------------------------ // Internal “Batch Minute” function // ------------------------------------------------------------------------ function _batchMinute( address[] memory accounts, uint256[] memory amounts ) internal { require(accounts.length == amounts.length, "WageMinute: length mismatch"); for (uint256 i = 0; i < accounts.length; i++) { address acct = accounts[i]; uint256 amt = amounts[i]; if (acct != address(0) && amt > 0) { _minute(acct, amt); } } } // ------------------------------------------------------------------------ // Low-level “minute” (formerly “_mint”) // ------------------------------------------------------------------------ function _minute(address account, uint256 amount) internal { require(account != address(0), "WageMinute: minute to zero address"); _totalSupply += amount; _balances[account] += amount; emit Minuted(msg.sender, account, amount); emit Transfer(address(0), account, amount); } // ------------------------------------------------------------------------ // Staking Functions // ------------------------------------------------------------------------ function stakeTokens(uint256 amount) external { require(amount > 0, "WageMinute: stake amount must be > 0"); require(_balances[msg.sender] >= amount, "WageMinute: insufficient balance"); // First, update any accrued interest _updateStakedBalance(msg.sender); // Move tokens into contract’s staked storage _balances[msg.sender] -= amount; _balances[address(this)] += amount; _stakedBalances[msg.sender] += amount; _lastStakedTime[msg.sender] = block.timestamp; emit Staked(msg.sender, amount); } function unstakeTokens(uint256 amount) external { require(amount > 0, "WageMinute: unstake amount must be > 0"); _updateStakedBalance(msg.sender); uint256 stakedBal = _stakedBalances[msg.sender]; require(stakedBal >= amount, "WageMinute: insufficient staked balance"); // Must wait 2x _stakingInterval from last stake/unstake require( block.timestamp >= _lastStakedTime[msg.sender] + (2 * _stakingInterval), "WageMinute: tokens still locked" ); _stakedBalances[msg.sender] = stakedBal - amount; _balances[address(this)] -= amount; _balances[msg.sender] += amount; _lastStakedTime[msg.sender] = block.timestamp; emit Unstaked(msg.sender, amount); } /** * @dev Internal daily-compounding interest update: * 1. Calculate interest since lastStakedTime * 2. _minute that interest into the contract * 3. Increase user’s staked ledger */ function _updateStakedBalance(address staker) internal { uint256 staked = _stakedBalances[staker]; if (staked == 0) { _lastStakedTime[staker] = block.timestamp; return; } uint256 stakedDuration = block.timestamp - _lastStakedTime[staker]; uint256 periods = stakedDuration / _stakingInterval; if (periods > 0) { uint256 oldBalance = staked; uint256 newStakedBalance = calculateCompoundedStakedBalance(staker); uint256 interest = newStakedBalance - oldBalance; if (interest > 0) { _minute(address(this), interest); // minute new tokens into contract _stakedBalances[staker] = newStakedBalance; } _lastStakedTime[staker] = block.timestamp; } } /** * @notice Returns what the staked balance WOULD be if updated now. */ function calculateCompoundedStakedBalance(address staker) public view returns (uint256) { uint256 stakedAmount = _stakedBalances[staker]; if (stakedAmount == 0) { return 0; } uint256 stakedDuration = block.timestamp - _lastStakedTime[staker]; uint256 periods = stakedDuration / _stakingInterval; if (periods == 0) { return stakedAmount; } // annualRate in 1e8; dailyRate ~ annualRate/365 uint256 dailyRate = _annualStakingRate / 365; // interestFactor in 1e18 scale uint256 interestFactor = 1e18 + (dailyRate * 1e10); // totalFactor = interestFactor^periods in 1e18 scale uint256 totalFactor = _pow(interestFactor, periods); // newStaked = stakedAmount * totalFactor / 1e18 uint256 newStaked = (stakedAmount * totalFactor) / 1e18; return newStaked; } /** * @dev Exponentiation by squaring on 1e18 fixed-point */ function _pow(uint256 base, uint256 exponent) internal pure returns (uint256 result) { result = 1e18; while (exponent > 0) { if (exponent & 1 == 1) { result = (result * base) / 1e18; } exponent >>= 1; base = (base * base) / 1e18; } } function stakedBalanceOf(address account) external view returns (uint256) { return calculateCompoundedStakedBalance(account); } // ------------------------------------------------------------------------ // ERC20 Standard-Like Functions // ------------------------------------------------------------------------ function name() external view returns (string memory) { return _name; } function symbol() external view returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return 18; } function totalSupply() external view returns (uint256) { return _totalSupply; } function balanceOf(address account) external view returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) external returns (bool) { require(to != address(0), "WageMinute: transfer to zero address"); require(_balances[msg.sender] >= amount, "WageMinute: transfer exceeds balance"); _balances[msg.sender] -= amount; _balances[to] += amount; emit Transfer(msg.sender, to, amount); return true; } function approve(address spender, uint256 amount) external returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function allowance(address acctholder, address spender) external view returns (uint256) { return _allowances[acctholder][spender]; } function transferFrom( address from, address to, uint256 amount ) external returns (bool) { require(from != address(0), "WageMinute: transfer from zero address"); require(to != address(0), "WageMinute: transfer to zero address"); require(_balances[from] >= amount, "WageMinute: transfer exceeds balance"); require(_allowances[from][msg.sender] >= amount, "WageMinute: transfer exceeds allowance"); _balances[from] -= amount; _balances[to] += amount; _allowances[from][msg.sender] -= amount; emit Transfer(from, to, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _allowances[msg.sender][spender] += addedValue; emit Approval(msg.sender, spender, _allowances[msg.sender][spender]); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 current = _allowances[msg.sender][spender]; require(current >= subtractedValue, "WageMinute: allowance below zero"); _allowances[msg.sender][spender] = current - subtractedValue; emit Approval(msg.sender, spender, _allowances[msg.sender][spender]); return true; } // ---------------------------------------------------------------------- // Player Data Helpers (Read-Only) // ---------------------------------------------------------------------- function getAddressByName(string calldata _playerName) external view returns (address gatingAddr, bool passOk) { gatingAddr = nameToAddress[_playerName]; if (gatingAddr == address(0)) { return (address(0), false); } passOk = _checkPassOk(gatingAddr); } function getNameByAddress(address addr) external view returns (string memory playerName, bool passOk) { Player storage p = players[addr]; if (!p.exists) { return ("", false); } playerName = p.playerName; passOk = _checkPassOk(addr); } function getPlayerNamesCount() external view returns (uint256) { return allPlayerNames.length; } function getAllPlayerNames() external view returns (string[] memory) { return allPlayerNames; } function getPlayerNameByIndex(uint256 index) external view returns (string memory) { require(index < allPlayerNames.length, "Out of range"); return allPlayerNames[index]; } function getPlayerNamesPaginated(uint256 start, uint256 count) external view returns (string[] memory page, uint256 nextIndex) { uint256 end = start + count; if (end > allPlayerNames.length) { end = allPlayerNames.length; } if (start >= end) { return (new string[](0), allPlayerNames.length); } string[] memory names = new string[](end - start); for (uint256 i = start; i < end; i++) { names[i - start] = allPlayerNames[i]; } return (names, end); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AdminInvalidAccount","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AdminUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdministrationTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"acctholder","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minuter","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Minuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"gatingAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountToPlayer","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToValidator","type":"uint256"}],"name":"PlayerMinuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"gatingAddress","type":"address"},{"indexed":false,"internalType":"string","name":"playerName","type":"string"}],"name":"PlayerOnboarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"validator","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ValidatorSet","type":"event"},{"inputs":[],"name":"ADMIN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"acctholder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"calculateCompoundedStakedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gatekeeperNetwork","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gatewayVerifier","outputs":[{"internalType":"contract IGatewayTokenVerifier","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_playerName","type":"string"}],"name":"getAddressByName","outputs":[{"internalType":"address","name":"gatingAddr","type":"address"},{"internalType":"bool","name":"passOk","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllPlayerNames","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getNameByAddress","outputs":[{"internalType":"string","name":"playerName","type":"string"},{"internalType":"bool","name":"passOk","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getPlayerNameByIndex","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPlayerNamesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPlayerNamesPaginated","outputs":[{"internalType":"string[]","name":"page","type":"string[]"},{"internalType":"uint256","name":"nextIndex","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_playerNames","type":"string[]"}],"name":"minuteForPlayersBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_playerName","type":"string"}],"name":"onboardPlayerGated","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceAdministration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setValidator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"stakedBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"transferAdministration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"validators","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405261d904600b5562015180600c553480156200001e57600080fd5b5060405162002ce538038062002ce583398101604081905262000041916200035a565b60076200004f838262000453565b5060086200005e828262000453565b50600280546001600160a01b03191673f65b6396df6b7e2d8a6270e3ab6c7bb08baef22e179055600a6003556200009533620000e5565b336000908152600160208190526040909120805460ff19169091179055620000dd73b69f3807eb3e415756426fa5defa6fc97a167fd06a084595161401484a00000062000165565b505062000547565b6001600160a01b0381166200011557604051637af9619d60e11b8152600060048201526024015b60405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917ffd11f9fc2b7f18358a6f98ed3df762cdba9d98f2365d3021b5fd38d1240b0fad9190a35050565b6001600160a01b038216620001c85760405162461bcd60e51b815260206004820152602260248201527f576167654d696e7574653a206d696e75746520746f207a65726f206164647265604482015261737360f01b60648201526084016200010c565b8060066000828254620001dc91906200051f565b90915550506001600160a01b038216600090815260046020526040812080548392906200020b9084906200051f565b90915550506040518181526001600160a01b0383169033907f846827a86f578be6f6d6071cb350e60ab2c7831d68274e8e8c9eea90b2b346b09060200160405180910390a36040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002bd57600080fd5b81516001600160401b0380821115620002da57620002da62000295565b604051601f8301601f19908116603f0116810190828211818310171562000305576200030562000295565b816040528381526020925086838588010111156200032257600080fd5b600091505b8382101562000346578582018301518183018401529082019062000327565b600093810190920192909252949350505050565b600080604083850312156200036e57600080fd5b82516001600160401b03808211156200038657600080fd5b6200039486838701620002ab565b93506020850151915080821115620003ab57600080fd5b50620003ba85828601620002ab565b9150509250929050565b600181811c90821680620003d957607f821691505b602082108103620003fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200044e57600081815260208120601f850160051c81016020861015620004295750805b601f850160051c820191505b818110156200044a5782815560010162000435565b5050505b505050565b81516001600160401b038111156200046f576200046f62000295565b6200048781620004808454620003c4565b8462000400565b602080601f831160018114620004bf5760008415620004a65750858301515b600019600386901b1c1916600185901b1785556200044a565b600085815260208120601f198616915b82811015620004f057888601518255948401946001909101908401620004cf565b50858210156200050f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200054157634e487b7160e01b600052601160045260246000fd5b92915050565b61278e80620005576000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80638098dcff1161010f578063a9a373e6116100a2578063eafec9e411610071578063eafec9e41461046d578063f57ad98914610480578063f851a4401461049b578063fa52c7d8146104ac57600080fd5b8063a9a373e614610406578063c780b63d14610419578063dbb12f3614610421578063dd62ed3e1461043457600080fd5b80639a65ddec116100de5780639a65ddec1461038d578063a107e786146103bf578063a457c2d7146103e0578063a9059cbb146103f357600080fd5b80638098dcff14610354578063913ee93d1461036957806395d89b411461037c57806397ed49d51461038457600080fd5b80634623c91d1161018757806370a082311161015657806370a08231146102e457806372a261eb1461030d5780637547c7a3146103205780637c80bb4f1461033357600080fd5b80634623c91d146102895780635b3bf9911461029e5780635b4f069a146102a6578063608e4dd0146102d157600080fd5b806318160ddd116101c357806318160ddd1461024c57806323b872dd14610254578063313ce56714610267578063395093511461027657600080fd5b806306fdde03146101ea578063095ea7b314610208578063167653911461022b575b600080fd5b6101f26104cf565b6040516101ff9190612083565b60405180910390f35b61021b6102163660046120b9565b610561565b60405190151581526020016101ff565b61023e6102393660046120e3565b6105ce565b6040519081526020016101ff565b60065461023e565b61021b6102623660046120fe565b6105d9565b604051601281526020016101ff565b61021b6102843660046120b9565b610810565b61029c610297366004612148565b6108a1565b005b600f5461023e565b6002546102b9906001600160a01b031681565b6040516001600160a01b0390911681526020016101ff565b61029c6102df36600461217f565b610909565b61023e6102f23660046120e3565b6001600160a01b031660009081526004602052604090205490565b6101f261031b36600461217f565b610aff565b61029c61032e36600461217f565b610bef565b6103466103413660046120e3565b610d6e565b6040516101ff929190612198565b61035c610e54565b6040516101ff9190612214565b61029c6103773660046120e3565b610f2d565b6101f2610f41565b61023e60035481565b6103a061039b366004612227565b610f50565b604080516001600160a01b0390931683529015156020830152016101ff565b6103d26103cd366004612299565b610fa3565b6040516101ff9291906122bb565b61021b6103ee3660046120b9565b611156565b61021b6104013660046120b9565b611238565b61029c6104143660046122dd565b61131d565b61029c6117d1565b61023e61042f3660046120e3565b6117e5565b61023e610442366004612340565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b61029c61047b366004612227565b6118c9565b6102b973b69f3807eb3e415756426fa5defa6fc97a167fd081565b6000546001600160a01b03166102b9565b61021b6104ba3660046120e3565b60016020526000908152604090205460ff1681565b6060600780546104de9061236a565b80601f016020809104026020016040519081016040528092919081815260200182805461050a9061236a565b80156105575780601f1061052c57610100808354040283529160200191610557565b820191906000526020600020905b81548152906001019060200180831161053a57829003601f168201915b5050505050905090565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105bc9086815260200190565b60405180910390a35060015b92915050565b60006105c8826117e5565b60006001600160a01b0384166106455760405162461bcd60e51b815260206004820152602660248201527f576167654d696e7574653a207472616e736665722066726f6d207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6001600160a01b03831661066b5760405162461bcd60e51b815260040161063c906123a4565b6001600160a01b0384166000908152600460205260409020548211156106a35760405162461bcd60e51b815260040161063c906123e8565b6001600160a01b03841660009081526005602090815260408083203384529091529020548211156107255760405162461bcd60e51b815260206004820152602660248201527f576167654d696e7574653a207472616e73666572206578636565647320616c6c6044820152656f77616e636560d01b606482015260840161063c565b6001600160a01b0384166000908152600460205260408120805484929061074d908490612442565b90915550506001600160a01b0383166000908152600460205260408120805484929061077a908490612455565b90915550506001600160a01b0384166000908152600560209081526040808320338452909152812080548492906107b2908490612442565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107fe91815260200190565b60405180910390a35060019392505050565b3360009081526005602090815260408083206001600160a01b0386168452909152812080548391908390610845908490612455565b90915550503360008181526005602090815260408083206001600160a01b038816808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591016105bc565b6108a9611bad565b6001600160a01b038216600081815260016020908152604091829020805460ff191685151590811790915591519182527f6b3b7d0d26ec99d080840dca1323c7147d1868adc66a4290afb8101d7908320d91015b60405180910390a25050565b600081116109685760405162461bcd60e51b815260206004820152602660248201527f576167654d696e7574653a20756e7374616b6520616d6f756e74206d7573742060448201526506265203e20360d41b606482015260840161063c565b61097133611bda565b33600090815260096020526040902054818110156109e15760405162461bcd60e51b815260206004820152602760248201527f576167654d696e7574653a20696e73756666696369656e74207374616b65642060448201526662616c616e636560c81b606482015260840161063c565b600c546109ef906002612468565b336000908152600a6020526040902054610a099190612455565b421015610a585760405162461bcd60e51b815260206004820152601f60248201527f576167654d696e7574653a20746f6b656e73207374696c6c206c6f636b656400604482015260640161063c565b610a628282612442565b33600090815260096020908152604080832093909355308252600490529081208054849290610a92908490612442565b90915550503360009081526004602052604081208054849290610ab6908490612455565b9091555050336000818152600a602052604090819020429055517f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75906108fd9085815260200190565b600f546060908210610b425760405162461bcd60e51b815260206004820152600c60248201526b4f7574206f662072616e676560a01b604482015260640161063c565b600f8281548110610b5557610b5561247f565b906000526020600020018054610b6a9061236a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b969061236a565b8015610be35780601f10610bb857610100808354040283529160200191610be3565b820191906000526020600020905b815481529060010190602001808311610bc657829003601f168201915b50505050509050919050565b60008111610c4b5760405162461bcd60e51b8152602060048201526024808201527f576167654d696e7574653a207374616b6520616d6f756e74206d7573742062656044820152630203e20360e41b606482015260840161063c565b33600090815260046020526040902054811115610caa5760405162461bcd60e51b815260206004820181905260248201527f576167654d696e7574653a20696e73756666696369656e742062616c616e6365604482015260640161063c565b610cb333611bda565b3360009081526004602052604081208054839290610cd2908490612442565b90915550503060009081526004602052604081208054839290610cf6908490612455565b90915550503360009081526009602052604081208054839290610d1a908490612455565b9091555050336000818152600a602052604090819020429055517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90610d639084815260200190565b60405180910390a250565b6001600160a01b0381166000908152600d602052604081206003810154606092919060ff16610db457600060405180602001604052806000815250909250925050915091565b806001018054610dc39061236a565b80601f0160208091040260200160405190810160405280929190818152602001828054610def9061236a565b8015610e3c5780601f10610e1157610100808354040283529160200191610e3c565b820191906000526020600020905b815481529060010190602001808311610e1f57829003601f168201915b50505050509250610e4c84611cc2565b915050915091565b6060600f805480602002602001604051908101604052809291908181526020016000905b82821015610f24578382906000526020600020018054610e979061236a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec39061236a565b8015610f105780601f10610ee557610100808354040283529160200191610f10565b820191906000526020600020905b815481529060010190602001808311610ef357829003601f168201915b505050505081526020019060010190610e78565b50505050905090565b610f35611bad565b610f3e81611d4e565b50565b6060600880546104de9061236a565b600080600e8484604051610f65929190612495565b908152604051908190036020019020546001600160a01b0316915081610f9057506000905080610f9c565b610f9982611cc2565b90505b9250929050565b6060600080610fb28486612455565b600f54909150811115610fc45750600f545b808510611006576040805160008082526020820190925290610ff6565b6060815260200190600190039081610fe15790505b50600f549093509150610f9c9050565b60006110128683612442565b67ffffffffffffffff81111561102a5761102a6124a5565b60405190808252806020026020018201604052801561105d57816020015b60608152602001906001900390816110485790505b509050855b8281101561114b57600f818154811061107d5761107d61247f565b9060005260206000200180546110929061236a565b80601f01602080910402602001604051908101604052809291908181526020018280546110be9061236a565b801561110b5780601f106110e05761010080835404028352916020019161110b565b820191906000526020600020905b8154815290600101906020018083116110ee57829003601f168201915b505050505082888361111d9190612442565b8151811061112d5761112d61247f565b60200260200101819052508080611143906124bb565b915050611062565b509590945092505050565b3360009081526005602090815260408083206001600160a01b0386168452909152812054828110156111ca5760405162461bcd60e51b815260206004820181905260248201527f576167654d696e7574653a20616c6c6f77616e63652062656c6f77207a65726f604482015260640161063c565b6111d48382612442565b3360008181526005602090815260408083206001600160a01b038a16808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b60006001600160a01b0383166112605760405162461bcd60e51b815260040161063c906123a4565b3360009081526004602052604090205482111561128f5760405162461bcd60e51b815260040161063c906123e8565b33600090815260046020526040812080548492906112ae908490612442565b90915550506001600160a01b038316600090815260046020526040812080548492906112db908490612455565b90915550506040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016105bc565b3360009081526001602052604090205460ff1661137c5760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420612076616c696461746f7200000000000000604482015260640161063c565b6000611389826002612468565b67ffffffffffffffff8111156113a1576113a16124a5565b6040519080825280602002602001820160405280156113ca578160200160208202803683370190505b50905060006113da836002612468565b67ffffffffffffffff8111156113f2576113f26124a5565b60405190808252806020026020018201604052801561141b578160200160208202803683370190505b5090506000805b8481101561167f576000600e8787848181106114405761144061247f565b905060200281019061145291906124d4565b604051611460929190612495565b908152604051908190036020019020546001600160a01b0316905080611486575061166d565b6001600160a01b0381166000908152600d60205260409020600381015460ff166114b157505061166d565b6114ba82611cc2565b6114c557505061166d565b60008160020154426114d79190612442565b9050806000036114e95750505061166d565b60f08110156114fa5750505061166d565b612ee08111156115125750426002909101555061166d565b4260028301556000610e1061153068093739534d2868000084612468565b61153a919061251b565b90506000606461154b836014612468565b611555919061251b565b905060006115638284612442565b9050858a89815181106115785761157861247f565b60200260200101906001600160a01b031690816001600160a01b031681525050808989815181106115ab576115ab61247f565b6020908102919091010152876115c0816124bb565b985050338a89815181106115d6576115d661247f565b60200260200101906001600160a01b031690816001600160a01b031681525050818989815181106116095761160961247f565b60209081029190910101528761161e816124bb565b6040805184815260208101869052919a506001600160a01b03891692507f484290b32d741e014cee72ed0a8648ee66e2bd3073e2a4e85b80d1bb7cf05ebe910160405180910390a25050505050505b80611677816124bb565b915050611422565b508060000361168f575050505050565b60008167ffffffffffffffff8111156116aa576116aa6124a5565b6040519080825280602002602001820160405280156116d3578160200160208202803683370190505b50905060008267ffffffffffffffff8111156116f1576116f16124a5565b60405190808252806020026020018201604052801561171a578160200160208202803683370190505b50905060005b838110156117bd5785818151811061173a5761173a61247f565b60200260200101518382815181106117545761175461247f565b60200260200101906001600160a01b031690816001600160a01b0316815250508481815181106117865761178661247f565b60200260200101518282815181106117a0576117a061247f565b6020908102919091010152806117b5816124bb565b915050611720565b506117c88282611dc8565b50505050505050565b6117d9611bad565b6117e36000611d4e565b565b6001600160a01b03811660009081526009602052604081205480820361180e5750600092915050565b6001600160a01b0383166000908152600a60205260408120546118319042612442565b90506000600c5482611843919061251b565b9050806000036118565750909392505050565b600061016d600b54611868919061251b565b9050600061187b826402540be400612468565b61188d90670de0b6b3a7640000612455565b9050600061189b8285611ead565b90506000670de0b6b3a76400006118b28389612468565b6118bc919061251b565b9998505050505050505050565b6118d233611cc2565b6119165760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b21033b0ba32bbb0bc903a37b5b2b760591b604482015260640161063c565b806119505760405162461bcd60e51b815260206004820152600a602482015269456d707479206e616d6560b01b604482015260640161063c565b336000908152600d602052604090206003015460ff16156119b35760405162461bcd60e51b815260206004820152601960248201527f4164647265737320616c7265616479206f6e626f617264656400000000000000604482015260640161063c565b60006001600160a01b0316600e83836040516119d0929190612495565b908152604051908190036020019020546001600160a01b031614611a2c5760405162461bcd60e51b81526020600482015260136024820152724e616d6520616c726561647920696e2075736560681b604482015260640161063c565b6040518060800160405280336001600160a01b0316815260200183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250504260208085019190915260016040948501819052338452600d825293909220845181546001600160a01b0319166001600160a01b03909116178155918401519192830191611acc91508261258b565b5060408281015160028301556060909201516003909101805460ff1916911515919091179055513390600e90611b059085908590612495565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055600f80546001810182556000919091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80201611b7182848361264b565b50336001600160a01b03167f1af7ed90504dc8cb79c9eb066f9d4f3d99ed98c8b87812a3d3ac2188fe86c92f83836040516108fd92919061270c565b6000546001600160a01b031633146117e35760405163342e52ad60e21b815233600482015260240161063c565b6001600160a01b03811660009081526009602052604081205490819003611c1857506001600160a01b03166000908152600a60205260409020429055565b6001600160a01b0382166000908152600a6020526040812054611c3b9042612442565b90506000600c5482611c4d919061251b565b90508015611cbc57826000611c61866117e5565b90506000611c6f8383612442565b90508015611c9d57611c813082611f13565b6001600160a01b03871660009081526009602052604090208290555b5050506001600160a01b0384166000908152600a602052604090204290555b50505050565b600254600354604051600162740ee760e11b031981526000926001600160a01b03169163ff17e23291611d0d9186916004016001600160a01b03929092168252602082015260400190565b602060405180830381865afa158015611d2a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c8919061273b565b6001600160a01b038116611d7857604051637af9619d60e11b81526000600482015260240161063c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917ffd11f9fc2b7f18358a6f98ed3df762cdba9d98f2365d3021b5fd38d1240b0fad9190a35050565b8051825114611e195760405162461bcd60e51b815260206004820152601b60248201527f576167654d696e7574653a206c656e677468206d69736d617463680000000000604482015260640161063c565b60005b8251811015611ea8576000838281518110611e3957611e3961247f565b602002602001015190506000838381518110611e5757611e5761247f565b6020026020010151905060006001600160a01b0316826001600160a01b031614158015611e845750600081115b15611e9357611e938282611f13565b50508080611ea0906124bb565b915050611e1c565b505050565b670de0b6b3a76400005b81156105c85781600116600103611ee857670de0b6b3a7640000611edb8483612468565b611ee5919061251b565b90505b60019190911c90670de0b6b3a7640000611f028480612468565b611f0c919061251b565b9250611eb7565b6001600160a01b038216611f745760405162461bcd60e51b815260206004820152602260248201527f576167654d696e7574653a206d696e75746520746f207a65726f206164647265604482015261737360f01b606482015260840161063c565b8060066000828254611f869190612455565b90915550506001600160a01b03821660009081526004602052604081208054839290611fb3908490612455565b90915550506040518181526001600160a01b0383169033907f846827a86f578be6f6d6071cb350e60ab2c7831d68274e8e8c9eea90b2b346b09060200160405180910390a36040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561206357602081850181015186830182015201612047565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612096602083018461203d565b9392505050565b80356001600160a01b03811681146120b457600080fd5b919050565b600080604083850312156120cc57600080fd5b6120d58361209d565b946020939093013593505050565b6000602082840312156120f557600080fd5b6120968261209d565b60008060006060848603121561211357600080fd5b61211c8461209d565b925061212a6020850161209d565b9150604084013590509250925092565b8015158114610f3e57600080fd5b6000806040838503121561215b57600080fd5b6121648361209d565b915060208301356121748161213a565b809150509250929050565b60006020828403121561219157600080fd5b5035919050565b6040815260006121ab604083018561203d565b905082151560208301529392505050565b600082825180855260208086019550808260051b84010181860160005b8481101561220757601f198684030189526121f583835161203d565b988401989250908301906001016121d9565b5090979650505050505050565b60208152600061209660208301846121bc565b6000806020838503121561223a57600080fd5b823567ffffffffffffffff8082111561225257600080fd5b818501915085601f83011261226657600080fd5b81358181111561227557600080fd5b86602082850101111561228757600080fd5b60209290920196919550909350505050565b600080604083850312156122ac57600080fd5b50508035926020909101359150565b6040815260006122ce60408301856121bc565b90508260208301529392505050565b600080602083850312156122f057600080fd5b823567ffffffffffffffff8082111561230857600080fd5b818501915085601f83011261231c57600080fd5b81358181111561232b57600080fd5b8660208260051b850101111561228757600080fd5b6000806040838503121561235357600080fd5b61235c8361209d565b9150610f996020840161209d565b600181811c9082168061237e57607f821691505b60208210810361239e57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f576167654d696e7574653a207472616e7366657220746f207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526024908201527f576167654d696e7574653a207472616e7366657220657863656564732062616c604082015263616e636560e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b818103818111156105c8576105c861242c565b808201808211156105c8576105c861242c565b80820281158282048414176105c8576105c861242c565b634e487b7160e01b600052603260045260246000fd5b8183823760009101908152919050565b634e487b7160e01b600052604160045260246000fd5b6000600182016124cd576124cd61242c565b5060010190565b6000808335601e198436030181126124eb57600080fd5b83018035915067ffffffffffffffff82111561250657600080fd5b602001915036819003821315610f9c57600080fd5b60008261253857634e487b7160e01b600052601260045260246000fd5b500490565b601f821115611ea857600081815260208120601f850160051c810160208610156125645750805b601f850160051c820191505b8181101561258357828155600101612570565b505050505050565b815167ffffffffffffffff8111156125a5576125a56124a5565b6125b9816125b3845461236a565b8461253d565b602080601f8311600181146125ee57600084156125d65750858301515b600019600386901b1c1916600185901b178555612583565b600085815260208120601f198616915b8281101561261d578886015182559484019460019091019084016125fe565b508582101561263b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff831115612663576126636124a5565b61267783612671835461236a565b8361253d565b6000601f8411600181146126ab57600085156126935750838201355b600019600387901b1c1916600186901b178355612705565b600083815260209020601f19861690835b828110156126dc57868501358255602094850194600190920191016126bc565b50868210156126f95760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561274d57600080fd5b81516120968161213a56fea26469706673582212208317114a3c06453adf7fde00e992fdb39c024964ca3354fd2189fbb33e5fe58f64736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a546573742d6e6f6275790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055465737431000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80638098dcff1161010f578063a9a373e6116100a2578063eafec9e411610071578063eafec9e41461046d578063f57ad98914610480578063f851a4401461049b578063fa52c7d8146104ac57600080fd5b8063a9a373e614610406578063c780b63d14610419578063dbb12f3614610421578063dd62ed3e1461043457600080fd5b80639a65ddec116100de5780639a65ddec1461038d578063a107e786146103bf578063a457c2d7146103e0578063a9059cbb146103f357600080fd5b80638098dcff14610354578063913ee93d1461036957806395d89b411461037c57806397ed49d51461038457600080fd5b80634623c91d1161018757806370a082311161015657806370a08231146102e457806372a261eb1461030d5780637547c7a3146103205780637c80bb4f1461033357600080fd5b80634623c91d146102895780635b3bf9911461029e5780635b4f069a146102a6578063608e4dd0146102d157600080fd5b806318160ddd116101c357806318160ddd1461024c57806323b872dd14610254578063313ce56714610267578063395093511461027657600080fd5b806306fdde03146101ea578063095ea7b314610208578063167653911461022b575b600080fd5b6101f26104cf565b6040516101ff9190612083565b60405180910390f35b61021b6102163660046120b9565b610561565b60405190151581526020016101ff565b61023e6102393660046120e3565b6105ce565b6040519081526020016101ff565b60065461023e565b61021b6102623660046120fe565b6105d9565b604051601281526020016101ff565b61021b6102843660046120b9565b610810565b61029c610297366004612148565b6108a1565b005b600f5461023e565b6002546102b9906001600160a01b031681565b6040516001600160a01b0390911681526020016101ff565b61029c6102df36600461217f565b610909565b61023e6102f23660046120e3565b6001600160a01b031660009081526004602052604090205490565b6101f261031b36600461217f565b610aff565b61029c61032e36600461217f565b610bef565b6103466103413660046120e3565b610d6e565b6040516101ff929190612198565b61035c610e54565b6040516101ff9190612214565b61029c6103773660046120e3565b610f2d565b6101f2610f41565b61023e60035481565b6103a061039b366004612227565b610f50565b604080516001600160a01b0390931683529015156020830152016101ff565b6103d26103cd366004612299565b610fa3565b6040516101ff9291906122bb565b61021b6103ee3660046120b9565b611156565b61021b6104013660046120b9565b611238565b61029c6104143660046122dd565b61131d565b61029c6117d1565b61023e61042f3660046120e3565b6117e5565b61023e610442366004612340565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b61029c61047b366004612227565b6118c9565b6102b973b69f3807eb3e415756426fa5defa6fc97a167fd081565b6000546001600160a01b03166102b9565b61021b6104ba3660046120e3565b60016020526000908152604090205460ff1681565b6060600780546104de9061236a565b80601f016020809104026020016040519081016040528092919081815260200182805461050a9061236a565b80156105575780601f1061052c57610100808354040283529160200191610557565b820191906000526020600020905b81548152906001019060200180831161053a57829003601f168201915b5050505050905090565b3360008181526005602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906105bc9086815260200190565b60405180910390a35060015b92915050565b60006105c8826117e5565b60006001600160a01b0384166106455760405162461bcd60e51b815260206004820152602660248201527f576167654d696e7574653a207472616e736665722066726f6d207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6001600160a01b03831661066b5760405162461bcd60e51b815260040161063c906123a4565b6001600160a01b0384166000908152600460205260409020548211156106a35760405162461bcd60e51b815260040161063c906123e8565b6001600160a01b03841660009081526005602090815260408083203384529091529020548211156107255760405162461bcd60e51b815260206004820152602660248201527f576167654d696e7574653a207472616e73666572206578636565647320616c6c6044820152656f77616e636560d01b606482015260840161063c565b6001600160a01b0384166000908152600460205260408120805484929061074d908490612442565b90915550506001600160a01b0383166000908152600460205260408120805484929061077a908490612455565b90915550506001600160a01b0384166000908152600560209081526040808320338452909152812080548492906107b2908490612442565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107fe91815260200190565b60405180910390a35060019392505050565b3360009081526005602090815260408083206001600160a01b0386168452909152812080548391908390610845908490612455565b90915550503360008181526005602090815260408083206001600160a01b038816808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591016105bc565b6108a9611bad565b6001600160a01b038216600081815260016020908152604091829020805460ff191685151590811790915591519182527f6b3b7d0d26ec99d080840dca1323c7147d1868adc66a4290afb8101d7908320d91015b60405180910390a25050565b600081116109685760405162461bcd60e51b815260206004820152602660248201527f576167654d696e7574653a20756e7374616b6520616d6f756e74206d7573742060448201526506265203e20360d41b606482015260840161063c565b61097133611bda565b33600090815260096020526040902054818110156109e15760405162461bcd60e51b815260206004820152602760248201527f576167654d696e7574653a20696e73756666696369656e74207374616b65642060448201526662616c616e636560c81b606482015260840161063c565b600c546109ef906002612468565b336000908152600a6020526040902054610a099190612455565b421015610a585760405162461bcd60e51b815260206004820152601f60248201527f576167654d696e7574653a20746f6b656e73207374696c6c206c6f636b656400604482015260640161063c565b610a628282612442565b33600090815260096020908152604080832093909355308252600490529081208054849290610a92908490612442565b90915550503360009081526004602052604081208054849290610ab6908490612455565b9091555050336000818152600a602052604090819020429055517f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f75906108fd9085815260200190565b600f546060908210610b425760405162461bcd60e51b815260206004820152600c60248201526b4f7574206f662072616e676560a01b604482015260640161063c565b600f8281548110610b5557610b5561247f565b906000526020600020018054610b6a9061236a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b969061236a565b8015610be35780601f10610bb857610100808354040283529160200191610be3565b820191906000526020600020905b815481529060010190602001808311610bc657829003601f168201915b50505050509050919050565b60008111610c4b5760405162461bcd60e51b8152602060048201526024808201527f576167654d696e7574653a207374616b6520616d6f756e74206d7573742062656044820152630203e20360e41b606482015260840161063c565b33600090815260046020526040902054811115610caa5760405162461bcd60e51b815260206004820181905260248201527f576167654d696e7574653a20696e73756666696369656e742062616c616e6365604482015260640161063c565b610cb333611bda565b3360009081526004602052604081208054839290610cd2908490612442565b90915550503060009081526004602052604081208054839290610cf6908490612455565b90915550503360009081526009602052604081208054839290610d1a908490612455565b9091555050336000818152600a602052604090819020429055517f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90610d639084815260200190565b60405180910390a250565b6001600160a01b0381166000908152600d602052604081206003810154606092919060ff16610db457600060405180602001604052806000815250909250925050915091565b806001018054610dc39061236a565b80601f0160208091040260200160405190810160405280929190818152602001828054610def9061236a565b8015610e3c5780601f10610e1157610100808354040283529160200191610e3c565b820191906000526020600020905b815481529060010190602001808311610e1f57829003601f168201915b50505050509250610e4c84611cc2565b915050915091565b6060600f805480602002602001604051908101604052809291908181526020016000905b82821015610f24578382906000526020600020018054610e979061236a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec39061236a565b8015610f105780601f10610ee557610100808354040283529160200191610f10565b820191906000526020600020905b815481529060010190602001808311610ef357829003601f168201915b505050505081526020019060010190610e78565b50505050905090565b610f35611bad565b610f3e81611d4e565b50565b6060600880546104de9061236a565b600080600e8484604051610f65929190612495565b908152604051908190036020019020546001600160a01b0316915081610f9057506000905080610f9c565b610f9982611cc2565b90505b9250929050565b6060600080610fb28486612455565b600f54909150811115610fc45750600f545b808510611006576040805160008082526020820190925290610ff6565b6060815260200190600190039081610fe15790505b50600f549093509150610f9c9050565b60006110128683612442565b67ffffffffffffffff81111561102a5761102a6124a5565b60405190808252806020026020018201604052801561105d57816020015b60608152602001906001900390816110485790505b509050855b8281101561114b57600f818154811061107d5761107d61247f565b9060005260206000200180546110929061236a565b80601f01602080910402602001604051908101604052809291908181526020018280546110be9061236a565b801561110b5780601f106110e05761010080835404028352916020019161110b565b820191906000526020600020905b8154815290600101906020018083116110ee57829003601f168201915b505050505082888361111d9190612442565b8151811061112d5761112d61247f565b60200260200101819052508080611143906124bb565b915050611062565b509590945092505050565b3360009081526005602090815260408083206001600160a01b0386168452909152812054828110156111ca5760405162461bcd60e51b815260206004820181905260248201527f576167654d696e7574653a20616c6c6f77616e63652062656c6f77207a65726f604482015260640161063c565b6111d48382612442565b3360008181526005602090815260408083206001600160a01b038a16808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b60006001600160a01b0383166112605760405162461bcd60e51b815260040161063c906123a4565b3360009081526004602052604090205482111561128f5760405162461bcd60e51b815260040161063c906123e8565b33600090815260046020526040812080548492906112ae908490612442565b90915550506001600160a01b038316600090815260046020526040812080548492906112db908490612455565b90915550506040518281526001600160a01b0384169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016105bc565b3360009081526001602052604090205460ff1661137c5760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420612076616c696461746f7200000000000000604482015260640161063c565b6000611389826002612468565b67ffffffffffffffff8111156113a1576113a16124a5565b6040519080825280602002602001820160405280156113ca578160200160208202803683370190505b50905060006113da836002612468565b67ffffffffffffffff8111156113f2576113f26124a5565b60405190808252806020026020018201604052801561141b578160200160208202803683370190505b5090506000805b8481101561167f576000600e8787848181106114405761144061247f565b905060200281019061145291906124d4565b604051611460929190612495565b908152604051908190036020019020546001600160a01b0316905080611486575061166d565b6001600160a01b0381166000908152600d60205260409020600381015460ff166114b157505061166d565b6114ba82611cc2565b6114c557505061166d565b60008160020154426114d79190612442565b9050806000036114e95750505061166d565b60f08110156114fa5750505061166d565b612ee08111156115125750426002909101555061166d565b4260028301556000610e1061153068093739534d2868000084612468565b61153a919061251b565b90506000606461154b836014612468565b611555919061251b565b905060006115638284612442565b9050858a89815181106115785761157861247f565b60200260200101906001600160a01b031690816001600160a01b031681525050808989815181106115ab576115ab61247f565b6020908102919091010152876115c0816124bb565b985050338a89815181106115d6576115d661247f565b60200260200101906001600160a01b031690816001600160a01b031681525050818989815181106116095761160961247f565b60209081029190910101528761161e816124bb565b6040805184815260208101869052919a506001600160a01b03891692507f484290b32d741e014cee72ed0a8648ee66e2bd3073e2a4e85b80d1bb7cf05ebe910160405180910390a25050505050505b80611677816124bb565b915050611422565b508060000361168f575050505050565b60008167ffffffffffffffff8111156116aa576116aa6124a5565b6040519080825280602002602001820160405280156116d3578160200160208202803683370190505b50905060008267ffffffffffffffff8111156116f1576116f16124a5565b60405190808252806020026020018201604052801561171a578160200160208202803683370190505b50905060005b838110156117bd5785818151811061173a5761173a61247f565b60200260200101518382815181106117545761175461247f565b60200260200101906001600160a01b031690816001600160a01b0316815250508481815181106117865761178661247f565b60200260200101518282815181106117a0576117a061247f565b6020908102919091010152806117b5816124bb565b915050611720565b506117c88282611dc8565b50505050505050565b6117d9611bad565b6117e36000611d4e565b565b6001600160a01b03811660009081526009602052604081205480820361180e5750600092915050565b6001600160a01b0383166000908152600a60205260408120546118319042612442565b90506000600c5482611843919061251b565b9050806000036118565750909392505050565b600061016d600b54611868919061251b565b9050600061187b826402540be400612468565b61188d90670de0b6b3a7640000612455565b9050600061189b8285611ead565b90506000670de0b6b3a76400006118b28389612468565b6118bc919061251b565b9998505050505050505050565b6118d233611cc2565b6119165760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b21033b0ba32bbb0bc903a37b5b2b760591b604482015260640161063c565b806119505760405162461bcd60e51b815260206004820152600a602482015269456d707479206e616d6560b01b604482015260640161063c565b336000908152600d602052604090206003015460ff16156119b35760405162461bcd60e51b815260206004820152601960248201527f4164647265737320616c7265616479206f6e626f617264656400000000000000604482015260640161063c565b60006001600160a01b0316600e83836040516119d0929190612495565b908152604051908190036020019020546001600160a01b031614611a2c5760405162461bcd60e51b81526020600482015260136024820152724e616d6520616c726561647920696e2075736560681b604482015260640161063c565b6040518060800160405280336001600160a01b0316815260200183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250504260208085019190915260016040948501819052338452600d825293909220845181546001600160a01b0319166001600160a01b03909116178155918401519192830191611acc91508261258b565b5060408281015160028301556060909201516003909101805460ff1916911515919091179055513390600e90611b059085908590612495565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055600f80546001810182556000919091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80201611b7182848361264b565b50336001600160a01b03167f1af7ed90504dc8cb79c9eb066f9d4f3d99ed98c8b87812a3d3ac2188fe86c92f83836040516108fd92919061270c565b6000546001600160a01b031633146117e35760405163342e52ad60e21b815233600482015260240161063c565b6001600160a01b03811660009081526009602052604081205490819003611c1857506001600160a01b03166000908152600a60205260409020429055565b6001600160a01b0382166000908152600a6020526040812054611c3b9042612442565b90506000600c5482611c4d919061251b565b90508015611cbc57826000611c61866117e5565b90506000611c6f8383612442565b90508015611c9d57611c813082611f13565b6001600160a01b03871660009081526009602052604090208290555b5050506001600160a01b0384166000908152600a602052604090204290555b50505050565b600254600354604051600162740ee760e11b031981526000926001600160a01b03169163ff17e23291611d0d9186916004016001600160a01b03929092168252602082015260400190565b602060405180830381865afa158015611d2a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c8919061273b565b6001600160a01b038116611d7857604051637af9619d60e11b81526000600482015260240161063c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917ffd11f9fc2b7f18358a6f98ed3df762cdba9d98f2365d3021b5fd38d1240b0fad9190a35050565b8051825114611e195760405162461bcd60e51b815260206004820152601b60248201527f576167654d696e7574653a206c656e677468206d69736d617463680000000000604482015260640161063c565b60005b8251811015611ea8576000838281518110611e3957611e3961247f565b602002602001015190506000838381518110611e5757611e5761247f565b6020026020010151905060006001600160a01b0316826001600160a01b031614158015611e845750600081115b15611e9357611e938282611f13565b50508080611ea0906124bb565b915050611e1c565b505050565b670de0b6b3a76400005b81156105c85781600116600103611ee857670de0b6b3a7640000611edb8483612468565b611ee5919061251b565b90505b60019190911c90670de0b6b3a7640000611f028480612468565b611f0c919061251b565b9250611eb7565b6001600160a01b038216611f745760405162461bcd60e51b815260206004820152602260248201527f576167654d696e7574653a206d696e75746520746f207a65726f206164647265604482015261737360f01b606482015260840161063c565b8060066000828254611f869190612455565b90915550506001600160a01b03821660009081526004602052604081208054839290611fb3908490612455565b90915550506040518181526001600160a01b0383169033907f846827a86f578be6f6d6071cb350e60ab2c7831d68274e8e8c9eea90b2b346b09060200160405180910390a36040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561206357602081850181015186830182015201612047565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000612096602083018461203d565b9392505050565b80356001600160a01b03811681146120b457600080fd5b919050565b600080604083850312156120cc57600080fd5b6120d58361209d565b946020939093013593505050565b6000602082840312156120f557600080fd5b6120968261209d565b60008060006060848603121561211357600080fd5b61211c8461209d565b925061212a6020850161209d565b9150604084013590509250925092565b8015158114610f3e57600080fd5b6000806040838503121561215b57600080fd5b6121648361209d565b915060208301356121748161213a565b809150509250929050565b60006020828403121561219157600080fd5b5035919050565b6040815260006121ab604083018561203d565b905082151560208301529392505050565b600082825180855260208086019550808260051b84010181860160005b8481101561220757601f198684030189526121f583835161203d565b988401989250908301906001016121d9565b5090979650505050505050565b60208152600061209660208301846121bc565b6000806020838503121561223a57600080fd5b823567ffffffffffffffff8082111561225257600080fd5b818501915085601f83011261226657600080fd5b81358181111561227557600080fd5b86602082850101111561228757600080fd5b60209290920196919550909350505050565b600080604083850312156122ac57600080fd5b50508035926020909101359150565b6040815260006122ce60408301856121bc565b90508260208301529392505050565b600080602083850312156122f057600080fd5b823567ffffffffffffffff8082111561230857600080fd5b818501915085601f83011261231c57600080fd5b81358181111561232b57600080fd5b8660208260051b850101111561228757600080fd5b6000806040838503121561235357600080fd5b61235c8361209d565b9150610f996020840161209d565b600181811c9082168061237e57607f821691505b60208210810361239e57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f576167654d696e7574653a207472616e7366657220746f207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526024908201527f576167654d696e7574653a207472616e7366657220657863656564732062616c604082015263616e636560e01b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b818103818111156105c8576105c861242c565b808201808211156105c8576105c861242c565b80820281158282048414176105c8576105c861242c565b634e487b7160e01b600052603260045260246000fd5b8183823760009101908152919050565b634e487b7160e01b600052604160045260246000fd5b6000600182016124cd576124cd61242c565b5060010190565b6000808335601e198436030181126124eb57600080fd5b83018035915067ffffffffffffffff82111561250657600080fd5b602001915036819003821315610f9c57600080fd5b60008261253857634e487b7160e01b600052601260045260246000fd5b500490565b601f821115611ea857600081815260208120601f850160051c810160208610156125645750805b601f850160051c820191505b8181101561258357828155600101612570565b505050505050565b815167ffffffffffffffff8111156125a5576125a56124a5565b6125b9816125b3845461236a565b8461253d565b602080601f8311600181146125ee57600084156125d65750858301515b600019600386901b1c1916600185901b178555612583565b600085815260208120601f198616915b8281101561261d578886015182559484019460019091019084016125fe565b508582101561263b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff831115612663576126636124a5565b61267783612671835461236a565b8361253d565b6000601f8411600181146126ab57600085156126935750838201355b600019600387901b1c1916600186901b178355612705565b600083815260209020601f19861690835b828110156126dc57868501358255602094850194600190920191016126bc565b50868210156126f95760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006020828403121561274d57600080fd5b81516120968161213a56fea26469706673582212208317114a3c06453adf7fde00e992fdb39c024964ca3354fd2189fbb33e5fe58f64736f6c63430008140033
Deployed Bytecode Sourcemap
447:19961:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15810:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16718:209;;;;;;:::i;:::-;;:::i;:::-;;;1269:14:1;;1262:22;1244:41;;1232:2;1217:18;16718:209:0;1104:187:1;15461:141:0;;;;;;:::i;:::-;;:::i;:::-;;;1633:25:1;;;1621:2;1606:18;15461:141:0;1487:177:1;16086:93:0;16159:12;;16086:93;;17089:692;;;;;;:::i;:::-;;:::i;16000:78::-;;;16068:2;2144:36:1;;2132:2;2117:18;16000:78:0;2002:184:1;17789:254:0;;;;;;:::i;:::-;;:::i;2230:190::-;;;;;;:::i;:::-;;:::i;:::-;;19360:110;19441:14;:21;19360:110;;2721:44;;;;;-1:-1:-1;;;;;2721:44:0;;;;;;-1:-1:-1;;;;;2826:32:1;;;2808:51;;2796:2;2781:18;2721:44:0;2634:231:1;12084:806:0;;;;;;:::i;:::-;;:::i;16187:112::-;;;;;;:::i;:::-;-1:-1:-1;;;;;16273:18:0;16246:7;16273:18;;;:9;:18;;;;;;;16187:112;19595:195;;;;;;:::i;:::-;;:::i;11477:599::-;;;;;;:::i;:::-;;:::i;19019:333::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;19478:109::-;;;:::i;:::-;;;;;;;:::i;1466:121::-;;;;;;:::i;:::-;;:::i;15903:89::-;;;:::i;2772:32::-;;;;;;18673:338;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;5026:32:1;;;5008:51;;5102:14;;5095:22;5090:2;5075:18;;5068:50;4981:18;18673:338:0;4840:284:1;19798:607:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;18051:416::-;;;;;;:::i;:::-;;:::i;16307:403::-;;;;;;:::i;:::-;;:::i;7617:2447::-;;;;;;:::i;:::-;;:::i;1595:107::-;;;:::i;14098:934::-;;;;;;:::i;:::-;;:::i;16935:146::-;;;;;;:::i;:::-;-1:-1:-1;;;;;17041:23:0;;;17014:7;17041:23;;;:11;:23;;;;;;;;:32;;;;;;;;;;;;;16935:146;6913:694;;;;;;:::i;:::-;;:::i;2427:82::-;;2467:42;2427:82;;1710:79;1748:7;1775:6;-1:-1:-1;;;;;1775:6:0;1710:79;;1990:42;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15810:85;15849:13;15882:5;15875:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15810:85;:::o;16718:209::-;16815:10;16786:4;16803:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16803:32:0;;;;;;;;;;:41;;;16860:37;16786:4;;16803:32;;16860:37;;;;16838:6;1633:25:1;;1621:2;1606:18;;1487:177;16860:37:0;;;;;;;;-1:-1:-1;16915:4:0;16718:209;;;;;:::o;15461:141::-;15526:7;15553:41;15586:7;15553:32;:41::i;17089:692::-;17205:4;-1:-1:-1;;;;;17230:18:0;;17222:69;;;;-1:-1:-1;;;17222:69:0;;7430:2:1;17222:69:0;;;7412:21:1;7469:2;7449:18;;;7442:30;7508:34;7488:18;;;7481:62;-1:-1:-1;;;7559:18:1;;;7552:36;7605:19;;17222:69:0;;;;;;;;;-1:-1:-1;;;;;17310:18:0;;17302:67;;;;-1:-1:-1;;;17302:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17388:15:0;;;;;;:9;:15;;;;;;:25;-1:-1:-1;17388:25:0;17380:74;;;;-1:-1:-1;;;17380:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17473:17:0;;;;;;:11;:17;;;;;;;;17491:10;17473:29;;;;;;;;:39;-1:-1:-1;17473:39:0;17465:90;;;;-1:-1:-1;;;17465:90:0;;8647:2:1;17465:90:0;;;8629:21:1;8686:2;8666:18;;;8659:30;8725:34;8705:18;;;8698:62;-1:-1:-1;;;8776:18:1;;;8769:36;8822:19;;17465:90:0;8445:402:1;17465:90:0;-1:-1:-1;;;;;17568:15:0;;;;;;:9;:15;;;;;:39;;17601:6;;17568:15;:39;;17601:6;;17568:39;:::i;:::-;;;;-1:-1:-1;;;;;;;17618:13:0;;;;;;:9;:13;;;;;:39;;17651:6;;17618:13;:39;;17651:6;;17618:39;:::i;:::-;;;;-1:-1:-1;;;;;;;17668:17:0;;;;;;:11;:17;;;;;;;;17686:10;17668:29;;;;;;;:39;;17701:6;;17668:17;:39;;17701:6;;17668:39;:::i;:::-;;;;;;;;17740:2;-1:-1:-1;;;;;17725:26:0;17734:4;-1:-1:-1;;;;;17725:26:0;;17744:6;17725:26;;;;1633:25:1;;1621:2;1606:18;;1487:177;17725:26:0;;;;;;;;-1:-1:-1;17769:4:0;17089:692;;;;;:::o;17789:254::-;17900:10;17871:4;17888:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17888:32:0;;;;;;;;;:46;;17924:10;;17888:32;17871:4;;17888:46;;17924:10;;17888:46;:::i;:::-;;;;-1:-1:-1;;17959:10:0;17980:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17950:63:0;;17980:32;;;;;;;;;;;17950:63;;1633:25:1;;;17950:63:0;;17959:10;17950:63;;1606:18:1;17950:63:0;1487:177:1;2230:190:0;962:13;:11;:13::i;:::-;-1:-1:-1;;;;;2321:28:0;::::1;;::::0;;;:10:::1;:28;::::0;;;;;;;;:37;;-1:-1:-1;;2321:37:0::1;::::0;::::1;;::::0;;::::1;::::0;;;2374:38;;1244:41:1;;;2374:38:0::1;::::0;1217:18:1;2374:38:0::1;;;;;;;;2230:190:::0;;:::o;12084:806::-;12160:1;12151:6;:10;12143:61;;;;-1:-1:-1;;;12143:61:0;;9449:2:1;12143:61:0;;;9431:21:1;9488:2;9468:18;;;9461:30;9527:34;9507:18;;;9500:62;-1:-1:-1;;;9578:18:1;;;9571:36;9624:19;;12143:61:0;9247:402:1;12143:61:0;12217:32;12238:10;12217:20;:32::i;:::-;12298:10;12262:17;12282:27;;;:15;:27;;;;;;12328:19;;;;12320:71;;;;-1:-1:-1;;;12320:71:0;;9856:2:1;12320:71:0;;;9838:21:1;9895:2;9875:18;;;9868:30;9934:34;9914:18;;;9907:62;-1:-1:-1;;;9985:18:1;;;9978:37;10032:19;;12320:71:0;9654:403:1;12320:71:0;12546:16;;12542:20;;:1;:20;:::i;:::-;12527:10;12511:27;;;;:15;:27;;;;;;:52;;;;:::i;:::-;12492:15;:71;;12470:152;;;;-1:-1:-1;;;12470:152:0;;10437:2:1;12470:152:0;;;10419:21:1;10476:2;10456:18;;;10449:30;10515:33;10495:18;;;10488:61;10566:18;;12470:152:0;10235:355:1;12470:152:0;12665:18;12677:6;12665:9;:18;:::i;:::-;12651:10;12635:27;;;;:15;:27;;;;;;;;:48;;;;12712:4;12694:24;;:9;:24;;;;;:37;;12725:6;;12635:27;12694:37;;12725:6;;12694:37;:::i;:::-;;;;-1:-1:-1;;12752:10:0;12742:21;;;;:9;:21;;;;;:36;;12772:6;;12742:21;:36;;12772:6;;12742:36;:::i;:::-;;;;-1:-1:-1;;12807:10:0;12791:27;;;;:15;:27;;;;;;;12821:15;12791:45;;12854:28;;;;;12875:6;1633:25:1;;1621:2;1606:18;;1487:177;19595:195:0;19705:14;:21;19663:13;;19697:29;;19689:54;;;;-1:-1:-1;;;19689:54:0;;10797:2:1;19689:54:0;;;10779:21:1;10836:2;10816:18;;;10809:30;-1:-1:-1;;;10855:18:1;;;10848:42;10907:18;;19689:54:0;10595:336:1;19689:54:0;19761:14;19776:5;19761:21;;;;;;;;:::i;:::-;;;;;;;;19754:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19595:195;;;:::o;11477:599::-;11551:1;11542:6;:10;11534:59;;;;-1:-1:-1;;;11534:59:0;;11270:2:1;11534:59:0;;;11252:21:1;11309:2;11289:18;;;11282:30;11348:34;11328:18;;;11321:62;-1:-1:-1;;;11399:18:1;;;11392:34;11443:19;;11534:59:0;11068:400:1;11534:59:0;11622:10;11612:21;;;;:9;:21;;;;;;:31;-1:-1:-1;11612:31:0;11604:76;;;;-1:-1:-1;;;11604:76:0;;11675:2:1;11604:76:0;;;11657:21:1;;;11694:18;;;11687:30;11753:34;11733:18;;;11726:62;11805:18;;11604:76:0;11473:356:1;11604:76:0;11740:32;11761:10;11740:20;:32::i;:::-;11852:10;11842:21;;;;:9;:21;;;;;:31;;11867:6;;11842:21;:31;;11867:6;;11842:31;:::i;:::-;;;;-1:-1:-1;;11902:4:0;11884:24;;;;:9;:24;;;;;:34;;11912:6;;11884:24;:34;;11912:6;;11884:34;:::i;:::-;;;;-1:-1:-1;;11947:10:0;11931:27;;;;:15;:27;;;;;:37;;11962:6;;11931:27;:37;;11962:6;;11931:37;:::i;:::-;;;;-1:-1:-1;;11995:10:0;11979:27;;;;:15;:27;;;;;;;12009:15;11979:45;;12042:26;;;;;12061:6;1633:25:1;;1621:2;1606:18;;1487:177;12042:26:0;;;;;;;;11477:599;:::o;19019:333::-;-1:-1:-1;;;;;19183:13:0;;19135:11;19183:13;;;:7;:13;;;;;19212:8;;;;19109:24;;19135:11;19183:13;19212:8;;19207:60;;19249:5;19237:18;;;;;;;;;;;;;;;;;;19019:333;;;:::o;19207:60::-;19290:1;:12;;19277:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19326:18;19339:4;19326:12;:18::i;:::-;19313:31;;19153:199;19019:333;;;:::o;19478:109::-;19530:15;19565:14;19558:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19478:109;:::o;1466:121::-;962:13;:11;:13::i;:::-;1546:33:::1;1570:8;1546:23;:33::i;:::-;1466:121:::0;:::o;15903:89::-;15944:13;15977:7;15970:14;;;;;:::i;18673:338::-;18778:18;18798:11;18840:13;18854:11;;18840:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;18840:26:0;;-1:-1:-1;18840:26:0;18877:83;;-1:-1:-1;18938:1:0;;-1:-1:-1;18938:1:0;18922:26;;18877:83;18979:24;18992:10;18979:12;:24::i;:::-;18970:33;;18673:338;;;;;;:::o;19798:607::-;19911:20;19933:17;;19982:13;19990:5;19982;:13;:::i;:::-;20016:14;:21;19968:27;;-1:-1:-1;20010:27:0;;20006:87;;;-1:-1:-1;20060:14:0;:21;20006:87;20116:3;20107:5;:12;20103:92;;20144:15;;;20157:1;20144:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20161:14:0;:21;20136:47;;-1:-1:-1;20161:21:0;-1:-1:-1;20136:47:0;;-1:-1:-1;20136:47:0;20103:92;20207:21;20244:11;20250:5;20244:3;:11;:::i;:::-;20231:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20207:49:0;-1:-1:-1;20284:5:0;20267:101;20295:3;20291:1;:7;20267:101;;;20339:14;20354:1;20339:17;;;;;;;;:::i;:::-;;;;;;;;20320:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;20330;20326:1;:9;;;;:::i;:::-;20320:16;;;;;;;;:::i;:::-;;;;;;:36;;;;20300:3;;;;;:::i;:::-;;;;20267:101;;;-1:-1:-1;20386:5:0;20393:3;;-1:-1:-1;19798:607:0;-1:-1:-1;;;19798:607:0:o;18051:416::-;18185:10;18138:4;18173:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18173:32:0;;;;;;;;;;18224:26;;;;18216:71;;;;-1:-1:-1;;;18216:71:0;;12586:2:1;18216:71:0;;;12568:21:1;;;12605:18;;;12598:30;12664:34;12644:18;;;12637:62;12716:18;;18216:71:0;12384:356:1;18216:71:0;18333:25;18343:15;18333:7;:25;:::i;:::-;18310:10;18298:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18298:32:0;;;;;;;;;;;;:60;;;18374:63;1633:25:1;;;18298:32:0;;18374:63;;1606:18:1;18374:63:0;;;;;;;-1:-1:-1;18455:4:0;;18051:416;-1:-1:-1;;;18051:416:0:o;16307:403::-;16371:4;-1:-1:-1;;;;;16396:16:0;;16388:65;;;;-1:-1:-1;;;16388:65:0;;;;;;;:::i;:::-;16482:10;16472:21;;;;:9;:21;;;;;;:31;-1:-1:-1;16472:31:0;16464:80;;;;-1:-1:-1;;;16464:80:0;;;;;;;:::i;:::-;16567:10;16557:21;;;;:9;:21;;;;;:31;;16582:6;;16557:21;:31;;16582:6;;16557:31;:::i;:::-;;;;-1:-1:-1;;;;;;;16599:13:0;;;;;;:9;:13;;;;;:31;;16624:6;;16599:13;:31;;16624:6;;16599:31;:::i;:::-;;;;-1:-1:-1;;16648:32:0;;1633:25:1;;;-1:-1:-1;;;;;16648:32:0;;;16657:10;;16648:32;;1621:2:1;1606:18;16648:32:0;1487:177:1;7617:2447:0;2161:10;2150:22;;;;:10;:22;;;;;;;;2142:60;;;;-1:-1:-1;;;2142:60:0;;12947:2:1;2142:60:0;;;12929:21:1;12986:2;12966:18;;;12959:30;13025:27;13005:18;;;12998:55;13070:18;;2142:60:0;12745:349:1;2142:60:0;7714:27:::1;7758:23;:12:::0;7780:1:::1;7758:23;:::i;:::-;7744:38;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;7744:38:0::1;-1:-1:-1::0;7714:68:0;-1:-1:-1;7793:24:0::1;7837:23;:12:::0;7859:1:::1;7837:23;:::i;:::-;7823:38;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;7823:38:0::1;;7793:68;;7874:18;7914:9:::0;7909:1652:::1;7929:23:::0;;::::1;7909:1652;;;7974:18;7995:13;8009:12;;8022:1;8009:15;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;7995:30;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;;;7995:30:0::1;::::0;-1:-1:-1;7995:30:0;8040:111:::1;;8127:8;;;8040:111;-1:-1:-1::0;;;;;8186:19:0;::::1;8167:16;8186:19:::0;;;:7:::1;:19;::::0;;;;8225:8:::1;::::0;::::1;::::0;::::1;;8220:111;;8307:8;;;;8220:111;8385:24;8398:10;8385:12;:24::i;:::-;8380:74;;8430:8;;;;8380:74;8497:13;8531:1;:16;;;8513:15;:34;;;;:::i;:::-;8497:50;;8566:5;8575:1;8566:10:::0;8562:59:::1;;8597:8;;;;;8562:59;8727:9;8719:5;:17;8715:66;;;8757:8;;;;;8715:66;8807:11;8799:5;:19;8795:121;;;-1:-1:-1::0;8858:15:0::1;8839:16;::::0;;::::1;:34:::0;-1:-1:-1;8892:8:0::1;;8795:121;8981:15;8962:16;::::0;::::1;:34:::0;9013:19:::1;9065:4;9038:23;5115:9;9038:5:::0;:23:::1;:::i;:::-;9037:32;;;;:::i;:::-;9013:56:::0;-1:-1:-1;9084:20:0::1;9129:3;9109:16;9013:56:::0;9123:2:::1;9109:16;:::i;:::-;9108:24;;;;:::i;:::-;9084:48:::0;-1:-1:-1;9167:17:0::1;9191:26;9084:48:::0;9191:11;:26:::1;:::i;:::-;9167:50;;9259:10;9234;9245;9234:22;;;;;;;;:::i;:::-;;;;;;:35;-1:-1:-1::0;;;;;9234:35:0::1;;;-1:-1:-1::0;;;;;9234:35:0::1;;;::::0;::::1;9309:9;9284:7;9292:10;9284:19;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:34;9333:12;::::1;::::0;::::1;:::i;:::-;;;;9387:10;9362;9373;9362:22;;;;;;;;:::i;:::-;;;;;;:35;-1:-1:-1::0;;;;;9362:35:0::1;;;-1:-1:-1::0;;;;;9362:35:0::1;;;::::0;::::1;9438:12;9413:7;9421:10;9413:19;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:37;9465:12;::::1;::::0;::::1;:::i;:::-;9499:50;::::0;;14022:25:1;;;14078:2;14063:18;;14056:34;;;9465:12:0;;-1:-1:-1;;;;;;9499:50:0;::::1;::::0;-1:-1:-1;9499:50:0::1;::::0;13995:18:1;9499:50:0::1;;;;;;;7959:1602;;;;;;7909:1652;7954:3:::0;::::1;::::0;::::1;:::i;:::-;;;;7909:1652;;;;9577:10;9591:1;9577:15:::0;9573:95:::1;;9650:7;;;7617:2447:::0;;:::o;9573:95::-:1;9711:32;9760:10;9746:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;9746:25:0::1;;9711:60;;9782:29;9831:10;9817:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;9817:25:0::1;;9782:60;;9858:9;9853:148;9877:10;9873:1;:14;9853:148;;;9930:10;9941:1;9930:13;;;;;;;;:::i;:::-;;;;;;;9909:15;9925:1;9909:18;;;;;;;;:::i;:::-;;;;;;:34;-1:-1:-1::0;;;;;9909:34:0::1;;;-1:-1:-1::0;;;;;9909:34:0::1;;;::::0;::::1;9979:7;9987:1;9979:10;;;;;;;;:::i;:::-;;;;;;;9958:12;9971:1;9958:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:31;9889:3;::::1;::::0;::::1;:::i;:::-;;;;9853:148;;;;10013:43;10026:15;10043:12;10013;:43::i;:::-;7703:2361;;;;;7617:2447:::0;;:::o;1595:107::-;962:13;:11;:13::i;:::-;1659:35:::1;1691:1;1659:23;:35::i;:::-;1595:107::o:0;14098:934::-;-1:-1:-1;;;;;14220:23:0;;14177:7;14220:23;;;:15;:23;;;;;;14258:17;;;14254:58;;-1:-1:-1;14299:1:0;;14098:934;-1:-1:-1;;14098:934:0:o;14254:58::-;-1:-1:-1;;;;;14367:23:0;;14324:22;14367:23;;;:15;:23;;;;;;14349:41;;:15;:41;:::i;:::-;14324:66;;14401:15;14436:16;;14419:14;:33;;;;:::i;:::-;14401:51;;14467:7;14478:1;14467:12;14463:64;;-1:-1:-1;14503:12:0;;14098:934;-1:-1:-1;;;14098:934:0:o;14463:64::-;14597:17;14641:3;14620:18;;:24;;;;:::i;:::-;14597:47;-1:-1:-1;14696:22:0;14729:16;14597:47;14741:4;14729:16;:::i;:::-;14721:25;;:4;:25;:::i;:::-;14696:50;;14820:19;14842:29;14847:14;14863:7;14842:4;:29::i;:::-;14820:51;-1:-1:-1;14942:17:0;14993:4;14963:26;14820:51;14963:12;:26;:::i;:::-;14962:35;;;;:::i;:::-;14942:55;14098:934;-1:-1:-1;;;;;;;;;14098:934:0:o;6913:694::-;6835:24;6848:10;6835:12;:24::i;:::-;6827:58;;;;-1:-1:-1;;;6827:58:0;;14303:2:1;6827:58:0;;;14285:21:1;14342:2;14322:18;;;14315:30;-1:-1:-1;;;14361:18:1;;;14354:51;14422:18;;6827:58:0;14101:345:1;6827:58:0;7004:29;6996:63:::1;;;::::0;-1:-1:-1;;;6996:63:0;;14653:2:1;6996:63:0::1;::::0;::::1;14635:21:1::0;14692:2;14672:18;;;14665:30;-1:-1:-1;;;14711:18:1;;;14704:40;14761:18;;6996:63:0::1;14451:334:1::0;6996:63:0::1;7087:10;7079:19;::::0;;;:7:::1;:19;::::0;;;;:26:::1;;::::0;::::1;;7078:27;7070:78;;;::::0;-1:-1:-1;;;7070:78:0;;14992:2:1;7070:78:0::1;::::0;::::1;14974:21:1::0;15031:2;15011:18;;;15004:30;15070:27;15050:18;;;15043:55;15115:18;;7070:78:0::1;14790:349:1::0;7070:78:0::1;7205:1;-1:-1:-1::0;;;;;7167:40:0::1;:13;7181:11;;7167:26;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;;;7167:26:0::1;:40;7159:72;;;::::0;-1:-1:-1;;;7159:72:0;;15346:2:1;7159:72:0::1;::::0;::::1;15328:21:1::0;15385:2;15365:18;;;15358:30;-1:-1:-1;;;15404:18:1;;;15397:49;15463:18;;7159:72:0::1;15144:343:1::0;7159:72:0::1;7266:180;;;;;;;;7303:10;-1:-1:-1::0;;;;;7266:180:0::1;;;;;7343:11;;7266:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;7266:180:0;;;-1:-1:-1;;7385:15:0::1;7266:180;::::0;;::::1;::::0;;;;7430:4:::1;7266:180:::0;;;;;;;7252:10:::1;7244:19:::0;;:7:::1;:19:::0;;;;;;:202;;;;-1:-1:-1;;;;;;7244:202:0::1;-1:-1:-1::0;;;;;7244:202:0;;::::1;;::::0;;;;::::1;::::0;:19;;:202;::::1;::::0;::::1;::::0;-1:-1:-1;7244:202:0;::::1;:::i;:::-;-1:-1:-1::0;7244:202:0::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;7244:202:0::1;::::0;::::1;;::::0;;;::::1;::::0;;7459:26;7488:10:::1;::::0;7459:13:::1;::::0;:26:::1;::::0;7473:11;;;;7459:26:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:39;;-1:-1:-1;;;;;7459:39:0;;;::::1;-1:-1:-1::0;;;;;;7459:39:0;;::::1;::::0;;;::::1;::::0;;7509:14:::1;:32:::0;;7459:39;7509:32;::::1;::::0;;7459:26:::1;7509:32:::0;;;;;::::1;;7529:11:::0;;7509:32;::::1;:::i;:::-;;7575:10;-1:-1:-1::0;;;;;7559:40:0::1;;7587:11;;7559:40;;;;;;;:::i;1003:151::-:0;1069:6;;-1:-1:-1;;;;;1069:6:0;1055:10;:20;1051:96;;1099:36;;-1:-1:-1;;;1099:36:0;;1124:10;1099:36;;;2808:51:1;2781:18;;1099:36:0;2634:231:1;13133:866:0;-1:-1:-1;;;;;13216:23:0;;13199:14;13216:23;;;:15;:23;;;;;;;13254:11;;;13250:106;;-1:-1:-1;;;;;;13282:23:0;;;;;:15;:23;;;;;13308:15;13282:41;;13133:866::o;13250:106::-;-1:-1:-1;;;;;13411:23:0;;13368:22;13411:23;;;:15;:23;;;;;;13393:41;;:15;:41;:::i;:::-;13368:66;;13445:15;13480:16;;13463:14;:33;;;;:::i;:::-;13445:51;-1:-1:-1;13513:11:0;;13509:483;;13568:6;13541:18;13616:40;13649:6;13616:32;:40::i;:::-;13589:67;-1:-1:-1;13671:16:0;13698:29;13717:10;13589:67;13698:29;:::i;:::-;13671:56;-1:-1:-1;13748:12:0;;13744:181;;13781:32;13797:4;13804:8;13781:7;:32::i;:::-;-1:-1:-1;;;;;13867:23:0;;;;;;:15;:23;;;;;:42;;;13744:181;-1:-1:-1;;;;;;;;13939:23:0;;;;;;:15;:23;;;;;13965:15;13939:41;;13509:483;13188:811;;;13133:866;:::o;6262:323::-;6525:15;;6559:17;;6525:52;;-1:-1:-1;;;;;;6525:52:0;;6321:4;;-1:-1:-1;;;;;6525:15:0;;:27;;:52;;6553:4;;6525:52;;-1:-1:-1;;;;;19494:32:1;;;;19476:51;;19558:2;19543:18;;19536:34;19464:2;19449:18;;19302:274;6525:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1162:296::-;-1:-1:-1;;;;;1237:22:0;;1233:93;;1283:31;;-1:-1:-1;;;1283:31:0;;1311:1;1283:31;;;2808:51:1;2781:18;;1283:31:0;2634:231:1;1233:93:0;1336:16;1355:6;;-1:-1:-1;;;;;1372:17:0;;;-1:-1:-1;;;;;;1372:17:0;;;;;;1405:45;;1355:6;;;;;;;1405:45;;1336:16;1405:45;1222:236;1162:296;:::o;10279:453::-;10427:7;:14;10408:8;:15;:33;10400:73;;;;-1:-1:-1;;;10400:73:0;;20033:2:1;10400:73:0;;;20015:21:1;20072:2;20052:18;;;20045:30;20111:29;20091:18;;;20084:57;20158:18;;10400:73:0;19831:351:1;10400:73:0;10489:9;10484:241;10508:8;:15;10504:1;:19;10484:241;;;10545:12;10560:8;10569:1;10560:11;;;;;;;;:::i;:::-;;;;;;;10545:26;;10586:11;10601:7;10609:1;10601:10;;;;;;;;:::i;:::-;;;;;;;10586:25;;10646:1;-1:-1:-1;;;;;10630:18:0;:4;-1:-1:-1;;;;;10630:18:0;;;:29;;;;;10658:1;10652:3;:7;10630:29;10626:88;;;10680:18;10688:4;10694:3;10680:7;:18::i;:::-;10530:195;;10525:3;;;;;:::i;:::-;;;;10484:241;;;;10279:453;;:::o;15118:335::-;15223:4;15239:207;15246:12;;15239:207;;15279:8;15290:1;15279:12;15295:1;15279:17;15275:89;;15344:4;15327:13;15336:4;15327:6;:13;:::i;:::-;15326:22;;;;:::i;:::-;15317:31;;15275:89;15391:1;15378:14;;;;;15430:4;15415:11;15422:4;;15415:11;:::i;:::-;15414:20;;;;:::i;:::-;15407:27;;15239:207;;10956:325;-1:-1:-1;;;;;11034:21:0;;11026:68;;;;-1:-1:-1;;;11026:68:0;;20389:2:1;11026:68:0;;;20371:21:1;20428:2;20408:18;;;20401:30;20467:34;20447:18;;;20440:62;-1:-1:-1;;;20518:18:1;;;20511:32;20560:19;;11026:68:0;20187:398:1;11026:68:0;11121:6;11105:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11138:18:0;;;;;;:9;:18;;;;;:28;;11160:6;;11138:18;:28;;11160:6;;11138:28;:::i;:::-;;;;-1:-1:-1;;11184:36:0;;1633:25:1;;;-1:-1:-1;;;;;11184:36:0;;;11192:10;;11184:36;;1621:2:1;1606:18;11184:36:0;;;;;;;11236:37;;1633:25:1;;;-1:-1:-1;;;;;11236:37:0;;;11253:1;;11236:37;;1621:2:1;1606:18;11236:37:0;;;;;;;10956:325;;:::o;14:423:1:-;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;160:3;363:1;356:4;347:6;342:3;338:16;334:27;327:38;426:4;419:2;415:7;410:2;402:6;398:15;394:29;389:3;385:39;381:50;374:57;;;14:423;;;;:::o;442:220::-;591:2;580:9;573:21;554:4;611:45;652:2;641:9;637:18;629:6;611:45;:::i;:::-;603:53;442:220;-1:-1:-1;;;442:220:1:o;667:173::-;735:20;;-1:-1:-1;;;;;784:31:1;;774:42;;764:70;;830:1;827;820:12;764:70;667:173;;;:::o;845:254::-;913:6;921;974:2;962:9;953:7;949:23;945:32;942:52;;;990:1;987;980:12;942:52;1013:29;1032:9;1013:29;:::i;:::-;1003:39;1089:2;1074:18;;;;1061:32;;-1:-1:-1;;;845:254:1:o;1296:186::-;1355:6;1408:2;1396:9;1387:7;1383:23;1379:32;1376:52;;;1424:1;1421;1414:12;1376:52;1447:29;1466:9;1447:29;:::i;1669:328::-;1746:6;1754;1762;1815:2;1803:9;1794:7;1790:23;1786:32;1783:52;;;1831:1;1828;1821:12;1783:52;1854:29;1873:9;1854:29;:::i;:::-;1844:39;;1902:38;1936:2;1925:9;1921:18;1902:38;:::i;:::-;1892:48;;1987:2;1976:9;1972:18;1959:32;1949:42;;1669:328;;;;;:::o;2191:118::-;2277:5;2270:13;2263:21;2256:5;2253:32;2243:60;;2299:1;2296;2289:12;2314:315;2379:6;2387;2440:2;2428:9;2419:7;2415:23;2411:32;2408:52;;;2456:1;2453;2446:12;2408:52;2479:29;2498:9;2479:29;:::i;:::-;2469:39;;2558:2;2547:9;2543:18;2530:32;2571:28;2593:5;2571:28;:::i;:::-;2618:5;2608:15;;;2314:315;;;;;:::o;2870:180::-;2929:6;2982:2;2970:9;2961:7;2957:23;2953:32;2950:52;;;2998:1;2995;2988:12;2950:52;-1:-1:-1;3021:23:1;;2870:180;-1:-1:-1;2870:180:1:o;3055:301::-;3226:2;3215:9;3208:21;3189:4;3246:45;3287:2;3276:9;3272:18;3264:6;3246:45;:::i;:::-;3238:53;;3341:6;3334:14;3327:22;3322:2;3311:9;3307:18;3300:50;3055:301;;;;;:::o;3361:592::-;3413:3;3444;3476:5;3470:12;3503:6;3498:3;3491:19;3529:4;3558:2;3553:3;3549:12;3542:19;;3614:2;3604:6;3601:1;3597:14;3590:5;3586:26;3582:35;3651:2;3644:5;3640:14;3672:1;3682:245;3696:6;3693:1;3690:13;3682:245;;;3783:2;3779:7;3771:5;3765:4;3761:16;3757:30;3752:3;3745:43;3809:38;3842:4;3833:6;3827:13;3809:38;:::i;:::-;3905:12;;;;3801:46;-1:-1:-1;3870:15:1;;;;3718:1;3711:9;3682:245;;;-1:-1:-1;3943:4:1;;3361:592;-1:-1:-1;;;;;;;3361:592:1:o;3958:280::-;4157:2;4146:9;4139:21;4120:4;4177:55;4228:2;4217:9;4213:18;4205:6;4177:55;:::i;4243:592::-;4314:6;4322;4375:2;4363:9;4354:7;4350:23;4346:32;4343:52;;;4391:1;4388;4381:12;4343:52;4431:9;4418:23;4460:18;4501:2;4493:6;4490:14;4487:34;;;4517:1;4514;4507:12;4487:34;4555:6;4544:9;4540:22;4530:32;;4600:7;4593:4;4589:2;4585:13;4581:27;4571:55;;4622:1;4619;4612:12;4571:55;4662:2;4649:16;4688:2;4680:6;4677:14;4674:34;;;4704:1;4701;4694:12;4674:34;4749:7;4744:2;4735:6;4731:2;4727:15;4723:24;4720:37;4717:57;;;4770:1;4767;4760:12;4717:57;4801:2;4793:11;;;;;4823:6;;-1:-1:-1;4243:592:1;;-1:-1:-1;;;;4243:592:1:o;5129:248::-;5197:6;5205;5258:2;5246:9;5237:7;5233:23;5229:32;5226:52;;;5274:1;5271;5264:12;5226:52;-1:-1:-1;;5297:23:1;;;5367:2;5352:18;;;5339:32;;-1:-1:-1;5129:248:1:o;5382:351::-;5609:2;5598:9;5591:21;5572:4;5629:55;5680:2;5669:9;5665:18;5657:6;5629:55;:::i;:::-;5621:63;;5720:6;5715:2;5704:9;5700:18;5693:34;5382:351;;;;;:::o;5738:627::-;5836:6;5844;5897:2;5885:9;5876:7;5872:23;5868:32;5865:52;;;5913:1;5910;5903:12;5865:52;5953:9;5940:23;5982:18;6023:2;6015:6;6012:14;6009:34;;;6039:1;6036;6029:12;6009:34;6077:6;6066:9;6062:22;6052:32;;6122:7;6115:4;6111:2;6107:13;6103:27;6093:55;;6144:1;6141;6134:12;6093:55;6184:2;6171:16;6210:2;6202:6;6199:14;6196:34;;;6226:1;6223;6216:12;6196:34;6279:7;6274:2;6264:6;6261:1;6257:14;6253:2;6249:23;6245:32;6242:45;6239:65;;;6300:1;6297;6290:12;6370:260;6438:6;6446;6499:2;6487:9;6478:7;6474:23;6470:32;6467:52;;;6515:1;6512;6505:12;6467:52;6538:29;6557:9;6538:29;:::i;:::-;6528:39;;6586:38;6620:2;6609:9;6605:18;6586:38;:::i;6843:380::-;6922:1;6918:12;;;;6965;;;6986:61;;7040:4;7032:6;7028:17;7018:27;;6986:61;7093:2;7085:6;7082:14;7062:18;7059:38;7056:161;;7139:10;7134:3;7130:20;7127:1;7120:31;7174:4;7171:1;7164:15;7202:4;7199:1;7192:15;7056:161;;6843:380;;;:::o;7635:400::-;7837:2;7819:21;;;7876:2;7856:18;;;7849:30;7915:34;7910:2;7895:18;;7888:62;-1:-1:-1;;;7981:2:1;7966:18;;7959:34;8025:3;8010:19;;7635:400::o;8040:::-;8242:2;8224:21;;;8281:2;8261:18;;;8254:30;8320:34;8315:2;8300:18;;8293:62;-1:-1:-1;;;8386:2:1;8371:18;;8364:34;8430:3;8415:19;;8040:400::o;8852:127::-;8913:10;8908:3;8904:20;8901:1;8894:31;8944:4;8941:1;8934:15;8968:4;8965:1;8958:15;8984:128;9051:9;;;9072:11;;;9069:37;;;9086:18;;:::i;9117:125::-;9182:9;;;9203:10;;;9200:36;;;9216:18;;:::i;10062:168::-;10135:9;;;10166;;10183:15;;;10177:22;;10163:37;10153:71;;10204:18;;:::i;10936:127::-;10997:10;10992:3;10988:20;10985:1;10978:31;11028:4;11025:1;11018:15;11052:4;11049:1;11042:15;11834:273;12019:6;12011;12006:3;11993:33;11975:3;12045:16;;12070:13;;;12045:16;11834:273;-1:-1:-1;11834:273:1:o;12112:127::-;12173:10;12168:3;12164:20;12161:1;12154:31;12204:4;12201:1;12194:15;12228:4;12225:1;12218:15;12244:135;12283:3;12304:17;;;12301:43;;12324:18;;:::i;:::-;-1:-1:-1;12371:1:1;12360:13;;12244:135::o;13099:522::-;13177:4;13183:6;13243:11;13230:25;13337:2;13333:7;13322:8;13306:14;13302:29;13298:43;13278:18;13274:68;13264:96;;13356:1;13353;13346:12;13264:96;13383:33;;13435:20;;;-1:-1:-1;13478:18:1;13467:30;;13464:50;;;13510:1;13507;13500:12;13464:50;13543:4;13531:17;;-1:-1:-1;13574:14:1;13570:27;;;13560:38;;13557:58;;;13611:1;13608;13601:12;13626:217;13666:1;13692;13682:132;;13736:10;13731:3;13727:20;13724:1;13717:31;13771:4;13768:1;13761:15;13799:4;13796:1;13789:15;13682:132;-1:-1:-1;13828:9:1;;13626:217::o;15618:545::-;15720:2;15715:3;15712:11;15709:448;;;15756:1;15781:5;15777:2;15770:17;15826:4;15822:2;15812:19;15896:2;15884:10;15880:19;15877:1;15873:27;15867:4;15863:38;15932:4;15920:10;15917:20;15914:47;;;-1:-1:-1;15955:4:1;15914:47;16010:2;16005:3;16001:12;15998:1;15994:20;15988:4;15984:31;15974:41;;16065:82;16083:2;16076:5;16073:13;16065:82;;;16128:17;;;16109:1;16098:13;16065:82;;;16069:3;;;15618:545;;;:::o;16339:1352::-;16465:3;16459:10;16492:18;16484:6;16481:30;16478:56;;;16514:18;;:::i;:::-;16543:97;16633:6;16593:38;16625:4;16619:11;16593:38;:::i;:::-;16587:4;16543:97;:::i;:::-;16695:4;;16759:2;16748:14;;16776:1;16771:663;;;;17478:1;17495:6;17492:89;;;-1:-1:-1;17547:19:1;;;17541:26;17492:89;-1:-1:-1;;16296:1:1;16292:11;;;16288:24;16284:29;16274:40;16320:1;16316:11;;;16271:57;17594:81;;16741:944;;16771:663;15565:1;15558:14;;;15602:4;15589:18;;-1:-1:-1;;16807:20:1;;;16925:236;16939:7;16936:1;16933:14;16925:236;;;17028:19;;;17022:26;17007:42;;17120:27;;;;17088:1;17076:14;;;;16955:19;;16925:236;;;16929:3;17189:6;17180:7;17177:19;17174:201;;;17250:19;;;17244:26;-1:-1:-1;;17333:1:1;17329:14;;;17345:3;17325:24;17321:37;17317:42;17302:58;17287:74;;17174:201;-1:-1:-1;;;;;17421:1:1;17405:14;;;17401:22;17388:36;;-1:-1:-1;16339:1352:1:o;17696:1206::-;17820:18;17815:3;17812:27;17809:53;;;17842:18;;:::i;:::-;17871:94;17961:3;17921:38;17953:4;17947:11;17921:38;:::i;:::-;17915:4;17871:94;:::i;:::-;17991:1;18016:2;18011:3;18008:11;18033:1;18028:616;;;;18688:1;18705:3;18702:93;;;-1:-1:-1;18761:19:1;;;18748:33;18702:93;-1:-1:-1;;16296:1:1;16292:11;;;16288:24;16284:29;16274:40;16320:1;16316:11;;;16271:57;18808:78;;18001:895;;18028:616;15565:1;15558:14;;;15602:4;15589:18;;-1:-1:-1;;18064:17:1;;;18165:9;18187:229;18201:7;18198:1;18195:14;18187:229;;;18290:19;;;18277:33;18262:49;;18397:4;18382:20;;;;18350:1;18338:14;;;;18217:12;18187:229;;;18191:3;18444;18435:7;18432:16;18429:159;;;18568:1;18564:6;18558:3;18552;18549:1;18545:11;18541:21;18537:34;18533:39;18520:9;18515:3;18511:19;18498:33;18494:79;18486:6;18479:95;18429:159;;;18631:1;18625:3;18622:1;18618:11;18614:19;18608:4;18601:33;18001:895;;;17696:1206;;;:::o;18907:390::-;19066:2;19055:9;19048:21;19105:6;19100:2;19089:9;19085:18;19078:34;19162:6;19154;19149:2;19138:9;19134:18;19121:48;19218:1;19189:22;;;19213:2;19185:31;;;19178:42;;;;19281:2;19260:15;;;-1:-1:-1;;19256:29:1;19241:45;19237:54;;18907:390;-1:-1:-1;18907:390:1:o;19581:245::-;19648:6;19701:2;19689:9;19680:7;19676:23;19672:32;19669:52;;;19717:1;19714;19707:12;19669:52;19749:9;19743:16;19768:28;19790:5;19768:28;:::i
Swarm Source
ipfs://8317114a3c06453adf7fde00e992fdb39c024964ca3354fd2189fbb33e5fe58f
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.