Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
SHRIMPDelegate
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-08-13 */ /** *Submitted for verification at Etherscan.io on 2020-08-11 */ pragma solidity 0.5.17; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract YAMTokenStorage { using SafeMath for uint256; /** * @dev Guard variable for re-entrancy checks. Not currently used */ bool internal _notEntered; /** * @notice EIP-20 token name for this token */ string public name; /** * @notice EIP-20 token symbol for this token */ string public symbol; /** * @notice EIP-20 token decimals for this token */ uint8 public decimals; /** * @notice Governor for this contract */ address public gov; /** * @notice Pending governance for this contract */ address public pendingGov; /** * @notice Approved rebaser for this contract */ address public rebaser; /** * @notice Reserve address of YAM protocol */ address public incentivizer; /** * @notice Total supply of YAMs */ uint256 public totalSupply; /** * @notice Internal decimals used to handle scaling factor */ uint256 public constant internalDecimals = 10**24; /** * @notice Used for percentage maths */ uint256 public constant BASE = 10**18; /** * @notice Scaling factor that adjusts everyone's balances */ uint256 public yamsScalingFactor; mapping (address => uint256) internal _yamBalances; mapping (address => mapping (address => uint256)) internal _allowedFragments; uint256 public initSupply; } contract YAMGovernanceStorage { /// @notice A record of each accounts delegate mapping (address => address) internal _delegates; /// @notice A checkpoint for marking number of votes from a given block struct Checkpoint { uint32 fromBlock; uint256 votes; } /// @notice A record of votes checkpoints for each account, by index mapping (address => mapping (uint32 => Checkpoint)) public checkpoints; /// @notice The number of checkpoints for each account mapping (address => uint32) public numCheckpoints; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the delegation struct used by the contract bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)"); /// @notice A record of states for signing / validating signatures mapping (address => uint) public nonces; } contract YAMTokenInterface is YAMTokenStorage, YAMGovernanceStorage { /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /** * @notice Event emitted when tokens are rebased */ event Rebase(uint256 epoch, uint256 prevYamsScalingFactor, uint256 newYamsScalingFactor); /*** Gov Events ***/ /** * @notice Event emitted when pendingGov is changed */ event NewPendingGov(address oldPendingGov, address newPendingGov); /** * @notice Event emitted when gov is changed */ event NewGov(address oldGov, address newGov); /** * @notice Sets the rebaser contract */ event NewRebaser(address oldRebaser, address newRebaser); /** * @notice Sets the incentivizer contract */ event NewIncentivizer(address oldIncentivizer, address newIncentivizer); /* - ERC20 Events - */ /** * @notice EIP20 Transfer event */ event Transfer(address indexed from, address indexed to, uint amount); /** * @notice EIP20 Approval event */ event Approval(address indexed owner, address indexed spender, uint amount); /* - Extra Events - */ /** * @notice Tokens minted event */ event Mint(address to, uint256 amount); // Public functions function transfer(address to, uint256 value) external returns(bool); function transferFrom(address from, address to, uint256 value) external returns(bool); function balanceOf(address who) external view returns(uint256); function balanceOfUnderlying(address who) external view returns(uint256); function allowance(address owner_, address spender) external view returns(uint256); function approve(address spender, uint256 value) external returns (bool); function increaseAllowance(address spender, uint256 addedValue) external returns (bool); function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); function maxScalingFactor() external view returns (uint256); /* - Governance Functions - */ function getPriorVotes(address account, uint blockNumber) external view returns (uint256); function delegateBySig(address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) external; function delegate(address delegatee) external; function delegates(address delegator) external view returns (address); function getCurrentVotes(address account) external view returns (uint256); /* - Permissioned/Governance functions - */ function mint(address to, uint256 amount) external returns (bool); function rebase(uint256 epoch, uint256 indexDelta, bool positive) external returns (uint256); function _setRebaser(address rebaser_) external; function _setIncentivizer(address incentivizer_) external; function _setPendingGov(address pendingGov_) external; function _acceptGov() external; } contract YAMGovernanceToken is YAMTokenInterface { /// @notice An event thats emitted when an account changes its delegate event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate); /// @notice An event thats emitted when a delegate account's vote balance changes event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance); /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegator The address to get delegatee for */ function delegates(address delegator) external view returns (address) { return _delegates[delegator]; } /** * @notice Delegate votes from `msg.sender` to `delegatee` * @param delegatee The address to delegate votes to */ function delegate(address delegatee) external { return _delegate(msg.sender, delegatee); } /** * @notice Delegates votes from signatory to `delegatee` * @param delegatee The address to delegate votes to * @param nonce The contract state required to match the signature * @param expiry The time at which to expire the signature * @param v The recovery byte of the signature * @param r Half of the ECDSA signature pair * @param s Half of the ECDSA signature pair */ function delegateBySig( address delegatee, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s ) external { bytes32 domainSeparator = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this) ) ); bytes32 structHash = keccak256( abi.encode( DELEGATION_TYPEHASH, delegatee, nonce, expiry ) ); bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", domainSeparator, structHash ) ); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "YAM::delegateBySig: invalid signature"); require(nonce == nonces[signatory]++, "YAM::delegateBySig: invalid nonce"); require(now <= expiry, "YAM::delegateBySig: signature expired"); return _delegate(signatory, delegatee); } /** * @notice Gets the current votes balance for `account` * @param account The address to get votes balance * @return The number of current votes for `account` */ function getCurrentVotes(address account) external view returns (uint256) { uint32 nCheckpoints = numCheckpoints[account]; return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0; } /** * @notice Determine the prior number of votes for an account as of a block number * @dev Block number must be a finalized block or else this function will revert to prevent misinformation. * @param account The address of the account to check * @param blockNumber The block number to get the vote balance at * @return The number of votes the account had as of the given block */ function getPriorVotes(address account, uint blockNumber) external view returns (uint256) { require(blockNumber < block.number, "YAM::getPriorVotes: not yet determined"); uint32 nCheckpoints = numCheckpoints[account]; if (nCheckpoints == 0) { return 0; } // First check most recent balance if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) { return checkpoints[account][nCheckpoints - 1].votes; } // Next check implicit zero balance if (checkpoints[account][0].fromBlock > blockNumber) { return 0; } uint32 lower = 0; uint32 upper = nCheckpoints - 1; while (upper > lower) { uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow Checkpoint memory cp = checkpoints[account][center]; if (cp.fromBlock == blockNumber) { return cp.votes; } else if (cp.fromBlock < blockNumber) { lower = center; } else { upper = center - 1; } } return checkpoints[account][lower].votes; } function _delegate(address delegator, address delegatee) internal { address currentDelegate = _delegates[delegator]; uint256 delegatorBalance = _yamBalances[delegator]; // balance of underlying YAMs (not scaled); _delegates[delegator] = delegatee; emit DelegateChanged(delegator, currentDelegate, delegatee); _moveDelegates(currentDelegate, delegatee, delegatorBalance); } function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal { if (srcRep != dstRep && amount > 0) { if (srcRep != address(0)) { // decrease old representative uint32 srcRepNum = numCheckpoints[srcRep]; uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0; uint256 srcRepNew = srcRepOld.sub(amount); _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew); } if (dstRep != address(0)) { // increase new representative uint32 dstRepNum = numCheckpoints[dstRep]; uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0; uint256 dstRepNew = dstRepOld.add(amount); _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew); } } } function _writeCheckpoint( address delegatee, uint32 nCheckpoints, uint256 oldVotes, uint256 newVotes ) internal { uint32 blockNumber = safe32(block.number, "YAM::_writeCheckpoint: block number exceeds 32 bits"); if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) { checkpoints[delegatee][nCheckpoints - 1].votes = newVotes; } else { checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes); numCheckpoints[delegatee] = nCheckpoints + 1; } emit DelegateVotesChanged(delegatee, oldVotes, newVotes); } function safe32(uint n, string memory errorMessage) internal pure returns (uint32) { require(n < 2**32, errorMessage); return uint32(n); } function getChainId() internal pure returns (uint) { uint256 chainId; assembly { chainId := chainid() } return chainId; } } contract YAMToken is YAMGovernanceToken { // Modifiers modifier onlyGov() { require(msg.sender == gov); _; } modifier onlyRebaser() { require(msg.sender == rebaser); _; } modifier onlyMinter() { require(msg.sender == rebaser || msg.sender == incentivizer || msg.sender == gov, "not minter"); _; } modifier validRecipient(address to) { require(to != address(0x0)); require(to != address(this)); _; } function initialize( string memory name_, string memory symbol_, uint8 decimals_ ) public { require(yamsScalingFactor == 0, "already initialized"); name = name_; symbol = symbol_; decimals = decimals_; } /** * @notice Computes the current max scaling factor */ function maxScalingFactor() external view returns (uint256) { return _maxScalingFactor(); } function _maxScalingFactor() internal view returns (uint256) { // scaling factor can only go up to 2**256-1 = initSupply * yamsScalingFactor // this is used to check if yamsScalingFactor will be too high to compute balances when rebasing. return uint256(-1) / initSupply; } /** * @notice Mints new tokens, increasing totalSupply, initSupply, and a users balance. * @dev Limited to onlyMinter modifier */ function mint(address to, uint256 amount) external onlyMinter returns (bool) { _mint(to, amount); return true; } function _mint(address to, uint256 amount) internal { // increase totalSupply totalSupply = totalSupply.add(amount); // get underlying value uint256 yamValue = amount.mul(internalDecimals).div(yamsScalingFactor); // increase initSupply initSupply = initSupply.add(yamValue); // make sure the mint didnt push maxScalingFactor too low require(yamsScalingFactor <= _maxScalingFactor(), "max scaling factor too low"); // add balance _yamBalances[to] = _yamBalances[to].add(yamValue); // add delegates to the minter _moveDelegates(address(0), _delegates[to], yamValue); emit Mint(to, amount); } /* - ERC20 functionality - */ /** * @dev Transfer tokens to a specified address. * @param to The address to transfer to. * @param value The amount to be transferred. * @return True on success, false otherwise. */ function transfer(address to, uint256 value) external validRecipient(to) returns (bool) { // underlying balance is stored in yams, so divide by current scaling factor // note, this means as scaling factor grows, dust will be untransferrable. // minimum transfer value == yamsScalingFactor / 1e24; // get amount in underlying uint256 yamValue = value.mul(internalDecimals).div(yamsScalingFactor); // sub from balance of sender _yamBalances[msg.sender] = _yamBalances[msg.sender].sub(yamValue); // add to balance of receiver _yamBalances[to] = _yamBalances[to].add(yamValue); emit Transfer(msg.sender, to, value); _moveDelegates(_delegates[msg.sender], _delegates[to], yamValue); return true; } /** * @dev Transfer tokens from one address to another. * @param from The address you want to send tokens from. * @param to The address you want to transfer to. * @param value The amount of tokens to be transferred. */ function transferFrom(address from, address to, uint256 value) external validRecipient(to) returns (bool) { // decrease allowance _allowedFragments[from][msg.sender] = _allowedFragments[from][msg.sender].sub(value); // get value in yams uint256 yamValue = value.mul(internalDecimals).div(yamsScalingFactor); // sub from from _yamBalances[from] = _yamBalances[from].sub(yamValue); _yamBalances[to] = _yamBalances[to].add(yamValue); emit Transfer(from, to, value); _moveDelegates(_delegates[from], _delegates[to], yamValue); return true; } /** * @param who The address to query. * @return The balance of the specified address. */ function balanceOf(address who) external view returns (uint256) { return _yamBalances[who].mul(yamsScalingFactor).div(internalDecimals); } /** @notice Currently returns the internal storage amount * @param who The address to query. * @return The underlying balance of the specified address. */ function balanceOfUnderlying(address who) external view returns (uint256) { return _yamBalances[who]; } /** * @dev Function to check the amount of tokens that an owner has allowed to a spender. * @param owner_ The address which owns the funds. * @param spender The address which will spend the funds. * @return The number of tokens still available for the spender. */ function allowance(address owner_, address spender) external view returns (uint256) { return _allowedFragments[owner_][spender]; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of * msg.sender. This method is included for ERC20 compatibility. * increaseAllowance and decreaseAllowance should be used instead. * Changing an allowance with this method brings the risk that someone may transfer both * the old and the new allowance - if they are both greater than zero - if a transfer * transaction is mined before the later approve() call is mined. * * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) external returns (bool) { _allowedFragments[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Increase the amount of tokens that an owner has allowed to a spender. * This method should be used instead of approve() to avoid the double approval vulnerability * described above. * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][spender].add(addedValue); emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]); return true; } /** * @dev Decrease the amount of tokens that an owner has allowed to a spender. * * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 oldValue = _allowedFragments[msg.sender][spender]; if (subtractedValue >= oldValue) { _allowedFragments[msg.sender][spender] = 0; } else { _allowedFragments[msg.sender][spender] = oldValue.sub(subtractedValue); } emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]); return true; } /* - Governance Functions - */ /** @notice sets the rebaser * @param rebaser_ The address of the rebaser contract to use for authentication. */ function _setRebaser(address rebaser_) external onlyGov { address oldRebaser = rebaser; rebaser = rebaser_; emit NewRebaser(oldRebaser, rebaser_); } /** @notice sets the incentivizer * @param incentivizer_ The address of the rebaser contract to use for authentication. */ function _setIncentivizer(address incentivizer_) external onlyGov { address oldIncentivizer = incentivizer; incentivizer = incentivizer_; emit NewIncentivizer(oldIncentivizer, incentivizer_); } /** @notice sets the pendingGov * @param pendingGov_ The address of the rebaser contract to use for authentication. */ function _setPendingGov(address pendingGov_) external onlyGov { address oldPendingGov = pendingGov; pendingGov = pendingGov_; emit NewPendingGov(oldPendingGov, pendingGov_); } /** @notice lets msg.sender accept governance * */ function _acceptGov() external { require(msg.sender == pendingGov, "!pending"); address oldGov = gov; gov = pendingGov; pendingGov = address(0); emit NewGov(oldGov, gov); } /* - Extras - */ /** * @notice Initiates a new rebase operation, provided the minimum time period has elapsed. * * @dev The supply adjustment equals (totalSupply * DeviationFromTargetRate) / rebaseLag * Where DeviationFromTargetRate is (MarketOracleRate - targetRate) / targetRate * and targetRate is CpiOracleRate / baseCpi */ function rebase( uint256 epoch, uint256 indexDelta, bool positive ) external onlyRebaser returns (uint256) { if (indexDelta == 0) { emit Rebase(epoch, yamsScalingFactor, yamsScalingFactor); return totalSupply; } uint256 prevYamsScalingFactor = yamsScalingFactor; if (!positive) { yamsScalingFactor = yamsScalingFactor.mul(BASE.sub(indexDelta)).div(BASE); } else { uint256 newScalingFactor = yamsScalingFactor.mul(BASE.add(indexDelta)).div(BASE); if (newScalingFactor < _maxScalingFactor()) { yamsScalingFactor = newScalingFactor; } else { yamsScalingFactor = _maxScalingFactor(); } } totalSupply = initSupply.mul(yamsScalingFactor).div(BASE); emit Rebase(epoch, prevYamsScalingFactor, yamsScalingFactor); return totalSupply; } } contract YAM is YAMToken { /** * @notice Initialize the new money market * @param name_ ERC-20 name of this token * @param symbol_ ERC-20 symbol of this token * @param decimals_ ERC-20 decimal precision of this token */ function initialize( string memory name_, string memory symbol_, uint8 decimals_, address initial_owner, uint256 initSupply_ ) public { require(initSupply_ > 0, "0 init supply"); super.initialize(name_, symbol_, decimals_); initSupply = initSupply_.mul(10**24/ (BASE)); totalSupply = initSupply_; yamsScalingFactor = BASE; _yamBalances[initial_owner] = initSupply_.mul(10**24 / (BASE)); // owner renounces ownership after deployment as they need to set // rebaser and incentivizer // gov = gov_; } } contract YAMDelegationStorage { /** * @notice Implementation address for this contract */ address public implementation; } contract YAMDelegateInterface is YAMDelegationStorage { /** * @notice Called by the delegator on a delegate to initialize it for duty * @dev Should revert if any issues arise which make it unfit for delegation * @param data The encoded bytes data for any initialization */ function _becomeImplementation(bytes memory data) public; /** * @notice Called by the delegator on a delegate to forfeit its responsibility */ function _resignImplementation() public; } contract SHRIMPDelegate is YAM, YAMDelegateInterface { /** * @notice Construct an empty delegate */ constructor() public {} /** * @notice Called by the delegator on a delegate to initialize it for duty * @param data The encoded bytes data for any initialization */ function _becomeImplementation(bytes memory data) public { // Shh -- currently unused data; // Shh -- we don't ever want this hook to be marked pure if (false) { implementation = address(0); } require(msg.sender == gov, "only the gov may call _becomeImplementation"); } /** * @notice Called by the delegator on a delegate to forfeit its responsibility */ function _resignImplementation() public { // Shh -- we don't ever want this hook to be marked pure if (false) { implementation = address(0); } require(msg.sender == gov, "only the gov may call _resignImplementation"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGov","type":"address"},{"indexed":false,"internalType":"address","name":"newGov","type":"address"}],"name":"NewGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldIncentivizer","type":"address"},{"indexed":false,"internalType":"address","name":"newIncentivizer","type":"address"}],"name":"NewIncentivizer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingGov","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingGov","type":"address"}],"name":"NewPendingGov","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRebaser","type":"address"},{"indexed":false,"internalType":"address","name":"newRebaser","type":"address"}],"name":"NewRebaser","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"prevYamsScalingFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newYamsScalingFactor","type":"uint256"}],"name":"Rebase","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"_acceptGov","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"_becomeImplementation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"_resignImplementation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"incentivizer_","type":"address"}],"name":"_setIncentivizer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"pendingGov_","type":"address"}],"name":"_setPendingGov","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"rebaser_","type":"address"}],"name":"_setRebaser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOfUnderlying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"incentivizer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"initSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address","name":"initial_owner","type":"address"},{"internalType":"uint256","name":"initSupply_","type":"uint256"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"internalDecimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingGov","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"indexDelta","type":"uint256"},{"internalType":"bool","name":"positive","type":"bool"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"yamsScalingFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50612758806100206000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c80636c9452211161014657806398dca210116100c3578063c3cda52011610087578063c3cda5201461099c578063dd62ed3e146109e3578063e7a324dc14610a11578063ec342ad014610a19578063f1127ed814610a21578063fa8f345514610a735761025e565b806398dca210146108f0578063a457c2d714610916578063a9059cbb14610942578063b4b5ea571461096e578063b6fa8576146109945761025e565b8063782d6fe11161010a578063782d6fe1146108635780637af548c11461088f5780637ecebe00146108ba57806395d89b41146108e057806397d63f93146108e85761025e565b80636c945221146106905780636fc6407c146107d05780636fcfff45146107d857806370a082311461081757806373f03dff1461083d5761025e565b806325240810116101df5780634bda2e20116101a35780634bda2e201461058857806356e6772814610590578063587cde1e146106345780635c19a95c1461065a5780635c60da1b1461068057806364dd48f5146106885761025e565b806325240810146104e4578063313ce567146104ec578063395093511461050a5780633af9e6691461053657806340c10f191461055c5761025e565b8063153ab50511610226578063153ab505146103665780631624f6c61461037057806318160ddd1461049e57806320606b70146104a657806323b872dd146104ae5761025e565b806306fdde0314610263578063095ea7b3146102e057806311d3e6c41461032057806311fd8a831461033a57806312d43a511461035e575b600080fd5b61026b610a99565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a557818101518382015260200161028d565b50505050905090810190601f1680156102d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61030c600480360360408110156102f657600080fd5b506001600160a01b038135169060200135610b26565b604080519115158252519081900360200190f35b610328610b8d565b60408051918252519081900360200190f35b610342610b9d565b604080516001600160a01b039092168252519081900360200190f35b610342610bac565b61036e610bc0565b005b61036e6004803603606081101561038657600080fd5b810190602081018135600160201b8111156103a057600080fd5b8201836020820111156103b257600080fd5b803590602001918460018302840111600160201b831117156103d357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561042557600080fd5b82018360208201111561043757600080fd5b803590602001918460018302840111600160201b8311171561045857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610c109050565b610328610c9b565b610328610ca1565b61030c600480360360608110156104c457600080fd5b506001600160a01b03813581169160208101359091169060400135610cbc565b610342610e66565b6104f4610e75565b6040805160ff9092168252519081900360200190f35b61030c6004803603604081101561052057600080fd5b506001600160a01b038135169060200135610e7e565b6103286004803603602081101561054c57600080fd5b50356001600160a01b0316610f17565b61030c6004803603604081101561057257600080fd5b506001600160a01b038135169060200135610f32565b61036e610fc3565b61036e600480360360208110156105a657600080fd5b810190602081018135600160201b8111156105c057600080fd5b8201836020820111156105d257600080fd5b803590602001918460018302840111600160201b831117156105f357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061108e945050505050565b6103426004803603602081101561064a57600080fd5b50356001600160a01b03166110df565b61036e6004803603602081101561067057600080fd5b50356001600160a01b03166110fd565b610342611107565b610328611116565b61036e600480360360a08110156106a657600080fd5b810190602081018135600160201b8111156106c057600080fd5b8201836020820111156106d257600080fd5b803590602001918460018302840111600160201b831117156106f357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561074557600080fd5b82018360208201111561075757600080fd5b803590602001918460018302840111600160201b8311171561077857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff1692505060208101356001600160a01b03169060400135611124565b6103426111e8565b6107fe600480360360208110156107ee57600080fd5b50356001600160a01b03166111f7565b6040805163ffffffff9092168252519081900360200190f35b6103286004803603602081101561082d57600080fd5b50356001600160a01b031661120f565b61036e6004803603602081101561085357600080fd5b50356001600160a01b031661124d565b6103286004803603604081101561087957600080fd5b506001600160a01b0381351690602001356112cc565b610328600480360360608110156108a557600080fd5b508035906020810135906040013515156114d4565b610328600480360360208110156108d057600080fd5b50356001600160a01b031661163d565b61026b61164f565b6103286116a7565b61036e6004803603602081101561090657600080fd5b50356001600160a01b03166116ad565b61030c6004803603604081101561092c57600080fd5b506001600160a01b03813516906020013561172c565b61030c6004803603604081101561095857600080fd5b506001600160a01b03813516906020013561181b565b6103286004803603602081101561098457600080fd5b50356001600160a01b0316611951565b6103286119b4565b61036e600480360360c08110156109b257600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a001356119ba565b610328600480360360408110156109f957600080fd5b506001600160a01b0381358116916020013516611c8b565b610328611cb6565b610328611cd1565b610a5360048036036040811015610a3757600080fd5b5080356001600160a01b0316906020013563ffffffff16611cdd565b6040805163ffffffff909316835260208301919091528051918290030190f35b61036e60048036036020811015610a8957600080fd5b50356001600160a01b0316611d0a565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610b1e5780601f10610af357610100808354040283529160200191610b1e565b820191906000526020600020905b815481529060010190602001808311610b0157829003601f168201915b505050505081565b336000818152600a602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6000610b97611d89565b90505b90565b6005546001600160a01b031681565b60035461010090046001600160a01b031681565b60035461010090046001600160a01b03163314610c0e5760405162461bcd60e51b815260040180806020018281038252602b8152602001806125b2602b913960400191505060405180910390fd5b565b60085415610c5b576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b8251610c6e9060019060208601906124bc565b508151610c829060029060208501906124bc565b506003805460ff191660ff929092169190911790555050565b60075481565b60405180604361262e82396043019050604051809103902081565b6000826001600160a01b038116610cd257600080fd5b6001600160a01b038116301415610ce857600080fd5b6001600160a01b0385166000908152600a60209081526040808320338452909152902054610d1c908463ffffffff611d9e16565b6001600160a01b0386166000908152600a60209081526040808320338452909152812091909155600854610d7090610d648669d3c21bcecceda100000063ffffffff611de016565b9063ffffffff611e3916565b6001600160a01b038716600090815260096020526040902054909150610d9c908263ffffffff611d9e16565b6001600160a01b038088166000908152600960205260408082209390935590871681522054610dd1908263ffffffff611e7b16565b6001600160a01b0380871660008181526009602090815260409182902094909455805188815290519193928a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a36001600160a01b038087166000908152600c6020526040808220548884168352912054610e5a92918216911683611ed5565b50600195945050505050565b6004546001600160a01b031681565b60035460ff1681565b336000908152600a602090815260408083206001600160a01b0386168452909152812054610eb2908363ffffffff611e7b16565b336000818152600a602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b6001600160a01b031660009081526009602052604090205490565b6005546000906001600160a01b0316331480610f5857506006546001600160a01b031633145b80610f72575060035461010090046001600160a01b031633145b610fb0576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b4b73a32b960b11b604482015290519081900360640190fd5b610fba8383612023565b50600192915050565b6004546001600160a01b0316331461100d576040805162461bcd60e51b81526020600482015260086024820152672170656e64696e6760c01b604482015290519081900360640190fd5b60038054600480546001600160a01b03818116610100908102610100600160a81b0319861617958690556001600160a01b031990921690925560408051938290048316808552919094049091166020830152825190927f1f14cfc03e486d23acee577b07bc0b3b23f4888c91fcdba5e0fef5a2549d5523928290030190a150565b60035461010090046001600160a01b031633146110dc5760405162461bcd60e51b815260040180806020018281038252602b815260200180612603602b913960400191505060405180910390fd5b50565b6001600160a01b039081166000908152600c60205260409020541690565b6110dc338261217a565b6010546001600160a01b031681565b69d3c21bcecceda100000081565b60008111611169576040805162461bcd60e51b815260206004820152600d60248201526c3020696e697420737570706c7960981b604482015290519081900360640190fd5b611174858585610c10565b61119b670de0b6b3a764000069d3c21bcecceda10000005b8391900463ffffffff611de016565b600b556007819055670de0b6b3a764000060088190556111c59069d3c21bcecceda100000061118c565b6001600160a01b0390921660009081526009602052604090209190915550505050565b6006546001600160a01b031681565b600e6020526000908152604090205463ffffffff1681565b6008546001600160a01b0382166000908152600960205260408120549091610b879169d3c21bcecceda100000091610d64919063ffffffff611de016565b60035461010090046001600160a01b0316331461126957600080fd5b600480546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f6163d5b9efd962645dd649e6e48a61bcb0f9df00997a2398b80d135a9ab0c61e929181900390910190a15050565b600043821061130c5760405162461bcd60e51b81526004018080602001828103825260268152602001806125dd6026913960400191505060405180910390fd5b6001600160a01b0383166000908152600e602052604090205463ffffffff168061133a576000915050610b87565b6001600160a01b0384166000908152600d6020908152604080832063ffffffff6000198601811685529252909120541683106113a9576001600160a01b0384166000908152600d602090815260408083206000199490940163ffffffff16835292905220600101549050610b87565b6001600160a01b0384166000908152600d6020908152604080832083805290915290205463ffffffff168310156113e4576000915050610b87565b600060001982015b8163ffffffff168163ffffffff16111561149d57600282820363ffffffff1604810361141661253a565b506001600160a01b0387166000908152600d6020908152604080832063ffffffff80861685529083529281902081518083019092528054909316808252600190930154918101919091529087141561147857602001519450610b879350505050565b805163ffffffff1687111561148f57819350611496565b6001820392505b50506113ec565b506001600160a01b0385166000908152600d6020908152604080832063ffffffff9094168352929052206001015491505092915050565b6005546000906001600160a01b031633146114ee57600080fd5b8261153f57600854604080518681526020810183905280820192909252517fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c09181900360600190a150600754611636565b6008548261157d57611575670de0b6b3a7640000610d64611566828863ffffffff611d9e16565b6008549063ffffffff611de016565b6008556115c7565b600061159e670de0b6b3a7640000610d64611566828963ffffffff611e7b16565b90506115a8611d89565b8110156115b95760088190556115c5565b6115c1611d89565b6008555b505b6115ea670de0b6b3a7640000610d64600854600b54611de090919063ffffffff16565b600755600854604080518781526020810184905280820192909252517fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c09181900360600190a150506007545b9392505050565b600f6020526000908152604090205481565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610b1e5780601f10610af357610100808354040283529160200191610b1e565b600b5481565b60035461010090046001600160a01b031633146116c957600080fd5b600680546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f2ee668ca7d17a9122dc00c0bfd73b684f2f7d681f17733cc02b294f69f1b3896929181900390910190a15050565b336000908152600a602090815260408083206001600160a01b038616845290915281205480831061178057336000908152600a602090815260408083206001600160a01b03881684529091528120556117b5565b611790818463ffffffff611d9e16565b336000908152600a602090815260408083206001600160a01b03891684529091529020555b336000818152600a602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000826001600160a01b03811661183157600080fd5b6001600160a01b03811630141561184757600080fd5b60085460009061186b90610d648669d3c21bcecceda100000063ffffffff611de016565b3360009081526009602052604090205490915061188e908263ffffffff611d9e16565b33600090815260096020526040808220929092556001600160a01b038716815220546118c0908263ffffffff611e7b16565b6001600160a01b0386166000818152600960209081526040918290209390935580518781529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3336000908152600c6020526040808220546001600160a01b0388811684529190922054611946928216911683611ed5565b506001949350505050565b6001600160a01b0381166000908152600e602052604081205463ffffffff168061197c576000611636565b6001600160a01b0383166000908152600d6020908152604080832063ffffffff60001986011684529091529020600101549392505050565b60085481565b6000604051808061262e604391396043019050604051809103902060016040518082805460018160011615610100020316600290048015611a325780601f10611a10576101008083540402835291820191611a32565b820191906000526020600020905b815481529060010190602001808311611a1e575b50509150506040518091039020611a476121fa565b3060405160200180858152602001848152602001838152602001826001600160a01b03166001600160a01b03168152602001945050505050604051602081830303815290604052805190602001209050600060405180806126ea603a91396040805191829003603a0182206020808401919091526001600160a01b038c1683830152606083018b905260808084018b90528251808503909101815260a08401835280519082012061190160f01b60c085015260c2840187905260e2808501829052835180860390910181526101028501808552815191840191909120600091829052610122860180865281905260ff8c1661014287015261016286018b905261018286018a9052935191965092945091926001926101a28083019392601f198301929081900390910190855afa158015611b85573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611bd75760405162461bcd60e51b815260040180806020018281038252602581526020018061258d6025913960400191505060405180910390fd5b6001600160a01b0381166000908152600f602052604090208054600181019091558914611c355760405162461bcd60e51b815260040180806020018281038252602181526020018061256c6021913960400191505060405180910390fd5b87421115611c745760405162461bcd60e51b81526004018080602001828103825260258152602001806126926025913960400191505060405180910390fd5b611c7e818b61217a565b505050505b505050505050565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b60405180603a6126ea8239603a019050604051809103902081565b670de0b6b3a764000081565b600d6020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b60035461010090046001600160a01b03163314611d2657600080fd5b600580546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f51f448520e2183de499e224808a409ee01a1f380edb2e8497572320c15030545929181900390910190a15050565b6000600b5460001981611d9857fe5b04905090565b600061163683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121fe565b600082611def57506000610b87565b82820282848281611dfc57fe5b04146116365760405162461bcd60e51b81526004018080602001828103825260218152602001806126716021913960400191505060405180910390fd5b600061163683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612295565b600082820183811015611636576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b031614158015611ef75750600081115b1561201e576001600160a01b03831615611f8f576001600160a01b0383166000908152600e602052604081205463ffffffff169081611f37576000611f69565b6001600160a01b0385166000908152600d6020908152604080832063ffffffff60001987011684529091529020600101545b90506000611f7d828563ffffffff611d9e16565b9050611f8b868484846122fa565b5050505b6001600160a01b0382161561201e576001600160a01b0382166000908152600e602052604081205463ffffffff169081611fca576000611ffc565b6001600160a01b0384166000908152600d6020908152604080832063ffffffff60001987011684529091529020600101545b90506000612010828563ffffffff611e7b16565b9050611c83858484846122fa565b505050565b600754612036908263ffffffff611e7b16565b60075560085460009061205d90610d648469d3c21bcecceda100000063ffffffff611de016565b600b54909150612073908263ffffffff611e7b16565b600b5561207e611d89565b60085411156120d4576040805162461bcd60e51b815260206004820152601a60248201527f6d6178207363616c696e6720666163746f7220746f6f206c6f77000000000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600960205260409020546120fd908263ffffffff611e7b16565b6001600160a01b03808516600090815260096020908152604080832094909455600c90529182205461213192911683611ed5565b604080516001600160a01b03851681526020810184905281517f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885929181900390910190a1505050565b6001600160a01b038083166000818152600c6020818152604080842080546009845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46121f4828483611ed5565b50505050565b4690565b6000818484111561228d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561225257818101518382015260200161223a565b50505050905090810190601f16801561227f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836122e45760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561225257818101518382015260200161223a565b5060008385816122f057fe5b0495945050505050565b600061231e436040518060600160405280603381526020016126b76033913961245f565b905060008463ffffffff1611801561236757506001600160a01b0385166000908152600d6020908152604080832063ffffffff6000198901811685529252909120548282169116145b156123a4576001600160a01b0385166000908152600d6020908152604080832063ffffffff60001989011684529091529020600101829055612415565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152600d84528681208b8616825284528681209551865490861663ffffffff199182161787559251600196870155908152600e9092529390208054928801909116919092161790555b604080518481526020810184905281516001600160a01b038816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b600081600160201b84106124b45760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561225257818101518382015260200161223a565b509192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106124fd57805160ff191683800117855561252a565b8280016001018555821561252a579182015b8281111561252a57825182559160200191906001019061250f565b50612536929150612551565b5090565b604080518082019091526000808252602082015290565b610b9a91905b80821115612536576000815560010161255756fe59414d3a3a64656c656761746542795369673a20696e76616c6964206e6f6e636559414d3a3a64656c656761746542795369673a20696e76616c6964207369676e61747572656f6e6c792074686520676f76206d61792063616c6c205f72657369676e496d706c656d656e746174696f6e59414d3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65646f6e6c792074686520676f76206d61792063616c6c205f6265636f6d65496d706c656d656e746174696f6e454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7759414d3a3a64656c656761746542795369673a207369676e6174757265206578706972656459414d3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747344656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e743235362065787069727929a265627a7a723158202092aac85ba2ee0b423852bfb10043b265de6f8133693764d689f1e6e3e7329464736f6c63430005110032
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061025e5760003560e01c80636c9452211161014657806398dca210116100c3578063c3cda52011610087578063c3cda5201461099c578063dd62ed3e146109e3578063e7a324dc14610a11578063ec342ad014610a19578063f1127ed814610a21578063fa8f345514610a735761025e565b806398dca210146108f0578063a457c2d714610916578063a9059cbb14610942578063b4b5ea571461096e578063b6fa8576146109945761025e565b8063782d6fe11161010a578063782d6fe1146108635780637af548c11461088f5780637ecebe00146108ba57806395d89b41146108e057806397d63f93146108e85761025e565b80636c945221146106905780636fc6407c146107d05780636fcfff45146107d857806370a082311461081757806373f03dff1461083d5761025e565b806325240810116101df5780634bda2e20116101a35780634bda2e201461058857806356e6772814610590578063587cde1e146106345780635c19a95c1461065a5780635c60da1b1461068057806364dd48f5146106885761025e565b806325240810146104e4578063313ce567146104ec578063395093511461050a5780633af9e6691461053657806340c10f191461055c5761025e565b8063153ab50511610226578063153ab505146103665780631624f6c61461037057806318160ddd1461049e57806320606b70146104a657806323b872dd146104ae5761025e565b806306fdde0314610263578063095ea7b3146102e057806311d3e6c41461032057806311fd8a831461033a57806312d43a511461035e575b600080fd5b61026b610a99565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a557818101518382015260200161028d565b50505050905090810190601f1680156102d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61030c600480360360408110156102f657600080fd5b506001600160a01b038135169060200135610b26565b604080519115158252519081900360200190f35b610328610b8d565b60408051918252519081900360200190f35b610342610b9d565b604080516001600160a01b039092168252519081900360200190f35b610342610bac565b61036e610bc0565b005b61036e6004803603606081101561038657600080fd5b810190602081018135600160201b8111156103a057600080fd5b8201836020820111156103b257600080fd5b803590602001918460018302840111600160201b831117156103d357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561042557600080fd5b82018360208201111561043757600080fd5b803590602001918460018302840111600160201b8311171561045857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610c109050565b610328610c9b565b610328610ca1565b61030c600480360360608110156104c457600080fd5b506001600160a01b03813581169160208101359091169060400135610cbc565b610342610e66565b6104f4610e75565b6040805160ff9092168252519081900360200190f35b61030c6004803603604081101561052057600080fd5b506001600160a01b038135169060200135610e7e565b6103286004803603602081101561054c57600080fd5b50356001600160a01b0316610f17565b61030c6004803603604081101561057257600080fd5b506001600160a01b038135169060200135610f32565b61036e610fc3565b61036e600480360360208110156105a657600080fd5b810190602081018135600160201b8111156105c057600080fd5b8201836020820111156105d257600080fd5b803590602001918460018302840111600160201b831117156105f357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061108e945050505050565b6103426004803603602081101561064a57600080fd5b50356001600160a01b03166110df565b61036e6004803603602081101561067057600080fd5b50356001600160a01b03166110fd565b610342611107565b610328611116565b61036e600480360360a08110156106a657600080fd5b810190602081018135600160201b8111156106c057600080fd5b8201836020820111156106d257600080fd5b803590602001918460018302840111600160201b831117156106f357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561074557600080fd5b82018360208201111561075757600080fd5b803590602001918460018302840111600160201b8311171561077857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050813560ff1692505060208101356001600160a01b03169060400135611124565b6103426111e8565b6107fe600480360360208110156107ee57600080fd5b50356001600160a01b03166111f7565b6040805163ffffffff9092168252519081900360200190f35b6103286004803603602081101561082d57600080fd5b50356001600160a01b031661120f565b61036e6004803603602081101561085357600080fd5b50356001600160a01b031661124d565b6103286004803603604081101561087957600080fd5b506001600160a01b0381351690602001356112cc565b610328600480360360608110156108a557600080fd5b508035906020810135906040013515156114d4565b610328600480360360208110156108d057600080fd5b50356001600160a01b031661163d565b61026b61164f565b6103286116a7565b61036e6004803603602081101561090657600080fd5b50356001600160a01b03166116ad565b61030c6004803603604081101561092c57600080fd5b506001600160a01b03813516906020013561172c565b61030c6004803603604081101561095857600080fd5b506001600160a01b03813516906020013561181b565b6103286004803603602081101561098457600080fd5b50356001600160a01b0316611951565b6103286119b4565b61036e600480360360c08110156109b257600080fd5b506001600160a01b038135169060208101359060408101359060ff6060820135169060808101359060a001356119ba565b610328600480360360408110156109f957600080fd5b506001600160a01b0381358116916020013516611c8b565b610328611cb6565b610328611cd1565b610a5360048036036040811015610a3757600080fd5b5080356001600160a01b0316906020013563ffffffff16611cdd565b6040805163ffffffff909316835260208301919091528051918290030190f35b61036e60048036036020811015610a8957600080fd5b50356001600160a01b0316611d0a565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610b1e5780601f10610af357610100808354040283529160200191610b1e565b820191906000526020600020905b815481529060010190602001808311610b0157829003601f168201915b505050505081565b336000818152600a602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b6000610b97611d89565b90505b90565b6005546001600160a01b031681565b60035461010090046001600160a01b031681565b60035461010090046001600160a01b03163314610c0e5760405162461bcd60e51b815260040180806020018281038252602b8152602001806125b2602b913960400191505060405180910390fd5b565b60085415610c5b576040805162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015290519081900360640190fd5b8251610c6e9060019060208601906124bc565b508151610c829060029060208501906124bc565b506003805460ff191660ff929092169190911790555050565b60075481565b60405180604361262e82396043019050604051809103902081565b6000826001600160a01b038116610cd257600080fd5b6001600160a01b038116301415610ce857600080fd5b6001600160a01b0385166000908152600a60209081526040808320338452909152902054610d1c908463ffffffff611d9e16565b6001600160a01b0386166000908152600a60209081526040808320338452909152812091909155600854610d7090610d648669d3c21bcecceda100000063ffffffff611de016565b9063ffffffff611e3916565b6001600160a01b038716600090815260096020526040902054909150610d9c908263ffffffff611d9e16565b6001600160a01b038088166000908152600960205260408082209390935590871681522054610dd1908263ffffffff611e7b16565b6001600160a01b0380871660008181526009602090815260409182902094909455805188815290519193928a16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a36001600160a01b038087166000908152600c6020526040808220548884168352912054610e5a92918216911683611ed5565b50600195945050505050565b6004546001600160a01b031681565b60035460ff1681565b336000908152600a602090815260408083206001600160a01b0386168452909152812054610eb2908363ffffffff611e7b16565b336000818152600a602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b6001600160a01b031660009081526009602052604090205490565b6005546000906001600160a01b0316331480610f5857506006546001600160a01b031633145b80610f72575060035461010090046001600160a01b031633145b610fb0576040805162461bcd60e51b815260206004820152600a6024820152693737ba1036b4b73a32b960b11b604482015290519081900360640190fd5b610fba8383612023565b50600192915050565b6004546001600160a01b0316331461100d576040805162461bcd60e51b81526020600482015260086024820152672170656e64696e6760c01b604482015290519081900360640190fd5b60038054600480546001600160a01b03818116610100908102610100600160a81b0319861617958690556001600160a01b031990921690925560408051938290048316808552919094049091166020830152825190927f1f14cfc03e486d23acee577b07bc0b3b23f4888c91fcdba5e0fef5a2549d5523928290030190a150565b60035461010090046001600160a01b031633146110dc5760405162461bcd60e51b815260040180806020018281038252602b815260200180612603602b913960400191505060405180910390fd5b50565b6001600160a01b039081166000908152600c60205260409020541690565b6110dc338261217a565b6010546001600160a01b031681565b69d3c21bcecceda100000081565b60008111611169576040805162461bcd60e51b815260206004820152600d60248201526c3020696e697420737570706c7960981b604482015290519081900360640190fd5b611174858585610c10565b61119b670de0b6b3a764000069d3c21bcecceda10000005b8391900463ffffffff611de016565b600b556007819055670de0b6b3a764000060088190556111c59069d3c21bcecceda100000061118c565b6001600160a01b0390921660009081526009602052604090209190915550505050565b6006546001600160a01b031681565b600e6020526000908152604090205463ffffffff1681565b6008546001600160a01b0382166000908152600960205260408120549091610b879169d3c21bcecceda100000091610d64919063ffffffff611de016565b60035461010090046001600160a01b0316331461126957600080fd5b600480546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f6163d5b9efd962645dd649e6e48a61bcb0f9df00997a2398b80d135a9ab0c61e929181900390910190a15050565b600043821061130c5760405162461bcd60e51b81526004018080602001828103825260268152602001806125dd6026913960400191505060405180910390fd5b6001600160a01b0383166000908152600e602052604090205463ffffffff168061133a576000915050610b87565b6001600160a01b0384166000908152600d6020908152604080832063ffffffff6000198601811685529252909120541683106113a9576001600160a01b0384166000908152600d602090815260408083206000199490940163ffffffff16835292905220600101549050610b87565b6001600160a01b0384166000908152600d6020908152604080832083805290915290205463ffffffff168310156113e4576000915050610b87565b600060001982015b8163ffffffff168163ffffffff16111561149d57600282820363ffffffff1604810361141661253a565b506001600160a01b0387166000908152600d6020908152604080832063ffffffff80861685529083529281902081518083019092528054909316808252600190930154918101919091529087141561147857602001519450610b879350505050565b805163ffffffff1687111561148f57819350611496565b6001820392505b50506113ec565b506001600160a01b0385166000908152600d6020908152604080832063ffffffff9094168352929052206001015491505092915050565b6005546000906001600160a01b031633146114ee57600080fd5b8261153f57600854604080518681526020810183905280820192909252517fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c09181900360600190a150600754611636565b6008548261157d57611575670de0b6b3a7640000610d64611566828863ffffffff611d9e16565b6008549063ffffffff611de016565b6008556115c7565b600061159e670de0b6b3a7640000610d64611566828963ffffffff611e7b16565b90506115a8611d89565b8110156115b95760088190556115c5565b6115c1611d89565b6008555b505b6115ea670de0b6b3a7640000610d64600854600b54611de090919063ffffffff16565b600755600854604080518781526020810184905280820192909252517fc6642d24d84e7f3d36ca39f5cce10e75639d9b158d5193aa350e2f900653e4c09181900360600190a150506007545b9392505050565b600f6020526000908152604090205481565b6002805460408051602060018416156101000260001901909316849004601f81018490048402820184019092528181529291830182828015610b1e5780601f10610af357610100808354040283529160200191610b1e565b600b5481565b60035461010090046001600160a01b031633146116c957600080fd5b600680546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f2ee668ca7d17a9122dc00c0bfd73b684f2f7d681f17733cc02b294f69f1b3896929181900390910190a15050565b336000908152600a602090815260408083206001600160a01b038616845290915281205480831061178057336000908152600a602090815260408083206001600160a01b03881684529091528120556117b5565b611790818463ffffffff611d9e16565b336000908152600a602090815260408083206001600160a01b03891684529091529020555b336000818152600a602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6000826001600160a01b03811661183157600080fd5b6001600160a01b03811630141561184757600080fd5b60085460009061186b90610d648669d3c21bcecceda100000063ffffffff611de016565b3360009081526009602052604090205490915061188e908263ffffffff611d9e16565b33600090815260096020526040808220929092556001600160a01b038716815220546118c0908263ffffffff611e7b16565b6001600160a01b0386166000818152600960209081526040918290209390935580518781529051919233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3336000908152600c6020526040808220546001600160a01b0388811684529190922054611946928216911683611ed5565b506001949350505050565b6001600160a01b0381166000908152600e602052604081205463ffffffff168061197c576000611636565b6001600160a01b0383166000908152600d6020908152604080832063ffffffff60001986011684529091529020600101549392505050565b60085481565b6000604051808061262e604391396043019050604051809103902060016040518082805460018160011615610100020316600290048015611a325780601f10611a10576101008083540402835291820191611a32565b820191906000526020600020905b815481529060010190602001808311611a1e575b50509150506040518091039020611a476121fa565b3060405160200180858152602001848152602001838152602001826001600160a01b03166001600160a01b03168152602001945050505050604051602081830303815290604052805190602001209050600060405180806126ea603a91396040805191829003603a0182206020808401919091526001600160a01b038c1683830152606083018b905260808084018b90528251808503909101815260a08401835280519082012061190160f01b60c085015260c2840187905260e2808501829052835180860390910181526101028501808552815191840191909120600091829052610122860180865281905260ff8c1661014287015261016286018b905261018286018a9052935191965092945091926001926101a28083019392601f198301929081900390910190855afa158015611b85573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611bd75760405162461bcd60e51b815260040180806020018281038252602581526020018061258d6025913960400191505060405180910390fd5b6001600160a01b0381166000908152600f602052604090208054600181019091558914611c355760405162461bcd60e51b815260040180806020018281038252602181526020018061256c6021913960400191505060405180910390fd5b87421115611c745760405162461bcd60e51b81526004018080602001828103825260258152602001806126926025913960400191505060405180910390fd5b611c7e818b61217a565b505050505b505050505050565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b60405180603a6126ea8239603a019050604051809103902081565b670de0b6b3a764000081565b600d6020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b60035461010090046001600160a01b03163314611d2657600080fd5b600580546001600160a01b038381166001600160a01b0319831681179093556040805191909216808252602082019390935281517f51f448520e2183de499e224808a409ee01a1f380edb2e8497572320c15030545929181900390910190a15050565b6000600b5460001981611d9857fe5b04905090565b600061163683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506121fe565b600082611def57506000610b87565b82820282848281611dfc57fe5b04146116365760405162461bcd60e51b81526004018080602001828103825260218152602001806126716021913960400191505060405180910390fd5b600061163683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612295565b600082820183811015611636576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b816001600160a01b0316836001600160a01b031614158015611ef75750600081115b1561201e576001600160a01b03831615611f8f576001600160a01b0383166000908152600e602052604081205463ffffffff169081611f37576000611f69565b6001600160a01b0385166000908152600d6020908152604080832063ffffffff60001987011684529091529020600101545b90506000611f7d828563ffffffff611d9e16565b9050611f8b868484846122fa565b5050505b6001600160a01b0382161561201e576001600160a01b0382166000908152600e602052604081205463ffffffff169081611fca576000611ffc565b6001600160a01b0384166000908152600d6020908152604080832063ffffffff60001987011684529091529020600101545b90506000612010828563ffffffff611e7b16565b9050611c83858484846122fa565b505050565b600754612036908263ffffffff611e7b16565b60075560085460009061205d90610d648469d3c21bcecceda100000063ffffffff611de016565b600b54909150612073908263ffffffff611e7b16565b600b5561207e611d89565b60085411156120d4576040805162461bcd60e51b815260206004820152601a60248201527f6d6178207363616c696e6720666163746f7220746f6f206c6f77000000000000604482015290519081900360640190fd5b6001600160a01b0383166000908152600960205260409020546120fd908263ffffffff611e7b16565b6001600160a01b03808516600090815260096020908152604080832094909455600c90529182205461213192911683611ed5565b604080516001600160a01b03851681526020810184905281517f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885929181900390910190a1505050565b6001600160a01b038083166000818152600c6020818152604080842080546009845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46121f4828483611ed5565b50505050565b4690565b6000818484111561228d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561225257818101518382015260200161223a565b50505050905090810190601f16801561227f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836122e45760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561225257818101518382015260200161223a565b5060008385816122f057fe5b0495945050505050565b600061231e436040518060600160405280603381526020016126b76033913961245f565b905060008463ffffffff1611801561236757506001600160a01b0385166000908152600d6020908152604080832063ffffffff6000198901811685529252909120548282169116145b156123a4576001600160a01b0385166000908152600d6020908152604080832063ffffffff60001989011684529091529020600101829055612415565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152600d84528681208b8616825284528681209551865490861663ffffffff199182161787559251600196870155908152600e9092529390208054928801909116919092161790555b604080518481526020810184905281516001600160a01b038816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b600081600160201b84106124b45760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561225257818101518382015260200161223a565b509192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106124fd57805160ff191683800117855561252a565b8280016001018555821561252a579182015b8281111561252a57825182559160200191906001019061250f565b50612536929150612551565b5090565b604080518082019091526000808252602082015290565b610b9a91905b80821115612536576000815560010161255756fe59414d3a3a64656c656761746542795369673a20696e76616c6964206e6f6e636559414d3a3a64656c656761746542795369673a20696e76616c6964207369676e61747572656f6e6c792074686520676f76206d61792063616c6c205f72657369676e496d706c656d656e746174696f6e59414d3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65646f6e6c792074686520676f76206d61792063616c6c205f6265636f6d65496d706c656d656e746174696f6e454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7759414d3a3a64656c656761746542795369673a207369676e6174757265206578706972656459414d3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747344656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e743235362065787069727929a265627a7a723158202092aac85ba2ee0b423852bfb10043b265de6f8133693764d689f1e6e3e7329464736f6c63430005110032
Deployed Bytecode Sourcemap
30293:1050:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30293:1050:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5084:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5084:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24118:235;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24118:235:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;18819:137;;;:::i;:::-;;;;;;;;;;;;;;;;5572:22;;;:::i;:::-;;;;-1:-1:-1;;;;;5572:22:0;;;;;;;;;;;;;;5371:18;;;:::i;31065:275::-;;;:::i;:::-;;18447:290;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18447:290:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;18447:290:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18447:290:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18447:290:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18447:290:0;;;;;;;;-1:-1:-1;18447:290:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;18447:290:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18447:290:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18447:290:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;18447:290:0;;-1:-1:-1;;;18447:290:0;;;;;-1:-1:-1;18447:290:0;;-1:-1:-1;18447:290:0:i;5760:26::-;;;:::i;6988:122::-;;;:::i;21705:670::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21705:670:0;;;;;;;;;;;;;;;;;:::i;5469:25::-;;;:::i;5280:21::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24726:345;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24726:345:0;;;;;;;;:::i;22852:141::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22852:141:0;-1:-1:-1;;;;;22852:141:0;;:::i;19459:167::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;19459:167:0;;;;;;;;:::i;27072:236::-;;;:::i;30610:345::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30610:345:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;30610:345:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30610:345:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;30610:345:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30610:345:0;;-1:-1:-1;30610:345:0;;-1:-1:-1;;;;;30610:345:0:i;11315:149::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11315:149:0;-1:-1:-1;;;;;11315:149:0;;:::i;11608:104::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11608:104:0;-1:-1:-1;;;;;11608:104:0;;:::i;29735:29::-;;;:::i;5877:49::-;;;:::i;28963:653::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;28963:653:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;28963:653:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28963:653:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;28963:653:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28963:653:0;;;;;;;;-1:-1:-1;28963:653:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;28963:653:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28963:653:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;28963:653:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28963:653:0;;-1:-1:-1;;;28963:653:0;;;;;-1:-1:-1;;28963:653:0;;;;-1:-1:-1;;;;;28963:653:0;;;;;;:::i;5669:27::-;;;:::i;6866:49::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6866:49:0;-1:-1:-1;;;;;6866:49:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;22493:176;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22493:176:0;-1:-1:-1;;;;;22493:176:0;;:::i;26766:230::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26766:230:0;-1:-1:-1;;;;;26766:230:0;;:::i;14206:1252::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14206:1252:0;;;;;;;;:::i;27696:1000::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27696:1000:0;;;;;;;;;;;;;;:::i;7402:39::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7402:39:0;-1:-1:-1;;;;;7402:39:0;;:::i;5180:20::-;;;:::i;6308:25::-;;;:::i;26374:248::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26374:248:0;-1:-1:-1;;;;;26374:248:0;;:::i;25333:514::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25333:514:0;;;;;;;;:::i;20601:847::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20601:847:0;;;;;;;;:::i;13520:255::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13520:255:0;-1:-1:-1;;;;;13520:255:0;;:::i;6123:32::-;;;:::i;12146:1173::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;12146:1173:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23300:176::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;23300:176:0;;;;;;;;;;:::i;7204:117::-;;;:::i;5995:37::-;;;:::i;6727:70::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6727:70:0;;-1:-1:-1;;;;;6727:70:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;26023:203;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26023:203:0;-1:-1:-1;;;;;26023:203:0;;:::i;5084:18::-;;;;;;;;;;;;;;;-1:-1:-1;;5084:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24118:235::-;24243:10;24203:4;24225:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;24225:38:0;;;;;;;;;;;:46;;;24287:36;;;;;;;24203:4;;24225:38;;24243:10;;24287:36;;;;;;;;-1:-1:-1;24341:4:0;24118:235;;;;;:::o;18819:137::-;18897:7;18929:19;:17;:19::i;:::-;18922:26;;18819:137;;:::o;5572:22::-;;;-1:-1:-1;;;;;5572:22:0;;:::o;5371:18::-;;;;;;-1:-1:-1;;;;;5371:18:0;;:::o;31065:275::-;31281:3;;;;;-1:-1:-1;;;;;31281:3:0;31267:10;:17;31259:73;;;;-1:-1:-1;;;31259:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31065:275::o;18447:290::-;18602:17;;:22;18594:54;;;;;-1:-1:-1;;;18594:54:0;;;;;;;;;;;;-1:-1:-1;;;18594:54:0;;;;;;;;;;;;;;;18659:12;;;;:4;;:12;;;;;:::i;:::-;-1:-1:-1;18682:16:0;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;18709:8:0;:20;;-1:-1:-1;;18709:20:0;;;;;;;;;;;;-1:-1:-1;;18447:290:0:o;5760:26::-;;;;:::o;6988:122::-;7030:80;;;;;;;;;;;;;;;;;;6988:122;:::o;21705:670::-;21832:4;21810:2;-1:-1:-1;;;;;18361:18:0;;18353:27;;;;;;-1:-1:-1;;;;;18399:19:0;;18413:4;18399:19;;18391:28;;;;;;-1:-1:-1;;;;;21923:23:0;;;;;;:17;:23;;;;;;;;21947:10;21923:35;;;;;;;;:46;;21963:5;21923:46;:39;:46;:::i;:::-;-1:-1:-1;;;;;21885:23:0;;;;;;:17;:23;;;;;;;;21909:10;21885:35;;;;;;;:84;;;;22063:17;;22031:50;;:27;:5;5920:6;22031:27;:9;:27;:::i;:::-;:31;:50;:31;:50;:::i;:::-;-1:-1:-1;;;;;22141:18:0;;;;;;:12;:18;;;;;;22012:69;;-1:-1:-1;22141:32:0;;22012:69;22141:32;:22;:32;:::i;:::-;-1:-1:-1;;;;;22120:18:0;;;;;;;:12;:18;;;;;;:53;;;;22203:16;;;;;;;:30;;22224:8;22203:30;:20;:30;:::i;:::-;-1:-1:-1;;;;;22184:16:0;;;;;;;:12;:16;;;;;;;;;:49;;;;22249:25;;;;;;;22184:16;;22249:25;;;;;;;;;;;;;-1:-1:-1;;;;;22302:16:0;;;;;;;:10;:16;;;;;;;22320:14;;;;;;;;22287:58;;22302:16;;;;22320:14;22336:8;22287:14;:58::i;:::-;-1:-1:-1;22363:4:0;;21705:670;-1:-1:-1;;;;;21705:670:0:o;5469:25::-;;;-1:-1:-1;;;;;5469:25:0;;:::o;5280:21::-;;;;;;:::o;24726:345::-;24920:10;24826:4;24902:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;24902:38:0;;;;;;;;;;:54;;24945:10;24902:54;:42;:54;:::i;:::-;24866:10;24848:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;24848:38:0;;;;;;;;;;;;:108;;;24972:69;;;;;;24848:38;;24972:69;;;;;;;;;;;-1:-1:-1;25059:4:0;24726:345;;;;:::o;22852:141::-;-1:-1:-1;;;;;22968:17:0;22938:7;22968:17;;;:12;:17;;;;;;;22852:141::o;19459:167::-;18205:7;;19557:4;;-1:-1:-1;;;;;18205:7:0;18191:10;:21;;:51;;-1:-1:-1;18230:12:0;;-1:-1:-1;;;;;18230:12:0;18216:10;:26;18191:51;:72;;;-1:-1:-1;18260:3:0;;;;;-1:-1:-1;;;;;18260:3:0;18246:10;:17;18191:72;18183:95;;;;;-1:-1:-1;;;18183:95:0;;;;;;;;;;;;-1:-1:-1;;;18183:95:0;;;;;;;;;;;;;;;19579:17;19585:2;19589:6;19579:5;:17::i;:::-;-1:-1:-1;19614:4:0;19459:167;;;;:::o;27072:236::-;27150:10;;-1:-1:-1;;;;;27150:10:0;27136;:24;27128:45;;;;;-1:-1:-1;;;27128:45:0;;;;;;;;;;;;-1:-1:-1;;;27128:45:0;;;;;;;;;;;;;;;27201:3;;;27221:10;;;-1:-1:-1;;;;;27221:10:0;;;27201:3;27215:16;;;-1:-1:-1;;;;;;27215:16:0;;;;;;;-1:-1:-1;;;;;;27242:23:0;;;;;;27281:19;;;27201:3;;;;;;27281:19;;;27296:3;;;;;;;27281:19;;;;;;27201:3;;27281:19;;;;;;;;27072:236;:::o;30610:345::-;30896:3;;;;;-1:-1:-1;;;;;30896:3:0;30882:10;:17;30874:73;;;;-1:-1:-1;;;30874:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30610:345;:::o;11315:149::-;-1:-1:-1;;;;;11435:21:0;;;11403:7;11435:21;;;:10;:21;;;;;;;;11315:149::o;11608:104::-;11672:32;11682:10;11694:9;11672;:32::i;29735:29::-;;;-1:-1:-1;;;;;29735:29:0;;:::o;5877:49::-;5920:6;5877:49;:::o;28963:653::-;29194:1;29180:11;:15;29172:41;;;;;-1:-1:-1;;;29172:41:0;;;;;;;;;;;;-1:-1:-1;;;29172:41:0;;;;;;;;;;;;;;;29226:43;29243:5;29250:7;29259:9;29226:16;:43::i;:::-;29295:31;6026:6;29311;:14;29295:11;;29311:14;;29295:31;:15;:31;:::i;:::-;29282:10;:44;29337:11;:25;;;6026:6;29373:17;:24;;;29438:32;;29454:6;:15;;29438:32;-1:-1:-1;;;;;29408:27:0;;;;;;;:12;:27;;;;;:62;;;;-1:-1:-1;;;;28963:653:0:o;5669:27::-;;;-1:-1:-1;;;;;5669:27:0;;:::o;6866:49::-;;;;;;;;;;;;;;;:::o;22493:176::-;22621:17;;-1:-1:-1;;;;;22599:17:0;;22569:7;22599:17;;;:12;:17;;;;;;22569:7;;22599:62;;5920:6;;22599:40;;:17;:40;:21;:40;:::i;26766:230::-;18026:3;;;;;-1:-1:-1;;;;;18026:3:0;18012:10;:17;18004:26;;;;;;26886:10;;;-1:-1:-1;;;;;26907:24:0;;;-1:-1:-1;;;;;;26907:24:0;;;;;;;26947:41;;;26886:10;;;;26947:41;;;;;;;;;;;;;;;;;;;;;;;18041:1;26766:230;:::o;14206:1252::-;14314:7;14361:12;14347:11;:26;14339:77;;;;-1:-1:-1;;;14339:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14451:23:0;;14429:19;14451:23;;;:14;:23;;;;;;;;14489:17;14485:58;;14530:1;14523:8;;;;;14485:58;-1:-1:-1;;;;;14603:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;14624:16:0;;14603:38;;;;;;;;;:48;;:63;-1:-1:-1;14599:147:0;;-1:-1:-1;;;;;14690:20:0;;;;;;:11;:20;;;;;;;;-1:-1:-1;;14711:16:0;;;;14690:38;;;;;;;;14726:1;14690:44;;;-1:-1:-1;14683:51:0;;14599:147;-1:-1:-1;;;;;14807:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;14803:88:0;;;14878:1;14871:8;;;;;14803:88;14903:12;-1:-1:-1;;14945:16:0;;14972:428;14987:5;14979:13;;:5;:13;;;14972:428;;;15051:1;15034:13;;;15033:19;;;15025:27;;15094:20;;:::i;:::-;-1:-1:-1;;;;;;15117:20:0;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;15094:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15164:27;;15160:229;;;15219:8;;;;-1:-1:-1;15212:15:0;;-1:-1:-1;;;;15212:15:0;15160:229;15253:12;;:26;;;-1:-1:-1;15249:140:0;;;15308:6;15300:14;;15249:140;;;15372:1;15363:6;:10;15355:18;;15249:140;14972:428;;;;;-1:-1:-1;;;;;;15417:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;-1:-1:-1;;14206:1252:0;;;;:::o;27696:1000::-;18114:7;;27853;;-1:-1:-1;;;;;18114:7:0;18100:10;:21;18092:30;;;;;;27882:15;27878:133;;27931:17;;27917:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27988:11:0;;27981:18;;27878:133;28055:17;;28090:8;28085:434;;28134:53;6026:6;28134:43;28156:20;6026:6;28165:10;28156:20;:8;:20;:::i;:::-;28134:17;;;:43;:21;:43;:::i;:53::-;28114:17;:73;28085:434;;;28220:24;28247:53;6026:6;28247:43;28269:20;6026:6;28278:10;28269:20;:8;:20;:::i;28247:53::-;28220:80;;28338:19;:17;:19::i;:::-;28319:16;:38;28315:193;;;28378:17;:36;;;28315:193;;;28473:19;:17;:19::i;:::-;28453:17;:39;28315:193;28085:434;;28545:43;6026:6;28545:33;28560:17;;28545:10;;:14;;:33;;;;:::i;:43::-;28531:11;:57;28641:17;;28604:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28677:11:0;;18133:1;27696:1000;;;;;:::o;7402:39::-;;;;;;;;;;;;;:::o;5180:20::-;;;;;;;;;;;;;;-1:-1:-1;;5180:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6308:25;;;;:::o;26374:248::-;18026:3;;;;;-1:-1:-1;;;;;18026:3:0;18012:10;:17;18004:26;;;;;;26500:12;;;-1:-1:-1;;;;;26523:28:0;;;-1:-1:-1;;;;;;26523:28:0;;;;;;;26567:47;;;26500:12;;;;26567:47;;;;;;;;;;;;;;;;;;;;;;;18041:1;26374:248;:::o;25333:514::-;25497:10;25438:4;25479:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;25479:38:0;;;;;;;;;;25532:27;;;25528:205;;25594:10;25617:1;25576:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;25576:38:0;;;;;;;;;:42;25528:205;;;25692:29;:8;25705:15;25692:29;:12;:29;:::i;:::-;25669:10;25651:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;25651:38:0;;;;;;;;;:70;25528:205;25757:10;25778:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;25748:69:0;;25778:38;;;;;;;;;;;25748:69;;;;;;;;;25757:10;25748:69;;;;;;;;;;;-1:-1:-1;25835:4:0;;25333:514;-1:-1:-1;;;25333:514:0:o;20601:847::-;20710:4;20688:2;-1:-1:-1;;;;;18361:18:0;;18353:27;;;;;;-1:-1:-1;;;;;18399:19:0;;18413:4;18399:19;;18391:28;;;;;;21058:17;;21007:16;;21026:50;;:27;:5;5920:6;21026:27;:9;:27;:::i;:50::-;21168:10;21155:24;;;;:12;:24;;;;;;21007:69;;-1:-1:-1;21155:38:0;;21007:69;21155:38;:28;:38;:::i;:::-;21141:10;21128:24;;;;:12;:24;;;;;;:65;;;;-1:-1:-1;;;;;21264:16:0;;;;;;:30;;21285:8;21264:30;:20;:30;:::i;:::-;-1:-1:-1;;;;;21245:16:0;;;;;;:12;:16;;;;;;;;;:49;;;;21310:31;;;;;;;21245:16;;21319:10;;21310:31;;;;;;;;;;21380:10;21369:22;;;;:10;:22;;;;;;;-1:-1:-1;;;;;21393:14:0;;;;;;;;;;21354:64;;21369:22;;;21393:14;21409:8;21354:14;:64::i;:::-;-1:-1:-1;21436:4:0;;20601:847;-1:-1:-1;;;;20601:847:0:o;13520:255::-;-1:-1:-1;;;;;13659:23:0;;13612:7;13659:23;;;:14;:23;;;;;;;;13700:16;:67;;13766:1;13700:67;;;-1:-1:-1;;;;;13719:20:0;;;;;;:11;:20;;;;;;;;:38;-1:-1:-1;;13740:16:0;;13719:38;;;;;;;;13755:1;13719:44;;13693:74;13520:255;-1:-1:-1;;;13520:255:0:o;6123:32::-;;;;:::o;12146:1173::-;12339:23;7030:80;;;;;;;;;;;;;;;;;;;12468:4;12452:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12493:12;:10;:12::i;:::-;12532:4;12389:163;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12389:163:0;-1:-1:-1;;;;;12389:163:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12389:163:0;;;12365:198;;;;;;12339:224;;12576:18;7250:71;;;;;;;;;;;;;;;;;;;12621:140;;;;;;;;-1:-1:-1;;;;;12621:140:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12621:140:0;;;;;12597:175;;;;;;-1:-1:-1;;;12826:123:0;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12826:123:0;;;;;;12802:158;;;;;;;;;-1:-1:-1;12993:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12597:175;;-1:-1:-1;12802:158:0;;-1:-1:-1;;;12993:26:0;;;;;;;12621:140;-1:-1:-1;;12993:26:0;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;12993:26:0;;-1:-1:-1;;12993:26:0;;;-1:-1:-1;;;;;;;13038:23:0;;13030:73;;;;-1:-1:-1;;;13030:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13131:17:0;;;;;;:6;:17;;;;;:19;;;;;;;;13122:28;;13114:74;;;;-1:-1:-1;;;13114:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13214:6;13207:3;:13;;13199:63;;;;-1:-1:-1;;;13199:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13280:31;13290:9;13301;13280;:31::i;:::-;13273:38;;;;12146:1173;;;;;;;:::o;23300:176::-;-1:-1:-1;;;;;23434:25:0;;;23402:7;23434:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;23300:176::o;7204:117::-;7250:71;;;;;;;;;;;;;;;;;;7204:117;:::o;5995:37::-;6026:6;5995:37;:::o;6727:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26023:203::-;18026:3;;;;;-1:-1:-1;;;;;18026:3:0;18012:10;:17;18004:26;;;;;;26134:7;;;-1:-1:-1;;;;;26152:18:0;;;-1:-1:-1;;;;;;26152:18:0;;;;;;;26186:32;;;26134:7;;;;26186:32;;;;;;;;;;;;;;;;;;;;;;;18041:1;26023:203;:::o;18964:337::-;19043:7;19283:10;;-1:-1:-1;;19269:24:0;;;;;;19262:31;;18964:337;:::o;827:136::-;885:7;912:43;916:1;919;912:43;;;;;;;;;;;;;;;;;:3;:43::i;1717:471::-;1775:7;2020:6;2016:47;;-1:-1:-1;2050:1:0;2043:8;;2016:47;2087:5;;;2091:1;2087;:5;:1;2111:5;;;;;:10;2103:56;;;;-1:-1:-1;;;2103:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2664:132;2722:7;2749:39;2753:1;2756;2749:39;;;;;;;;;;;;;;;;;:3;:39::i;363:181::-;421:7;453:5;;;477:6;;;;469:46;;;;;-1:-1:-1;;;469:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;15914:947;16020:6;-1:-1:-1;;;;;16010:16:0;:6;-1:-1:-1;;;;;16010:16:0;;;:30;;;;;16039:1;16030:6;:10;16010:30;16006:848;;;-1:-1:-1;;;;;16061:20:0;;;16057:385;;-1:-1:-1;;;;;16169:22:0;;16150:16;16169:22;;;:14;:22;;;;;;;;;16230:13;:60;;16289:1;16230:60;;;-1:-1:-1;;;;;16246:19:0;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;16266:13:0;;16246:34;;;;;;;;16278:1;16246:40;;16230:60;16210:80;-1:-1:-1;16309:17:0;16329:21;16210:80;16343:6;16329:21;:13;:21;:::i;:::-;16309:41;;16369:57;16386:6;16394:9;16405;16416;16369:16;:57::i;:::-;16057:385;;;;-1:-1:-1;;;;;16462:20:0;;;16458:385;;-1:-1:-1;;;;;16570:22:0;;16551:16;16570:22;;;:14;:22;;;;;;;;;16631:13;:60;;16690:1;16631:60;;;-1:-1:-1;;;;;16647:19:0;;;;;;:11;:19;;;;;;;;:34;-1:-1:-1;;16667:13:0;;16647:34;;;;;;;;16679:1;16647:40;;16631:60;16611:80;-1:-1:-1;16710:17:0;16730:21;16611:80;16744:6;16730:21;:13;:21;:::i;:::-;16710:41;;16770:57;16787:6;16795:9;16806;16817;16770:16;:57::i;16458:385::-;15914:947;;;:::o;19634:709::-;19754:11;;:23;;19770:6;19754:23;:15;:23;:::i;:::-;19740:11;:37;19871:17;;19819:16;;19838:51;;:28;:6;5920;19838:28;:10;:28;:::i;:51::-;19943:10;;19819:70;;-1:-1:-1;19943:24:0;;19819:70;19943:24;:14;:24;:::i;:::-;19930:10;:37;20072:19;:17;:19::i;:::-;20051:17;;:40;;20043:79;;;;;-1:-1:-1;;;20043:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20174:16:0;;;;;;:12;:16;;;;;;:30;;20195:8;20174:30;:20;:30;:::i;:::-;-1:-1:-1;;;;;20155:16:0;;;;;;;:12;:16;;;;;;;;:49;;;;20280:10;:14;;;;;;20253:52;;20155:16;20280:14;20296:8;20253:14;:52::i;:::-;20319:16;;;-1:-1:-1;;;;;20319:16:0;;;;;;;;;;;;;;;;;;;;;;;19634:709;;;:::o;15466:440::-;-1:-1:-1;;;;;15583:21:0;;;15557:23;15583:21;;;:10;:21;;;;;;;;;;15642:12;:23;;;;;;15720:21;;;;:33;;;-1:-1:-1;;;;;;15720:33:0;;;;;;;15771:54;;15583:21;;;;;15642:23;;15720:33;;15583:21;;;15771:54;;15557:23;15771:54;15838:60;15853:15;15870:9;15881:16;15838:14;:60::i;:::-;15466:440;;;;:::o;17749:153::-;17859:9;17749:153;:::o;1266:192::-;1352:7;1388:12;1380:6;;;;1372:29;;;;-1:-1:-1;;;1372:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1372:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1424:5:0;;;1266:192::o;3292:278::-;3378:7;3413:12;3406:5;3398:28;;;;-1:-1:-1;;;3398:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;3398:28:0;;3437:9;3453:1;3449;:5;;;;;;;3292:278;-1:-1:-1;;;;;3292:278:0:o;16869:703::-;17048:18;17069:75;17076:12;17069:75;;;;;;;;;;;;;;;;;:6;:75::i;:::-;17048:96;;17176:1;17161:12;:16;;;:85;;;;-1:-1:-1;;;;;;17181:22:0;;;;;;:11;:22;;;;;;;;:65;-1:-1:-1;;17204:16:0;;17181:40;;;;;;;;;:50;:65;;;:50;;:65;17161:85;17157:339;;;-1:-1:-1;;;;;17263:22:0;;;;;;:11;:22;;;;;;;;:40;-1:-1:-1;;17286:16:0;;17263:40;;;;;;;;17301:1;17263:46;:57;;;17157:339;;;17392:33;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17353:22:0;;-1:-1:-1;17353:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;-1:-1:-1;;17353:72:0;;;;;;;;;;;;;17440:25;;;:14;:25;;;;;;:44;;17468:16;;;17440:44;;;;;;;;;;17157:339;17513:51;;;;;;;;;;;;;;-1:-1:-1;;;;;17513:51:0;;;;;;;;;;;16869:703;;;;;:::o;17580:161::-;17655:6;17693:12;-1:-1:-1;;;17682:9:0;;17674:32;;;;-1:-1:-1;;;17674:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;17674:32:0;-1:-1:-1;17731:1:0;;17580:161;-1:-1:-1;;17580:161:0:o;30293:1050::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30293:1050:0;;;-1:-1:-1;30293:1050:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;-1:-1:-1;30293:1050:0;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://2092aac85ba2ee0b423852bfb10043b265de6f8133693764d689f1e6e3e73294
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.