ERC-20
Overview
Max Total Supply
38,894,260,539.529120241294753402 X3
Holders
194
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
236,091.494260206577132526 X3Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TripleX
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-16 */ pragma solidity ^0.6.0; /* Seed again. Let's moon for the long term! */ /** * Smart contract library of mathematical functions operating with signed * 64.64-bit fixed point numbers. Signed 64.64-bit fixed point number is * basically a simple fraction whose numerator is signed 128-bit integer and * denominator is 2^64. As long as denominator is always the same, there is no * need to store it, thus in Solidity signed 64.64-bit fixed point numbers are * represented by int128 type holding only the numerator. */ library ABDKMath64x64 { /** * Minimum value signed 64.64-bit fixed point number may have. */ int128 private constant MIN_64x64 = -0x80000000000000000000000000000000; /** * Maximum value signed 64.64-bit fixed point number may have. */ int128 private constant MAX_64x64 = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; /** * Calculate x + y. Revert on overflow. * * @param x signed 64.64-bit fixed point number * @param y signed 64.64-bit fixed point number * @return signed 64.64-bit fixed point number */ function add (int128 x, int128 y) internal pure returns (int128) { int256 result = int256(x) + y; require (result >= MIN_64x64 && result <= MAX_64x64); return int128 (result); } /** * Calculate x * y rounding down, where x is signed 64.64 fixed point number * and y is unsigned 256-bit integer number. Revert on overflow. * * @param x signed 64.64 fixed point number * @param y unsigned 256-bit integer number * @return unsigned 256-bit integer number */ function mulu (int128 x, uint256 y) internal pure returns (uint256) { if (y == 0) return 0; require (x >= 0); uint256 lo = (uint256 (x) * (y & 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)) >> 64; uint256 hi = uint256 (x) * (y >> 128); require (hi <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); hi <<= 64; require (hi <= 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF - lo); return hi + lo; } /** * Calculate x^y assuming 0^0 is 1, where x is signed 64.64 fixed point number * and y is unsigned 256-bit integer number. Revert on overflow. * * @param x signed 64.64-bit fixed point number * @param y uint256 value * @return signed 64.64-bit fixed point number */ function pow (int128 x, uint256 y) internal pure returns (int128) { uint256 absoluteResult; bool negativeResult = false; if (x >= 0) { absoluteResult = powu (uint256 (x) << 63, y); } else { // We rely on overflow behavior here absoluteResult = powu (uint256 (uint128 (-x)) << 63, y); negativeResult = y & 1 > 0; } absoluteResult >>= 63; if (negativeResult) { require (absoluteResult <= 0x80000000000000000000000000000000); return -int128 (absoluteResult); // We rely on overflow behavior here } else { require (absoluteResult <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF); return int128 (absoluteResult); // We rely on overflow behavior here } } function fromUInt (uint256 x) internal pure returns (int128) { require (x <= 0x7FFFFFFFFFFFFFFF); return int128 (x << 64); } /** * Calculate x^y assuming 0^0 is 1, where x is unsigned 129.127 fixed point * number and y is unsigned 256-bit integer number. Revert on overflow. * * @param x unsigned 129.127-bit fixed point number * @param y uint256 value * @return unsigned 129.127-bit fixed point number */ function powu (uint256 x, uint256 y) private pure returns (uint256) { if (y == 0) return 0x80000000000000000000000000000000; else if (x == 0) return 0; else { int256 msb = 0; uint256 xc = x; if (xc >= 0x100000000000000000000000000000000) { xc >>= 128; msb += 128; } if (xc >= 0x10000000000000000) { xc >>= 64; msb += 64; } if (xc >= 0x100000000) { xc >>= 32; msb += 32; } if (xc >= 0x10000) { xc >>= 16; msb += 16; } if (xc >= 0x100) { xc >>= 8; msb += 8; } if (xc >= 0x10) { xc >>= 4; msb += 4; } if (xc >= 0x4) { xc >>= 2; msb += 2; } if (xc >= 0x2) msb += 1; // No need to shift xc anymore int256 xe = msb - 127; if (xe > 0) x >>= xe; else x <<= -xe; uint256 result = 0x80000000000000000000000000000000; int256 re = 0; while (y > 0) { if (y & 1 > 0) { result = result * x; y -= 1; re += xe; if (result >= 0x8000000000000000000000000000000000000000000000000000000000000000) { result >>= 128; re += 1; } else result >>= 127; if (re < -127) return 0; // Underflow require (re < 128); // Overflow } else { x = x * x; y >>= 1; xe <<= 1; if (x >= 0x8000000000000000000000000000000000000000000000000000000000000000) { x >>= 128; xe += 1; } else x >>= 127; if (xe < -127) return 0; // Underflow require (xe < 128); // Overflow } } if (re > 0) result <<= re; else if (re < 0) result >>= -re; return result; } } } // File: node_modules\openzeppelin-solidity\contracts\GSN\Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: node_modules\openzeppelin-solidity\contracts\token\ERC20\IERC20.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: node_modules\openzeppelin-solidity\contracts\math\SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: node_modules\openzeppelin-solidity\contracts\utils\Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: contracts\FLOW.sol pragma solidity ^0.6.2; contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Pair { function sync() external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; } contract Balancer { constructor() public { } } contract TripleX is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; string private _name = "TripleX.network"; string private _symbol = "X3"; uint8 private _decimals = 18; mapping(address => uint256) internal _reflectionBalance; mapping(address => uint256) internal _tokenBalance; mapping(address => mapping(address => uint256)) internal _allowances; mapping(address => uint256) internal _first; uint256 public firstBuyersCount = 0; uint256 private constant MAX = ~uint256(0); uint256 internal _tokenTotal = 17500 ether; uint256 internal _initialSupply = _tokenTotal; uint256 internal _reflectionTotal = (MAX - (MAX % _tokenTotal)); mapping(address => bool) isExcludedFromFee; mapping(address => bool) internal _isExcluded; address[] internal _excluded; uint256 public _feeDecimal = 2; uint256 public _taxFee = 300; uint256 public _liquidityFee = 600; uint256 public _rebalanceCallerFee = 500; uint256 public _taxFeeTotal; uint256 public _burnFeeTotal; uint256 public _liquidityFeeTotal; bool public tradingEnabled = false; bool private inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public rebalanceEnalbed = true; address payable balancer2; uint256 public minTokensBeforeSwap = 100; uint256 public minEthBeforeSwap = 100; uint256 public liquidityAddedAt; uint256 public lastRebalance = now ; uint256 public rebalanceInterval = 15 minutes; uint256 public lastBuyIn = now ; uint256 public buyInInterval = 3 minutes; uint256 public delayTime = 5 minutes; int256 public manualCycle = -1; uint256 private _startTime; uint256 private constant CYCLE_SECONDS = 86400; uint256 private constant FINAL_CYCLE = 4500; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public balancer; event TradingEnabled(bool enabled); event RewardsDistributed(uint256 amount); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapedTokenForEth(uint256 EthAmount, uint256 TokenAmount); event SwapedEthForTokens(uint256 EthAmount, uint256 TokenAmount, uint256 CallerReward, uint256 AmountBurned); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() public { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //@dev Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; balancer = address(new Balancer()); isExcludedFromFee[_msgSender()] = true; isExcludedFromFee[address(this)] = true; _isExcluded[uniswapV2Pair] = true; _excluded.push(uniswapV2Pair); _reflectionBalance[_msgSender()] = _reflectionTotal; _initEras(); _startTime = block.timestamp; emit Transfer(address(0), _msgSender(), _tokenTotal); } struct Era { uint256 startCycle; uint256 endCycle; int128 cycleInflation; uint256 finalSupply; } Era[3] private _eras; function _initEras() private { _eras[0] = Era(1, 7, 737869762948382064, 23028806136627204194304); _eras[1] = Era(8, 38, 553402322211286548, 55896956891737406570496); _eras[2] = Era(39, 4520, 184467440737095516, 68945969568917374065704960); } 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; } function totalSupply() public override view returns (uint256) { uint256 cycle = _getCycle(_startTime, block.timestamp); return _getSupply(_initialSupply, cycle); } function _getCycle(uint256 startTime, uint256 currentTime) private view returns(uint256) { if (manualCycle >= 0) { return uint256(manualCycle); } uint256 secondsElapsed = currentTime.sub(startTime); uint256 cycle = (secondsElapsed - (secondsElapsed % CYCLE_SECONDS)) / CYCLE_SECONDS + 1; if (cycle >= FINAL_CYCLE) return FINAL_CYCLE; return cycle; } function _getSupply(uint256 initialSupply, uint256 currentCycle) private view returns(uint256) { uint256 currentSupply = initialSupply; for (uint256 i = 0; i < _eras.length; i++) { Era memory era = _eras[i]; if (currentCycle > era.endCycle) { currentSupply = era.finalSupply; } else { currentSupply = _compound(currentSupply, era.cycleInflation, currentCycle.sub(era.startCycle)); break; } } return currentSupply; } function _compound(uint256 principle, int128 rate, uint256 periods) private pure returns(uint256){ uint256 result = ABDKMath64x64.mulu( ABDKMath64x64.pow ( ABDKMath64x64.add ( 0x10000000000000000, rate), periods), principle); return result; } function balanceOf(address account) public override view returns (uint256) { if (_isExcluded[account]) return _tokenBalance[account]; return tokenFromReflection(_reflectionBalance[account]); } function transfer(address recipient, uint256 amount) public override virtual returns (bool) { _transfer(_msgSender(),recipient,amount); return true; } function allowance(address owner, address spender) public override view returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public override virtual returns (bool) { _transfer(sender,recipient,amount); _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub( amount,"ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(),spender,_allowances[_msgSender()][spender].sub(subtractedValue,"ERC20: decreased allowance below zero")); return true; } function isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function reflectionFromToken(uint256 tokenAmount, bool deductTransferFee) public view returns (uint256) { require(tokenAmount <= totalSupply(), "Amount must be less than supply"); if (!deductTransferFee) { return tokenAmount.mul(_getReflectionRate()); } else { return tokenAmount.sub(tokenAmount.mul(_taxFee).div(10** _feeDecimal + 2)).mul(_getReflectionRate()); } } function tokenFromReflection(uint256 reflectionAmount) public view returns (uint256) { require( reflectionAmount <= _reflectionTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getReflectionRate(); return reflectionAmount.div(currentRate); } function excludeAccount(address account) external onlyOwner() { require( account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, "AERUS: Uniswap router cannot be excluded." ); require(account != address(this), 'AERUS: The contract it self cannot be excluded'); require(!_isExcluded[account], "AERUS: Account is already excluded"); if (_reflectionBalance[account] > 0) {_tokenBalance[account] = tokenFromReflection(_reflectionBalance[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeAccount(address account) external onlyOwner() { require(_isExcluded[account], "AERUS: Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tokenBalance[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _approve( address owner, address spender, uint256 amount ) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address sender, address recipient, uint256 amount ) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); require(tradingEnabled || sender == owner() || recipient == owner() || isExcludedFromFee[sender] || isExcludedFromFee[recipient], "Trading is locked before presale."); if (firstBuyersCount < 4 && uniswapV2Pair == sender && sender != owner()) { firstBuyersCount++; _first[recipient] = block.timestamp; } if (uniswapV2Pair == recipient && _first[sender] + delayTime > block.timestamp) { revert(); } if(!inSwapAndLiquify && sender != uniswapV2Pair && sender != owner()) { bool swap = true; uint256 contractBalance = address(this).balance; //@dev Buy tokens if(now > lastRebalance + rebalanceInterval && rebalanceEnalbed && contractBalance >= minEthBeforeSwap){ buyAndBurnToken(contractBalance); swap = false; } if(swap) { uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= minTokensBeforeSwap; if (now > lastBuyIn + buyInInterval && overMinTokenBalance && swapAndLiquifyEnabled) { swapTokensForEth(); lastBuyIn = now; } } } uint256 transferAmount = amount; uint256 rate = _getReflectionRate(); if(!isExcludedFromFee[sender] && !isExcludedFromFee[recipient] && !inSwapAndLiquify){ transferAmount = collectFee(sender,amount,rate); } _reflectionBalance[sender] = _reflectionBalance[sender].sub(amount.mul(rate)); _reflectionBalance[recipient] = _reflectionBalance[recipient].add(transferAmount.mul(rate)); //@dev If any account belongs to the excludedAccount transfer token if (_isExcluded[sender]) { _tokenBalance[sender] = _tokenBalance[sender].sub(amount); } if (_isExcluded[recipient]) { _tokenBalance[recipient] = _tokenBalance[recipient].add(transferAmount); } emit Transfer(sender, recipient, transferAmount); } function collectFee(address account, uint256 amount, uint256 rate) private returns (uint256) { uint256 transferAmount = amount; //@dev Tax fee if(_taxFee != 0){ uint256 taxFee = amount.mul(_taxFee).div(10**(_feeDecimal + 2)); transferAmount = transferAmount.sub(taxFee); _reflectionTotal = _reflectionTotal.sub(taxFee.mul(rate)); _taxFeeTotal = _taxFeeTotal.add(taxFee); emit RewardsDistributed(taxFee); } //@dev Take liquidity fee if(_liquidityFee != 0){ uint256 liquidityFee = amount.mul(_liquidityFee).div(10**(_feeDecimal + 2)); transferAmount = transferAmount.sub(liquidityFee); _reflectionBalance[address(this)] = _reflectionBalance[address(this)].add(liquidityFee.mul(rate)); _liquidityFeeTotal = _liquidityFeeTotal.add(liquidityFee); emit Transfer(account,address(this),liquidityFee); } return transferAmount; } function _getReflectionRate() private view returns (uint256) { uint256 reflectionSupply = _reflectionTotal; uint256 tokenSupply = totalSupply(); for (uint256 i = 0; i < _excluded.length; i++) { if ( _reflectionBalance[_excluded[i]] > reflectionSupply || _tokenBalance[_excluded[i]] > tokenSupply ) return _reflectionTotal.div(totalSupply()); reflectionSupply = reflectionSupply.sub( _reflectionBalance[_excluded[i]] ); tokenSupply = tokenSupply.sub(_tokenBalance[_excluded[i]]); } if (reflectionSupply < _reflectionTotal.div(totalSupply())) return _reflectionTotal.div(totalSupply()); return reflectionSupply.div(tokenSupply); } function swapTokensForEth() private { _swapTokensForEth(address(this)); } function _swapTokensForEth(address to) private lockTheSwap { uint256 tokenAmount = balanceOf(address(this)); //@dev Generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); //@dev Make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, to, block.timestamp ); } function swapEthForTokens(uint256 EthAmount) private { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = address(this); uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: EthAmount}( 0, path, address(balancer), block.timestamp ); } function buyAndBurnToken(uint256 contractBalance) private lockTheSwap { lastRebalance = now; //@dev Uniswap doesn't allow for a token to buy itself, so we have to use an external account, which in this case is called the balancer uint256 laterBuyback = 0; if (balancer2 != address(0)) { laterBuyback = contractBalance.mul(7).div(10); balancer2.transfer(laterBuyback); } swapEthForTokens(contractBalance.sub(laterBuyback)); //@dev How much tokens we swaped into uint256 swapedTokens = balanceOf(address(balancer)); uint256 rewardForCaller = swapedTokens.mul(_rebalanceCallerFee).div(10**(_feeDecimal + 2)); uint256 amountToBurn = swapedTokens.sub(rewardForCaller); uint256 rate = _getReflectionRate(); _reflectionBalance[tx.origin] = _reflectionBalance[tx.origin].add(rewardForCaller.mul(rate)); _reflectionBalance[address(balancer)] = 0; _burnFeeTotal = _burnFeeTotal.add(amountToBurn); _reflectionTotal = _reflectionTotal.sub(amountToBurn.mul(rate)); emit Transfer(address(balancer), tx.origin, rewardForCaller); emit Transfer(address(balancer), address(0), amountToBurn); emit SwapedEthForTokens(contractBalance, swapedTokens, rewardForCaller, amountToBurn); } function setExcludedFromFee(address account, bool excluded) public onlyOwner { isExcludedFromFee[account] = excluded; } function setSwapAndLiquifyEnabled(bool enabled) public onlyOwner { swapAndLiquifyEnabled = enabled; SwapAndLiquifyEnabledUpdated(enabled); } function setTaxFee(uint256 fee) public onlyOwner { _taxFee = fee; } function setLiquidityFee(uint256 fee) public onlyOwner { _liquidityFee = fee; } function setRebalanceCallerFee(uint256 fee) public onlyOwner { _rebalanceCallerFee = fee; } function setMinTokensBeforeSwap(uint256 amount) public onlyOwner { minTokensBeforeSwap = amount; } function setMinEthBeforeSwap(uint256 amount) external onlyOwner { minEthBeforeSwap = amount; } function setBalancer(address payable addr) external onlyOwner { balancer2 = addr; } function multiTransfer(address[] memory addresses, uint256 amount) external { for (uint256 i = 0; i < addresses.length; i++) { transfer(addresses[i], amount); } } function setRebalanceInterval(uint256 interval) external onlyOwner { rebalanceInterval = interval; } function setRebalanceEnabled(bool enabled) external onlyOwner { rebalanceEnalbed = enabled; } function setManualCycle(int256 cycle) external onlyOwner { manualCycle = cycle; } function setBuyInInterval(uint256 interval) external onlyOwner { buyInInterval = interval; } function enableTrading() external onlyOwner() { tradingEnabled = true; TradingEnabled(true); liquidityAddedAt = now; } 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"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"CallerReward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"AmountBurned","type":"uint256"}],"name":"SwapedEthForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"TokenAmount","type":"uint256"}],"name":"SwapedTokenForEth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TradingEnabled","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":[],"name":"_burnFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeDecimal","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":"_liquidityFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rebalanceCallerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balancer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyInInterval","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":"delayTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"firstBuyersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBuyIn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRebalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualCycle","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minEthBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","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":[],"name":"rebalanceEnalbed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebalanceInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"setBalancer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setBuyInInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"cycle","type":"int256"}],"name":"setManualCycle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinEthBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setRebalanceCallerFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setRebalanceEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setRebalanceInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"uint256","name":"reflectionAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600f60808190526e547269706c65582e6e6574776f726b60881b60a090815262000032916001919062000596565b5060408051808201909152600280825261583360f01b60209092019182526200005c918162000596565b506003805460ff1916601217905560006008556903b4ad496106b7f000006009819055600a8190556000190619600b556002600f5561012c60108190556102586011556101f46012556016805463ff0000001962ff00ff1990911662010000171663010000001790556064601781905560185542601a819055610384601b55601c5560b4601d55601e55600019601f55348015620000f957600080fd5b5060006200010662000491565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001a357600080fd5b505afa158015620001b8573d6000803e3d6000fd5b505050506040513d6020811015620001cf57600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200022057600080fd5b505afa15801562000235573d6000803e3d6000fd5b505050506040513d60208110156200024c57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200029f57600080fd5b505af1158015620002b4573d6000803e3d6000fd5b505050506040513d6020811015620002cb57600080fd5b5051602280546001600160a01b03199081166001600160a01b0393841617909155602180549091169183169190911790556040516200030a906200061b565b604051809103906000f08015801562000327573d6000803e3d6000fd5b50602380546001600160a01b0319166001600160a01b03929092169190911790556001600c60006200035862000491565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600c84528281208054861660019081179091556022805484168352600d909552928120805490951683179094559154600e8054928301815584527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd90910180546001600160a01b03191691909216179055600b54906004906200040b62000491565b6001600160a01b031681526020810191909152604001600020556200042f62000495565b426020556200043d62000491565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a3506200063f565b3390565b6040805160808082018352600180835260076020808501829052670a3d70a3d70a3d708587018190526904e064e2916b184000006060968701819052602494909455602592909255602680546001600160801b0319908116909317815560279384558651808601885260088082528184018390526707ae147ae147ae14828a01819052690bd62e1b5a43d3000000928901839052602891909155602992909255602a80548516909217909155602b55855193840186528284526111a890840181905267028f5c28f5c28f5c9584018690526a3907e07fe1a7e48de0000093909401839052602c91909155602d92909255602e80549092169092179055602f55565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005d957805160ff191683800117855562000609565b8280016001018555821562000609579182015b8281111562000609578251825591602001919060010190620005ec565b506200061792915062000628565b5090565b605c8062003ae683390190565b5b8082111562000617576000815560010162000629565b613497806200064f6000396000f3fe60806040526004361061036f5760003560e01c80635ce15f7e116101c6578063a457c2d7116100f7578063d400336f11610095578063e5d41c6b1161006f578063e5d41c6b14610b97578063f2cc0c1814610bac578063f2fde38b14610bdf578063f84354f114610c1257610376565b8063d400336f14610b32578063dd62ed3e14610b47578063e563037e14610b8257610376565b8063c4081a4c116100d1578063c4081a4c14610a7f578063c49b9a8014610aa9578063cba0e99614610ad5578063cd980e5614610b0857610376565b8063a457c2d7146109f8578063a9059cbb14610a31578063b2929ac314610a6a57610376565b80637e2eee53116101645780638da5cb5b1161013e5780638da5cb5b1461090757806395d89b411461091c5780639d46cf8a14610931578063a16a31791461094657610376565b80637e2eee53146108c85780637e64c7aa146108dd5780638a8c523c146108f257610376565b80636bc87c3a116101a05780636bc87c3a1461085657806370a082311461086b578063715018a61461089e5780637178cac7146108b357610376565b80635ce15f7e146107be5780636612e66f146107e857806368c32b9c1461082357610376565b8063350c9669116102a05780634549b0391161023e5780634a74bb02116102185780634a74bb021461073e5780634ada218b1461075357806355a50ede146107685780635b7dcaed1461079457610376565b80634549b039146106cd57806348a46473146106ff57806349bd5a5e1461072957610376565b806336759d271161027a57806336759d271461064057806338e07fb21461066a578063395093511461067f5780633b124fe7146106b857610376565b8063350c9669146105ec578063355bc60b14610601578063357bf15c1461061657610376565b806316d1d9161161030d57806323101364116102e7578063231013641461053f57806323b872dd146105545780632d83811914610597578063313ce567146105c157610376565b806316d1d9161461050057806318160ddd1461051557806319db457d1461052a57610376565b8063095ea7b311610349578063095ea7b3146104585780630d9a5219146104a5578063106b9ca1146104ba5780631694505e146104cf57610376565b80630401d5121461037b57806304b64527146103a757806306fdde03146103ce57610376565b3661037657005b600080fd5b34801561038757600080fd5b506103a56004803603602081101561039e57600080fd5b5035610c45565b005b3480156103b357600080fd5b506103bc610ca2565b60408051918252519081900360200190f35b3480156103da57600080fd5b506103e3610ca8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561041d578181015183820152602001610405565b50505050905090810190601f16801561044a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561046457600080fd5b506104916004803603604081101561047b57600080fd5b506001600160a01b038135169060200135610d3e565b604080519115158252519081900360200190f35b3480156104b157600080fd5b506103bc610d5c565b3480156104c657600080fd5b506103bc610d62565b3480156104db57600080fd5b506104e4610d68565b604080516001600160a01b039092168252519081900360200190f35b34801561050c57600080fd5b506103bc610d77565b34801561052157600080fd5b506103bc610d7d565b34801561053657600080fd5b506103bc610da0565b34801561054b57600080fd5b506103bc610da6565b34801561056057600080fd5b506104916004803603606081101561057757600080fd5b506001600160a01b03813581169160208101359091169060400135610dac565b3480156105a357600080fd5b506103bc600480360360208110156105ba57600080fd5b5035610e33565b3480156105cd57600080fd5b506105d6610e95565b6040805160ff9092168252519081900360200190f35b3480156105f857600080fd5b506103bc610e9e565b34801561060d57600080fd5b506103bc610ea4565b34801561062257600080fd5b506103a56004803603602081101561063957600080fd5b5035610eaa565b34801561064c57600080fd5b506103a56004803603602081101561066357600080fd5b5035610f07565b34801561067657600080fd5b50610491610f64565b34801561068b57600080fd5b50610491600480360360408110156106a257600080fd5b506001600160a01b038135169060200135610f74565b3480156106c457600080fd5b506103bc610fc2565b3480156106d957600080fd5b506103bc600480360360408110156106f057600080fd5b50803590602001351515610fc8565b34801561070b57600080fd5b506103a56004803603602081101561072257600080fd5b5035611086565b34801561073557600080fd5b506104e46110e3565b34801561074a57600080fd5b506104916110f2565b34801561075f57600080fd5b50610491611101565b34801561077457600080fd5b506103a56004803603602081101561078b57600080fd5b5035151561110a565b3480156107a057600080fd5b506103a5600480360360208110156107b757600080fd5b5035611180565b3480156107ca57600080fd5b506103a5600480360360208110156107e157600080fd5b50356111dd565b3480156107f457600080fd5b506103a56004803603604081101561080b57600080fd5b506001600160a01b038135169060200135151561123a565b34801561082f57600080fd5b506103a56004803603602081101561084657600080fd5b50356001600160a01b03166112bd565b34801561086257600080fd5b506103bc611343565b34801561087757600080fd5b506103bc6004803603602081101561088e57600080fd5b50356001600160a01b0316611349565b3480156108aa57600080fd5b506103a56113ab565b3480156108bf57600080fd5b506103bc61144d565b3480156108d457600080fd5b506103bc611453565b3480156108e957600080fd5b506103bc611459565b3480156108fe57600080fd5b506103a561145f565b34801561091357600080fd5b506104e46114ff565b34801561092857600080fd5b506103e361150e565b34801561093d57600080fd5b506103bc61156c565b34801561095257600080fd5b506103a56004803603604081101561096957600080fd5b81019060208101813564010000000081111561098457600080fd5b82018360208201111561099657600080fd5b803590602001918460208302840111640100000000831117156109b857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250611572915050565b348015610a0457600080fd5b5061049160048036036040811015610a1b57600080fd5b506001600160a01b0381351690602001356115a9565b348015610a3d57600080fd5b5061049160048036036040811015610a5457600080fd5b506001600160a01b038135169060200135611611565b348015610a7657600080fd5b506103bc611625565b348015610a8b57600080fd5b506103a560048036036020811015610aa257600080fd5b503561162b565b348015610ab557600080fd5b506103a560048036036020811015610acc57600080fd5b50351515611688565b348015610ae157600080fd5b5061049160048036036020811015610af857600080fd5b50356001600160a01b0316611731565b348015610b1457600080fd5b506103a560048036036020811015610b2b57600080fd5b503561174f565b348015610b3e57600080fd5b506103bc6117ac565b348015610b5357600080fd5b506103bc60048036036040811015610b6a57600080fd5b506001600160a01b03813581169160200135166117b2565b348015610b8e57600080fd5b506104e46117dd565b348015610ba357600080fd5b506103bc6117ec565b348015610bb857600080fd5b506103a560048036036020811015610bcf57600080fd5b50356001600160a01b03166117f2565b348015610beb57600080fd5b506103a560048036036020811015610c0257600080fd5b50356001600160a01b0316611a06565b348015610c1e57600080fd5b506103a560048036036020811015610c3557600080fd5b50356001600160a01b0316611afe565b610c4d611ca9565b6000546001600160a01b03908116911614610c9d576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601f55565b60195481565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d335780601f10610d0857610100808354040283529160200191610d33565b820191906000526020600020905b815481529060010190602001808311610d1657829003601f168201915b505050505090505b90565b6000610d52610d4b611ca9565b8484611cad565b5060015b92915050565b60145481565b601a5481565b6021546001600160a01b031681565b601b5481565b600080610d8c60205442611d99565b9050610d9a600a5482611de5565b91505090565b600f5481565b601d5481565b6000610db9848484611e95565b610e2984610dc5611ca9565b610e248560405180606001604052806028815260200161331f602891396001600160a01b038a16600090815260066020526040812090610e03611ca9565b6001600160a01b0316815260208101919091526040016000205491906123c2565b611cad565b5060019392505050565b6000600b54821115610e765760405162461bcd60e51b815260040180806020018281038252602a815260200180613214602a913960400191505060405180910390fd5b6000610e80612459565b9050610e8c83826125d5565b9150505b919050565b60035460ff1690565b601c5481565b60135481565b610eb2611ca9565b6000546001600160a01b03908116911614610f02576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601155565b610f0f611ca9565b6000546001600160a01b03908116911614610f5f576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601d55565b6016546301000000900460ff1681565b6000610d52610f81611ca9565b84610e248560066000610f92611ca9565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061261e565b60105481565b6000610fd2610d7d565b831115611026576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110445761103d611036612459565b8490612678565b9050610d56565b61103d61104f612459565b611080611079600f54600a0a6002016110736010548961267890919063ffffffff16565b906125d5565b86906126d1565b90612678565b61108e611ca9565b6000546001600160a01b039081169116146110de576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601755565b6022546001600160a01b031681565b60165462010000900460ff1681565b60165460ff1681565b611112611ca9565b6000546001600160a01b03908116911614611162576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b6016805491151563010000000263ff00000019909216919091179055565b611188611ca9565b6000546001600160a01b039081169116146111d8576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601b55565b6111e5611ca9565b6000546001600160a01b03908116911614611235576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601855565b611242611ca9565b6000546001600160a01b03908116911614611292576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6112c5611ca9565b6000546001600160a01b03908116911614611315576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601680546001600160a01b0390921664010000000002640100000000600160c01b0319909216919091179055565b60115481565b6001600160a01b0381166000908152600d602052604081205460ff161561138957506001600160a01b038116600090815260056020526040902054610e90565b6001600160a01b038216600090815260046020526040902054610d5690610e33565b6113b3611ca9565b6000546001600160a01b03908116911614611403576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60085481565b601e5481565b60125481565b611467611ca9565b6000546001600160a01b039081169116146114b7576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b6016805460ff1916600190811790915560408051918252517fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9181900360200190a142601955565b6000546001600160a01b031690565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610d335780601f10610d0857610100808354040283529160200191610d33565b60155481565b60005b82518110156115a45761159b83828151811061158d57fe5b602002602001015183611611565b50600101611575565b505050565b6000610d526115b6611ca9565b84610e248560405180606001604052806025815260200161343d60259139600660006115e0611ca9565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906123c2565b6000610d5261161e611ca9565b8484611e95565b601f5481565b611633611ca9565b6000546001600160a01b03908116911614611683576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601055565b611690611ca9565b6000546001600160a01b039081169116146116e0576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b6016805482151562010000810262ff0000199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b6001600160a01b03166000908152600d602052604090205460ff1690565b611757611ca9565b6000546001600160a01b039081169116146117a7576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601255565b60185481565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6023546001600160a01b031681565b60175481565b6117fa611ca9565b6000546001600160a01b0390811691161461184a576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156118a65760405162461bcd60e51b815260040180806020018281038252602981526020018061323e6029913960400191505060405180910390fd5b6001600160a01b0381163014156118ee5760405162461bcd60e51b815260040180806020018281038252602e8152602001806132af602e913960400191505060405180910390fd5b6001600160a01b0381166000908152600d602052604090205460ff16156119465760405162461bcd60e51b815260040180806020018281038252602281526020018061341b6022913960400191505060405180910390fd5b6001600160a01b038116600090815260046020526040902054156119a0576001600160a01b03811660009081526004602052604090205461198690610e33565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600d60205260408120805460ff19166001908117909155600e805491820181559091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319169091179055565b611a0e611ca9565b6000546001600160a01b03908116911614611a5e576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b6001600160a01b038116611aa35760405162461bcd60e51b81526004018080602001828103825260268152602001806132676026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611b06611ca9565b6000546001600160a01b03908116911614611b56576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600d602052604090205460ff16611bad5760405162461bcd60e51b81526004018080602001828103825260228152602001806133d56022913960400191505060405180910390fd5b60005b600e54811015611ca557816001600160a01b0316600e8281548110611bd157fe5b6000918252602090912001546001600160a01b03161415611c9d57600e80546000198101908110611bfe57fe5b600091825260209091200154600e80546001600160a01b039092169183908110611c2457fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600d90925220805460ff19169055600e805480611c7657fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611ca5565b600101611bb0565b5050565b3390565b6001600160a01b038316611cf25760405162461bcd60e51b81526004018080602001828103825260248152602001806133f76024913960400191505060405180910390fd5b6001600160a01b038216611d375760405162461bcd60e51b815260040180806020018281038252602281526020018061328d6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600080601f5412611dad5750601f54610d56565b6000611db983856126d1565b9050600162015180808306830304016111948110611ddd5761119492505050610d56565b949350505050565b600082815b6003811015611e8d57611dfb6131c5565b60248260038110611e0857fe5b6040805160808101825260049290920292909201805482526001810154602083018190526002820154600f90810b810b900b938301939093526003015460608201529150851115611e5f5780606001519250611e84565b60408101518151611e7c918591611e779089906126d1565b612713565b925050611e8d565b50600101611dea565b509392505050565b6001600160a01b038316611eda5760405162461bcd60e51b81526004018080602001828103825260258152602001806133b06025913960400191505060405180910390fd5b6001600160a01b038216611f1f5760405162461bcd60e51b81526004018080602001828103825260238152602001806131f16023913960400191505060405180910390fd5b60008111611f5e5760405162461bcd60e51b81526004018080602001828103825260298152602001806133676029913960400191505060405180910390fd5b60165460ff1680611f875750611f726114ff565b6001600160a01b0316836001600160a01b0316145b80611faa5750611f956114ff565b6001600160a01b0316826001600160a01b0316145b80611fcd57506001600160a01b0383166000908152600c602052604090205460ff165b80611ff057506001600160a01b0382166000908152600c602052604090205460ff165b61202b5760405162461bcd60e51b81526004018080602001828103825260218152602001806132dd6021913960400191505060405180910390fd5b600460085410801561204a57506022546001600160a01b038481169116145b801561206f57506120596114ff565b6001600160a01b0316836001600160a01b031614155b15612099576008805460010190556001600160a01b03821660009081526007602052604090204290555b6022546001600160a01b0383811691161480156120d25750601e546001600160a01b038416600090815260076020526040902054429101115b156120dc57600080fd5b601654610100900460ff1615801561210257506022546001600160a01b03848116911614155b801561212757506121116114ff565b6001600160a01b0316836001600160a01b031614155b156121cb57601b54601a546001914791014211801561214f57506016546301000000900460ff165b801561215d57506018548110155b156121705761216b8161273f565b600091505b81156121c857600061218130611349565b905060006017548210159050601d54601c54014211801561219f5750805b80156121b3575060165462010000900460ff165b156121c5576121c061295c565b42601c555b50505b50505b8060006121d6612459565b6001600160a01b0386166000908152600c602052604090205490915060ff1615801561221b57506001600160a01b0384166000908152600c602052604090205460ff16155b801561222f5750601654610100900460ff16155b156122425761223f858483612967565b91505b61226e61224f8483612678565b6001600160a01b038716600090815260046020526040902054906126d1565b6001600160a01b0386166000908152600460205260409020556122b36122948383612678565b6001600160a01b0386166000908152600460205260409020549061261e565b6001600160a01b038086166000908152600460209081526040808320949094559188168152600d909152205460ff1615612324576001600160a01b03851660009081526005602052604090205461230a90846126d1565b6001600160a01b0386166000908152600560205260409020555b6001600160a01b0384166000908152600d602052604090205460ff1615612382576001600160a01b038416600090815260056020526040902054612368908361261e565b6001600160a01b0385166000908152600560205260409020555b836001600160a01b0316856001600160a01b0316600080516020613390833981519152846040518082815260200191505060405180910390a35050505050565b600081848411156124515760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124165781810151838201526020016123fe565b50505050905090810190601f1680156124435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600b5460009081612468610d7d565b905060005b600e5481101561259d578260046000600e848154811061248957fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806124ee57508160056000600e84815481106124c757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612511576125076124fe610d7d565b600b54906125d5565b9350505050610d3b565b61255160046000600e848154811061252557fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126d1565b925061259360056000600e848154811061256757fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126d1565b915060010161246d565b506125a96124fe610d7d565b8210156125c4576125bb6124fe610d7d565b92505050610d3b565b6125ce82826125d5565b9250505090565b600061261783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612aad565b9392505050565b600082820183811015612617576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261268757506000610d56565b8282028284828161269457fe5b04146126175760405162461bcd60e51b81526004018080602001828103825260218152602001806132fe6021913960400191505060405180910390fd5b600061261783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123c2565b60008061273661273061272a600160401b87612b12565b85612b4f565b86612bdf565b95945050505050565b6016805461ff001916610100179081905542601a5560009064010000000090046001600160a01b0316156127c25761277d600a611073846007612678565b60165460405191925064010000000090046001600160a01b0316906108fc8315029083906000818181858888f193505050501580156127c0573d6000803e3d6000fd5b505b6127d46127cf83836126d1565b612c47565b6023546000906127ec906001600160a01b0316611349565b90506000612811600f54600201600a0a6110736012548561267890919063ffffffff16565b9050600061281f83836126d1565b9050600061282b612459565b905061285061283a8483612678565b326000908152600460205260409020549061261e565b32600090815260046020526040808220929092556023546001600160a01b0316815290812055601454612883908361261e565b60145561289c6128938383612678565b600b54906126d1565b600b5560235460408051858152905132926001600160a01b031691600080516020613390833981519152919081900360200190a36023546040805184815290516000926001600160a01b031691600080516020613390833981519152919081900360200190a360408051878152602081018690528082018590526060810184905290517fab89f676f9e161ea2adbd81e1a375773fa55ce4e60152913602e1677f2fa0c2f9181900360800190a150506016805461ff001916905550505050565b61296530612def565b565b6010546000908390156129fa576000612997600f54600201600a0a6110736010548861267890919063ffffffff16565b90506129a382826126d1565b91506129b26128938286612678565b600b556013546129c2908261261e565b6013556040805182815290517f6d1c76d614228b523baa4dcd9539e2c713b54ff4ab3ff2d1627e7f6cd32be4429181900360200190a1505b60115415611ddd576000612a25600f54600201600a0a6110736011548861267890919063ffffffff16565b9050612a3182826126d1565b9150612a56612a408286612678565b306000908152600460205260409020549061261e565b30600090815260046020526040902055601554612a73908261261e565b60155560408051828152905130916001600160a01b038916916000805160206133908339815191529181900360200190a350949350505050565b60008183612afc5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156124165781810151838201526020016123fe565b506000838581612b0857fe5b0495945050505050565b6000600f83810b9083900b016f7fffffffffffffffffffffffffffffff198112801590612b46575060016001607f1b038113155b61261757600080fd5b60008060008085600f0b12612b7657612b6f603f86600f0b901b85612fc7565b9150612b9a565b612b90603f866000036001600160801b0316901b85612fc7565b9150506001831615155b603f82901c91508015612bc3576001607f1b821115612bb857600080fd5b506000039050610d56565b60016001607f1b03821115612bd757600080fd5b509050610d56565b600081612bee57506000610d56565b600083600f0b1215612bff57600080fd5b600f83900b6001600160801b038316810260401c90608084901c026001600160c01b03811115612c2e57600080fd5b60401b8119811115612c3f57600080fd5b019392505050565b60408051600280825260608083018452926020830190803683375050602154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015612cab57600080fd5b505afa158015612cbf573d6000803e3d6000fd5b505050506040513d6020811015612cd557600080fd5b505181518290600090612ce457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612d1257fe5b6001600160a01b0392831660209182029290920181019190915260215460235460405163b6f9de9560e01b8152600060048201818152928616604483018190524260648401819052608060248501908152895160848601528951969098169763b6f9de95978b9794968b9694959394909360a49091019187810191028083838b5b83811015612dab578181015183820152602001612d93565b50505050905001955050505050506000604051808303818588803b158015612dd257600080fd5b505af1158015612de6573d6000803e3d6000fd5b50505050505050565b6016805461ff0019166101001790556000612e0930611349565b6040805160028082526060808301845293945090916020830190803683370190505090503081600081518110612e3b57fe5b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612e8f57600080fd5b505afa158015612ea3573d6000803e3d6000fd5b505050506040513d6020811015612eb957600080fd5b5051815182906001908110612eca57fe5b6001600160a01b039283166020918202929092010152602154612ef09130911684611cad565b60215460405163791ac94760e01b8152600481018481526000602483018190526001600160a01b038781166064850152426084850181905260a060448601908152875160a48701528751929096169563791ac94795899589948c9493919260c40190602080880191028083838b5b83811015612f76578181015183820152602001612f5e565b505050509050019650505050505050600060405180830381600087803b158015612f9f57600080fd5b505af1158015612fb3573d6000803e3d6000fd5b50506016805461ff00191690555050505050565b600081612fd957506001607f1b610d56565b82612fe657506000610d56565b600083600160801b8110612ffc576080918201911c5b600160401b811061300f576040918201911c5b6401000000008110613023576020918201911c5b620100008110613035576010918201911c5b6101008110613046576008918201911c5b60108110613056576004918201911c5b60048110613066576002918201911c5b60028110613075576001820191505b607e1982016000811315613099578086600082121561309057fe5b901c95506130ae565b806000038660008212156130a957fe5b901b95505b6001607f1b60005b861561317c57600187161561311e5760001990960195908702908201600160ff1b82106130ec5760809190911c906001016130f4565b607f82901c91505b607e1981121561310c57600095505050505050610d56565b6080811261311957600080fd5b613177565b96800296600196871c969290921b91600160ff1b881061314a57608088901c9750600183019250613152565b607f88901c97505b607e1983121561316a57600095505050505050610d56565b6080831261317757600080fd5b6130b6565b600081131561319b578082600082121561319257fe5b901b91506131b9565b60008112156131b957806000038260008212156131b457fe5b901c91505b509350610d5692505050565b604051806080016040528060008152602001600081526020016000600f0b815260200160008152509056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7341455255533a20556e697377617020726f757465722063616e6e6f74206265206578636c756465642e4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737341455255533a2054686520636f6e74726163742069742073656c662063616e6e6f74206265206578636c7564656454726164696e67206973206c6f636b6564206265666f72652070726573616c652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737341455255533a204163636f756e7420697320616c726561647920696e636c7564656445524332303a20617070726f76652066726f6d20746865207a65726f206164647265737341455255533a204163636f756e7420697320616c7265616479206578636c7564656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208ac391dbac9e8e97b6adbf6f86c99356690ceeb8974859e94fec88f94a0e316b64736f6c634300060c00336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea26469706673582212207b2d101ad682c9fdf6ec3c88adeed967a4cd11d154c3fe65df5315fa7f1e33db64736f6c634300060c0033
Deployed Bytecode
0x60806040526004361061036f5760003560e01c80635ce15f7e116101c6578063a457c2d7116100f7578063d400336f11610095578063e5d41c6b1161006f578063e5d41c6b14610b97578063f2cc0c1814610bac578063f2fde38b14610bdf578063f84354f114610c1257610376565b8063d400336f14610b32578063dd62ed3e14610b47578063e563037e14610b8257610376565b8063c4081a4c116100d1578063c4081a4c14610a7f578063c49b9a8014610aa9578063cba0e99614610ad5578063cd980e5614610b0857610376565b8063a457c2d7146109f8578063a9059cbb14610a31578063b2929ac314610a6a57610376565b80637e2eee53116101645780638da5cb5b1161013e5780638da5cb5b1461090757806395d89b411461091c5780639d46cf8a14610931578063a16a31791461094657610376565b80637e2eee53146108c85780637e64c7aa146108dd5780638a8c523c146108f257610376565b80636bc87c3a116101a05780636bc87c3a1461085657806370a082311461086b578063715018a61461089e5780637178cac7146108b357610376565b80635ce15f7e146107be5780636612e66f146107e857806368c32b9c1461082357610376565b8063350c9669116102a05780634549b0391161023e5780634a74bb02116102185780634a74bb021461073e5780634ada218b1461075357806355a50ede146107685780635b7dcaed1461079457610376565b80634549b039146106cd57806348a46473146106ff57806349bd5a5e1461072957610376565b806336759d271161027a57806336759d271461064057806338e07fb21461066a578063395093511461067f5780633b124fe7146106b857610376565b8063350c9669146105ec578063355bc60b14610601578063357bf15c1461061657610376565b806316d1d9161161030d57806323101364116102e7578063231013641461053f57806323b872dd146105545780632d83811914610597578063313ce567146105c157610376565b806316d1d9161461050057806318160ddd1461051557806319db457d1461052a57610376565b8063095ea7b311610349578063095ea7b3146104585780630d9a5219146104a5578063106b9ca1146104ba5780631694505e146104cf57610376565b80630401d5121461037b57806304b64527146103a757806306fdde03146103ce57610376565b3661037657005b600080fd5b34801561038757600080fd5b506103a56004803603602081101561039e57600080fd5b5035610c45565b005b3480156103b357600080fd5b506103bc610ca2565b60408051918252519081900360200190f35b3480156103da57600080fd5b506103e3610ca8565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561041d578181015183820152602001610405565b50505050905090810190601f16801561044a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561046457600080fd5b506104916004803603604081101561047b57600080fd5b506001600160a01b038135169060200135610d3e565b604080519115158252519081900360200190f35b3480156104b157600080fd5b506103bc610d5c565b3480156104c657600080fd5b506103bc610d62565b3480156104db57600080fd5b506104e4610d68565b604080516001600160a01b039092168252519081900360200190f35b34801561050c57600080fd5b506103bc610d77565b34801561052157600080fd5b506103bc610d7d565b34801561053657600080fd5b506103bc610da0565b34801561054b57600080fd5b506103bc610da6565b34801561056057600080fd5b506104916004803603606081101561057757600080fd5b506001600160a01b03813581169160208101359091169060400135610dac565b3480156105a357600080fd5b506103bc600480360360208110156105ba57600080fd5b5035610e33565b3480156105cd57600080fd5b506105d6610e95565b6040805160ff9092168252519081900360200190f35b3480156105f857600080fd5b506103bc610e9e565b34801561060d57600080fd5b506103bc610ea4565b34801561062257600080fd5b506103a56004803603602081101561063957600080fd5b5035610eaa565b34801561064c57600080fd5b506103a56004803603602081101561066357600080fd5b5035610f07565b34801561067657600080fd5b50610491610f64565b34801561068b57600080fd5b50610491600480360360408110156106a257600080fd5b506001600160a01b038135169060200135610f74565b3480156106c457600080fd5b506103bc610fc2565b3480156106d957600080fd5b506103bc600480360360408110156106f057600080fd5b50803590602001351515610fc8565b34801561070b57600080fd5b506103a56004803603602081101561072257600080fd5b5035611086565b34801561073557600080fd5b506104e46110e3565b34801561074a57600080fd5b506104916110f2565b34801561075f57600080fd5b50610491611101565b34801561077457600080fd5b506103a56004803603602081101561078b57600080fd5b5035151561110a565b3480156107a057600080fd5b506103a5600480360360208110156107b757600080fd5b5035611180565b3480156107ca57600080fd5b506103a5600480360360208110156107e157600080fd5b50356111dd565b3480156107f457600080fd5b506103a56004803603604081101561080b57600080fd5b506001600160a01b038135169060200135151561123a565b34801561082f57600080fd5b506103a56004803603602081101561084657600080fd5b50356001600160a01b03166112bd565b34801561086257600080fd5b506103bc611343565b34801561087757600080fd5b506103bc6004803603602081101561088e57600080fd5b50356001600160a01b0316611349565b3480156108aa57600080fd5b506103a56113ab565b3480156108bf57600080fd5b506103bc61144d565b3480156108d457600080fd5b506103bc611453565b3480156108e957600080fd5b506103bc611459565b3480156108fe57600080fd5b506103a561145f565b34801561091357600080fd5b506104e46114ff565b34801561092857600080fd5b506103e361150e565b34801561093d57600080fd5b506103bc61156c565b34801561095257600080fd5b506103a56004803603604081101561096957600080fd5b81019060208101813564010000000081111561098457600080fd5b82018360208201111561099657600080fd5b803590602001918460208302840111640100000000831117156109b857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505091359250611572915050565b348015610a0457600080fd5b5061049160048036036040811015610a1b57600080fd5b506001600160a01b0381351690602001356115a9565b348015610a3d57600080fd5b5061049160048036036040811015610a5457600080fd5b506001600160a01b038135169060200135611611565b348015610a7657600080fd5b506103bc611625565b348015610a8b57600080fd5b506103a560048036036020811015610aa257600080fd5b503561162b565b348015610ab557600080fd5b506103a560048036036020811015610acc57600080fd5b50351515611688565b348015610ae157600080fd5b5061049160048036036020811015610af857600080fd5b50356001600160a01b0316611731565b348015610b1457600080fd5b506103a560048036036020811015610b2b57600080fd5b503561174f565b348015610b3e57600080fd5b506103bc6117ac565b348015610b5357600080fd5b506103bc60048036036040811015610b6a57600080fd5b506001600160a01b03813581169160200135166117b2565b348015610b8e57600080fd5b506104e46117dd565b348015610ba357600080fd5b506103bc6117ec565b348015610bb857600080fd5b506103a560048036036020811015610bcf57600080fd5b50356001600160a01b03166117f2565b348015610beb57600080fd5b506103a560048036036020811015610c0257600080fd5b50356001600160a01b0316611a06565b348015610c1e57600080fd5b506103a560048036036020811015610c3557600080fd5b50356001600160a01b0316611afe565b610c4d611ca9565b6000546001600160a01b03908116911614610c9d576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601f55565b60195481565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d335780601f10610d0857610100808354040283529160200191610d33565b820191906000526020600020905b815481529060010190602001808311610d1657829003601f168201915b505050505090505b90565b6000610d52610d4b611ca9565b8484611cad565b5060015b92915050565b60145481565b601a5481565b6021546001600160a01b031681565b601b5481565b600080610d8c60205442611d99565b9050610d9a600a5482611de5565b91505090565b600f5481565b601d5481565b6000610db9848484611e95565b610e2984610dc5611ca9565b610e248560405180606001604052806028815260200161331f602891396001600160a01b038a16600090815260066020526040812090610e03611ca9565b6001600160a01b0316815260208101919091526040016000205491906123c2565b611cad565b5060019392505050565b6000600b54821115610e765760405162461bcd60e51b815260040180806020018281038252602a815260200180613214602a913960400191505060405180910390fd5b6000610e80612459565b9050610e8c83826125d5565b9150505b919050565b60035460ff1690565b601c5481565b60135481565b610eb2611ca9565b6000546001600160a01b03908116911614610f02576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601155565b610f0f611ca9565b6000546001600160a01b03908116911614610f5f576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601d55565b6016546301000000900460ff1681565b6000610d52610f81611ca9565b84610e248560066000610f92611ca9565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061261e565b60105481565b6000610fd2610d7d565b831115611026576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110445761103d611036612459565b8490612678565b9050610d56565b61103d61104f612459565b611080611079600f54600a0a6002016110736010548961267890919063ffffffff16565b906125d5565b86906126d1565b90612678565b61108e611ca9565b6000546001600160a01b039081169116146110de576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601755565b6022546001600160a01b031681565b60165462010000900460ff1681565b60165460ff1681565b611112611ca9565b6000546001600160a01b03908116911614611162576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b6016805491151563010000000263ff00000019909216919091179055565b611188611ca9565b6000546001600160a01b039081169116146111d8576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601b55565b6111e5611ca9565b6000546001600160a01b03908116911614611235576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601855565b611242611ca9565b6000546001600160a01b03908116911614611292576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6112c5611ca9565b6000546001600160a01b03908116911614611315576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601680546001600160a01b0390921664010000000002640100000000600160c01b0319909216919091179055565b60115481565b6001600160a01b0381166000908152600d602052604081205460ff161561138957506001600160a01b038116600090815260056020526040902054610e90565b6001600160a01b038216600090815260046020526040902054610d5690610e33565b6113b3611ca9565b6000546001600160a01b03908116911614611403576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60085481565b601e5481565b60125481565b611467611ca9565b6000546001600160a01b039081169116146114b7576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b6016805460ff1916600190811790915560408051918252517fbeda7dca7bc1b3e80b871f4818129ec73b771581f803d553aeb3484098e5f65a9181900360200190a142601955565b6000546001600160a01b031690565b60028054604080516020601f6000196101006001871615020190941685900493840181900481028201810190925282815260609390929091830182828015610d335780601f10610d0857610100808354040283529160200191610d33565b60155481565b60005b82518110156115a45761159b83828151811061158d57fe5b602002602001015183611611565b50600101611575565b505050565b6000610d526115b6611ca9565b84610e248560405180606001604052806025815260200161343d60259139600660006115e0611ca9565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906123c2565b6000610d5261161e611ca9565b8484611e95565b601f5481565b611633611ca9565b6000546001600160a01b03908116911614611683576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601055565b611690611ca9565b6000546001600160a01b039081169116146116e0576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b6016805482151562010000810262ff0000199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b6001600160a01b03166000908152600d602052604090205460ff1690565b611757611ca9565b6000546001600160a01b039081169116146117a7576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b601255565b60185481565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6023546001600160a01b031681565b60175481565b6117fa611ca9565b6000546001600160a01b0390811691161461184a576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156118a65760405162461bcd60e51b815260040180806020018281038252602981526020018061323e6029913960400191505060405180910390fd5b6001600160a01b0381163014156118ee5760405162461bcd60e51b815260040180806020018281038252602e8152602001806132af602e913960400191505060405180910390fd5b6001600160a01b0381166000908152600d602052604090205460ff16156119465760405162461bcd60e51b815260040180806020018281038252602281526020018061341b6022913960400191505060405180910390fd5b6001600160a01b038116600090815260046020526040902054156119a0576001600160a01b03811660009081526004602052604090205461198690610e33565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600d60205260408120805460ff19166001908117909155600e805491820181559091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319169091179055565b611a0e611ca9565b6000546001600160a01b03908116911614611a5e576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b6001600160a01b038116611aa35760405162461bcd60e51b81526004018080602001828103825260268152602001806132676026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611b06611ca9565b6000546001600160a01b03908116911614611b56576040805162461bcd60e51b81526020600482018190526024820152600080516020613347833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600d602052604090205460ff16611bad5760405162461bcd60e51b81526004018080602001828103825260228152602001806133d56022913960400191505060405180910390fd5b60005b600e54811015611ca557816001600160a01b0316600e8281548110611bd157fe5b6000918252602090912001546001600160a01b03161415611c9d57600e80546000198101908110611bfe57fe5b600091825260209091200154600e80546001600160a01b039092169183908110611c2457fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600d90925220805460ff19169055600e805480611c7657fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611ca5565b600101611bb0565b5050565b3390565b6001600160a01b038316611cf25760405162461bcd60e51b81526004018080602001828103825260248152602001806133f76024913960400191505060405180910390fd5b6001600160a01b038216611d375760405162461bcd60e51b815260040180806020018281038252602281526020018061328d6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260066020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600080601f5412611dad5750601f54610d56565b6000611db983856126d1565b9050600162015180808306830304016111948110611ddd5761119492505050610d56565b949350505050565b600082815b6003811015611e8d57611dfb6131c5565b60248260038110611e0857fe5b6040805160808101825260049290920292909201805482526001810154602083018190526002820154600f90810b810b900b938301939093526003015460608201529150851115611e5f5780606001519250611e84565b60408101518151611e7c918591611e779089906126d1565b612713565b925050611e8d565b50600101611dea565b509392505050565b6001600160a01b038316611eda5760405162461bcd60e51b81526004018080602001828103825260258152602001806133b06025913960400191505060405180910390fd5b6001600160a01b038216611f1f5760405162461bcd60e51b81526004018080602001828103825260238152602001806131f16023913960400191505060405180910390fd5b60008111611f5e5760405162461bcd60e51b81526004018080602001828103825260298152602001806133676029913960400191505060405180910390fd5b60165460ff1680611f875750611f726114ff565b6001600160a01b0316836001600160a01b0316145b80611faa5750611f956114ff565b6001600160a01b0316826001600160a01b0316145b80611fcd57506001600160a01b0383166000908152600c602052604090205460ff165b80611ff057506001600160a01b0382166000908152600c602052604090205460ff165b61202b5760405162461bcd60e51b81526004018080602001828103825260218152602001806132dd6021913960400191505060405180910390fd5b600460085410801561204a57506022546001600160a01b038481169116145b801561206f57506120596114ff565b6001600160a01b0316836001600160a01b031614155b15612099576008805460010190556001600160a01b03821660009081526007602052604090204290555b6022546001600160a01b0383811691161480156120d25750601e546001600160a01b038416600090815260076020526040902054429101115b156120dc57600080fd5b601654610100900460ff1615801561210257506022546001600160a01b03848116911614155b801561212757506121116114ff565b6001600160a01b0316836001600160a01b031614155b156121cb57601b54601a546001914791014211801561214f57506016546301000000900460ff165b801561215d57506018548110155b156121705761216b8161273f565b600091505b81156121c857600061218130611349565b905060006017548210159050601d54601c54014211801561219f5750805b80156121b3575060165462010000900460ff165b156121c5576121c061295c565b42601c555b50505b50505b8060006121d6612459565b6001600160a01b0386166000908152600c602052604090205490915060ff1615801561221b57506001600160a01b0384166000908152600c602052604090205460ff16155b801561222f5750601654610100900460ff16155b156122425761223f858483612967565b91505b61226e61224f8483612678565b6001600160a01b038716600090815260046020526040902054906126d1565b6001600160a01b0386166000908152600460205260409020556122b36122948383612678565b6001600160a01b0386166000908152600460205260409020549061261e565b6001600160a01b038086166000908152600460209081526040808320949094559188168152600d909152205460ff1615612324576001600160a01b03851660009081526005602052604090205461230a90846126d1565b6001600160a01b0386166000908152600560205260409020555b6001600160a01b0384166000908152600d602052604090205460ff1615612382576001600160a01b038416600090815260056020526040902054612368908361261e565b6001600160a01b0385166000908152600560205260409020555b836001600160a01b0316856001600160a01b0316600080516020613390833981519152846040518082815260200191505060405180910390a35050505050565b600081848411156124515760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156124165781810151838201526020016123fe565b50505050905090810190601f1680156124435780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600b5460009081612468610d7d565b905060005b600e5481101561259d578260046000600e848154811061248957fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806124ee57508160056000600e84815481106124c757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612511576125076124fe610d7d565b600b54906125d5565b9350505050610d3b565b61255160046000600e848154811061252557fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906126d1565b925061259360056000600e848154811061256757fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906126d1565b915060010161246d565b506125a96124fe610d7d565b8210156125c4576125bb6124fe610d7d565b92505050610d3b565b6125ce82826125d5565b9250505090565b600061261783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612aad565b9392505050565b600082820183811015612617576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261268757506000610d56565b8282028284828161269457fe5b04146126175760405162461bcd60e51b81526004018080602001828103825260218152602001806132fe6021913960400191505060405180910390fd5b600061261783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123c2565b60008061273661273061272a600160401b87612b12565b85612b4f565b86612bdf565b95945050505050565b6016805461ff001916610100179081905542601a5560009064010000000090046001600160a01b0316156127c25761277d600a611073846007612678565b60165460405191925064010000000090046001600160a01b0316906108fc8315029083906000818181858888f193505050501580156127c0573d6000803e3d6000fd5b505b6127d46127cf83836126d1565b612c47565b6023546000906127ec906001600160a01b0316611349565b90506000612811600f54600201600a0a6110736012548561267890919063ffffffff16565b9050600061281f83836126d1565b9050600061282b612459565b905061285061283a8483612678565b326000908152600460205260409020549061261e565b32600090815260046020526040808220929092556023546001600160a01b0316815290812055601454612883908361261e565b60145561289c6128938383612678565b600b54906126d1565b600b5560235460408051858152905132926001600160a01b031691600080516020613390833981519152919081900360200190a36023546040805184815290516000926001600160a01b031691600080516020613390833981519152919081900360200190a360408051878152602081018690528082018590526060810184905290517fab89f676f9e161ea2adbd81e1a375773fa55ce4e60152913602e1677f2fa0c2f9181900360800190a150506016805461ff001916905550505050565b61296530612def565b565b6010546000908390156129fa576000612997600f54600201600a0a6110736010548861267890919063ffffffff16565b90506129a382826126d1565b91506129b26128938286612678565b600b556013546129c2908261261e565b6013556040805182815290517f6d1c76d614228b523baa4dcd9539e2c713b54ff4ab3ff2d1627e7f6cd32be4429181900360200190a1505b60115415611ddd576000612a25600f54600201600a0a6110736011548861267890919063ffffffff16565b9050612a3182826126d1565b9150612a56612a408286612678565b306000908152600460205260409020549061261e565b30600090815260046020526040902055601554612a73908261261e565b60155560408051828152905130916001600160a01b038916916000805160206133908339815191529181900360200190a350949350505050565b60008183612afc5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156124165781810151838201526020016123fe565b506000838581612b0857fe5b0495945050505050565b6000600f83810b9083900b016f7fffffffffffffffffffffffffffffff198112801590612b46575060016001607f1b038113155b61261757600080fd5b60008060008085600f0b12612b7657612b6f603f86600f0b901b85612fc7565b9150612b9a565b612b90603f866000036001600160801b0316901b85612fc7565b9150506001831615155b603f82901c91508015612bc3576001607f1b821115612bb857600080fd5b506000039050610d56565b60016001607f1b03821115612bd757600080fd5b509050610d56565b600081612bee57506000610d56565b600083600f0b1215612bff57600080fd5b600f83900b6001600160801b038316810260401c90608084901c026001600160c01b03811115612c2e57600080fd5b60401b8119811115612c3f57600080fd5b019392505050565b60408051600280825260608083018452926020830190803683375050602154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015612cab57600080fd5b505afa158015612cbf573d6000803e3d6000fd5b505050506040513d6020811015612cd557600080fd5b505181518290600090612ce457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110612d1257fe5b6001600160a01b0392831660209182029290920181019190915260215460235460405163b6f9de9560e01b8152600060048201818152928616604483018190524260648401819052608060248501908152895160848601528951969098169763b6f9de95978b9794968b9694959394909360a49091019187810191028083838b5b83811015612dab578181015183820152602001612d93565b50505050905001955050505050506000604051808303818588803b158015612dd257600080fd5b505af1158015612de6573d6000803e3d6000fd5b50505050505050565b6016805461ff0019166101001790556000612e0930611349565b6040805160028082526060808301845293945090916020830190803683370190505090503081600081518110612e3b57fe5b6001600160a01b03928316602091820292909201810191909152602154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612e8f57600080fd5b505afa158015612ea3573d6000803e3d6000fd5b505050506040513d6020811015612eb957600080fd5b5051815182906001908110612eca57fe5b6001600160a01b039283166020918202929092010152602154612ef09130911684611cad565b60215460405163791ac94760e01b8152600481018481526000602483018190526001600160a01b038781166064850152426084850181905260a060448601908152875160a48701528751929096169563791ac94795899589948c9493919260c40190602080880191028083838b5b83811015612f76578181015183820152602001612f5e565b505050509050019650505050505050600060405180830381600087803b158015612f9f57600080fd5b505af1158015612fb3573d6000803e3d6000fd5b50506016805461ff00191690555050505050565b600081612fd957506001607f1b610d56565b82612fe657506000610d56565b600083600160801b8110612ffc576080918201911c5b600160401b811061300f576040918201911c5b6401000000008110613023576020918201911c5b620100008110613035576010918201911c5b6101008110613046576008918201911c5b60108110613056576004918201911c5b60048110613066576002918201911c5b60028110613075576001820191505b607e1982016000811315613099578086600082121561309057fe5b901c95506130ae565b806000038660008212156130a957fe5b901b95505b6001607f1b60005b861561317c57600187161561311e5760001990960195908702908201600160ff1b82106130ec5760809190911c906001016130f4565b607f82901c91505b607e1981121561310c57600095505050505050610d56565b6080811261311957600080fd5b613177565b96800296600196871c969290921b91600160ff1b881061314a57608088901c9750600183019250613152565b607f88901c97505b607e1983121561316a57600095505050505050610d56565b6080831261317757600080fd5b6130b6565b600081131561319b578082600082121561319257fe5b901b91506131b9565b60008112156131b957806000038260008212156131b457fe5b901c91505b509350610d5692505050565b604051806080016040528060008152602001600081526020016000600f0b815260200160008152509056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e7341455255533a20556e697377617020726f757465722063616e6e6f74206265206578636c756465642e4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737341455255533a2054686520636f6e74726163742069742073656c662063616e6e6f74206265206578636c7564656454726164696e67206973206c6f636b6564206265666f72652070726573616c652e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737341455255533a204163636f756e7420697320616c726561647920696e636c7564656445524332303a20617070726f76652066726f6d20746865207a65726f206164647265737341455255533a204163636f756e7420697320616c7265616479206578636c7564656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208ac391dbac9e8e97b6adbf6f86c99356690ceeb8974859e94fec88f94a0e316b64736f6c634300060c0033
Deployed Bytecode Sourcemap
24525:19041:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43147:95;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43147:95:0;;:::i;:::-;;25992:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28338:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30903:193;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30903:193:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;25614:28;;;;;;;;;;;;;:::i;26032:34::-;;;;;;;;;;;;;:::i;26437:42::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;26437:42:0;;;;;;;;;;;;;;26074:45;;;;;;;;;;;;;:::i;28615:196::-;;;;;;;;;;;;;:::i;25416:30::-;;;;;;;;;;;;;:::i;26164:40::-;;;;;;;;;;;;;:::i;31104:368::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31104:368:0;;;;;;;;;;;;;;;;;:::i;32702:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32702:368:0;;:::i;28524:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26126:30;;;;;;;;;;;;;:::i;25580:27::-;;;;;;;;;;;;;:::i;42129:93::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42129:93:0;;:::i;43254:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43254:106:0;;:::i;25815:35::-;;;;;;;;;;;;;:::i;31480:300::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31480:300:0;;;;;;;;:::i;25453:28::-;;;;;;;;;;;;;:::i;32212:482::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32212:482:0;;;;;;;;;:::i;42351:112::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42351:112:0;;:::i;26486:28::-;;;;;;;;;;;;;:::i;25768:40::-;;;;;;;;;;;;;:::i;25691:34::-;;;;;;;;;;;;;:::i;43028:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43028:107:0;;;;:::i;42902:114::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42902:114:0;;:::i;42475:108::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42475:108:0;;:::i;41716:133::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41716:133:0;;;;;;;;;;:::i;42595:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42595:97:0;-1:-1:-1;;;;;42595:97:0;;:::i;25488:34::-;;;;;;;;;;;;;:::i;30267:215::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30267:215:0;-1:-1:-1;;;;;30267:215:0;;:::i;22064:148::-;;;;;;;;;;;;;:::i;25010:35::-;;;;;;;;;;;;;:::i;26211:36::-;;;;;;;;;;;;;:::i;25531:40::-;;;;;;;;;;;;;:::i;43372:150::-;;;;;;;;;;;;;:::i;21422:79::-;;;;;;;;;;;;;:::i;28429:87::-;;;;;;;;;;;;;:::i;25649:33::-;;;;;;;;;;;;;:::i;42698:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42698:198:0;;-1:-1:-1;;42698:198:0;;;-1:-1:-1;42698:198:0;;-1:-1:-1;;42698:198:0:i;31788:298::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31788:298:0;;;;;;;;:::i;30490:213::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30490:213:0;;;;;;;;:::i;26254:30::-;;;;;;;;;;;;;:::i;42036:81::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42036:81:0;;:::i;41861:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41861:163:0;;;;:::i;32094:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32094:110:0;-1:-1:-1;;;;;32094:110:0;;:::i;42234:105::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42234:105:0;;:::i;25942:37::-;;;;;;;;;;;;;:::i;30711:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30711:184:0;;;;;;;;;;:::i;26521:23::-;;;;;;;;;;;;;:::i;25895:40::-;;;;;;;;;;;;;:::i;33078:603::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33078:603:0;-1:-1:-1;;;;;33078:603:0;;:::i;22367:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22367:244:0;-1:-1:-1;;;;;22367:244:0;;:::i;33689:491::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33689:491:0;-1:-1:-1;;;;;33689:491:0;;:::i;43147:95::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;43215:11:::1;:19:::0;43147:95::o;25992:31::-;;;;:::o;28338:83::-;28408:5;28401:12;;;;;;;;-1:-1:-1;;28401:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28375:13;;28401:12;;28408:5;;28401:12;;28408:5;28401:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28338:83;;:::o;30903:193::-;31005:4;31027:39;31036:12;:10;:12::i;:::-;31050:7;31059:6;31027:8;:39::i;:::-;-1:-1:-1;31084:4:0;30903:193;;;;;:::o;25614:28::-;;;;:::o;26032:34::-;;;;:::o;26437:42::-;;;-1:-1:-1;;;;;26437:42:0;;:::o;26074:45::-;;;;:::o;28615:196::-;28668:7;28688:13;28704:38;28714:10;;28726:15;28704:9;:38::i;:::-;28688:54;;28770:33;28781:14;;28797:5;28770:10;:33::i;:::-;28763:40;;;28615:196;:::o;25416:30::-;;;;:::o;26164:40::-;;;;:::o;31104:368::-;31244:4;31261:34;31271:6;31278:9;31288:6;31261:9;:34::i;:::-;31323:119;31332:6;31339:12;:10;:12::i;:::-;31352:89;31391:6;31352:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31352:19:0;;;;;;:11;:19;;;;;;31372:12;:10;:12::i;:::-;-1:-1:-1;;;;;31352:33:0;;;;;;;;;;;;-1:-1:-1;31352:33:0;;;:89;:37;:89::i;:::-;31323:8;:119::i;:::-;-1:-1:-1;31460:4:0;31104:368;;;;;:::o;32702:::-;32805:7;32872:16;;32852;:36;;32830:128;;;;-1:-1:-1;;;32830:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32969:19;32991:20;:18;:20::i;:::-;32969:42;-1:-1:-1;33029:33:0;:16;32969:42;33029:20;:33::i;:::-;33022:40;;;32702:368;;;;:::o;28524:83::-;28590:9;;;;28524:83;:::o;26126:30::-;;;;:::o;25580:27::-;;;;:::o;42129:93::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;42195:13:::1;:19:::0;42129:93::o;43254:106::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;43328:13:::1;:24:::0;43254:106::o;25815:35::-;;;;;;;;;:::o;31480:300::-;31595:4;31617:133;31640:12;:10;:12::i;:::-;31667:7;31689:50;31728:10;31689:11;:25;31701:12;:10;:12::i;:::-;-1:-1:-1;;;;;31689:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;31689:25:0;;;:34;;;;;;;;;;;:38;:50::i;25453:28::-;;;;:::o;32212:482::-;32334:7;32382:13;:11;:13::i;:::-;32367:11;:28;;32359:72;;;;;-1:-1:-1;;;32359:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32447:17;32442:245;;32488:37;32504:20;:18;:20::i;:::-;32488:11;;:15;:37::i;:::-;32481:44;;;;32442:245;32582:93;32654:20;:18;:20::i;:::-;32582:67;32598:50;32632:11;;32627:2;:16;32646:1;32627:20;32598:24;32614:7;;32598:11;:15;;:24;;;;:::i;:::-;:28;;:50::i;:::-;32582:11;;:15;:67::i;:::-;:71;;:93::i;42351:112::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;42427:19:::1;:28:::0;42351:112::o;26486:28::-;;;-1:-1:-1;;;;;26486:28:0;;:::o;25768:40::-;;;;;;;;;:::o;25691:34::-;;;;;;:::o;43028:107::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;43101:16:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;43101:26:0;;::::1;::::0;;;::::1;::::0;;43028:107::o;42902:114::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;42980:17:::1;:28:::0;42902:114::o;42475:108::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;42550:16:::1;:25:::0;42475:108::o;41716:133::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41804:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;41804:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41716:133::o;42595:97::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;42668:9:::1;:16:::0;;-1:-1:-1;;;;;42668:16:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;42668:16:0;;::::1;::::0;;;::::1;::::0;;42595:97::o;25488:34::-;;;;:::o;30267:215::-;-1:-1:-1;;;;;30357:20:0;;30333:7;30357:20;;;:11;:20;;;;;;;;30353:55;;;-1:-1:-1;;;;;;30386:22:0;;;;;;:13;:22;;;;;;30379:29;;30353:55;-1:-1:-1;;;;;30446:27:0;;;;;;:18;:27;;;;;;30426:48;;:19;:48::i;22064:148::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;22171:1:::1;22155:6:::0;;22134:40:::1;::::0;-1:-1:-1;;;;;22155:6:0;;::::1;::::0;22134:40:::1;::::0;22171:1;;22134:40:::1;22202:1;22185:19:::0;;-1:-1:-1;;;;;;22185:19:0::1;::::0;;22064:148::o;25010:35::-;;;;:::o;26211:36::-;;;;:::o;25531:40::-;;;;:::o;43372:150::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;43429:14:::1;:21:::0;;-1:-1:-1;;43429:21:0::1;43446:4;43429:21:::0;;::::1;::::0;;;43461:20:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;43511:3;43492:16;:22:::0;43372:150::o;21422:79::-;21460:7;21487:6;-1:-1:-1;;;;;21487:6:0;21422:79;:::o;28429:87::-;28501:7;28494:14;;;;;;;-1:-1:-1;;28494:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28468:13;;28494:14;;28501:7;;28494:14;;28501:7;28494:14;;;;;;;;;;;;;;;;;;;;;;;;25649:33;;;;:::o;42698:198::-;42790:9;42785:104;42809:9;:16;42805:1;:20;42785:104;;;42847:30;42856:9;42866:1;42856:12;;;;;;;;;;;;;;42870:6;42847:8;:30::i;:::-;-1:-1:-1;42827:3:0;;42785:104;;;;42698:198;;:::o;31788:298::-;31908:4;31930:126;31939:12;:10;:12::i;:::-;31952:7;31960:95;31999:15;31960:95;;;;;;;;;;;;;;;;;:11;:25;31972:12;:10;:12::i;:::-;-1:-1:-1;;;;;31960:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;31960:25:0;;;:34;;;;;;;;;;;:95;:38;:95::i;30490:213::-;30612:4;30633:40;30643:12;:10;:12::i;:::-;30656:9;30666:6;30633:9;:40::i;26254:30::-;;;;:::o;42036:81::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;42096:7:::1;:13:::0;42036:81::o;41861:163::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;41937:21:::1;:31:::0;;;::::1;;::::0;;::::1;-1:-1:-1::0;;41937:31:0;;::::1;::::0;;;::::1;::::0;;;41979:37:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;41861:163:::0;:::o;32094:110::-;-1:-1:-1;;;;;32176:20:0;32152:4;32176:20;;;:11;:20;;;;;;;;;32094:110::o;42234:105::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;42306:19:::1;:25:::0;42234:105::o;25942:37::-;;;;:::o;30711:184::-;-1:-1:-1;;;;;30860:18:0;;;30828:7;30860:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;30711:184::o;26521:23::-;;;-1:-1:-1;;;;;26521:23:0;;:::o;25895:40::-;;;;:::o;33078:603::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;33184:42:::1;-1:-1:-1::0;;;;;33173:53:0;::::1;;;33151:144;;;;-1:-1:-1::0;;;33151:144:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;33314:24:0;::::1;33333:4;33314:24;;33306:83;;;;-1:-1:-1::0;;;33306:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;33409:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33408:21;33400:68;;;;-1:-1:-1::0;;;33400:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;33483:27:0;::::1;33513:1;33483:27:::0;;;:18:::1;:27;::::0;;;;;:31;33479:123:::1;;-1:-1:-1::0;;;;;33562:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;33542:48:::1;::::0;:19:::1;:48::i;:::-;-1:-1:-1::0;;;;;33517:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:73;33479:123:::1;-1:-1:-1::0;;;;;33612:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;33612:27:0::1;33635:4;33612:27:::0;;::::1;::::0;;;33650:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;33650:23:0::1;::::0;;::::1;::::0;;33078:603::o;22367:244::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22456:22:0;::::1;22448:73;;;;-1:-1:-1::0;;;22448:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22558:6;::::0;;22537:38:::1;::::0;-1:-1:-1;;;;;22537:38:0;;::::1;::::0;22558:6;::::1;::::0;22537:38:::1;::::0;::::1;22586:6;:17:::0;;-1:-1:-1;;;;;;22586:17:0::1;-1:-1:-1::0;;;;;22586:17:0;;;::::1;::::0;;;::::1;::::0;;22367:244::o;33689:491::-;21644:12;:10;:12::i;:::-;21634:6;;-1:-1:-1;;;;;21634:6:0;;;:22;;;21626:67;;;;;-1:-1:-1;;;21626:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21626:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33770:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;33762:67;;;;-1:-1:-1::0;;;33762:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33845:9;33840:333;33864:9;:16:::0;33860:20;::::1;33840:333;;;33922:7;-1:-1:-1::0;;;;;33906:23:0::1;:9;33916:1;33906:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;33906:12:0::1;:23;33902:260;;;33965:9;33975:16:::0;;-1:-1:-1;;33975:20:0;;;33965:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;33950:9:::1;:12:::0;;-1:-1:-1;;;;;33965:31:0;;::::1;::::0;33960:1;;33950:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;33950:46:0::1;-1:-1:-1::0;;;;;33950:46:0;;::::1;;::::0;;34015:22;;::::1;::::0;;:13:::1;:22:::0;;;;;;:26;;;34060:11:::1;:20:::0;;;;:28;;-1:-1:-1;;34060:28:0::1;::::0;;34107:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34107:15:0;;;;;-1:-1:-1;;;;;;34107:15:0::1;::::0;;;;;34141:5:::1;;33902:260;33882:3;;33840:333;;;;33689:491:::0;:::o;5985:106::-;6073:10;5985:106;:::o;34188:371::-;-1:-1:-1;;;;;34315:19:0;;34307:68;;;;-1:-1:-1;;;34307:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34394:21:0;;34386:68;;;;-1:-1:-1;;;34386:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34467:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;34519:32;;;;;;;;;;;;;;;;;34188:371;;;:::o;28823:431::-;28903:7;28942:1;28927:11;;:16;28923:76;;-1:-1:-1;28975:11:0;;28960:27;;28923:76;29019:22;29044:26;:11;29060:9;29044:15;:26::i;:::-;29019:51;-1:-1:-1;29167:1:0;26367:5;29116:30;;;29098:49;;29097:67;:71;26418:4;29183:20;;29179:44;;26418:4;29205:18;;;;;;29179:44;29241:5;28823:431;-1:-1:-1;;;;28823:431:0:o;29266:559::-;29352:7;29396:13;29352:7;29420:367;29444:12;29440:1;:16;29420:367;;;29478:14;;:::i;:::-;29495:5;29501:1;29495:8;;;;;;;29478:25;;;;;;;;29495:8;;;;;;;;;29478:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29522:27:0;;29518:258;;;29586:3;:15;;;29570:31;;29518:258;;;29683:18;;;;29720:14;;29658:78;;29668:13;;29703:32;;:12;;:16;:32::i;:::-;29658:9;:78::i;:::-;29642:94;;29755:5;;;29518:258;-1:-1:-1;29458:3:0;;29420:367;;;-1:-1:-1;29804:13:0;29266:559;-1:-1:-1;;;29266:559:0:o;34567:2644::-;-1:-1:-1;;;;;34698:20:0;;34690:70;;;;-1:-1:-1;;;34690:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34779:23:0;;34771:71;;;;-1:-1:-1;;;34771:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34870:1;34861:6;:10;34853:64;;;;-1:-1:-1;;;34853:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34936:14;;;;;:35;;;34964:7;:5;:7::i;:::-;-1:-1:-1;;;;;34954:17:0;:6;-1:-1:-1;;;;;34954:17:0;;34936:35;:59;;;;34988:7;:5;:7::i;:::-;-1:-1:-1;;;;;34975:20:0;:9;-1:-1:-1;;;;;34975:20:0;;34936:59;:105;;;-1:-1:-1;;;;;;35016:25:0;;;;;;:17;:25;;;;;;;;34936:105;:137;;;-1:-1:-1;;;;;;35045:28:0;;;;;;:17;:28;;;;;;;;34936:137;34928:183;;;;-1:-1:-1;;;34928:183:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35155:1;35136:16;;:20;:47;;;;-1:-1:-1;35160:13:0;;-1:-1:-1;;;;;35160:23:0;;;:13;;:23;35136:47;:68;;;;;35197:7;:5;:7::i;:::-;-1:-1:-1;;;;;35187:17:0;:6;-1:-1:-1;;;;;35187:17:0;;;35136:68;35132:169;;;35221:16;:18;;;;;;-1:-1:-1;;;;;35254:17:0;;35221:16;35254:17;;;:6;:17;;;;;35274:15;35254:35;;35132:169;35325:13;;-1:-1:-1;;;;;35325:26:0;;;:13;;:26;:74;;;;-1:-1:-1;35372:9:0;;-1:-1:-1;;;;;35355:14:0;;;;;;:6;:14;;;;;;35384:15;35355:26;;:44;35325:74;35321:115;;;35416:8;;;35321:115;35460:16;;;;;;;35459:17;:44;;;;-1:-1:-1;35490:13:0;;-1:-1:-1;;;;;35480:23:0;;;35490:13;;35480:23;;35459:44;:65;;;;;35517:7;:5;:7::i;:::-;-1:-1:-1;;;;;35507:17:0;:6;-1:-1:-1;;;;;35507:17:0;;;35459:65;35456:893;;;35690:17;;35674:13;;35553:4;;35598:21;;35674:33;35668:3;:39;:77;;;;-1:-1:-1;35729:16:0;;;;;;;35668:77;:134;;;;;35786:16;;35767:15;:35;;35668:134;35665:236;;;35822:32;35838:15;35822;:32::i;:::-;35880:5;35873:12;;35665:236;35918:4;35915:423;;;35943:28;35974:24;35992:4;35974:9;:24::i;:::-;35943:55;;36017:24;36068:19;;36044:20;:43;;36017:70;;36128:13;;36116:9;;:25;36110:3;:31;:71;;;;;36162:19;36110:71;:113;;;;-1:-1:-1;36202:21:0;;;;;;;36110:113;36106:218;;;36248:18;:16;:18::i;:::-;36301:3;36289:9;:15;36106:218;35915:423;;;35456:893;;;36394:6;36369:22;36426:20;:18;:20::i;:::-;-1:-1:-1;;;;;36463:25:0;;;;;;:17;:25;;;;;;36411:35;;-1:-1:-1;36463:25:0;;36462:26;:59;;;;-1:-1:-1;;;;;;36493:28:0;;;;;;:17;:28;;;;;;;;36492:29;36462:59;:80;;;;-1:-1:-1;36526:16:0;;;;;;;36525:17;36462:80;36459:158;;;36575:30;36586:6;36593;36600:4;36575:10;:30::i;:::-;36558:47;;36459:158;36658:48;36689:16;:6;36700:4;36689:10;:16::i;:::-;-1:-1:-1;;;;;36658:26:0;;;;;;:18;:26;;;;;;;:30;:48::i;:::-;-1:-1:-1;;;;;36629:26:0;;;;;;:18;:26;;;;;:77;36749:59;36783:24;:14;36802:4;36783:18;:24::i;:::-;-1:-1:-1;;;;;36749:29:0;;;;;;:18;:29;;;;;;;:33;:59::i;:::-;-1:-1:-1;;;;;36717:29:0;;;;;;;:18;:29;;;;;;;;:91;;;;36902:19;;;;;:11;:19;;;;;;;36898:109;;;-1:-1:-1;;;;;36962:21:0;;;;;;:13;:21;;;;;;:33;;36988:6;36962:25;:33::i;:::-;-1:-1:-1;;;;;36938:21:0;;;;;;:13;:21;;;;;:57;36898:109;-1:-1:-1;;;;;37021:22:0;;;;;;:11;:22;;;;;;;;37017:126;;;-1:-1:-1;;;;;37087:24:0;;;;;;:13;:24;;;;;;:44;;37116:14;37087:28;:44::i;:::-;-1:-1:-1;;;;;37060:24:0;;;;;;:13;:24;;;;;:71;37017:126;37177:9;-1:-1:-1;;;;;37160:43:0;37169:6;-1:-1:-1;;;;;37160:43:0;-1:-1:-1;;;;;;;;;;;37188:14:0;37160:43;;;;;;;;;;;;;;;;;;34567:2644;;;;;:::o;11041:192::-;11127:7;11163:12;11155:6;;;;11147:29;;;;-1:-1:-1;;;11147:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11199:5:0;;;11041:192::o;38279:816::-;38378:16;;38331:7;;;38427:13;:11;:13::i;:::-;38405:35;;38456:9;38451:460;38475:9;:16;38471:20;;38451:460;;;38570:16;38535:18;:32;38554:9;38564:1;38554:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38554:12:0;38535:32;;;;;;;;;;;;;:51;;:113;;;38637:11;38607:13;:27;38621:9;38631:1;38621:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38621:12:0;38607:27;;;;;;;;;;;;;:41;38535:113;38513:193;;;38671:35;38692:13;:11;:13::i;:::-;38671:16;;;:20;:35::i;:::-;38664:42;;;;;;;38513:193;38740:86;38779:18;:32;38798:9;38808:1;38798:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38798:12:0;38779:32;;;;;;;;;;;;;38740:16;;:20;:86::i;:::-;38721:105;;38855:44;38871:13;:27;38885:9;38895:1;38885:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38885:12:0;38871:27;;;;;;;;;;;;;38855:11;;:15;:44::i;:::-;38841:58;-1:-1:-1;38493:3:0;;38451:460;;;;38944:35;38965:13;:11;:13::i;38944:35::-;38925:16;:54;38921:115;;;39001:35;39022:13;:11;:13::i;39001:35::-;38994:42;;;;;;38921:115;39054:33;:16;39075:11;39054:20;:33::i;:::-;39047:40;;;;38279:816;:::o;12439:132::-;12497:7;12524:39;12528:1;12531;12524:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;12517:46;12439:132;-1:-1:-1;;;12439:132:0:o;10138:181::-;10196:7;10228:5;;;10252:6;;;;10244:46;;;;;-1:-1:-1;;;10244:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11492:471;11550:7;11795:6;11791:47;;-1:-1:-1;11825:1:0;11818:8;;11791:47;11862:5;;;11866:1;11862;:5;:1;11886:5;;;;;:10;11878:56;;;;-1:-1:-1;;;11878:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10602:136;10660:7;10687:43;10691:1;10694;10687:43;;;;;;;;;;;;;;;;;:3;:43::i;29833:426::-;29922:7;29941:14;29958:269;30007:208;30060:112;-1:-1:-1;;;30167:4:0;30060:17;:112::i;:::-;30207:7;30007:17;:208::i;:::-;30217:9;29958:18;:269::i;:::-;29941:286;29833:426;-1:-1:-1;;;;;29833:426:0:o;40292:1412::-;26919:16;:23;;-1:-1:-1;;26919:23:0;;;;;;;40389:3:::1;40373:13;:19:::0;26919:23;;40598:9;;::::1;-1:-1:-1::0;;;;;40598:9:0::1;:23:::0;40594:148:::1;;40653:30;40680:2;40653:22;:15:::0;40673:1:::1;40653:19;:22::i;:30::-;40698:9;::::0;:32:::1;::::0;40638:45;;-1:-1:-1;40698:9:0;;::::1;-1:-1:-1::0;;;;;40698:9:0::1;::::0;:32:::1;::::0;::::1;;::::0;40638:45;;40698:32:::1;::::0;;;40638:45;40698:9;:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;40594:148;40762:51;40779:33;:15:::0;40799:12;40779:19:::1;:33::i;:::-;40762:16;:51::i;:::-;40914:8;::::0;40873:20:::1;::::0;40896:28:::1;::::0;-1:-1:-1;;;;;40914:8:0::1;40896:9;:28::i;:::-;40873:51;;40935:23;40961:64;41008:11;;41022:1;41008:15;41003:2;:21;40961:37;40978:19;;40961:12;:16;;:37;;;;:::i;:64::-;40935:90:::0;-1:-1:-1;41036:20:0::1;41059:33;:12:::0;40935:90;41059:16:::1;:33::i;:::-;41036:56;;41113:12;41129:20;:18;:20::i;:::-;41113:36:::0;-1:-1:-1;41194:60:0::1;41228:25;:15:::0;41113:36;41228:19:::1;:25::i;:::-;41213:9;41194:29;::::0;;;:18:::1;:29;::::0;;;;;;:33:::1;:60::i;:::-;41181:9;41162:29;::::0;;;:18:::1;:29;::::0;;;;;:92;;;;41292:8:::1;::::0;-1:-1:-1;;;;;41292:8:0::1;41265:37:::0;;;;;:41;41343:13:::1;::::0;:31:::1;::::0;41361:12;41343:17:::1;:31::i;:::-;41327:13;:47:::0;41414:44:::1;41435:22;:12:::0;41452:4;41435:16:::1;:22::i;:::-;41414:16;::::0;;:20:::1;:44::i;:::-;41395:16;:63:::0;41493:8:::1;::::0;41476:55:::1;::::0;;;;;;;41504:9:::1;::::0;-1:-1:-1;;;;;41493:8:0::1;::::0;-1:-1:-1;;;;;;;;;;;41476:55:0;;;;;::::1;::::0;;::::1;41564:8;::::0;41547:53:::1;::::0;;;;;;;41583:1:::1;::::0;-1:-1:-1;;;;;41564:8:0::1;::::0;-1:-1:-1;;;;;;;;;;;41547:53:0;;;;;::::1;::::0;;::::1;41616:80;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;26965:16:0;:24;;-1:-1:-1;;26965:24:0;;;-1:-1:-1;;;;40292:1412:0:o;39107:87::-;39154:32;39180:4;39154:17;:32::i;:::-;39107:87::o;37223:1048::-;37406:7;;37307;;37352:6;;37406:12;37403:336;;37434:14;37451:46;37480:11;;37494:1;37480:15;37475:2;:21;37451:19;37462:7;;37451:6;:10;;:19;;;;:::i;:46::-;37434:63;-1:-1:-1;37529:26:0;:14;37434:63;37529:18;:26::i;:::-;37512:43;-1:-1:-1;37589:38:0;37610:16;:6;37621:4;37610:10;:16::i;37589:38::-;37570:16;:57;37657:12;;:24;;37674:6;37657:16;:24::i;:::-;37642:12;:39;37701:26;;;;;;;;;;;;;;;;;37403:336;;37789:13;;:18;37786:436;;37823:20;37846:52;37881:11;;37895:1;37881:15;37876:2;:21;37846:25;37857:13;;37846:6;:10;;:25;;;;:::i;:52::-;37823:75;-1:-1:-1;37930:32:0;:14;37823:75;37930:18;:32::i;:::-;37913:49;-1:-1:-1;38013:61:0;38051:22;:12;38068:4;38051:16;:22::i;:::-;38040:4;38013:33;;;;:18;:33;;;;;;;:37;:61::i;:::-;38004:4;37977:33;;;;:18;:33;;;;;:97;38110:18;;:36;;38133:12;38110:22;:36::i;:::-;38089:18;:57;38166:44;;;;;;;;38191:4;;-1:-1:-1;;;;;38166:44:0;;;-1:-1:-1;;;;;;;;;;;38166:44:0;;;;;;;;37786:436;38249:14;37223:1048;-1:-1:-1;;;;37223:1048:0:o;13067:278::-;13153:7;13188:12;13181:5;13173:28;;;;-1:-1:-1;;;13173:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13212:9;13228:1;13224;:5;;;;;;;13067:278;-1:-1:-1;;;;;13067:278:0:o;1100:195::-;1157:6;1188:13;:9;;;:13;;;;;-1:-1:-1;;1217:19:0;;;;;:42;;-1:-1:-1;;;;;;1240:19:0;;;1217:42;1208:52;;;;;2386:746;2444:6;2459:22;2488:19;2531:1;2526;:6;;;2522:230;;2560:27;2581:2;2575:1;2566:11;;:17;;2585:1;2560:4;:27::i;:::-;2543:44;;2522:230;;;2671:38;2703:2;2696:1;2695:2;;-1:-1:-1;;;;;2677:22:0;:28;;2707:1;2671:4;:38::i;:::-;2654:55;-1:-1:-1;;2739:1:0;2735:5;;:9;;2522:230;2779:2;2760:21;;;;;2794:14;2790:337;;;-1:-1:-1;;;2828:14:0;:52;;2819:62;;;;;;-1:-1:-1;2897:24:0;;;-1:-1:-1;2890:31:0;;2790:337;-1:-1:-1;;;;;2990:14:0;:52;;2981:62;;;;;;-1:-1:-1;3067:14:0;-1:-1:-1;3052:30:0;;1610:469;1669:7;1689:6;1685:20;;-1:-1:-1;1704:1:0;1697:8;;1685:20;1728:1;1723;:6;;;;1714:16;;;;;;1753:11;;;;-1:-1:-1;;;;;1768:38:0;;1753:54;;1812:2;1752:62;;1854:3;1849:8;;;1834:24;-1:-1:-1;;;;;1876:56:0;;;1867:66;;;;;;1947:2;1940:9;1980:71;;1967:84;;;1958:94;;;;;;2066:7;;1610:469;-1:-1:-1;;;1610:469:0:o;39867:414::-;39955:16;;;39969:1;39955:16;;;39931:21;39955:16;;;;;39931:21;39955:16;;;;;;;;-1:-1:-1;;39992:15:0;;:22;;;-1:-1:-1;;;39992:22:0;;;;39931:40;;-1:-1:-1;;;;;;39992:15:0;;;;:20;;-1:-1:-1;39992:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39992:22:0;39982:7;;:4;;39987:1;;39982:7;;;;;;;;;:32;-1:-1:-1;;;;;39982:32:0;;;-1:-1:-1;;;;;39982:32:0;;;;;40043:4;40025;40030:1;40025:7;;;;;;;;-1:-1:-1;;;;;40025:23:0;;;:7;;;;;;;;;;:23;;;;40061:15;;40215:8;;40061:212;;-1:-1:-1;;;40061:212:0;;:15;:212;;;;;;40215:8;;;40061:212;;;;;;40243:15;40061:212;;;;;;;;;;;;;;;;;;;;;:15;;;;;:66;;40135:9;;40061:15;;40184:4;;40215:8;;40243:15;;40061:212;;;;;;;;;;;;;;;:15;:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39867:414;;:::o;39206:649::-;26919:16;:23;;-1:-1:-1;;26919:23:0;;;;;;39298:24:::1;39316:4;39298:9;:24::i;:::-;39423:16;::::0;;39437:1:::1;39423:16:::0;;;39399:21:::1;39423:16:::0;;::::1;::::0;;39276:46;;-1:-1:-1;39423:16:0;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;39423:16:0::1;39399:40;;39468:4;39450;39455:1;39450:7;;;;;;;;-1:-1:-1::0;;;;;39450:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;39494:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;39494:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;39450:7;;39494:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;39494:22:0;39484:7;;:4;;39489:1:::1;::::0;39484:7;::::1;;;;;-1:-1:-1::0;;;;;39484:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;39561:15:::1;::::0;39529:62:::1;::::0;39546:4:::1;::::0;39561:15:::1;39579:11:::0;39529:8:::1;:62::i;:::-;39634:15;::::0;:213:::1;::::0;-1:-1:-1;;;39634:213:0;;::::1;::::0;::::1;::::0;;;:15:::1;:213:::0;;;;;;-1:-1:-1;;;;;39634:213:0;;::::1;::::0;;;;39821:15:::1;39634:213:::0;;;;;;;;;;;;;;;;;;;;;:15;;;::::1;::::0;:66:::1;::::0;39715:11;;39785:4;;39804:2;;39821:15;39634:213;;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;:15;:213:::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26965:16:0;:24;;-1:-1:-1;;26965:24:0;;;-1:-1:-1;;;;;39206:649:0:o;3596:1737::-;3655:7;3675:6;3671:1657;;-1:-1:-1;;;;3683:41:0;;3671:1657;3740:6;3736:1592;;-1:-1:-1;3755:1:0;3748:8;;3736:1592;3777:10;3813:1;-1:-1:-1;;;3827:41:0;;3823:74;;3879:3;3884:10;;;;3872;3823:74;-1:-1:-1;;;3909:2:0;:25;3905:56;;3945:2;3949:9;;;;3938;3905:56;3979:11;3973:2;:17;3969:48;;4001:2;4005:9;;;;3994;3969:48;4035:7;4029:2;:13;4025:44;;4053:2;4057:9;;;;4046;4025:44;4087:5;4081:2;:11;4077:40;;4103:1;4106:8;;;;4096;4077:40;4135:4;4129:2;:10;4125:39;;4150:1;4153:8;;;;4143;4125:39;4182:3;4176:2;:9;4172:38;;4196:1;4199:8;;;;4189;4172:38;4228:3;4222:2;:9;4218:23;;4240:1;4233:8;;;;4218:23;-1:-1:-1;;4296:9:0;;4284;4318:6;;4314:43;;;4332:2;4326:8;;;;;;;;;;;;;4314:43;;;4355:2;4354:3;;4348:9;;;;;;;;;;;;;4314:43;-1:-1:-1;;;4368:14:0;4452:769;4459:5;;4452:769;;4485:1;4481:5;;:9;4477:735;;-1:-1:-1;;4537:6:0;;;;4514:10;;;;4556:8;;-1:-1:-1;;;4581:89:0;;4577:180;;4698:3;4687:14;;;;;4722:1;4716:7;4577:180;;;4754:3;4743:14;;;;;4577:180;-1:-1:-1;;4774:2:0;:9;4770:23;;;4792:1;4785:8;;;;;;;;;4770:23;4833:3;4828:2;:8;4819:18;;;;;;4477:735;;;4884:5;;;;4908:1;4902:7;;;;4922:8;;;;;-1:-1:-1;;;4947:84:0;;4943:165;;5054:3;5048:9;;;;;5078:1;5072:7;;;;4943:165;;;5105:3;5099:9;;;;;4943:165;-1:-1:-1;;5125:2:0;:9;5121:23;;;5143:1;5136:8;;;;;;;;;5121:23;5184:3;5179:2;:8;5170:18;;;;;;4452:769;;;5240:1;5235:2;:6;5231:65;;;5254:2;5243:13;;;;;;;;;;;;;5231:65;;;5279:1;5274:2;:6;5270:26;;;5294:2;5293:3;;5282:14;;;;;;;;;;;;;5270:26;-1:-1:-1;5314:6:0;-1:-1:-1;5307:13:0;;-1:-1:-1;;;5307:13:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://7b2d101ad682c9fdf6ec3c88adeed967a4cd11d154c3fe65df5315fa7f1e33db
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.