Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
15,000 fmlink
Holders
27
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,262.760760336372201952 fmlinkValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
fmlink
Compiler Version
v0.4.18+commit.9cf6e910
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-08-16 */ pragma solidity ^0.4.18; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); //event MintFinished(); //bool public mintingFinished = false; /* modifier canMint() { require(!mintingFinished); _; } */ /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) internal returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; MintFinished(); return true; } */ } /** * @title Contracts that should not own Ether * @dev This tries to block incoming ether to prevent accidental loss of Ether. Should Ether end up * in the contract, it will allow the owner to reclaim this ether. * @notice Ether can still be send to this contract by: * calling functions labeled `payable` * `selfdestruct(contract_address)` * mining directly to the contract address */ contract HasNoEther is Ownable { /** * @dev Constructor that rejects incoming Ether * @dev The `payable` flag is added so we can access `msg.value` without compiler warning. If we * leave out payable, then Solidity will allow inheriting contracts to implement a payable * constructor. By doing it this way we prevent a payable constructor from working. Alternatively * we could use assembly to access msg.value. */ function HasNoEther() public payable { require(msg.value == 0); } /** * @dev Disallows direct send by settings a default function without the `payable` flag. */ function() external { } /** * @dev Transfer all Ether held by the contract to the owner. */ function reclaimEther() external onlyOwner { assert(owner.send(this.balance)); } } ///* Remix format //import "./MintableToken.sol"; //import "./HasNoEther.sol"; contract fmlink is MintableToken, HasNoEther { // Using libraries using SafeMath for uint; ////////////////////////////////////////////////// /// State Variables for the fmlink token contract ////////////////////////////////////////////////// ////////////////////// // ERC20 token state ////////////////////// /** These state vars are handled in the OpenZeppelin libraries; we display them here for the developer's information. *** // ERC20Basic - Store account balances mapping (address => uint256) public balances; // StandardToken - Owner of account approves transfer of an amount to another account mapping (address => mapping (address => uint256)) public allowed; // uint256 public totalSupply; */ ////////////////////// // Human token state ////////////////////// string public constant name = "fmlink.finance"; string public constant symbol = "fmlink"; uint8 public constant decimals = 18; /////////////////////////////////////////////////////////// // State vars for custom staking and budget functionality /////////////////////////////////////////////////////////// // Owner last minted time uint public ownerTimeLastMinted; // Owner minted tokens per second uint public ownerMintRate; /// Stake minting // Minted tokens per second for all stakers uint private globalMintRate; // Total tokens currently staked uint public totalfmlinkStaked; // struct that will hold user stake struct TokenStakeData { uint initialStakeBalance; uint initialStakeTime; uint initialStakePercentage; address stakeSplitAddress; } // Track all tokens staked mapping (address => TokenStakeData) public stakeBalances; // Fire a loggable event when tokens are staked event Stake(address indexed staker, address indexed stakeSplitAddress, uint256 value); // Fire a loggable event when staked tokens are vested event Vest(address indexed vester, address indexed stakeSplitAddress, uint256 stakedAmount, uint256 stakingGains); ////////////////////////////////////////////////// /// Begin fmlink token functionality ////////////////////////////////////////////////// /// @dev fmlink token constructor function fmlink() public { // Define owner owner = msg.sender; // Define initial owner supply. (ether here is used only to get the decimals right) uint _initOwnerSupply = 15000 ether; // One-time bulk mint given to owner bool _success = mint(msg.sender, _initOwnerSupply); // Abort if initial minting failed for whatever reason require(_success); //////////////////////////////////// // Set up state minting variables //////////////////////////////////// // Set last minted to current block.timestamp ('now') ownerTimeLastMinted = now; // 4100 minted tokens per day, 86400 seconds in a day ownerMintRate = calculateFraction(4100, 86400, decimals); // 5,000,000 targeted minted tokens per year via staking; 31,536,000 seconds per year globalMintRate = calculateFraction(5000000, 31536000, decimals); } /// @dev staking function which allows users to stake an amount of tokens to gain interest for up to 10 days function stakefmlink(uint _stakeAmount) external { // Require that tokens are staked successfully require(stakeTokens(_stakeAmount)); } /// @dev staking function which allows users to split the interest earned with another address function stakefmlinkSplit(uint _stakeAmount, address _stakeSplitAddress) external { // Require that a fmlink split actually be split with an address require(_stakeSplitAddress > 0); // Store split address into stake mapping stakeBalances[msg.sender].stakeSplitAddress = _stakeSplitAddress; // Require that tokens are staked successfully require(stakeTokens(_stakeAmount)); } /// @dev allows users to reclaim any staked tokens /// @return bool on success function claimfmlink() external returns (bool success) { /// Sanity checks: // require that there was some amount vested require(stakeBalances[msg.sender].initialStakeBalance > 0); // require that time has elapsed require(now > stakeBalances[msg.sender].initialStakeTime); // Calculate the time elapsed since the tokens were originally staked uint _timePassedSinceStake = now.sub(stakeBalances[msg.sender].initialStakeTime); // Calculate tokens to mint uint _tokensToMint = calculateStakeGains(_timePassedSinceStake); // Add the original stake back to the user's balance balances[msg.sender] += stakeBalances[msg.sender].initialStakeBalance; // Subtract stake balance from totalfmlinkStaked totalfmlinkStaked -= stakeBalances[msg.sender].initialStakeBalance; // Mint the new tokens; the new tokens are added to the user's balance if (stakeBalances[msg.sender].stakeSplitAddress > 0) { // Splitting stake, so mint half to sender and half to stakeSplitAddress mint(msg.sender, _tokensToMint.div(2)); mint(stakeBalances[msg.sender].stakeSplitAddress, _tokensToMint.div(2)); } else { // Not spliting stake; mint all new tokens and give them to msg.sender mint(msg.sender, _tokensToMint); } // Fire an event to tell the world of the newly vested tokens Vest(msg.sender, stakeBalances[msg.sender].stakeSplitAddress, stakeBalances[msg.sender].initialStakeBalance, _tokensToMint); // Clear out stored data from mapping stakeBalances[msg.sender].initialStakeBalance = 0; stakeBalances[msg.sender].initialStakeTime = 0; stakeBalances[msg.sender].initialStakePercentage = 0; stakeBalances[msg.sender].stakeSplitAddress = 0; return true; } /// @dev Allows user to check their staked balance function getStakedBalance() view external returns (uint stakedBalance) { return stakeBalances[msg.sender].initialStakeBalance; } /// @dev allows contract owner to claim their mint function ownerClaim() external onlyOwner { // Sanity check: ensure that we didn't travel back in time require(now > ownerTimeLastMinted); uint _timePassedSinceLastMint; uint _tokenMintCount; bool _mintingSuccess; // Calculate the number of seconds that have passed since the owner last took a claim _timePassedSinceLastMint = now.sub(ownerTimeLastMinted); // Sanity check: ensure that some time has passed since the owner last claimed assert(_timePassedSinceLastMint > 0); // Determine the token mint amount, determined from the number of seconds passed and the ownerMintRate _tokenMintCount = calculateMintTotal(_timePassedSinceLastMint, ownerMintRate); // Mint the owner's tokens; this also increases totalSupply _mintingSuccess = mint(msg.sender, _tokenMintCount); // Sanity check: ensure that the minting was successful require(_mintingSuccess); // New minting was a success! Set last time minted to current block.timestamp (now) ownerTimeLastMinted = now; } /// @dev stake function reduces the user's total available balance. totalSupply is unaffected /// @param _value determines how many tokens a user wants to stake function stakeTokens(uint256 _value) private returns (bool success) { /// Sanity Checks: // You can only stake as many tokens as you have require(_value <= balances[msg.sender]); // You can only stake tokens if you have not already staked tokens require(stakeBalances[msg.sender].initialStakeBalance == 0); // Subtract stake amount from regular token balance balances[msg.sender] = balances[msg.sender].sub(_value); // Add stake amount to staked balance stakeBalances[msg.sender].initialStakeBalance = _value; // Increment the global staked tokens value totalfmlinkStaked += _value; /// Determine percentage of global stake stakeBalances[msg.sender].initialStakePercentage = calculateFraction(_value, totalfmlinkStaked, decimals); // Save the time that the stake started stakeBalances[msg.sender].initialStakeTime = now; // Fire an event to tell the world of the newly staked tokens Stake(msg.sender, stakeBalances[msg.sender].stakeSplitAddress, _value); return true; } /// @dev Helper function to claimStake that modularizes the minting via staking calculation function calculateStakeGains(uint _timePassedSinceStake) view private returns (uint mintTotal) { // Store seconds in a day (need it in variable to use SafeMath) uint _secondsPerDay = 86400; uint _finalStakePercentage; // store our stake percentage at the time of stake claim uint _stakePercentageAverage; // store our calculated average minting rate ((initial+final) / 2) uint _finalMintRate; // store our calculated final mint rate (in fmlink-per-second) uint _tokensToMint = 0; // store number of new tokens to be minted // Determine the amount to be newly minted upon vesting, if any if (_timePassedSinceStake > _secondsPerDay) { /// We've passed the minimum staking time; calculate minting rate average ((initialRate + finalRate) / 2) // First, calculate our final stake percentage based upon the total amount of fmlink staked _finalStakePercentage = calculateFraction(stakeBalances[msg.sender].initialStakeBalance, totalfmlinkStaked, decimals); // Second, calculate average of initial and final stake percentage _stakePercentageAverage = calculateFraction((stakeBalances[msg.sender].initialStakePercentage.add(_finalStakePercentage)), 2, 0); // Finally, calculate our final mint rate (in fmlink-per-second) _finalMintRate = globalMintRate.mul(_stakePercentageAverage); _finalMintRate = _finalMintRate.div(1 ether); // Tokens were staked for enough time to mint new tokens; determine how many if (_timePassedSinceStake > _secondsPerDay.mul(10)) { // Tokens were staked for the maximum amount of time (10 days) _tokensToMint = calculateMintTotal(_secondsPerDay.mul(10), _finalMintRate); } else { // Tokens were staked for a mintable amount of time, but less than the 10-day max _tokensToMint = calculateMintTotal(_timePassedSinceStake, _finalMintRate); } } // Return the amount of new tokens to be minted return _tokensToMint; } /// @dev calculateFraction allows us to better handle the Solidity ugliness of not having decimals as a native type /// @param _numerator is the top part of the fraction we are calculating /// @param _denominator is the bottom part of the fraction we are calculating /// @param _precision tells the function how many significant digits to calculate out to /// @return quotient returns the result of our fraction calculation function calculateFraction(uint _numerator, uint _denominator, uint _precision) pure private returns(uint quotient) { // Take passed value and expand it to the required precision _numerator = _numerator.mul(10 ** (_precision + 1)); // handle last-digit rounding uint _quotient = ((_numerator.div(_denominator)) + 5) / 10; return (_quotient); } /// @dev Determines mint total based upon how many seconds have passed /// @param _timeInSeconds takes the time that has elapsed since the last minting /// @return uint with the calculated number of new tokens to mint function calculateMintTotal(uint _timeInSeconds, uint _mintRate) pure private returns(uint mintAmount) { // Calculates the amount of tokens to mint based upon the number of seconds passed return(_timeInSeconds.mul(_mintRate)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalfmlinkStaked","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"stakeBalances","outputs":[{"name":"initialStakeBalance","type":"uint256"},{"name":"initialStakeTime","type":"uint256"},{"name":"initialStakePercentage","type":"uint256"},{"name":"stakeSplitAddress","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimfmlink","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"ownerClaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_stakeAmount","type":"uint256"}],"name":"stakefmlink","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getStakedBalance","outputs":[{"name":"stakedBalance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stakeAmount","type":"uint256"},{"name":"_stakeSplitAddress","type":"address"}],"name":"stakefmlinkSplit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"reclaimEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ownerMintRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ownerTimeLastMinted","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":false,"stateMutability":"nonpayable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"staker","type":"address"},{"indexed":true,"name":"stakeSplitAddress","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"vester","type":"address"},{"indexed":true,"name":"stakeSplitAddress","type":"address"},{"indexed":false,"name":"stakedAmount","type":"uint256"},{"indexed":false,"name":"stakingGains","type":"uint256"}],"name":"Vest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
Contract Creation Code
606060405234156200001057600080fd5b60008033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000341415156200006457600080fd5b33600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555069032d26d12e980b6000009150620000d23383620001526401000000000262002051176401000000009004565b9050801515620000e157600080fd5b426004819055506200011261100462015180601260ff16620002e264010000000002620024d9176401000000009004565b60058190555062000144624c4b406301e13380601260ff16620002e264010000000002620024d9176401000000009004565b6006819055505050620003ca565b60006200017982600054620003506401000000000262001eb7179091906401000000009004565b600081905550620001e182600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620003506401000000000262001eb7179091906401000000009004565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000806200030e60018401600a0a866200036f6401000000000262002526179091906401000000009004565b9450600a6005620003378688620003ae6401000000000262002036179091906401000000009004565b018115156200034257fe5b049050809150509392505050565b60008082840190508381101515156200036557fe5b8091505092915050565b6000806000841415620003865760009150620003a7565b82840290508284828115156200039857fe5b04141515620003a357fe5b8091505b5092915050565b6000808284811515620003bd57fe5b0490508091505092915050565b61258d80620003da6000396000f300606060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde0314610140578063095ea7b3146101ce5780630f68e7391461022857806318160ddd1461025157806323b872dd1461027a578063313ce567146102f35780633b317dab1461032257806342352c00146103b05780634dbe5889146103dd57806366188463146103f257806367dc2ee31461044c57806370a082311461046f57806376965867146104bc5780638da5cb5b146104e55780638db47d911461053a57806395d89b411461057c5780639f727c271461060a578063a0d8b4e91461061f578063a9059cbb14610648578063ac185644146106a2578063d73dd623146106cb578063dd62ed3e14610725578063f2fde38b14610791575b341561013e57600080fd5b005b341561014b57600080fd5b6101536107ca565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610193578082015181840152602081019050610178565b50505050905090810190601f1680156101c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d957600080fd5b61020e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610803565b604051808215151515815260200191505060405180910390f35b341561023357600080fd5b61023b6108f5565b6040518082815260200191505060405180910390f35b341561025c57600080fd5b6102646108fb565b6040518082815260200191505060405180910390f35b341561028557600080fd5b6102d9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610901565b604051808215151515815260200191505060405180910390f35b34156102fe57600080fd5b610306610cc0565b604051808260ff1660ff16815260200191505060405180910390f35b341561032d57600080fd5b610359600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc5565b604051808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b34156103bb57600080fd5b6103c3610d15565b604051808215151515815260200191505060405180910390f35b34156103e857600080fd5b6103f06112a1565b005b34156103fd57600080fd5b610432600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611367565b604051808215151515815260200191505060405180910390f35b341561045757600080fd5b61046d60048080359060200190919050506115f8565b005b341561047a57600080fd5b6104a6600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061160f565b6040518082815260200191505060405180910390f35b34156104c757600080fd5b6104cf611658565b6040518082815260200191505060405180910390f35b34156104f057600080fd5b6104f86116a2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561054557600080fd5b61057a600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506116c8565b005b341561058757600080fd5b61058f611786565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105cf5780820151818401526020810190506105b4565b50505050905090810190601f1680156105fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561061557600080fd5b61061d6117bf565b005b341561062a57600080fd5b610632611893565b6040518082815260200191505060405180910390f35b341561065357600080fd5b610688600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611899565b604051808215151515815260200191505060405180910390f35b34156106ad57600080fd5b6106b5611abd565b6040518082815260200191505060405180910390f35b34156106d657600080fd5b61070b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611ac3565b604051808215151515815260200191505060405180910390f35b341561073057600080fd5b61077b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611cbf565b6040518082815260200191505060405180910390f35b341561079c57600080fd5b6107c8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611d46565b005b6040805190810160405280600e81526020017f666d6c696e6b2e66696e616e636500000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60075481565b60005481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561093e57600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561098c57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610a1757600080fd5b610a6982600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e9e90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610afe82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb790919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610bd082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e9e90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b60086020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b600080600080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154111515610d6a57600080fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015442111515610dba57600080fd5b610e0f600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015442611e9e90919063ffffffff16565b9150610e1a82611ed5565b9050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546007600082825403925050819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16111561102157610f9b33610f9660028461203690919063ffffffff16565b612051565b5061101b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661101660028461203690919063ffffffff16565b612051565b5061102d565b61102b3382612051565b505b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd9c1851563fe01face9bb04f31b9adad0fb3db6ed6f78845f9c04eadedb494d2600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015484604051808381526020018281526020019250505060405180910390a36000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019250505090565b6000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561130257600080fd5b6004544211151561131257600080fd5b61132760045442611e9e90919063ffffffff16565b925060008311151561133557fe5b611341836005546121c1565b915061134d3383612051565b905080151561135b57600080fd5b42600481905550505050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611478576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061150c565b61148b8382611e9e90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b611601816121de565b151561160c57600080fd5b50565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff161115156116ed57600080fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611777826121de565b151561178257600080fd5b5050565b6040805190810160405280600681526020017f666d6c696e6b000000000000000000000000000000000000000000000000000081525081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561181b57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561189157fe5b565b60055481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156118d657600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561192457600080fd5b61197682600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e9e90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a0b82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb790919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b6000611b5482600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb790919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611da257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611dde57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000828211151515611eac57fe5b818303905092915050565b6000808284019050838110151515611ecb57fe5b8091505092915050565b600080600080600080620151809450600090508487111561202957611f43600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754601260ff166124d9565b9350611fa6611f9d85600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154611eb790919063ffffffff16565b600260006124d9565b9250611fbd8360065461252690919063ffffffff16565b9150611fda670de0b6b3a76400008361203690919063ffffffff16565b9150611ff0600a8661252690919063ffffffff16565b87111561201b5761201461200e600a8761252690919063ffffffff16565b836121c1565b9050612028565b61202587836121c1565b90505b5b8095505050505050919050565b600080828481151561204457fe5b0490508091505092915050565b600061206882600054611eb790919063ffffffff16565b6000819055506120c082600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb790919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60006121d6828461252690919063ffffffff16565b905092915050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561222e57600080fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151561227f57600080fd5b6122d182600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e9e90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508160076000828254019250508190555061237c82600754601260ff166124d9565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555042600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f99039fcf0a98f484616c5196ee8b2ecfa971babf0b519848289ea4db381f85f7846040518082815260200191505060405180910390a360019050919050565b6000806124f560018401600a0a8661252690919063ffffffff16565b9450600a600561250e868861203690919063ffffffff16565b0181151561251857fe5b049050809150509392505050565b600080600084141561253b576000915061255a565b828402905082848281151561254c57fe5b0414151561255657fe5b8091505b50929150505600a165627a7a723058207a08c7c06726991bee2099ccd950de8c001f1a81eb024cfc09f7d2a55be20dfe0029
Deployed Bytecode
0x606060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde0314610140578063095ea7b3146101ce5780630f68e7391461022857806318160ddd1461025157806323b872dd1461027a578063313ce567146102f35780633b317dab1461032257806342352c00146103b05780634dbe5889146103dd57806366188463146103f257806367dc2ee31461044c57806370a082311461046f57806376965867146104bc5780638da5cb5b146104e55780638db47d911461053a57806395d89b411461057c5780639f727c271461060a578063a0d8b4e91461061f578063a9059cbb14610648578063ac185644146106a2578063d73dd623146106cb578063dd62ed3e14610725578063f2fde38b14610791575b341561013e57600080fd5b005b341561014b57600080fd5b6101536107ca565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610193578082015181840152602081019050610178565b50505050905090810190601f1680156101c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101d957600080fd5b61020e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610803565b604051808215151515815260200191505060405180910390f35b341561023357600080fd5b61023b6108f5565b6040518082815260200191505060405180910390f35b341561025c57600080fd5b6102646108fb565b6040518082815260200191505060405180910390f35b341561028557600080fd5b6102d9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610901565b604051808215151515815260200191505060405180910390f35b34156102fe57600080fd5b610306610cc0565b604051808260ff1660ff16815260200191505060405180910390f35b341561032d57600080fd5b610359600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610cc5565b604051808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b34156103bb57600080fd5b6103c3610d15565b604051808215151515815260200191505060405180910390f35b34156103e857600080fd5b6103f06112a1565b005b34156103fd57600080fd5b610432600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611367565b604051808215151515815260200191505060405180910390f35b341561045757600080fd5b61046d60048080359060200190919050506115f8565b005b341561047a57600080fd5b6104a6600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061160f565b6040518082815260200191505060405180910390f35b34156104c757600080fd5b6104cf611658565b6040518082815260200191505060405180910390f35b34156104f057600080fd5b6104f86116a2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561054557600080fd5b61057a600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506116c8565b005b341561058757600080fd5b61058f611786565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105cf5780820151818401526020810190506105b4565b50505050905090810190601f1680156105fc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561061557600080fd5b61061d6117bf565b005b341561062a57600080fd5b610632611893565b6040518082815260200191505060405180910390f35b341561065357600080fd5b610688600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611899565b604051808215151515815260200191505060405180910390f35b34156106ad57600080fd5b6106b5611abd565b6040518082815260200191505060405180910390f35b34156106d657600080fd5b61070b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611ac3565b604051808215151515815260200191505060405180910390f35b341561073057600080fd5b61077b600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611cbf565b6040518082815260200191505060405180910390f35b341561079c57600080fd5b6107c8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611d46565b005b6040805190810160405280600e81526020017f666d6c696e6b2e66696e616e636500000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60075481565b60005481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561093e57600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561098c57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610a1757600080fd5b610a6982600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e9e90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610afe82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb790919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610bd082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e9e90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b60086020528060005260406000206000915090508060000154908060010154908060020154908060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905084565b600080600080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154111515610d6a57600080fd5b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015442111515610dba57600080fd5b610e0f600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015442611e9e90919063ffffffff16565b9150610e1a82611ed5565b9050600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546007600082825403925050819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16111561102157610f9b33610f9660028461203690919063ffffffff16565b612051565b5061101b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661101660028461203690919063ffffffff16565b612051565b5061102d565b61102b3382612051565b505b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd9c1851563fe01face9bb04f31b9adad0fb3db6ed6f78845f9c04eadedb494d2600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015484604051808381526020018281526020019250505060405180910390a36000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019250505090565b6000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561130257600080fd5b6004544211151561131257600080fd5b61132760045442611e9e90919063ffffffff16565b925060008311151561133557fe5b611341836005546121c1565b915061134d3383612051565b905080151561135b57600080fd5b42600481905550505050565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115611478576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061150c565b61148b8382611e9e90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b611601816121de565b151561160c57600080fd5b50565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff161115156116ed57600080fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611777826121de565b151561178257600080fd5b5050565b6040805190810160405280600681526020017f666d6c696e6b000000000000000000000000000000000000000000000000000081525081565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561181b57600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050151561189157fe5b565b60055481565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156118d657600080fd5b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561192457600080fd5b61197682600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e9e90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611a0b82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb790919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b6000611b5482600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb790919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611da257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611dde57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000828211151515611eac57fe5b818303905092915050565b6000808284019050838110151515611ecb57fe5b8091505092915050565b600080600080600080620151809450600090508487111561202957611f43600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754601260ff166124d9565b9350611fa6611f9d85600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154611eb790919063ffffffff16565b600260006124d9565b9250611fbd8360065461252690919063ffffffff16565b9150611fda670de0b6b3a76400008361203690919063ffffffff16565b9150611ff0600a8661252690919063ffffffff16565b87111561201b5761201461200e600a8761252690919063ffffffff16565b836121c1565b9050612028565b61202587836121c1565b90505b5b8095505050505050919050565b600080828481151561204457fe5b0490508091505092915050565b600061206882600054611eb790919063ffffffff16565b6000819055506120c082600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611eb790919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885836040518082815260200191505060405180910390a28273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60006121d6828461252690919063ffffffff16565b905092915050565b6000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561222e57600080fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151561227f57600080fd5b6122d182600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e9e90919063ffffffff16565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055508160076000828254019250508190555061237c82600754601260ff166124d9565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555042600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f99039fcf0a98f484616c5196ee8b2ecfa971babf0b519848289ea4db381f85f7846040518082815260200191505060405180910390a360019050919050565b6000806124f560018401600a0a8661252690919063ffffffff16565b9450600a600561250e868861203690919063ffffffff16565b0181151561251857fe5b049050809150509392505050565b600080600084141561253b576000915061255a565b828402905082848281151561254c57fe5b0414151561255657fe5b8091505b50929150505600a165627a7a723058207a08c7c06726991bee2099ccd950de8c001f1a81eb024cfc09f7d2a55be20dfe0029
Deployed Bytecode Sourcemap
9986:12817:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10899:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5260:187:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11525:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;131:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4248:449;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10999:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11820:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14327:1979;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16582:1155;;;;;;;;;;;;;;7106:407;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13519:163;;;;;;;;;;;;;;;;;;;;;;;;;;3207:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16370:148;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;599:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13790:440;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10952:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;80:1;75:3;71;64:6;52:2;49:1;45:3;40:15;;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9803:88:0;;;;;;;;;;;;;;11347:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2610:388;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11270:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6371:261;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5774:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1223:173;;;;;;;;;;;;;;;;;;;;;;;;;;;;10899:46;;;;;;;;;;;;;;;;;;;;:::o;5260:187::-;5327:4;5372:6;5340:7;:19;5348:10;5340:19;;;;;;;;;;;;;;;:29;5360:8;5340:29;;;;;;;;;;;;;;;:38;;;;5406:8;5385:38;;5394:10;5385:38;;;5416:6;5385:38;;;;;;;;;;;;;;;;;;5437:4;5430:11;;5260:187;;;;:::o;11525:29::-;;;;:::o;131:26::-;;;;:::o;4248:449::-;4330:4;4366:1;4351:17;;:3;:17;;;;4343:26;;;;;;;;4394:8;:15;4403:5;4394:15;;;;;;;;;;;;;;;;4384:6;:25;;4376:34;;;;;;;;4435:7;:14;4443:5;4435:14;;;;;;;;;;;;;;;:26;4450:10;4435:26;;;;;;;;;;;;;;;;4425:6;:36;;4417:45;;;;;;;;4489:27;4509:6;4489:8;:15;4498:5;4489:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;4471:8;:15;4480:5;4471:15;;;;;;;;;;;;;;;:45;;;;4539:25;4557:6;4539:8;:13;4548:3;4539:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;4523:8;:13;4532:3;4523:13;;;;;;;;;;;;;;;:41;;;;4600:38;4631:6;4600:7;:14;4608:5;4600:14;;;;;;;;;;;;;;;:26;4615:10;4600:26;;;;;;;;;;;;;;;;:30;;:38;;;;:::i;:::-;4571:7;:14;4579:5;4571:14;;;;;;;;;;;;;;;:26;4586:10;4571:26;;;;;;;;;;;;;;;:67;;;;4661:3;4645:28;;4654:5;4645:28;;;4666:6;4645:28;;;;;;;;;;;;;;;;;;4687:4;4680:11;;4248:449;;;;;:::o;10999:36::-;11033:2;10999:36;:::o;11820:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14327:1979::-;14368:12;14741:26;14871:18;14537:1;14489:13;:25;14503:10;14489:25;;;;;;;;;;;;;;;:45;;;:49;14481:58;;;;;;;;14606:13;:25;14620:10;14606:25;;;;;;;;;;;;;;;:42;;;14600:3;:48;14592:57;;;;;;;;14770:51;14778:13;:25;14792:10;14778:25;;;;;;;;;;;;;;;:42;;;14770:3;:7;;:51;;;;:::i;:::-;14741:80;;14892:42;14912:21;14892:19;:42::i;:::-;14871:63;;15033:13;:25;15047:10;15033:25;;;;;;;;;;;;;;;:45;;;15009:8;:20;15018:10;15009:20;;;;;;;;;;;;;;;;:69;;;;;;;;;;;15178:13;:25;15192:10;15178:25;;;;;;;;;;;;;;;:45;;;15157:17;;:66;;;;;;;;;;;15374:1;15328:13;:25;15342:10;15328:25;;;;;;;;;;;;;;;:43;;;;;;;;;;;;:47;;;15324:449;;;15488:38;15493:10;15505:20;15523:1;15505:13;:17;;:20;;;;:::i;:::-;15488:4;:38::i;:::-;;15541:71;15546:13;:25;15560:10;15546:25;;;;;;;;;;;;;;;:43;;;;;;;;;;;;15591:20;15609:1;15591:13;:17;;:20;;;;:::i;:::-;15541:4;:71::i;:::-;;15324:449;;;15730:31;15735:10;15747:13;15730:4;:31::i;:::-;;15324:449;15881:13;:25;15895:10;15881:25;;;;;;;;;;;;;;;:43;;;;;;;;;;;;15864:123;;15869:10;15864:123;;;15926:13;:25;15940:10;15926:25;;;;;;;;;;;;;;;:45;;;15973:13;15864:123;;;;;;;;;;;;;;;;;;;;;;;;16095:1;16047:13;:25;16061:10;16047:25;;;;;;;;;;;;;;;:45;;:49;;;;16152:1;16107:13;:25;16121:10;16107:25;;;;;;;;;;;;;;;:42;;:46;;;;16215:1;16164:13;:25;16178:10;16164:25;;;;;;;;;;;;;;;:48;;:52;;;;16273:1;16227:13;:25;16241:10;16227:25;;;;;;;;;;;;;;;:43;;;:47;;;;;;;;;;;;;;;;;;16294:4;16287:11;;14327:1979;;;:::o;16582:1155::-;16762:29;16802:20;16833;1034:5;;;;;;;;;;;1020:19;;:10;:19;;;1012:28;;;;;;;;16721:19;;16715:3;:25;16707:34;;;;;;;;16988:28;16996:19;;16988:3;:7;;:28;;;;:::i;:::-;16961:55;;17151:1;17124:24;:28;17117:36;;;;;;17296:59;17315:24;17341:13;;17296:18;:59::i;:::-;17278:77;;17455:33;17460:10;17472:15;17455:4;:33::i;:::-;17437:51;;17574:15;17566:24;;;;;;;;17726:3;17704:19;:25;;;;16582:1155;;;:::o;7106:407::-;7189:4;7202:13;7218:7;:19;7226:10;7218:19;;;;;;;;;;;;;;;:29;7238:8;7218:29;;;;;;;;;;;;;;;;7202:45;;7277:8;7258:16;:27;7254:168;;;7328:1;7296:7;:19;7304:10;7296:19;;;;;;;;;;;;;;;:29;7316:8;7296:29;;;;;;;;;;;;;;;:33;;;;7254:168;;;7384:30;7397:16;7384:8;:12;;:30;;;;:::i;:::-;7352:7;:19;7360:10;7352:19;;;;;;;;;;;;;;;:29;7372:8;7352:29;;;;;;;;;;;;;;;:62;;;;7254:168;7449:8;7428:61;;7437:10;7428:61;;;7459:7;:19;7467:10;7459:19;;;;;;;;;;;;;;;:29;7479:8;7459:29;;;;;;;;;;;;;;;;7428:61;;;;;;;;;;;;;;;;;;7503:4;7496:11;;7106:407;;;;;:::o;13519:163::-;13648:25;13660:12;13648:11;:25::i;:::-;13640:34;;;;;;;;13519:163;:::o;3207:109::-;3263:15;3294:8;:16;3303:6;3294:16;;;;;;;;;;;;;;;;3287:23;;3207:109;;;:::o;16370:148::-;16421:18;16465:13;:25;16479:10;16465:25;;;;;;;;;;;;;;;:45;;;16458:52;;16370:148;:::o;599:20::-;;;;;;;;;;;;;:::o;13790:440::-;13991:1;13970:18;:22;;;13962:31;;;;;;;;14101:18;14055:13;:25;14069:10;14055:25;;;;;;;;;;;;;;;:43;;;:64;;;;;;;;;;;;;;;;;;14194:25;14206:12;14194:11;:25::i;:::-;14186:34;;;;;;;;13790:440;;:::o;10952:40::-;;;;;;;;;;;;;;;;;;;;:::o;9803:88::-;1034:5;;;;;;;;;;;1020:19;;:10;:19;;;1012:28;;;;;;;;9860:5;;;;;;;;;;;:10;;:24;9871:4;:12;;;9860:24;;;;;;;;;;;;;;;;;;;;;;;9853:32;;;;;;9803:88::o;11347:25::-;;;;:::o;2610:388::-;2673:4;2709:1;2694:17;;:3;:17;;;;2686:26;;;;;;;;2737:8;:20;2746:10;2737:20;;;;;;;;;;;;;;;;2727:6;:30;;2719:39;;;;;;;;2854:32;2879:6;2854:8;:20;2863:10;2854:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;2831:8;:20;2840:10;2831:20;;;;;;;;;;;;;;;:55;;;;2909:25;2927:6;2909:8;:13;2918:3;2909:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;2893:8;:13;2902:3;2893:13;;;;;;;;;;;;;;;:41;;;;2962:3;2941:33;;2950:10;2941:33;;;2967:6;2941:33;;;;;;;;;;;;;;;;;;2988:4;2981:11;;2610:388;;;;:::o;11270:31::-;;;;:::o;6371:261::-;6449:4;6494:46;6528:11;6494:7;:19;6502:10;6494:19;;;;;;;;;;;;;;;:29;6514:8;6494:29;;;;;;;;;;;;;;;;:33;;:46;;;;:::i;:::-;6462:7;:19;6470:10;6462:19;;;;;;;;;;;;;;;:29;6482:8;6462:29;;;;;;;;;;;;;;;:78;;;;6568:8;6547:61;;6556:10;6547:61;;;6578:7;:19;6586:10;6578:19;;;;;;;;;;;;;;;:29;6598:8;6578:29;;;;;;;;;;;;;;;;6547:61;;;;;;;;;;;;;;;;;;6622:4;6615:11;;6371:261;;;;:::o;5774:128::-;5848:7;5871;:15;5879:6;5871:15;;;;;;;;;;;;;;;:25;5887:8;5871:25;;;;;;;;;;;;;;;;5864:32;;5774:128;;;;:::o;1223:173::-;1034:5;;;;;;;;;;;1020:19;;:10;:19;;;1012:28;;;;;;;;1320:1;1300:22;;:8;:22;;;;1292:31;;;;;;;;1358:8;1330:37;;1351:5;;;;;;;;;;;1330:37;;;;;;;;;;;;1382:8;1374:5;;:16;;;;;;;;;;;;;;;;;;1223:173;:::o;1983:113::-;2041:7;2069:1;2064;:6;;2057:14;;;;;;2089:1;2085;:5;2078:12;;1983:113;;;;:::o;2102:133::-;2160:7;2176:9;2192:1;2188;:5;2176:17;;2212:1;2207;:6;;2200:14;;;;;;2228:1;2221:8;;2102:133;;;;;:::o;19185:2259::-;19264:14;19369:19;19407:26;19505:28;19613:19;19717:18;19391:5;19369:27;;19738:1;19717:22;;19912:14;19888:21;:38;19884:1452;;;20219:93;20237:13;:25;20251:10;20237:25;;;;;;;;;;;;;;;:45;;;20284:17;;11033:2;20219:93;;:17;:93::i;:::-;20195:117;;20435:102;20454:75;20507:21;20454:13;:25;20468:10;20454:25;;;;;;;;;;;;;;;:48;;;:52;;:75;;;;:::i;:::-;20532:1;20535;20435:17;:102::i;:::-;20409:128;;20649:43;20668:23;20649:14;;:18;;:43;;;;:::i;:::-;20632:60;;20725:27;20744:7;20725:14;:18;;:27;;;;:::i;:::-;20708:44;;20899:22;20918:2;20899:14;:18;;:22;;;;:::i;:::-;20875:21;:46;20871:454;;;21038:58;21057:22;21076:2;21057:14;:18;;:22;;;;:::i;:::-;21081:14;21038:18;:58::i;:::-;21022:74;;20871:454;;;21252:57;21271:21;21294:14;21252:18;:57::i;:::-;21236:73;;20871:454;19884:1452;21421:13;21414:20;;19185:2259;;;;;;;;:::o;1707:270::-;1765:7;1856:9;1872:1;1868;:5;;;;;;;;1856:17;;1970:1;1963:8;;1707:270;;;;;:::o;8133:252::-;8195:4;8222:24;8238:7;8222:11;;:15;;:24;;;;:::i;:::-;8208:11;:38;;;;8269:26;8287:7;8269:8;:13;8278:3;8269:13;;;;;;;;;;;;;;;;:17;;:26;;;;:::i;:::-;8253:8;:13;8262:3;8253:13;;;;;;;;;;;;;;;:42;;;;8307:3;8302:18;;;8312:7;8302:18;;;;;;;;;;;;;;;;;;8348:3;8327:34;;8344:1;8327:34;;;8353:7;8327:34;;;;;;;;;;;;;;;;;;8375:4;8368:11;;8133:252;;;;:::o;22542:256::-;22628:15;22760:29;22779:9;22760:14;:18;;:29;;;;:::i;:::-;22753:37;;22542:256;;;;:::o;17916:1163::-;17970:12;18104:8;:20;18113:10;18104:20;;;;;;;;;;;;;;;;18094:6;:30;;18086:39;;;;;;;;18269:1;18220:13;:25;18234:10;18220:25;;;;;;;;;;;;;;;:45;;;:50;18212:59;;;;;;;;18368:32;18393:6;18368:8;:20;18377:10;18368:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;18345:8;:20;18354:10;18345:20;;;;;;;;;;;;;;;:55;;;;18508:6;18460:13;:25;18474:10;18460:25;;;;;;;;;;;;;;;:45;;:54;;;;18601:6;18580:17;;:27;;;;;;;;;;;18721:54;18739:6;18747:17;;11033:2;18721:54;;:17;:54::i;:::-;18670:13;:25;18684:10;18670:25;;;;;;;;;;;;;;;:48;;:105;;;;18890:3;18845:13;:25;18859:10;18845:25;;;;;;;;;;;;;;;:42;;:48;;;;18995:13;:25;19009:10;18995:25;;;;;;;;;;;;;;;:43;;;;;;;;;;;;18977:70;;18983:10;18977:70;;;19040:6;18977:70;;;;;;;;;;;;;;;;;;19067:4;19060:11;;17916:1163;;;:::o;21902:399::-;22003:13;22206:14;22118:38;22153:1;22140:10;:14;22133:2;:22;22118:10;:14;;:38;;;;:::i;:::-;22105:51;;22262:2;22257:1;22225:28;22240:12;22225:10;:14;;:28;;;;:::i;:::-;22224:34;22223:41;;;;;;;;22206:58;;22283:9;22275:18;;21902:399;;;;;;:::o;1521:180::-;1579:7;1638:9;1604:1;1599;:6;1595:37;;;1623:1;1616:8;;;;1595:37;1654:1;1650;:5;1638:17;;1678:1;1673;1669;:5;;;;;;;;:10;1662:18;;;;;;1694:1;1687:8;;1521:180;;;;;;:::o
Swarm Source
bzzr://7a08c7c06726991bee2099ccd950de8c001f1a81eb024cfc09f7d2a55be20dfe
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.