CRC-20
Overview
Max Total Supply
13,032,129.305899002705050305 PHNX
Holders
1,560
Market
Price
$0.00 @ 0.000000 CRO
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
447.229707303042186106 PHNXValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PhenixFinance
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2023-11-19 */ // File: contracts/InterfaceLP.sol pragma solidity ^0.7.4; interface InterfaceLP { function sync() external; } // File: contracts/SafeMathInt.sol pragma solidity ^0.7.4; library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { require(b != -1 || a != MIN_INT256); return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } } // File: contracts/SafeMath.sol pragma solidity ^0.7.4; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } // File: contracts/Ownable.sol pragma solidity ^0.7.4; contract Ownable { address private _owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { _owner = msg.sender; } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(isOwner()); _; } function isOwner() public view returns (bool) { return msg.sender == _owner; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(_owner); _owner = address(0); } function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/IVVSRouter01.sol pragma solidity ^0.7.4; interface IVVSRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // File: contracts/IVVSRouter.sol pragma solidity ^0.7.4; interface IVVSRouter is IVVSRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } // File: contracts/IVVSFactory.sol pragma solidity ^0.7.4; interface IVVSFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: contracts/IERC20.sol pragma solidity ^0.7.4; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/ERC20Detailed.sol pragma solidity ^0.7.4; abstract contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor( string memory name, string memory symbol, uint8 decimals ) { _name = name; _symbol = symbol; _decimals = decimals; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } } // File: contracts/PhenixFinance.sol pragma solidity ^0.7.4; contract PhenixFinance is ERC20Detailed, Ownable { using SafeMath for uint256; using SafeMathInt for int256; event Rebase(uint256 indexed totalSupply); address[] public pairAddresses; address public liquidityReceiver; address public phenixFundReserveReceiver; bool public initialDistributionFinished; mapping(address => bool) _allowTransfer; mapping(address => bool) _isFeeExempt; uint256 private constant FXP_BASE = 1000000; uint256 private constant DECIMALS = 18; uint256 private constant MAX_UINT256 = ~uint256(0); address private constant DEAD = 0x000000000000000000000000000000000000dEaD; address private constant ZERO = 0x0000000000000000000000000000000000000000; uint256 private constant REBASE_INTERVAL = 86400; uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 1 * 10**6 * 10**DECIMALS; uint256 public liquidityFee = 0; uint256 public phenixVaultFee = 10; uint256 public sellFee = 5; uint256 public totalFee = liquidityFee.add(phenixVaultFee); uint256 public feeDenominator = 100; uint256 public lastRebaseTimestamp = block.timestamp; uint256 public lastRebaseDelta = 0; uint256 public rebasePercentDelta = (18 * FXP_BASE) / 1000; bool public rebaseRX3Enabled = false; uint256 public rebaseRX3Multiplier = FXP_BASE; uint256 public rebaseMaxRX3Multiplier = FXP_BASE + FXP_BASE / 2; uint256 public rebaseRX3MultiplierStep = (1 * FXP_BASE) / 1000; IVVSRouter public router; bool public swapEnabled = true; uint256 private gonSwapThreshold = (TOTAL_GONS * 10) / 10000; bool inSwap; uint256 private constant TOTAL_GONS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY); uint256 private constant MAX_SUPPLY = ~uint128(0); uint256 private _totalSupply; uint256 private _gonsPerFragment; mapping(address => uint256) private _gonBalances; mapping(address => mapping(address => uint256)) private _allowedFragments; mapping(address => bool) public taxableAddress; mapping(address => bool) public authorizedRebaseAddress; constructor() ERC20Detailed("Phenix Finance", "PHNX", uint8(DECIMALS)) { router = IVVSRouter(0x145677FC4d9b8F19B5D56d1820c48e0443049a30); address _pairAddress = address( IVVSFactory(router.factory()).createPair( router.WETH(), address(this) ) ); liquidityReceiver = address(msg.sender); phenixFundReserveReceiver = address(msg.sender); _allowedFragments[address(this)][address(router)] = uint256(-1); _totalSupply = INITIAL_FRAGMENTS_SUPPLY; _gonBalances[address(msg.sender)] = TOTAL_GONS; _gonsPerFragment = TOTAL_GONS.div(_totalSupply); _isFeeExempt[address(phenixFundReserveReceiver)] = true; _isFeeExempt[address(this)] = true; _isFeeExempt[address(msg.sender)] = true; taxableAddress[_pairAddress] = true; pairAddresses.push(_pairAddress); authorizedRebaseAddress[address(msg.sender)] = true; emit Transfer(address(0x0), address(msg.sender), _totalSupply); } /** * @dev Swapping switch used to mitigate any calculation * issues during swapBack. */ modifier noReentrancy() { inSwap = true; _; inSwap = false; } modifier initialDistributionLock() { require( initialDistributionFinished || isOwner() || _allowTransfer[msg.sender], "Initial distirbution not finalized." ); _; } modifier validRecipient(address to) { require(to != address(0x0)); _; } /** * @dev Returns the delta of the next rebase. * @return next rebase delta as uint256 value. */ function getNextRebase(uint256 _timestamp) public view returns (uint256) { uint256 rebaseTimestampDelta = _timestamp - lastRebaseTimestamp; uint256 nextScaledRebaseIntervalPercentage = rebaseTimestampDelta .mul(FXP_BASE) .div(REBASE_INTERVAL); uint256 nextRebaseDelta = _totalSupply .mul(rebasePercentDelta) .div(FXP_BASE) .mul(nextScaledRebaseIntervalPercentage) .div(FXP_BASE); if (rebaseRX3Enabled == true) { nextRebaseDelta = nextRebaseDelta .mul( rebaseRX3Multiplier < rebaseMaxRX3Multiplier ? rebaseRX3Multiplier : rebaseMaxRX3Multiplier ) .div(FXP_BASE); } return nextRebaseDelta; } /** * @dev Rebases total token supply based on the getNextRebase() * return result. Rebase is capped when MAX_SUPPLY is reached. */ function _rebase() internal { uint256 supplyDelta = getNextRebase(block.timestamp); _totalSupply = _totalSupply.add(uint256(supplyDelta)); if (_totalSupply > MAX_SUPPLY) { _totalSupply = MAX_SUPPLY; } _gonsPerFragment = TOTAL_GONS.div(_totalSupply); lastRebaseDelta = supplyDelta; lastRebaseTimestamp = block.timestamp; rebaseRX3Multiplier = FXP_BASE; emit Rebase(_totalSupply); } /** * @dev Executes the internal _rebase() function and then * performs the sync() call on all applicable pairAddresses */ function rebaseAndSync() external { require( authorizedRebaseAddress[msg.sender] == true, "Not authroized to execute rebase" ); _rebase(); for (uint256 i = 0; i < pairAddresses.length; i++) { if (taxableAddress[pairAddresses[i]] == true) { InterfaceLP(pairAddresses[i]).sync(); } } } /** * @dev Sets the last rebase time to the current block * timestamp as means to reset the value. */ function resetLastRebaseTimestamp() external { require( authorizedRebaseAddress[msg.sender] == true, "Not authroized to execute this function." ); lastRebaseTimestamp = block.timestamp; } /** * @dev Returns total token supply. Overrides ERC-20 * totalSupply() function to return elastic supply. */ function totalSupply() external view override returns (uint256) { return _totalSupply; } /** * @dev Transfers amount tokens to an address. * @param to Receiver of the transfered tokens. * @param value Amount of tokens that are received. * @return true */ function transfer(address to, uint256 value) external override validRecipient(to) initialDistributionLock returns (bool) { _transferFrom(msg.sender, to, value); return true; } /** * @dev Adds LP contract address and removes * fees from the given address. Added pair contract tested * sync() before adding to see if it is a pair address. * Addition will fail if sync() fails. * @param _address Update LP contract address. */ function addLPAddress(address _address) external onlyOwner { InterfaceLP(_address).sync(); for (uint256 i = 0; i < pairAddresses.length; i++) { require(pairAddresses[i] != _address, "Pair address already added"); } pairAddresses.push(_address); taxableAddress[_address] = true; } /** * @dev Returns array of all LP Addresses * @return address[] Array of LP Addresses. **/ function getLPAddresses() external view returns (address[] memory) { return pairAddresses; } /** * @dev Updates given address' taxable status. * @param _address Subject address of taxable state adjustment. * @param _status State if address should be taxed. */ function setTaxableAddress(address _address, bool _status) external onlyOwner { taxableAddress[_address] = _status; } /** * @dev Updates given address' Authorized Rebase status. * @param _address Subject address of Authorized Rebase state adjustment. * @param _status State if address should be allowed call rebaseAndSync(). */ function setAuthorizedRebaseAddress(address _address, bool _status) external onlyOwner { authorizedRebaseAddress[_address] = _status; } /** * @dev Returns spender alloance of an owner address. * Overides ERC-20 allowance(address, address) function * to return allowed fragments. * @param owner Owner address of tokens. * @param spender Spender address of tokens. * @return uint256 Amount of allowed tokens for the spender to use. */ function allowance(address owner, address spender) external view override returns (uint256) { return _allowedFragments[owner][spender]; } /** * @dev Returns balance of given address. Overrides * ERC-20 balanceOf(address) to provide balance based * on holder gons and gonsPerFragment. * @param who Balance of address. * @return uint256 value of address balance. */ function balanceOf(address who) external view override returns (uint256) { return _gonBalances[who].div(_gonsPerFragment); } /** * @dev Performs basic token transfer. Used as * internal function in _transferFrom(address, * address, uint256) function. * @param from sender address of transfer. * @param to receiver adddress of transfer. * @param amount amount of tokens for receiver. * @return true. */ function _basicTransfer( address from, address to, uint256 amount ) internal returns (bool) { uint256 gonAmount = amount.mul(_gonsPerFragment); _gonBalances[from] = _gonBalances[from].sub(gonAmount); _gonBalances[to] = _gonBalances[to].add(gonAmount); return true; } /** * @dev Transfers token from sender address * to receiver address. Performs token supply * rebase provided it is acceptable. Executes * _baseTransfer(address, address, uint256) if * swap is in progress. * @param sender sender address of transfer. * @param to receiver adddress of transfer. * @param amount amount of tokens for receiver. * @return true. */ function _transferFrom( address sender, address to, uint256 amount ) internal returns (bool) { if (inSwap) { return _basicTransfer(sender, to, amount); } uint256 gonAmount = amount.mul(_gonsPerFragment); if (_shouldSwapBack()) { _swapBack(); } if (rebaseRX3Enabled == true) { rebaseRX3Multiplier = rebaseRX3Multiplier.add( rebaseRX3MultiplierStep ); } _gonBalances[sender] = _gonBalances[sender].sub(gonAmount); uint256 gonAmountReceived = _shouldTakeFee(sender, to) ? _takeFee(sender, to, gonAmount) : gonAmount; _gonBalances[to] = _gonBalances[to].add(gonAmountReceived); emit Transfer(sender, to, gonAmountReceived.div(_gonsPerFragment)); return true; } /** * @dev Transfers token from sender address * to receiver address. Overrides ERC-20 * transferFrom(address, address, uint256) to * check value of allowed fragments that sender * can access from the owner (from address). * @param from sender address of transfer. * @param to receiver adddress of transfer. * @param value amount of tokens for receiver. * @return true. */ function transferFrom( address from, address to, uint256 value ) external override validRecipient(to) returns (bool) { if (_allowedFragments[from][msg.sender] != uint256(-1)) { _allowedFragments[from][msg.sender] = _allowedFragments[from][ msg.sender ].sub(value, "Insufficient Allowance"); } _transferFrom(from, to, value); return true; } /** * @dev Executes fee allocations and distributes tokens * to contract address, phenix vault receiver address, and * liquidity receiver address. */ function _swapBack() internal noReentrancy { uint256 contractTokenBalance = _gonBalances[address(this)].div( _gonsPerFragment ); uint256 amountToLiquify = contractTokenBalance .mul(liquidityFee) .div(totalFee) .div(2); uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); uint256 balanceBefore = address(this).balance; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance.sub(balanceBefore); uint256 totalETHFee = totalFee.sub(liquidityFee.div(2)); uint256 amountETHLiquidity = amountETH .mul(liquidityFee) .div(totalETHFee) .div(2); if (amountToLiquify > 0) { router.addLiquidityETH{value: amountETHLiquidity}( address(this), amountToLiquify, 0, 0, liquidityReceiver, block.timestamp ); } (bool success, ) = payable(phenixFundReserveReceiver).call{ value: address(this).balance }(""); } /** * @dev Calculates swap fee and returns new allocation * of swap based on swap conditions. Calculate is based * on liquidity fee and phenix vault fee. Sell fee will also * be taken into consideration if receiver is pair address. * @return uint256 gonAmount that is transfered in the swap. */ function _takeFee( address sender, address to, uint256 gonAmount ) internal returns (uint256) { uint256 _totalFee = totalFee; if (taxableAddress[to] == true) _totalFee = _totalFee.add(sellFee); uint256 feeAmount = gonAmount.mul(_totalFee).div(feeDenominator); _gonBalances[address(this)] = _gonBalances[address(this)].add( feeAmount ); emit Transfer(sender, address(this), feeAmount.div(_gonsPerFragment)); return gonAmount.sub(feeAmount); } /** * @dev Decreases spender allowance of sender address. * @param spender Spender address. * @param subtractedValue Amount to reduce spender allowance by. * @return bool */ function decreaseAllowance(address spender, uint256 subtractedValue) external initialDistributionLock 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; } /** * @dev Updates router address * @param _address address to set for the dex router */ function updateRouter(address _address) external onlyOwner { require(address(router) != _address, "Router address already set"); router = IVVSRouter(_address); } /** * @dev Increases spender allowance of sender address. * @param spender Spender address. * @param addedValue Amount to increase spender allowance by. * @return bool */ function increaseAllowance(address spender, uint256 addedValue) external initialDistributionLock returns (bool) { _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][ spender ].add(addedValue); emit Approval( msg.sender, spender, _allowedFragments[msg.sender][spender] ); return true; } /** * @dev Approves spender address to use sender tokens. * @param spender Spender address. * @param value Amount of tokens spender can access. * @return bool */ function approve(address spender, uint256 value) external override initialDistributionLock returns (bool) { _allowedFragments[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Checks if given address is exempt from swap fees. * @param _addr Address to check current exemption status. * @return bool */ function checkFeeExempt(address _addr) external view returns (bool) { return _isFeeExempt[_addr]; } /** * @dev Unlocks tokens and sets initialDistributedFinished * to true. Only callable from owner address. */ function setInitialDistributionFinished() external onlyOwner { initialDistributionFinished = true; } /** * @dev Enables transfers for a specific address. * Only callable from owner address. * @param _addr Address to enable transfers. */ function enableTransfer(address _addr) external onlyOwner { _allowTransfer[_addr] = true; } /** * @dev Sets given address to have exceptions from * swap fees. Only callable from owner address. * @param _addr Address to set fee exemptions. */ function setFeeExempt(address _addr) external onlyOwner { _isFeeExempt[_addr] = true; } /** * @dev Checks if a sender (from) and receiver * (to) need swap fees applied in transfer. Used * in _transferFrom(address, address, uint256) internal * function. Should only apply when user is interacting with * the pair (to or from) * @param from Sender address of swap * @param to Receiver address of swap. * @return bool True if fees apply on transfer. */ function _shouldTakeFee(address from, address to) internal view returns (bool) { return (taxableAddress[from] || taxableAddress[to]) && (!_isFeeExempt[from] && !_isFeeExempt[to]); } /** * @dev Updates swap back settings. * @param _enabled bool value to determine of swap back is enabled. * @param _num uint256 value for the swap back threshhold * @param _denom uint256 value used for the threshold deminator */ function setSwapBackSettings( bool _enabled, uint256 _num, uint256 _denom ) external onlyOwner { swapEnabled = _enabled; gonSwapThreshold = TOTAL_GONS.div(_denom).mul(_num); } /** * @dev Updates RX3 Rebase settings. * @param _enabled bool value to determine of RX3 Protocol is enabled. * @param _rebaseMaxRX3Multiplier uint256 value for the max RX3 Multiplier * @param _rebaseRX3MultiplierStep uint256 value used for the RX3 Multiplier Step */ function setRX3Settings( bool _enabled, uint256 _rebaseMaxRX3Multiplier, uint256 _rebaseRX3MultiplierStep ) external onlyOwner { rebaseRX3Enabled = _enabled; rebaseMaxRX3Multiplier = _rebaseMaxRX3Multiplier; rebaseRX3MultiplierStep = _rebaseRX3MultiplierStep; } /** * @dev Configures Rebase settings. Sets * RebasePercentDelta, and Accuracy. * @param _percentage value of rebase percent delta based on a daily interval (18) * @param _accuracy defines the value of the rebase delta percentage demoninator (1000) */ function setRebaseSettings(uint256 _percentage, uint256 _accuracy) external onlyOwner { rebasePercentDelta = (_percentage * FXP_BASE) / _accuracy; } /** * @dev Check whether the a swap back can be performed. * @return bool, true if swapBack is allowed to execute. */ function _shouldSwapBack() internal view returns (bool) { return taxableAddress[msg.sender] == false && !inSwap && swapEnabled && _gonBalances[address(this)] >= gonSwapThreshold; } /** * @dev Returns current circulating token supply * @return uint256, value of total circulating supply. */ function getCirculatingSupply() public view returns (uint256) { return (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div( _gonsPerFragment ); } function isNotInSwap() external view returns (bool) { return !inSwap; } function checkSwapThreshold() external view returns (uint256) { return gonSwapThreshold.div(_gonsPerFragment); } function setFeeReceivers( address _liquidityReceiver, address _phenixFundReserveReceiver ) external onlyOwner { liquidityReceiver = _liquidityReceiver; phenixFundReserveReceiver = _phenixFundReserveReceiver; } function setFees( uint256 _liquidityFee, uint256 _phenixVaultFee, uint256 _sellFee, uint256 _feeDenominator ) external onlyOwner { liquidityFee = _liquidityFee; phenixVaultFee = _phenixVaultFee; sellFee = _sellFee; totalFee = liquidityFee.add(phenixVaultFee); feeDenominator = _feeDenominator; require(totalFee < feeDenominator / 4); } function emergencyRecoverETH() external onlyOwner { require(address(this).balance > 0, "No ETH to recover."); (bool success, ) = address(msg.sender).call{ value: address(this).balance }(""); require(success, "Failed to recover ETH."); } function emergencyRecoverToken(address _tokenAddress) external onlyOwner { require( IERC20(_tokenAddress).balanceOf(address(this)) > 0, "No tokens to recover." ); IERC20(_tokenAddress).transfer( msg.sender, IERC20(_tokenAddress).balanceOf(address(this)) ); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalSupply","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addLPAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedRebaseAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyRecoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"emergencyRecoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"enableTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLPAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"getNextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNotInSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRebaseDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRebaseTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phenixFundReserveReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phenixVaultFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseAndSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebaseMaxRX3Multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebasePercentDelta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRX3Enabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRX3Multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseRX3MultiplierStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetLastRebaseTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IVVSRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAuthorizedRebaseAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_phenixFundReserveReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_phenixVaultFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_rebaseMaxRX3Multiplier","type":"uint256"},{"internalType":"uint256","name":"_rebaseRX3MultiplierStep","type":"uint256"}],"name":"setRX3Settings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"},{"internalType":"uint256","name":"_accuracy","type":"uint256"}],"name":"setRebaseSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"uint256","name":"_denom","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setTaxableAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxableAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"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"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600855600a6009556005600a5562000031600954600854620008fb60201b620034321790919060201c565b600b556064600c5542600d556000600e556103e8620f4240601202816200005457fe5b04600f556000601060006101000a81548160ff021916908315150217905550620f42406011556002620f4240816200008857fe5b04620f4240016012556103e8620f424060010281620000a357fe5b0460135560016014806101000a81548160ff021916908315150217905550612710600a6012600a0a620f42400260001981620000db57fe5b06600019030281620000e957fe5b04601555348015620000fa57600080fd5b506040518060400160405280600e81526020017f5068656e69782046696e616e63650000000000000000000000000000000000008152506040518060400160405280600481526020017f50484e5800000000000000000000000000000000000000000000000000000000815250601282600090805190602001906200018192919062000aa1565b5081600190805190602001906200019a92919062000aa1565b5080600260006101000a81548160ff021916908360ff16021790555050505033600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073145677fc4d9b8f19b5d56d1820c48e0443049a30601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ba57600080fd5b505afa158015620002cf573d6000803e3d6000fd5b505050506040513d6020811015620002e657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037b57600080fd5b505afa15801562000390573d6000803e3d6000fd5b505050506040513d6020811015620003a757600080fd5b8101908080519060200190929190505050306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200042357600080fd5b505af115801562000438573d6000803e3d6000fd5b505050506040513d60208110156200044f57600080fd5b8101908080519060200190929190505050905033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506012600a0a620f4240026017819055506012600a0a620f42400260001981620005cc57fe5b0660001903601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620006496017546012600a0a620f424002600019816200063057fe5b06600019036200098460201b620034ba1790919060201c565b601881905550600160076000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6017546040518082815260200191505060405180910390a35062000b57565b6000808284019050838110156200097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000620009ce83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620009d660201b60201c565b905092915050565b6000808311829062000a86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000a4a57808201518184015260208101905062000a2d565b50505050905090810190601f16801562000a785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000a9357fe5b049050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000ad9576000855562000b25565b82601f1062000af457805160ff191683800117855562000b25565b8280016001018555821562000b25579182015b8281111562000b2457825182559160200191906001019062000b07565b5b50905062000b34919062000b38565b5090565b5b8082111562000b5357600081600090555060010162000b39565b5090565b6147588062000b676000396000f3fe60806040526004361061037a5760003560e01c8063784d20b1116101d1578063b065406911610102578063d1fce264116100a0578063dd62ed3e1161006f578063dd62ed3e146111ef578063f2fde38b14611274578063f887ea40146112c5578063fff434811461130657610381565b8063d1fce264146110a3578063d4399790146110d0578063d5938aac14611137578063d780d4dc1461118857610381565b8063bdb938e2116100dc578063bdb938e214610f77578063c851cc3214610fd4578063c939a4f614611025578063d08893581461105257610381565b8063b065406914610ed2578063b86a2fd714610efd578063bd94c8dd14610f2857610381565b806399e3b3bd1161016f578063a8688e2a11610149578063a8688e2a14610dba578063a9059cbb14610e0b578063a92558d014610e7c578063ab92c3f214610ea757610381565b806399e3b3bd14610c97578063a457c2d714610cd8578063a4b45c0014610d4957610381565b80638da5cb5b116101ab5780638da5cb5b14610b6e5780638f32d59b14610baf57806395d89b4114610bdc57806398118cb414610c6c57610381565b8063784d20b114610a9557806383b4ac6814610afc57806389e9616e14610b2957610381565b80632d517fdc116102ab578063530ddf64116102495780636fcba377116102235780636fcba3771461096f57806370a08231146109c8578063715018a614610a2d578063749796a514610a4457610381565b8063530ddf64146109005780636d351d1a146109175780636ddd17131461094257610381565b8063395093511161028557806339509351146107e15780634513e7d0146108525780634bfed05c146108695780634c50855d1461089457610381565b80632d517fdc14610737578063313ce567146107625780633751ed741461079057610381565b806323b872dd116103185780632b112e49116102f25780632b112e491461069f5780632b14ca56146106ca5780632b28af1b146106f55780632be6937d1461072057610381565b806323b872dd14610570578063264d26dd146106015780632abf77f51461064257610381565b8063180b0d7e11610354578063180b0d7e146104d857806318160ddd14610503578063186e2d771461052e5780631df4ccfc1461054557610381565b806306fdde031461038657806307f594a314610416578063095ea7b31461046757610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b61136b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103db5780820151818401526020810190506103c0565b50505050905090810190601f1680156104085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042257600080fd5b506104656004803603602081101561043957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061140d565b005b34801561047357600080fd5b506104c06004803603604081101561048a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611686565b60405180821515815260200191505060405180910390f35b3480156104e457600080fd5b506104ed611840565b6040518082815260200191505060405180910390f35b34801561050f57600080fd5b50610518611846565b6040518082815260200191505060405180910390f35b34801561053a57600080fd5b50610543611850565b005b34801561055157600080fd5b5061055a6119b6565b6040518082815260200191505060405180910390f35b34801561057c57600080fd5b506105e96004803603606081101561059357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119bc565b60405180821515815260200191505060405180910390f35b34801561060d57600080fd5b50610616611bfb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064e57600080fd5b5061069d6004803603604081101561066557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611c21565b005b3480156106ab57600080fd5b506106b4611c8d565b6040518082815260200191505060405180910390f35b3480156106d657600080fd5b506106df611d65565b6040518082815260200191505060405180910390f35b34801561070157600080fd5b5061070a611d6b565b6040518082815260200191505060405180910390f35b34801561072c57600080fd5b50610735611d71565b005b34801561074357600080fd5b5061074c611d9f565b6040518082815260200191505060405180910390f35b34801561076e57600080fd5b50610777611da5565b604051808260ff16815260200191505060405180910390f35b34801561079c57600080fd5b506107df600480360360608110156107b357600080fd5b810190808035151590602001909291908035906020019092919080359060200190929190505050611dbc565b005b3480156107ed57600080fd5b5061083a6004803603604081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dfa565b60405180821515815260200191505060405180910390f35b34801561085e57600080fd5b506108676120be565b005b34801561087557600080fd5b5061087e612170565b6040518082815260200191505060405180910390f35b3480156108a057600080fd5b506108a9612176565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156108ec5780820151818401526020810190506108d1565b505050509050019250505060405180910390f35b34801561090c57600080fd5b50610915612204565b005b34801561092357600080fd5b5061092c61241a565b6040518082815260200191505060405180910390f35b34801561094e57600080fd5b50610957612438565b60405180821515815260200191505060405180910390f35b34801561097b57600080fd5b506109c66004803603608081101561099257600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050612449565b005b3480156109d457600080fd5b50610a17600480360360208110156109eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124b3565b6040518082815260200191505060405180910390f35b348015610a3957600080fd5b50610a42612510565b005b348015610a5057600080fd5b50610a9360048036036020811015610a6757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125ca565b005b348015610aa157600080fd5b50610ae460048036036020811015610ab857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612636565b60405180821515815260200191505060405180910390f35b348015610b0857600080fd5b50610b11612656565b60405180821515815260200191505060405180910390f35b348015610b3557600080fd5b50610b6c60048036036040811015610b4c57600080fd5b81019080803590602001909291908035906020019092919050505061266e565b005b348015610b7a57600080fd5b50610b83612698565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bbb57600080fd5b50610bc46126c2565b60405180821515815260200191505060405180910390f35b348015610be857600080fd5b50610bf161271a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c31578082015181840152602081019050610c16565b50505050905090810190601f168015610c5e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c7857600080fd5b50610c816127bc565b6040518082815260200191505060405180910390f35b348015610ca357600080fd5b50610cac6127c2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ce457600080fd5b50610d3160048036036040811015610cfb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506127e8565b60405180821515815260200191505060405180910390f35b348015610d5557600080fd5b50610db860048036036040811015610d6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b41565b005b348015610dc657600080fd5b50610e0960048036036020811015610ddd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd8565b005b348015610e1757600080fd5b50610e6460048036036040811015610e2e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612dfe565b60405180821515815260200191505060405180910390f35b348015610e8857600080fd5b50610e91612f1a565b6040518082815260200191505060405180910390f35b348015610eb357600080fd5b50610ebc612f20565b6040518082815260200191505060405180910390f35b348015610ede57600080fd5b50610ee7612f26565b6040518082815260200191505060405180910390f35b348015610f0957600080fd5b50610f12612f2c565b6040518082815260200191505060405180910390f35b348015610f3457600080fd5b50610f6160048036036020811015610f4b57600080fd5b8101908080359060200190929190505050612f32565b6040518082815260200191505060405180910390f35b348015610f8357600080fd5b50610fd260048036036040811015610f9a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061302a565b005b348015610fe057600080fd5b5061102360048036036020811015610ff757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613096565b005b34801561103157600080fd5b5061103a6131af565b60405180821515815260200191505060405180910390f35b34801561105e57600080fd5b506110a16004803603606081101561107557600080fd5b8101908080351515906020019092919080359060200190929190803590602001909291905050506131c2565b005b3480156110af57600080fd5b506110b8613234565b60405180821515815260200191505060405180910390f35b3480156110dc57600080fd5b5061111f600480360360208110156110f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613247565b60405180821515815260200191505060405180910390f35b34801561114357600080fd5b506111866004803603602081101561115a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061329d565b005b34801561119457600080fd5b506111d7600480360360208110156111ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613309565b60405180821515815260200191505060405180910390f35b3480156111fb57600080fd5b5061125e6004803603604081101561121257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613329565b6040518082815260200191505060405180910390f35b34801561128057600080fd5b506112c36004803603602081101561129757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133b0565b005b3480156112d157600080fd5b506112da6133cd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561131257600080fd5b5061133f6004803603602081101561132957600080fd5b81019080803590602001909291905050506133f3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114035780601f106113d857610100808354040283529160200191611403565b820191906000526020600020905b8154815290600101906020018083116113e657829003601f168201915b5050505050905090565b6114156126c2565b61141e57600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561148757600080fd5b505afa15801561149b573d6000803e3d6000fd5b505050506040513d60208110156114b157600080fd5b810190808051906020019092919050505011611535576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20746f6b656e7320746f207265636f7665722e000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156115b957600080fd5b505afa1580156115cd573d6000803e3d6000fd5b505050506040513d60208110156115e357600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561164757600080fd5b505af115801561165b573d6000803e3d6000fd5b505050506040513d602081101561167157600080fd5b81019080805190602001909291905050505050565b6000600560149054906101000a900460ff16806116a757506116a66126c2565b5b806116fb5750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806146d86023913960400191505060405180910390fd5b81601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600c5481565b6000601754905090565b6118586126c2565b61186157600080fd5b600047116118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f2045544820746f207265636f7665722e000000000000000000000000000081525060200191505060405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d8060008114611937576040519150601f19603f3d011682016040523d82523d6000602084013e61193c565b606091505b50509050806119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4661696c656420746f207265636f766572204554482e0000000000000000000081525060200191505060405180910390fd5b50565b600b5481565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119f957600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611be357611b62836040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135049092919063ffffffff16565b601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611bee8585856135c4565b5060019150509392505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c296126c2565b611c3257600080fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611d60601854611d52601960008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d446019600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546012600a0a620f42400260001981611d3157fe5b066000190361382b90919063ffffffff16565b61382b90919063ffffffff16565b6134ba90919063ffffffff16565b905090565b600a5481565b600e5481565b611d796126c2565b611d8257600080fd5b6001600560146101000a81548160ff021916908315150217905550565b60115481565b6000600260009054906101000a900460ff16905090565b611dc46126c2565b611dcd57600080fd5b82601060006101000a81548160ff0219169083151502179055508160128190555080601381905550505050565b6000600560149054906101000a900460ff1680611e1b5750611e1a6126c2565b5b80611e6f5750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ec4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806146d86023913960400191505060405180910390fd5b611f5382601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343290919063ffffffff16565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60011515601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612167576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806146fb6028913960400191505060405180910390fd5b42600d81905550565b600f5481565b606060038054806020026020016040519081016040528092919081815260200182805480156121fa57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116121b0575b5050505050905090565b60011515601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4e6f742061757468726f697a656420746f20657865637574652072656261736581525060200191505060405180910390fd5b6122d2613875565b60005b6003805490508110156124175760011515601b6000600384815481106122f757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561240a576003818154811061237f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156123f157600080fd5b505af1158015612405573d6000803e3d6000fd5b505050505b80806001019150506122d5565b50565b60006124336018546015546134ba90919063ffffffff16565b905090565b60148054906101000a900460ff1681565b6124516126c2565b61245a57600080fd5b836008819055508260098190555081600a8190555061248660095460085461343290919063ffffffff16565b600b8190555080600c819055506004600c548161249f57fe5b04600b54106124ad57600080fd5b50505050565b6000612509601854601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ba90919063ffffffff16565b9050919050565b6125186126c2565b61252157600080fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6125d26126c2565b6125db57600080fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b6000601660009054906101000a900460ff1615905090565b6126766126c2565b61267f57600080fd5b80620f424083028161268d57fe5b04600f819055505050565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b606060018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127b25780601f10612787576101008083540402835291602001916127b2565b820191906000526020600020905b81548152906001019060200180831161279557829003601f168201915b5050505050905090565b60085481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560149054906101000a900460ff168061280957506128086126c2565b5b8061285d5750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806146d86023913960400191505060405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083106129c1576000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a55565b6129d4838261382b90919063ffffffff16565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b612b496126c2565b612b5257600080fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612be06126c2565b612be957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c3157600080fd5b505af1158015612c45573d6000803e3d6000fd5b5050505060005b600380549050811015612d3f578173ffffffffffffffffffffffffffffffffffffffff1660038281548110612c7d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f50616972206164647265737320616c726561647920616464656400000000000081525060200191505060405180910390fd5b8080600101915050612c4c565b506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e3b57600080fd5b600560149054906101000a900460ff1680612e5a5750612e596126c2565b5b80612eae5750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806146d86023913960400191505060405180910390fd5b612f0e3385856135c4565b50600191505092915050565b60135481565b60125481565b60095481565b600d5481565b600080600d54830390506000612f6962015180612f5b620f42408561395490919063ffffffff16565b6134ba90919063ffffffff16565b90506000612fc0620f4240612fb284612fa4620f4240612f96600f5460175461395490919063ffffffff16565b6134ba90919063ffffffff16565b61395490919063ffffffff16565b6134ba90919063ffffffff16565b905060011515601060009054906101000a900460ff161515141561301f5761301c620f424061300e60125460115410612ffb57601254612fff565b6011545b8461395490919063ffffffff16565b6134ba90919063ffffffff16565b90505b809350505050919050565b6130326126c2565b61303b57600080fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61309e6126c2565b6130a757600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561316b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f526f75746572206164647265737320616c72656164792073657400000000000081525060200191505060405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b6131ca6126c2565b6131d357600080fd5b826014806101000a81548160ff0219169083151502179055506132298261321b836012600a0a620f4240026000198161320857fe5b06600019036134ba90919063ffffffff16565b61395490919063ffffffff16565b601581905550505050565b600560149054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6132a56126c2565b6132ae57600080fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b6000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6133b86126c2565b6133c157600080fd5b6133ca816139da565b50565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061340357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284019050838110156134b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006134fc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ad4565b905092915050565b60008383111582906135b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561357657808201518184015260208101905061355b565b50505050905090810190601f1680156135a35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000601660009054906101000a900460ff16156135ed576135e6848484613b9a565b9050613824565b60006136046018548461395490919063ffffffff16565b905061360e613cea565b1561361c5761361b613dc0565b5b60011515601060009054906101000a900460ff16151514156136565761364f60135460115461343290919063ffffffff16565b6011819055505b6136a881601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461382b90919063ffffffff16565b601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006136f7868661438f565b613701578161370d565b61370c8686846144e6565b5b905061376181601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343290919063ffffffff16565b601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef613808601854856134ba90919063ffffffff16565b6040518082815260200191505060405180910390a36001925050505b9392505050565b600061386d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613504565b905092915050565b600061388042612f32565b90506138978160175461343290919063ffffffff16565b6017819055506000196fffffffffffffffffffffffffffffffff1660175411156138d7576000196fffffffffffffffffffffffffffffffff166017819055505b6139046017546012600a0a620f424002600019816138f157fe5b06600019036134ba90919063ffffffff16565b60188190555080600e8190555042600d81905550620f42406011819055506017547fafae32ce2847c13a56ab802c034c27d3c19f1d61be48c424c5df134145cd44d060405160405180910390a250565b60008083141561396757600090506139d4565b600082840290508284828161397857fe5b04146139cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146b76021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613a1457600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290613b80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b45578082015181840152602081019050613b2a565b50505050905090810190601f168015613b725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613b8c57fe5b049050809150509392505050565b600080613bb26018548461395490919063ffffffff16565b9050613c0681601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461382b90919063ffffffff16565b601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9b81601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343290919063ffffffff16565b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019150509392505050565b6000801515601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015613d585750601660009054906101000a900460ff16155b8015613d6e575060148054906101000a900460ff165b8015613dbb5750601554601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601660006101000a81548160ff0219169083151502179055506000613e31601854601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ba90919063ffffffff16565b90506000613e716002613e63600b54613e556008548761395490919063ffffffff16565b6134ba90919063ffffffff16565b6134ba90919063ffffffff16565b90506000613e88828461382b90919063ffffffff16565b90506000600267ffffffffffffffff81118015613ea457600080fd5b50604051908082528060200260200182016040528015613ed35781602001602082028036833780820191505090505b5090503081600081518110613ee457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f8657600080fd5b505afa158015613f9a573d6000803e3d6000fd5b505050506040513d6020811015613fb057600080fd5b810190808051906020019092919050505081600181518110613fce57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156140d15780820151818401526020810190506140b6565b505050509050019650505050505050600060405180830381600087803b1580156140fa57600080fd5b505af115801561410e573d6000803e3d6000fd5b505050506000614127824761382b90919063ffffffff16565b9050600061415561414460026008546134ba90919063ffffffff16565b600b5461382b90919063ffffffff16565b905060006141936002614185846141776008548861395490919063ffffffff16565b6134ba90919063ffffffff16565b6134ba90919063ffffffff16565b905060008711156142de57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308a600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561428a57600080fd5b505af115801561429e573d6000803e3d6000fd5b50505050506040513d60608110156142b557600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d8060008114614360576040519150601f19603f3d011682016040523d82523d6000602084013e614365565b606091505b505090505050505050505050506000601660006101000a81548160ff021916908315150217905550565b6000601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806144325750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156144de5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156144dd5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b905092915050565b600080600b54905060011515601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561455f5761455c600a548261343290919063ffffffff16565b90505b6000614588600c5461457a848761395490919063ffffffff16565b6134ba90919063ffffffff16565b90506145dc81601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343290919063ffffffff16565b601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef614683601854856134ba90919063ffffffff16565b6040518082815260200191505060405180910390a36146ab818561382b90919063ffffffff16565b92505050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77496e697469616c20646973746972627574696f6e206e6f742066696e616c697a65642e4e6f742061757468726f697a656420746f206578656375746520746869732066756e6374696f6e2ea26469706673582212202051c763be90df5abcaad584766454277d17589b720540d17c8f2b28b3cac83564736f6c63430007060033
Deployed Bytecode
0x60806040526004361061037a5760003560e01c8063784d20b1116101d1578063b065406911610102578063d1fce264116100a0578063dd62ed3e1161006f578063dd62ed3e146111ef578063f2fde38b14611274578063f887ea40146112c5578063fff434811461130657610381565b8063d1fce264146110a3578063d4399790146110d0578063d5938aac14611137578063d780d4dc1461118857610381565b8063bdb938e2116100dc578063bdb938e214610f77578063c851cc3214610fd4578063c939a4f614611025578063d08893581461105257610381565b8063b065406914610ed2578063b86a2fd714610efd578063bd94c8dd14610f2857610381565b806399e3b3bd1161016f578063a8688e2a11610149578063a8688e2a14610dba578063a9059cbb14610e0b578063a92558d014610e7c578063ab92c3f214610ea757610381565b806399e3b3bd14610c97578063a457c2d714610cd8578063a4b45c0014610d4957610381565b80638da5cb5b116101ab5780638da5cb5b14610b6e5780638f32d59b14610baf57806395d89b4114610bdc57806398118cb414610c6c57610381565b8063784d20b114610a9557806383b4ac6814610afc57806389e9616e14610b2957610381565b80632d517fdc116102ab578063530ddf64116102495780636fcba377116102235780636fcba3771461096f57806370a08231146109c8578063715018a614610a2d578063749796a514610a4457610381565b8063530ddf64146109005780636d351d1a146109175780636ddd17131461094257610381565b8063395093511161028557806339509351146107e15780634513e7d0146108525780634bfed05c146108695780634c50855d1461089457610381565b80632d517fdc14610737578063313ce567146107625780633751ed741461079057610381565b806323b872dd116103185780632b112e49116102f25780632b112e491461069f5780632b14ca56146106ca5780632b28af1b146106f55780632be6937d1461072057610381565b806323b872dd14610570578063264d26dd146106015780632abf77f51461064257610381565b8063180b0d7e11610354578063180b0d7e146104d857806318160ddd14610503578063186e2d771461052e5780631df4ccfc1461054557610381565b806306fdde031461038657806307f594a314610416578063095ea7b31461046757610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b61136b565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103db5780820151818401526020810190506103c0565b50505050905090810190601f1680156104085780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042257600080fd5b506104656004803603602081101561043957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061140d565b005b34801561047357600080fd5b506104c06004803603604081101561048a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611686565b60405180821515815260200191505060405180910390f35b3480156104e457600080fd5b506104ed611840565b6040518082815260200191505060405180910390f35b34801561050f57600080fd5b50610518611846565b6040518082815260200191505060405180910390f35b34801561053a57600080fd5b50610543611850565b005b34801561055157600080fd5b5061055a6119b6565b6040518082815260200191505060405180910390f35b34801561057c57600080fd5b506105e96004803603606081101561059357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119bc565b60405180821515815260200191505060405180910390f35b34801561060d57600080fd5b50610616611bfb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561064e57600080fd5b5061069d6004803603604081101561066557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611c21565b005b3480156106ab57600080fd5b506106b4611c8d565b6040518082815260200191505060405180910390f35b3480156106d657600080fd5b506106df611d65565b6040518082815260200191505060405180910390f35b34801561070157600080fd5b5061070a611d6b565b6040518082815260200191505060405180910390f35b34801561072c57600080fd5b50610735611d71565b005b34801561074357600080fd5b5061074c611d9f565b6040518082815260200191505060405180910390f35b34801561076e57600080fd5b50610777611da5565b604051808260ff16815260200191505060405180910390f35b34801561079c57600080fd5b506107df600480360360608110156107b357600080fd5b810190808035151590602001909291908035906020019092919080359060200190929190505050611dbc565b005b3480156107ed57600080fd5b5061083a6004803603604081101561080457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611dfa565b60405180821515815260200191505060405180910390f35b34801561085e57600080fd5b506108676120be565b005b34801561087557600080fd5b5061087e612170565b6040518082815260200191505060405180910390f35b3480156108a057600080fd5b506108a9612176565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156108ec5780820151818401526020810190506108d1565b505050509050019250505060405180910390f35b34801561090c57600080fd5b50610915612204565b005b34801561092357600080fd5b5061092c61241a565b6040518082815260200191505060405180910390f35b34801561094e57600080fd5b50610957612438565b60405180821515815260200191505060405180910390f35b34801561097b57600080fd5b506109c66004803603608081101561099257600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050612449565b005b3480156109d457600080fd5b50610a17600480360360208110156109eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124b3565b6040518082815260200191505060405180910390f35b348015610a3957600080fd5b50610a42612510565b005b348015610a5057600080fd5b50610a9360048036036020811015610a6757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125ca565b005b348015610aa157600080fd5b50610ae460048036036020811015610ab857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612636565b60405180821515815260200191505060405180910390f35b348015610b0857600080fd5b50610b11612656565b60405180821515815260200191505060405180910390f35b348015610b3557600080fd5b50610b6c60048036036040811015610b4c57600080fd5b81019080803590602001909291908035906020019092919050505061266e565b005b348015610b7a57600080fd5b50610b83612698565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bbb57600080fd5b50610bc46126c2565b60405180821515815260200191505060405180910390f35b348015610be857600080fd5b50610bf161271a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c31578082015181840152602081019050610c16565b50505050905090810190601f168015610c5e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610c7857600080fd5b50610c816127bc565b6040518082815260200191505060405180910390f35b348015610ca357600080fd5b50610cac6127c2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ce457600080fd5b50610d3160048036036040811015610cfb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506127e8565b60405180821515815260200191505060405180910390f35b348015610d5557600080fd5b50610db860048036036040811015610d6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b41565b005b348015610dc657600080fd5b50610e0960048036036020811015610ddd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bd8565b005b348015610e1757600080fd5b50610e6460048036036040811015610e2e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612dfe565b60405180821515815260200191505060405180910390f35b348015610e8857600080fd5b50610e91612f1a565b6040518082815260200191505060405180910390f35b348015610eb357600080fd5b50610ebc612f20565b6040518082815260200191505060405180910390f35b348015610ede57600080fd5b50610ee7612f26565b6040518082815260200191505060405180910390f35b348015610f0957600080fd5b50610f12612f2c565b6040518082815260200191505060405180910390f35b348015610f3457600080fd5b50610f6160048036036020811015610f4b57600080fd5b8101908080359060200190929190505050612f32565b6040518082815260200191505060405180910390f35b348015610f8357600080fd5b50610fd260048036036040811015610f9a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061302a565b005b348015610fe057600080fd5b5061102360048036036020811015610ff757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613096565b005b34801561103157600080fd5b5061103a6131af565b60405180821515815260200191505060405180910390f35b34801561105e57600080fd5b506110a16004803603606081101561107557600080fd5b8101908080351515906020019092919080359060200190929190803590602001909291905050506131c2565b005b3480156110af57600080fd5b506110b8613234565b60405180821515815260200191505060405180910390f35b3480156110dc57600080fd5b5061111f600480360360208110156110f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613247565b60405180821515815260200191505060405180910390f35b34801561114357600080fd5b506111866004803603602081101561115a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061329d565b005b34801561119457600080fd5b506111d7600480360360208110156111ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613309565b60405180821515815260200191505060405180910390f35b3480156111fb57600080fd5b5061125e6004803603604081101561121257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613329565b6040518082815260200191505060405180910390f35b34801561128057600080fd5b506112c36004803603602081101561129757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133b0565b005b3480156112d157600080fd5b506112da6133cd565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561131257600080fd5b5061133f6004803603602081101561132957600080fd5b81019080803590602001909291905050506133f3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b606060008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114035780601f106113d857610100808354040283529160200191611403565b820191906000526020600020905b8154815290600101906020018083116113e657829003601f168201915b5050505050905090565b6114156126c2565b61141e57600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561148757600080fd5b505afa15801561149b573d6000803e3d6000fd5b505050506040513d60208110156114b157600080fd5b810190808051906020019092919050505011611535576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20746f6b656e7320746f207265636f7665722e000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156115b957600080fd5b505afa1580156115cd573d6000803e3d6000fd5b505050506040513d60208110156115e357600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561164757600080fd5b505af115801561165b573d6000803e3d6000fd5b505050506040513d602081101561167157600080fd5b81019080805190602001909291905050505050565b6000600560149054906101000a900460ff16806116a757506116a66126c2565b5b806116fb5750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806146d86023913960400191505060405180910390fd5b81601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600c5481565b6000601754905090565b6118586126c2565b61186157600080fd5b600047116118d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4e6f2045544820746f207265636f7665722e000000000000000000000000000081525060200191505060405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d8060008114611937576040519150601f19603f3d011682016040523d82523d6000602084013e61193c565b606091505b50509050806119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4661696c656420746f207265636f766572204554482e0000000000000000000081525060200191505060405180910390fd5b50565b600b5481565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119f957600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414611be357611b62836040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135049092919063ffffffff16565b601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611bee8585856135c4565b5060019150509392505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c296126c2565b611c3257600080fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611d60601854611d52601960008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d446019600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546012600a0a620f42400260001981611d3157fe5b066000190361382b90919063ffffffff16565b61382b90919063ffffffff16565b6134ba90919063ffffffff16565b905090565b600a5481565b600e5481565b611d796126c2565b611d8257600080fd5b6001600560146101000a81548160ff021916908315150217905550565b60115481565b6000600260009054906101000a900460ff16905090565b611dc46126c2565b611dcd57600080fd5b82601060006101000a81548160ff0219169083151502179055508160128190555080601381905550505050565b6000600560149054906101000a900460ff1680611e1b5750611e1a6126c2565b5b80611e6f5750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ec4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806146d86023913960400191505060405180910390fd5b611f5382601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343290919063ffffffff16565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b60011515601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612167576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806146fb6028913960400191505060405180910390fd5b42600d81905550565b600f5481565b606060038054806020026020016040519081016040528092919081815260200182805480156121fa57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116121b0575b5050505050905090565b60011515601c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4e6f742061757468726f697a656420746f20657865637574652072656261736581525060200191505060405180910390fd5b6122d2613875565b60005b6003805490508110156124175760011515601b6000600384815481106122f757fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561240a576003818154811061237f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156123f157600080fd5b505af1158015612405573d6000803e3d6000fd5b505050505b80806001019150506122d5565b50565b60006124336018546015546134ba90919063ffffffff16565b905090565b60148054906101000a900460ff1681565b6124516126c2565b61245a57600080fd5b836008819055508260098190555081600a8190555061248660095460085461343290919063ffffffff16565b600b8190555080600c819055506004600c548161249f57fe5b04600b54106124ad57600080fd5b50505050565b6000612509601854601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ba90919063ffffffff16565b9050919050565b6125186126c2565b61252157600080fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482060405160405180910390a26000600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6125d26126c2565b6125db57600080fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b6000601660009054906101000a900460ff1615905090565b6126766126c2565b61267f57600080fd5b80620f424083028161268d57fe5b04600f819055505050565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b606060018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127b25780601f10612787576101008083540402835291602001916127b2565b820191906000526020600020905b81548152906001019060200180831161279557829003601f168201915b5050505050905090565b60085481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560149054906101000a900460ff168061280957506128086126c2565b5b8061285d5750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806146d86023913960400191505060405180910390fd5b6000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083106129c1576000601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a55565b6129d4838261382b90919063ffffffff16565b601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925601a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b612b496126c2565b612b5257600080fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612be06126c2565b612be957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c3157600080fd5b505af1158015612c45573d6000803e3d6000fd5b5050505060005b600380549050811015612d3f578173ffffffffffffffffffffffffffffffffffffffff1660038281548110612c7d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f50616972206164647265737320616c726561647920616464656400000000000081525060200191505060405180910390fd5b8080600101915050612c4c565b506003819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612e3b57600080fd5b600560149054906101000a900460ff1680612e5a5750612e596126c2565b5b80612eae5750600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806146d86023913960400191505060405180910390fd5b612f0e3385856135c4565b50600191505092915050565b60135481565b60125481565b60095481565b600d5481565b600080600d54830390506000612f6962015180612f5b620f42408561395490919063ffffffff16565b6134ba90919063ffffffff16565b90506000612fc0620f4240612fb284612fa4620f4240612f96600f5460175461395490919063ffffffff16565b6134ba90919063ffffffff16565b61395490919063ffffffff16565b6134ba90919063ffffffff16565b905060011515601060009054906101000a900460ff161515141561301f5761301c620f424061300e60125460115410612ffb57601254612fff565b6011545b8461395490919063ffffffff16565b6134ba90919063ffffffff16565b90505b809350505050919050565b6130326126c2565b61303b57600080fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61309e6126c2565b6130a757600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561316b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f526f75746572206164647265737320616c72656164792073657400000000000081525060200191505060405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff1681565b6131ca6126c2565b6131d357600080fd5b826014806101000a81548160ff0219169083151502179055506132298261321b836012600a0a620f4240026000198161320857fe5b06600019036134ba90919063ffffffff16565b61395490919063ffffffff16565b601581905550505050565b600560149054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6132a56126c2565b6132ae57600080fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b6000601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6133b86126c2565b6133c157600080fd5b6133ca816139da565b50565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6003818154811061340357600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284019050838110156134b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60006134fc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ad4565b905092915050565b60008383111582906135b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561357657808201518184015260208101905061355b565b50505050905090810190601f1680156135a35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000601660009054906101000a900460ff16156135ed576135e6848484613b9a565b9050613824565b60006136046018548461395490919063ffffffff16565b905061360e613cea565b1561361c5761361b613dc0565b5b60011515601060009054906101000a900460ff16151514156136565761364f60135460115461343290919063ffffffff16565b6011819055505b6136a881601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461382b90919063ffffffff16565b601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006136f7868661438f565b613701578161370d565b61370c8686846144e6565b5b905061376181601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343290919063ffffffff16565b601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef613808601854856134ba90919063ffffffff16565b6040518082815260200191505060405180910390a36001925050505b9392505050565b600061386d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613504565b905092915050565b600061388042612f32565b90506138978160175461343290919063ffffffff16565b6017819055506000196fffffffffffffffffffffffffffffffff1660175411156138d7576000196fffffffffffffffffffffffffffffffff166017819055505b6139046017546012600a0a620f424002600019816138f157fe5b06600019036134ba90919063ffffffff16565b60188190555080600e8190555042600d81905550620f42406011819055506017547fafae32ce2847c13a56ab802c034c27d3c19f1d61be48c424c5df134145cd44d060405160405180910390a250565b60008083141561396757600090506139d4565b600082840290508284828161397857fe5b04146139cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806146b76021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613a1457600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290613b80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613b45578082015181840152602081019050613b2a565b50505050905090810190601f168015613b725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613b8c57fe5b049050809150509392505050565b600080613bb26018548461395490919063ffffffff16565b9050613c0681601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461382b90919063ffffffff16565b601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c9b81601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343290919063ffffffff16565b601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019150509392505050565b6000801515601b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515148015613d585750601660009054906101000a900460ff16155b8015613d6e575060148054906101000a900460ff165b8015613dbb5750601554601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601660006101000a81548160ff0219169083151502179055506000613e31601854601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134ba90919063ffffffff16565b90506000613e716002613e63600b54613e556008548761395490919063ffffffff16565b6134ba90919063ffffffff16565b6134ba90919063ffffffff16565b90506000613e88828461382b90919063ffffffff16565b90506000600267ffffffffffffffff81118015613ea457600080fd5b50604051908082528060200260200182016040528015613ed35781602001602082028036833780820191505090505b5090503081600081518110613ee457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613f8657600080fd5b505afa158015613f9a573d6000803e3d6000fd5b505050506040513d6020811015613fb057600080fd5b810190808051906020019092919050505081600181518110613fce57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156140d15780820151818401526020810190506140b6565b505050509050019650505050505050600060405180830381600087803b1580156140fa57600080fd5b505af115801561410e573d6000803e3d6000fd5b505050506000614127824761382b90919063ffffffff16565b9050600061415561414460026008546134ba90919063ffffffff16565b600b5461382b90919063ffffffff16565b905060006141936002614185846141776008548861395490919063ffffffff16565b6134ba90919063ffffffff16565b6134ba90919063ffffffff16565b905060008711156142de57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308a600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b15801561428a57600080fd5b505af115801561429e573d6000803e3d6000fd5b50505050506040513d60608110156142b557600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405180600001905060006040518083038185875af1925050503d8060008114614360576040519150601f19603f3d011682016040523d82523d6000602084013e614365565b606091505b505090505050505050505050506000601660006101000a81548160ff021916908315150217905550565b6000601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806144325750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156144de5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156144dd5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b905092915050565b600080600b54905060011515601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141561455f5761455c600a548261343290919063ffffffff16565b90505b6000614588600c5461457a848761395490919063ffffffff16565b6134ba90919063ffffffff16565b90506145dc81601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461343290919063ffffffff16565b601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef614683601854856134ba90919063ffffffff16565b6040518082815260200191505060405180910390a36146ab818561382b90919063ffffffff16565b92505050939250505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77496e697469616c20646973746972627574696f6e206e6f742066696e616c697a65642e4e6f742061757468726f697a656420746f206578656375746520746869732066756e6374696f6e2ea26469706673582212202051c763be90df5abcaad584766454277d17589b720540d17c8f2b28b3cac83564736f6c63430007060033
Deployed Bytecode Sourcemap
11930:23298:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11569:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34837:351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29154:286;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13009:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18502:102;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34539:290;;;;;;;;;;;;;:::i;:::-;;12944:58;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24132:457;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12143:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20538:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33383:215;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12911:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13112:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29868:114;;;;;;;;;;;;;:::i;:::-;;13263:45;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11755:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32043:325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28510:439;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18114:247;;;;;;;;;;;;;:::i;:::-;;13153:58;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19827:106;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17575:406;;;;;;;;;;;;;:::i;:::-;;33699:126;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13487:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34096:435;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21529:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3290:126;;;;;;;;;;;;;:::i;:::-;;30447:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14037:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33606:85;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32663:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3025:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3190:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11660:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12832:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12182:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27363:629;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33833:255;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19358:346;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18813:248;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;13385:62;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13315:63;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12870:34;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13053:52;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15902:869;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20137:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28112:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13220:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31502:230;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12229:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29614:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30155:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13984:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21062:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3424:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13456:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12106:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11569:83;11606:13;11639:5;11632:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11569:83;:::o;34837:351::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;34992:1:::1;34950:13;34943:31;;;34983:4;34943:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:50;34921:121;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35060:13;35053:30;;;35098:10;35130:13;35123:31;;;35163:4;35123:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;35053:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;34837:351:::0;:::o;29154:286::-;29290:4;15484:27;;;;;;;;;;;:57;;;;15532:9;:7;:9::i;:::-;15484:57;:104;;;;15562:14;:26;15577:10;15562:26;;;;;;;;;;;;;;;;;;;;;;;;;15484:104;15462:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29353:5:::1;29312:17;:29;29330:10;29312:29;;;;;;;;;;;;;;;:38;29342:7;29312:38;;;;;;;;;;;;;;;:46;;;;29395:7;29374:36;;29383:10;29374:36;;;29404:5;29374:36;;;;;;;;;;;;;;;;;;29428:4;29421:11;;29154:286:::0;;;;:::o;13009:35::-;;;;:::o;18502:102::-;18557:7;18584:12;;18577:19;;18502:102;:::o;34539:290::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;34632:1:::1;34608:21;:25;34600:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;34668:12;34694:10;34686:24;;34732:21;34686:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34667:101;;;34787:7;34779:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;3173:1;34539:290::o:0;12944:58::-;;;;:::o;24132:457::-;24275:4;24262:2;15748:3;15734:18;;:2;:18;;;;15726:27;;;;;;24343:2:::1;24296:17;:23;24314:4;24296:23;;;;;;;;;;;;;;;:35;24320:10;24296:35;;;;;;;;;;;;;;;;:50;24292:225;;24401:104;24473:5;24401:104;;;;;;;;;;;;;;;;::::0;:17:::1;:23;24419:4;24401:23;;;;;;;;;;;;;;;:67;24443:10;24401:67;;;;;;;;;;;;;;;;:71;;:104;;;;;:::i;:::-;24363:17;:23;24381:4;24363:23;;;;;;;;;;;;;;;:35;24387:10;24363:35;;;;;;;;;;;;;;;:142;;;;24292:225;24529:30;24543:4;24549:2;24553:5;24529:13;:30::i;:::-;;24577:4;24570:11;;24132:457:::0;;;;;;:::o;12143:32::-;;;;;;;;;;;;;:::o;20538:172::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;20695:7:::1;20659:23;:33;20683:8;20659:33;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;20538:172:::0;;:::o;33383:215::-;33436:7;33476:114;33559:16;;33477:58;33516:12;:18;12634:42;33516:18;;;;;;;;;;;;;;;;33477:34;33492:12;:18;12553:42;33492:18;;;;;;;;;;;;;;;;12455:2;12811;:12;12799:9;:24;12512:1;12503:11;13673:38;;;;;;12512:1;12503:11;13658:54;33477:14;;:34;;;;:::i;:::-;:38;;:58;;;;:::i;:::-;33476:64;;:114;;;;:::i;:::-;33456:134;;33383:215;:::o;12911:26::-;;;;:::o;13112:34::-;;;;:::o;29868:114::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;29970:4:::1;29940:27;;:34;;;;;;;;;;;;;;;;;;29868:114::o:0;13263:45::-;;;;:::o;11755:83::-;11796:5;11821:9;;;;;;;;;;;11814:16;;11755:83;:::o;32043:325::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;32232:8:::1;32213:16;;:27;;;;;;;;;;;;;;;;;;32276:23;32251:22;:48;;;;32336:24;32310:23;:50;;;;32043:325:::0;;;:::o;28510:439::-;28643:4;15484:27;;;;;;;;;;;:57;;;;15532:9;:7;:9::i;:::-;15484:57;:104;;;;15562:14;:26;15577:10;15562:26;;;;;;;;;;;;;;;;;;;;;;;;;15484:104;15462:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28706:78:::1;28773:10;28706:17;:29;28724:10;28706:29;;;;;;;;;;;;;;;:62;28750:7;28706:62;;;;;;;;;;;;;;;;:66;;:78;;;;:::i;:::-;28665:17;:29;28683:10;28665:29;;;;;;;;;;;;;;;:38;28695:7;28665:38;;;;;;;;;;;;;;;:119;;;;28848:7;28800:119;;28823:10;28800:119;;;28870:17;:29;28888:10;28870:29;;;;;;;;;;;;;;;:38;28900:7;28870:38;;;;;;;;;;;;;;;;28800:119;;;;;;;;;;;;;;;;;;28937:4;28930:11;;28510:439:::0;;;;:::o;18114:247::-;18231:4;18192:43;;:23;:35;18216:10;18192:35;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;18170:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18338:15;18316:19;:37;;;;18114:247::o;13153:58::-;;;;:::o;19827:106::-;19876:16;19912:13;19905:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19827:106;:::o;17575:406::-;17681:4;17642:43;;:23;:35;17666:10;17642:35;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;17620:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17758:9;:7;:9::i;:::-;17785;17780:194;17804:13;:20;;;;17800:1;:24;17780:194;;;17886:4;17850:40;;:14;:32;17865:13;17879:1;17865:16;;;;;;;;;;;;;;;;;;;;;;;;;17850:32;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;17846:117;;;17923:13;17937:1;17923:16;;;;;;;;;;;;;;;;;;;;;;;;;17911:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17846:117;17826:3;;;;;;;17780:194;;;;17575:406::o;33699:126::-;33752:7;33779:38;33800:16;;33779;;:20;;:38;;;;:::i;:::-;33772:45;;33699:126;:::o;13487:30::-;;;;;;;;;;;;:::o;34096:435::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;34292:13:::1;34277:12;:28;;;;34333:15;34316:14;:32;;;;34369:8;34359:7;:18;;;;34399:32;34416:14;;34399:12;;:16;;:32;;;;:::i;:::-;34388:8;:43;;;;34459:15;34442:14;:32;;;;34521:1;34504:14;;:18;;;;;;34493:8;;:29;34485:38;;;::::0;::::1;;34096:435:::0;;;;:::o;21529:138::-;21593:7;21620:39;21642:16;;21620:12;:17;21633:3;21620:17;;;;;;;;;;;;;;;;:21;;:39;;;;:::i;:::-;21613:46;;21529:138;;;:::o;3290:126::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;3371:6:::1;;;;;;;;;;;3352:26;;;;;;;;;;;;3406:1;3389:6;;:19;;;;;;;;;;;;;;;;;;3290:126::o:0;30447:101::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;30536:4:::1;30514:12;:19;30527:5;30514:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;30447:101:::0;:::o;14037:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;33606:85::-;33652:4;33677:6;;;;;;;;;;;33676:7;33669:14;;33606:85;:::o;32663:185::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;32831:9:::1;12405:7;32805:11;:22;32804:36;;;;;;32783:18;:57;;;;32663:185:::0;;:::o;3025:79::-;3063:7;3090:6;;;;;;;;;;;3083:13;;3025:79;:::o;3190:92::-;3230:4;3268:6;;;;;;;;;;;3254:20;;:10;:20;;;3247:27;;3190:92;:::o;11660:87::-;11699:13;11732:7;11725:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11660:87;:::o;12832:31::-;;;;:::o;12182:40::-;;;;;;;;;;;;;:::o;27363:629::-;27501:4;15484:27;;;;;;;;;;;:57;;;;15532:9;:7;:9::i;:::-;15484:57;:104;;;;15562:14;:26;15577:10;15562:26;;;;;;;;;;;;;;;;;;;;;;;;;15484:104;15462:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27523:16:::1;27542:17;:29;27560:10;27542:29;;;;;;;;;;;;;;;:38;27572:7;27542:38;;;;;;;;;;;;;;;;27523:57;;27614:8;27595:15;:27;27591:237;;27680:1;27639:17;:29;27657:10;27639:29;;;;;;;;;;;;;;;:38;27669:7;27639:38;;;;;;;;;;;;;;;:42;;;;27591:237;;;27755:61;27786:15;27755:8;:12;;:61;;;;:::i;:::-;27714:17;:29;27732:10;27714:29;;;;;;;;;;;;;;;:38;27744:7;27714:38;;;;;;;;;;;;;;;:102;;;;27591:237;27891:7;27843:119;;27866:10;27843:119;;;27913:17;:29;27931:10;27913:29;;;;;;;;;;;;;;;:38;27943:7;27913:38;;;;;;;;;;;;;;;;27843:119;;;;;;;;;;;;;;;;;;27980:4;27973:11;;;27363:629:::0;;;;:::o;33833:255::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;33997::::1;33977:17;;:38;;;;;;;;;;;;;;;;;;34054:26;34026:25;;:54;;;;;;;;;;;;;;;;;;33833:255:::0;;:::o;19358:346::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;19440:8:::1;19428:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19474:9;19469:145;19493:13;:20;;;;19489:1;:24;19469:145;;;19563:8;19543:28;;:13;19557:1;19543:16;;;;;;;;;;;;;;;;;;;;;;;;;:28;;;;19535:67;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;19515:3;;;;;;;19469:145;;;;19626:13;19645:8;19626:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19692:4;19665:14;:24;19680:8;19665:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;19358:346:::0;:::o;18813:248::-;18973:4;18918:2;15748:3;15734:18;;:2;:18;;;;15726:27;;;;;;15484::::1;;;;;;;;;;;:57;;;;15532:9;:7;:9::i;:::-;15484:57;:104;;;;15562:14;:26;15577:10;15562:26;;;;;;;;;;;;;;;;;;;;;;;;;15484:104;15462:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18995:36:::2;19009:10;19021:2;19025:5;18995:13;:36::i;:::-;;19049:4;19042:11;;18813:248:::0;;;;;:::o;13385:62::-;;;;:::o;13315:63::-;;;;:::o;12870:34::-;;;;:::o;13053:52::-;;;;:::o;15902:869::-;15966:7;15986:28;16030:19;;16017:10;:32;15986:63;;16062:42;16107:83;12726:5;16107:48;12405:7;16107:20;:38;;:48;;;;:::i;:::-;:66;;:83;;;;:::i;:::-;16062:128;;16203:23;16229:160;12405:7;16229:132;16326:34;16229:78;12405:7;16229:50;16260:18;;16229:12;;:30;;:50;;;;:::i;:::-;:68;;:78;;;;:::i;:::-;:96;;:132;;;;:::i;:::-;:150;;:160;;;;:::i;:::-;16203:186;;16426:4;16406:24;;:16;;;;;;;;;;;:24;;;16402:327;;;16465:252;12405:7;16465:220;16547:22;;16525:19;;:44;:141;;16644:22;;16525:141;;;16597:19;;16525:141;16465:15;:37;;:220;;;;:::i;:::-;:242;;:252;;;;:::i;:::-;16447:270;;16402:327;16748:15;16741:22;;;;;15902:869;;;:::o;20137:154::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;20276:7:::1;20249:14;:24;20264:8;20249:24;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20137:154:::0;;:::o;28112:184::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;28209:8:::1;28190:27;;28198:6;;;;;;;;;;;28190:27;;;;28182:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28279:8;28259:6;;:29;;;;;;;;;;;;;;;;;;28112:184:::0;:::o;13220:36::-;;;;;;;;;;;;;:::o;31502:230::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;31654:8:::1;31640:11;::::0;:22:::1;;;;;;;;;;;;;;;;;;31692:32;31719:4;31692:22;31707:6;12455:2;12811;:12;12799:9;:24;12512:1;12503:11;13673:38;;;;;;12512:1;12503:11;13658:54;31692:14;;:22;;;;:::i;:::-;:26;;:32;;;;:::i;:::-;31673:16;:51;;;;31502:230:::0;;;:::o;12229:39::-;;;;;;;;;;;;;:::o;29614:113::-;29676:4;29700:12;:19;29713:5;29700:19;;;;;;;;;;;;;;;;;;;;;;;;;29693:26;;29614:113;;;:::o;30155:105::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;30248:4:::1;30224:14;:21;30239:5;30224:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30155:105:::0;:::o;13984:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;21062:192::-;21181:7;21213:17;:24;21231:5;21213:24;;;;;;;;;;;;;;;:33;21238:7;21213:33;;;;;;;;;;;;;;;;21206:40;;21062:192;;;;:::o;3424:109::-;3152:9;:7;:9::i;:::-;3144:18;;;;;;3497:28:::1;3516:8;3497:18;:28::i;:::-;3424:109:::0;:::o;13456:24::-;;;;;;;;;;;;;:::o;12106:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1337:181::-;1395:7;1415:9;1431:1;1427;:5;1415:17;;1456:1;1451;:6;;1443:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1509:1;1502:8;;;1337:181;;;;:::o;2162:132::-;2220:7;2247:39;2251:1;2254;2247:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2240:46;;2162:132;;;;:::o;1670:226::-;1790:7;1823:1;1818;:6;;1826:12;1810:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1850:9;1866:1;1862;:5;1850:17;;1887:1;1880:8;;;1670:226;;;;;:::o;22776:910::-;22895:4;22916:6;;;;;;;;;;;22912:80;;;22946:34;22961:6;22969:2;22973:6;22946:14;:34::i;:::-;22939:41;;;;22912:80;23004:17;23024:28;23035:16;;23024:6;:10;;:28;;;;:::i;:::-;23004:48;;23069:17;:15;:17::i;:::-;23065:61;;;23103:11;:9;:11::i;:::-;23065:61;23162:4;23142:24;;:16;;;;;;;;;;;:24;;;23138:159;;;23205:80;23247:23;;23205:19;;:23;;:80;;;;:::i;:::-;23183:19;:102;;;;23138:159;23332:35;23357:9;23332:12;:20;23345:6;23332:20;;;;;;;;;;;;;;;;:24;;:35;;;;:::i;:::-;23309:12;:20;23322:6;23309:20;;;;;;;;;;;;;;;:58;;;;23380:25;23408:26;23423:6;23431:2;23408:14;:26::i;:::-;:98;;23497:9;23408:98;;;23450:31;23459:6;23467:2;23471:9;23450:8;:31::i;:::-;23408:98;23380:126;;23536:39;23557:17;23536:12;:16;23549:2;23536:16;;;;;;;;;;;;;;;;:20;;:39;;;;:::i;:::-;23517:12;:16;23530:2;23517:16;;;;;;;;;;;;;;;:58;;;;23610:2;23593:61;;23602:6;23593:61;;;23614:39;23636:16;;23614:17;:21;;:39;;;;:::i;:::-;23593:61;;;;;;;;;;;;;;;;;;23674:4;23667:11;;;;22776:910;;;;;;:::o;1526:136::-;1584:7;1611:43;1615:1;1618;1611:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1604:50;;1526:136;;;;:::o;16934:487::-;16973:19;16995:30;17009:15;16995:13;:30::i;:::-;16973:52;;17051:38;17076:11;17051:12;;:16;;:38;;;;:::i;:::-;17036:12;:53;;;;13766:1;13757:11;17121:10;;17106:12;;:25;17102:83;;;13766:1;13757:11;17163:10;;17148:12;:25;;;;17102:83;17216:28;17231:12;;12455:2;12811;:12;12799:9;:24;12512:1;12503:11;13673:38;;;;;;12512:1;12503:11;13658:54;17216:14;;:28;;;;:::i;:::-;17197:16;:47;;;;17275:11;17257:15;:29;;;;17319:15;17297:19;:37;;;;12405:7;17345:19;:30;;;;17400:12;;17393:20;;;;;;;;;;16934:487;:::o;1904:250::-;1962:7;1991:1;1986;:6;1982:47;;;2016:1;2009:8;;;;1982:47;2041:9;2057:1;2053;:5;2041:17;;2086:1;2081;2077;:5;;;;;;:10;2069:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2145:1;2138:8;;;1904:250;;;;;:::o;3541:187::-;3635:1;3615:22;;:8;:22;;;;3607:31;;;;;;3683:8;3654:38;;3675:6;;;;;;;;;;;3654:38;;;;;;;;;;;;3712:8;3703:6;;:17;;;;;;;;;;;;;;;;;;3541:187;:::o;2302:225::-;2422:7;2454:1;2450;:5;2457:12;2442:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2481:9;2497:1;2493;:5;;;;;;2481:17;;2518:1;2511:8;;;2302:225;;;;;:::o;22005:339::-;22123:4;22140:17;22160:28;22171:16;;22160:6;:10;;:28;;;;:::i;:::-;22140:48;;22220:33;22243:9;22220:12;:18;22233:4;22220:18;;;;;;;;;;;;;;;;:22;;:33;;;;:::i;:::-;22199:12;:18;22212:4;22199:18;;;;;;;;;;;;;;;:54;;;;22283:31;22304:9;22283:12;:16;22296:2;22283:16;;;;;;;;;;;;;;;;:20;;:31;;;;:::i;:::-;22264:12;:16;22277:2;22264:16;;;;;;;;;;;;;;;:50;;;;22332:4;22325:11;;;22005:339;;;;;:::o;32997:246::-;33047:4;33114:5;33084:35;;:14;:26;33099:10;33084:26;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;:59;;;;;33137:6;;;;;;;;;;;33136:7;33084:59;:87;;;;;33160:11;;;;;;;;;;33084:87;:151;;;;;33219:16;;33188:12;:27;33209:4;33188:27;;;;;;;;;;;;;;;;:47;;33084:151;33064:171;;32997:246;:::o;24776:1466::-;15359:4;15350:6;;:13;;;;;;;;;;;;;;;;;;24830:28:::1;24861:73;24907:16;;24861:12;:27;24882:4;24861:27;;;;;;;;;;;;;;;;:31;;:73;;;;:::i;:::-;24830:104;;24945:23;24971:101;25070:1;24971:80;25042:8;;24971:52;25010:12;;24971:20;:38;;:52;;;;:::i;:::-;:70;;:80;;;;:::i;:::-;:98;;:101;;;;:::i;:::-;24945:127;;25083:20;25106:41;25131:15;25106:20;:24;;:41;;;;:::i;:::-;25083:64;;25160:21;25198:1;25184:16;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25160:40;;25229:4;25211;25216:1;25211:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;25255:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;25245:4;25250:1;25245:7;;;;;;;;;;;;;:23;;;;;;;;;::::0;::::1;25281:21;25305;25281:45;;25339:6;;;;;;;;;;;:57;;;25411:12;25438:1;25454:4;25481;25501:15;25339:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25540:17;25560:40;25586:13;25560:21;:25;;:40;;;;:::i;:::-;25540:60;;25611:19;25633:33;25646:19;25663:1;25646:12;;:16;;:19;;;;:::i;:::-;25633:8;;:12;;:33;;;;:::i;:::-;25611:55;;25679:26;25708:93;25799:1;25708:72;25768:11;25708:41;25736:12;;25708:9;:27;;:41;;;;:::i;:::-;:59;;:72;;;;:::i;:::-;:90;;:93;;;;:::i;:::-;25679:122;;25836:1;25818:15;:19;25814:292;;;25854:6;;;;;;;;;;;:22;;;25884:18;25930:4;25954:15;25988:1;26008::::0;26028:17:::1;;;;;;;;;;;26064:15;25854:240;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25814:292;26119:12;26145:25;;;;;;;;;;;26137:39;;26198:21;26137:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26118:116;;;15374:1;;;;;;;;;15395:5:::0;15386:6;;:14;;;;;;;;;;;;;;;;;;24776:1466::o;30977:253::-;31077:4;31120:14;:20;31135:4;31120:20;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;31144:14;:18;31159:2;31144:18;;;;;;;;;;;;;;;;;;;;;;;;;31120:42;31119:103;;;;;31182:12;:18;31195:4;31182:18;;;;;;;;;;;;;;;;;;;;;;;;;31181:19;:40;;;;;31205:12;:16;31218:2;31205:16;;;;;;;;;;;;;;;;;;;;;;;;;31204:17;31181:40;31119:103;31099:123;;30977:253;;;;:::o;26586:560::-;26703:7;26723:17;26743:8;;26723:28;;26788:4;26766:26;;:14;:18;26781:2;26766:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;26762:66;;;26806:22;26820:7;;26806:9;:13;;:22;;;;:::i;:::-;26794:34;;26762:66;26841:17;26861:44;26890:14;;26861:24;26875:9;26861;:13;;:24;;;;:::i;:::-;:28;;:44;;;;:::i;:::-;26841:64;;26948:66;26994:9;26948:12;:27;26969:4;26948:27;;;;;;;;;;;;;;;;:31;;:66;;;;:::i;:::-;26918:12;:27;26939:4;26918:27;;;;;;;;;;;;;;;:96;;;;27055:4;27030:64;;27039:6;27030:64;;;27062:31;27076:16;;27062:9;:13;;:31;;;;:::i;:::-;27030:64;;;;;;;;;;;;;;;;;;27114:24;27128:9;27114;:13;;:24;;;;:::i;:::-;27107:31;;;;26586:560;;;;;:::o
Swarm Source
ipfs://2051c763be90df5abcaad584766454277d17589b720540d17c8f2b28b3cac835
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.