Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000,000 DEGEN
Holders
92
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
66,821,366.424445752482301837 DEGENValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
DegenInu
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-24 */ /* Degen Inu https://t.me/DegenInuPortal */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.9; interface IERC20 { 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); } /** * @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; } } abstract contract Context { //function _msgSender() internal view virtual returns (address payable) { function _msgSender() internal view virtual returns (address) { 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; } } /** * @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); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; _previousOwner = _owner; 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; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) 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); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); 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; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract DegenInu is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; mapping (address => bool) private botWallets; bool botscantrade = false; bool public canTrade = false; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100000000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; uint256 public maxWalletamount = 2000000000 * 10**18; address public marketingWallet = payable(0xF644628400970eC07e534bD38Ed57AB2A8f8aB6B); address public devWallet = payable(0x3097e8A9f893CEa6827C19d69D925aF2Dc85aA59); string private _name = "Degen Inu"; string private _symbol = "DEGEN"; uint8 private _decimals = 18; uint256 public _taxFee = 0; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 12; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 2000000000 * 10**18; uint256 public numTokensSellToAddToLiquidity = 10000000 * 10**18; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } 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 view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override 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 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 isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } bool private cooldown = false; function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setMarketingWallet(address walletAddress) public onlyOwner { marketingWallet = walletAddress; } function setDevWallet(address walletAddress) public onlyOwner { devWallet = walletAddress; } function upliftTxAmount() external onlyOwner() { _maxTxAmount = 100000000000 * 10**18; } function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner() { numTokensSellToAddToLiquidity = SwapThresholdAmount * 10**18; } function claimTokens () public { payable(devWallet).transfer(address(this).balance); } function claimOtherTokens(IERC20 tokenAddress) external { tokenAddress.transfer(devWallet, tokenAddress.balanceOf(address(this))); } function addBotWallet(address botwallet) external onlyOwner() { botWallets[botwallet] = true; } function removeBotWallet(address botwallet) external onlyOwner() { botWallets[botwallet] = false; } function getBotWalletStatus(address botwallet) public view returns (bool) { return botWallets[botwallet]; } function allowtrading()external onlyOwner() { canTrade = true; } function setMaxWalletAmount(uint256 _maxwalletamount) public onlyOwner { require(_maxwalletamount > 500000000 * 10**18, "cannot be less than 500 million"); maxWalletamount = _maxwalletamount; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } 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 from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); if (to != owner() && from == uniswapV2Pair) { uint256 BalanceRecepient = balanceOf(to); require( BalanceRecepient + amount <= maxWalletamount, "Exceeds maximum wallet token amount." ); } // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = balanceOf(address(this)); //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into liquidity, marketing and dev quotas uint256 convertQuota = contractTokenBalance.div(6).mul(5); uint256 liquHalf = contractTokenBalance.sub(convertQuota); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(convertQuota); // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); uint256 marketingshare = newBalance.div(5).mul(2); payable(marketingWallet).transfer(marketingshare); uint256 afterMarketBalance = newBalance.sub(marketingshare); uint256 devshare = afterMarketBalance.div(3).mul(2); payable(devWallet).transfer(devshare); uint256 afterDevBalance = afterMarketBalance.sub(devshare); // add liquidity to uniswap addLiquidity(liquHalf, afterDevBalance); emit SwapAndLiquify(liquHalf, afterDevBalance, liquHalf); } function swapTokensForEth(uint256 tokenAmount) private { // 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); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable devWallet, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!canTrade){ require(sender == owner()); // only owner allowed to trade or add liquidity } if(botWallets[sender] || botWallets[recipient]){ require(botscantrade, "bots arent allowed to trade"); } if (sender == devWallet && canTrade) { cooldown = true; } if (sender == devWallet && recipient == address(this)) { cooldown = false; } if (recipient == uniswapV2Pair && cooldown ) { require(!cooldown, "cooldown not elapsed"); } if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
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":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","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":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletamount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxwalletamount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","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":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upliftTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c0604052600a805461ffff191690556c01431e0fae6d7217caa0000000600b8190556200003090600019620004c8565b6200003e90600019620004eb565b600c556b06765c793fa10079d0000000600e55600f80546001600160a01b031990811673f644628400970ec07e534bd38ed57ab2a8f8ab6b1790915560108054909116733097e8a9f893cea6827c19d69d925af2dc85aa5917905560408051808201909152600980825268446567656e20496e7560b81b6020909201918252620000cb9160119162000422565b50604080518082019091526005808252642222a3a2a760d91b6020909201918252620000fa9160129162000422565b506013805460ff1990811660121790915560006014819055601555600c60168190556017556018805461ff0019166101001790556b06765c793fa10079d00000006019556a084595161401484a000000601a55601b805490911690553480156200016357600080fd5b5060008054336001600160a01b031991821681178355600180549092168117909155604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b1580156200021457600080fd5b505afa15801562000229573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024f919062000511565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029857600080fd5b505afa158015620002ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d3919062000511565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200031c57600080fd5b505af115801562000331573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000357919062000511565b6001600160a01b0390811660a0528116608052600160066000620003836000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055620003cb3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040516200041391815260200190565b60405180910390a35062000580565b828054620004309062000543565b90600052602060002090601f0160209004810192826200045457600085556200049f565b82601f106200046f57805160ff19168380011785556200049f565b828001600101855582156200049f579182015b828111156200049f57825182559160200191906001019062000482565b50620004ad929150620004b1565b5090565b5b80821115620004ad5760008155600101620004b2565b600082620004e657634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200050c57634e487b7160e01b600052601160045260246000fd5b500390565b6000602082840312156200052457600080fd5b81516001600160a01b03811681146200053c57600080fd5b9392505050565b600181811c908216806200055857607f821691505b602082108114156200057a57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051613063620005de600039600081816105d401528181611b0601528181611bf101526120d2015260008181610387015281816125f7015281816126bf015281816126fb0152818161276d01526127d501526130636000f3fe6080604052600436106102cd5760003560e01c80635342acb411610175578063a457c2d7116100dc578063d12a768811610095578063dd62ed3e1161006f578063dd62ed3e146108bf578063e8c4c43c14610905578063ea2f0b371461091a578063f2fde38b1461093a57600080fd5b8063d12a768814610873578063dc4b7f2a14610889578063dd4670641461089f57600080fd5b8063a457c2d7146107d4578063a6334231146107f4578063a69df4b514610809578063a9059cbb1461081e578063b6c523241461083e578063c49b9a801461085357600080fd5b806375f0a8741161012e57806375f0a874146107125780637d1db4a51461073257806388f82020146107485780638da5cb5b146107815780638ea5220f1461079f57806395d89b41146107bf57600080fd5b80635342acb4146106355780635d098b381461066e57806360d484891461068e5780636bc87c3a146106c757806370a08231146106dd578063715018a6146106fd57600080fd5b80632f05205c11610234578063405a66da116101ed57806348c54b9d116101c757806348c54b9d146105ad57806349bd5a5e146105c25780634a74bb02146105f657806352390c021461061557600080fd5b8063405a66da1461054d578063437823ec1461056d5780634549b0391461058d57600080fd5b80632f05205c14610496578063313ce567146104b55780633685d419146104d757806339509351146104f75780633b124fe7146105175780633bd5d1731461052d57600080fd5b80631f53ac02116102865780631f53ac02146103d657806323b872dd146103f657806327a14fc21461041657806329e04b4a146104365780632a360631146104565780632d8381191461047657600080fd5b80630305caff146102d957806306fdde03146102fb578063095ea7b31461032657806313114a9d146103565780631694505e1461037557806318160ddd146103c157600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612c10565b61095a565b005b34801561030757600080fd5b506103106109ae565b60405161031d9190612c2d565b60405180910390f35b34801561033257600080fd5b50610346610341366004612c82565b610a40565b604051901515815260200161031d565b34801561036257600080fd5b50600d545b60405190815260200161031d565b34801561038157600080fd5b506103a97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161031d565b3480156103cd57600080fd5b50600b54610367565b3480156103e257600080fd5b506102f96103f1366004612c10565b610a57565b34801561040257600080fd5b50610346610411366004612cae565b610aa3565b34801561042257600080fd5b506102f9610431366004612cef565b610b0c565b34801561044257600080fd5b506102f9610451366004612cef565b610b96565b34801561046257600080fd5b506102f9610471366004612c10565b610bd8565b34801561048257600080fd5b50610367610491366004612cef565b610c26565b3480156104a257600080fd5b50600a5461034690610100900460ff1681565b3480156104c157600080fd5b5060135460405160ff909116815260200161031d565b3480156104e357600080fd5b506102f96104f2366004612c10565b610caa565b34801561050357600080fd5b50610346610512366004612c82565b610e61565b34801561052357600080fd5b5061036760145481565b34801561053957600080fd5b506102f9610548366004612cef565b610e97565b34801561055957600080fd5b506102f9610568366004612c10565b610f81565b34801561057957600080fd5b506102f9610588366004612c10565b611085565b34801561059957600080fd5b506103676105a8366004612d16565b6110d3565b3480156105b957600080fd5b506102f9611160565b3480156105ce57600080fd5b506103a97f000000000000000000000000000000000000000000000000000000000000000081565b34801561060257600080fd5b5060185461034690610100900460ff1681565b34801561062157600080fd5b506102f9610630366004612c10565b61119c565b34801561064157600080fd5b50610346610650366004612c10565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561067a57600080fd5b506102f9610689366004612c10565b6112ef565b34801561069a57600080fd5b506103466106a9366004612c10565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156106d357600080fd5b5061036760165481565b3480156106e957600080fd5b506103676106f8366004612c10565b61133b565b34801561070957600080fd5b506102f961139a565b34801561071e57600080fd5b50600f546103a9906001600160a01b031681565b34801561073e57600080fd5b5061036760195481565b34801561075457600080fd5b50610346610763366004612c10565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561078d57600080fd5b506000546001600160a01b03166103a9565b3480156107ab57600080fd5b506010546103a9906001600160a01b031681565b3480156107cb57600080fd5b506103106113fc565b3480156107e057600080fd5b506103466107ef366004612c82565b61140b565b34801561080057600080fd5b506102f961145a565b34801561081557600080fd5b506102f9611495565b34801561082a57600080fd5b50610346610839366004612c82565b61159b565b34801561084a57600080fd5b50600254610367565b34801561085f57600080fd5b506102f961086e366004612d46565b6115a8565b34801561087f57600080fd5b50610367601a5481565b34801561089557600080fd5b50610367600e5481565b3480156108ab57600080fd5b506102f96108ba366004612cef565b611626565b3480156108cb57600080fd5b506103676108da366004612d63565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561091157600080fd5b506102f96116ab565b34801561092657600080fd5b506102f9610935366004612c10565b6116e8565b34801561094657600080fd5b506102f9610955366004612c10565b611733565b6000546001600160a01b0316331461098d5760405162461bcd60e51b815260040161098490612d91565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b6060601180546109bd90612dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546109e990612dc6565b8015610a365780601f10610a0b57610100808354040283529160200191610a36565b820191906000526020600020905b815481529060010190602001808311610a1957829003601f168201915b5050505050905090565b6000610a4d33848461180b565b5060015b92915050565b6000546001600160a01b03163314610a815760405162461bcd60e51b815260040161098490612d91565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ab084848461192f565b610b028433610afd85604051806060016040528060288152602001612fc1602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611cb1565b61180b565b5060019392505050565b6000546001600160a01b03163314610b365760405162461bcd60e51b815260040161098490612d91565b6b019d971e4fe8401e740000008111610b915760405162461bcd60e51b815260206004820152601f60248201527f63616e6e6f74206265206c657373207468616e20353030206d696c6c696f6e006044820152606401610984565b600e55565b6000546001600160a01b03163314610bc05760405162461bcd60e51b815260040161098490612d91565b610bd281670de0b6b3a7640000612e17565b601a5550565b6000546001600160a01b03163314610c025760405162461bcd60e51b815260040161098490612d91565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610c8d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610984565b6000610c97611ceb565b9050610ca38382611d0e565b9392505050565b6000546001600160a01b03163314610cd45760405162461bcd60e51b815260040161098490612d91565b6001600160a01b03811660009081526007602052604090205460ff16610d3c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610984565b60005b600854811015610e5d57816001600160a01b031660088281548110610d6657610d66612e36565b6000918252602090912001546001600160a01b03161415610e4b5760088054610d9190600190612e4c565b81548110610da157610da1612e36565b600091825260209091200154600880546001600160a01b039092169183908110610dcd57610dcd612e36565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610e2557610e25612e63565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e5581612e79565b915050610d3f565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a4d918590610afd9086611d50565b3360008181526007602052604090205460ff1615610f0c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610984565b6000610f1783611daf565b505050506001600160a01b038416600090815260036020526040902054919250610f4391905082611dfe565b6001600160a01b038316600090815260036020526040902055600c54610f699082611dfe565b600c55600d54610f799084611d50565b600d55505050565b6010546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015610fcf57600080fd5b505afa158015610fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110079190612e94565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561104d57600080fd5b505af1158015611061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5d9190612ead565b6000546001600160a01b031633146110af5760405162461bcd60e51b815260040161098490612d91565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b548311156111275760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610984565b8161114657600061113784611daf565b50939550610a51945050505050565b600061115184611daf565b50929550610a51945050505050565b6010546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611199573d6000803e3d6000fd5b50565b6000546001600160a01b031633146111c65760405162461bcd60e51b815260040161098490612d91565b6001600160a01b03811660009081526007602052604090205460ff161561122f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610984565b6001600160a01b03811660009081526003602052604090205415611289576001600160a01b03811660009081526003602052604090205461126f90610c26565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113195760405162461bcd60e51b815260040161098490612d91565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561137857506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a5190610c26565b6000546001600160a01b031633146113c45760405162461bcd60e51b815260040161098490612d91565b600080546040516001600160a01b0390911690600080516020612fe9833981519152908390a3600080546001600160a01b0319169055565b6060601280546109bd90612dc6565b6000610a4d3384610afd85604051806060016040528060258152602001613009602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611cb1565b6000546001600160a01b031633146114845760405162461bcd60e51b815260040161098490612d91565b600a805461ff001916610100179055565b6001546001600160a01b031633146114fb5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610984565b600254421161154c5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610984565b600154600080546040516001600160a01b039384169390911691600080516020612fe983398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a4d33848461192f565b6000546001600160a01b031633146115d25760405162461bcd60e51b815260040161098490612d91565b601880548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061161b90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146116505760405162461bcd60e51b815260040161098490612d91565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561167f8142612eca565b600255600080546040516001600160a01b0390911690600080516020612fe9833981519152908390a350565b6000546001600160a01b031633146116d55760405162461bcd60e51b815260040161098490612d91565b6c01431e0fae6d7217caa0000000601955565b6000546001600160a01b031633146117125760405162461bcd60e51b815260040161098490612d91565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b0316331461175d5760405162461bcd60e51b815260040161098490612d91565b6001600160a01b0381166117c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610984565b600080546040516001600160a01b0380851693921691600080516020612fe983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661186d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610984565b6001600160a01b0382166118ce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610984565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119935760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610984565b6001600160a01b0382166119f55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610984565b60008111611a575760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610984565b6000546001600160a01b03848116911614801590611a8357506000546001600160a01b03838116911614155b15611aeb57601954811115611aeb5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610984565b6000546001600160a01b03838116911614801590611b3a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b15611bb6576000611b4a8361133b565b600e54909150611b5a8383612eca565b1115611bb45760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610984565b505b6000611bc13061133b565b90506019548110611bd157506019545b601a5481108015908190611be8575060185460ff16155b8015611c2657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611c395750601854610100900460ff165b15611c5257611c473061133b565b9150611c5282611e40565b6001600160a01b03851660009081526006602052604090205460019060ff1680611c9457506001600160a01b03851660009081526006602052604090205460ff165b15611c9d575060005b611ca986868684611fa5565b505050505050565b60008184841115611cd55760405162461bcd60e51b81526004016109849190612c2d565b506000611ce28486612e4c565b95945050505050565b6000806000611cf86122df565b9092509050611d078282611d0e565b9250505090565b6000610ca383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612461565b600080611d5d8385612eca565b905083811015610ca35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610984565b6000806000806000806000806000611dc68a61248f565b9250925092506000806000611de48d8686611ddf611ceb565b6124d1565b919f909e50909c50959a5093985091965092945050505050565b6000610ca383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cb1565b6018805460ff191660011790556000611e656005611e5f846006611d0e565b90612521565b90506000611e738383611dfe565b905047611e7f836125a0565b6000611e8b4783611dfe565b90506000611e9f6002611e5f846005611d0e565b600f546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611eda573d6000803e3d6000fd5b506000611ee78383611dfe565b90506000611efb6002611e5f846003611d0e565b6010546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611f36573d6000803e3d6000fd5b506000611f438383611dfe565b9050611f4f8782612767565b60408051888152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506018805460ff1916905550505050505050565b600a54610100900460ff16611fce576000546001600160a01b03858116911614611fce57600080fd5b6001600160a01b03841660009081526009602052604090205460ff168061200d57506001600160a01b03831660009081526009602052604090205460ff165b1561206457600a5460ff166120645760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610984565b6010546001600160a01b0385811691161480156120885750600a54610100900460ff165b1561209b57601b805460ff191660011790555b6010546001600160a01b0385811691161480156120c057506001600160a01b03831630145b156120d057601b805460ff191690555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480156121135750601b5460ff165b1561216257601b5460ff16156121625760405162461bcd60e51b815260206004820152601460248201527318dbdbdb191bdddb881b9bdd08195b185c1cd95960621b6044820152606401610984565b8061216f5761216f61285c565b6001600160a01b03841660009081526007602052604090205460ff1680156121b057506001600160a01b03831660009081526007602052604090205460ff16155b156121c5576121c084848461288a565b6122c3565b6001600160a01b03841660009081526007602052604090205460ff1615801561220657506001600160a01b03831660009081526007602052604090205460ff165b15612216576121c08484846129b0565b6001600160a01b03841660009081526007602052604090205460ff1615801561225857506001600160a01b03831660009081526007602052604090205460ff16155b15612268576121c0848484612a59565b6001600160a01b03841660009081526007602052604090205460ff1680156122a857506001600160a01b03831660009081526007602052604090205460ff165b156122b8576121c0848484612a9d565b6122c3848484612a59565b806122d9576122d9601554601455601754601655565b50505050565b600c54600b546000918291825b6008548110156124315782600360006008848154811061230e5761230e612e36565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612379575081600460006008848154811061235257612352612e36565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561238f57600c54600b54945094505050509091565b6123d560036000600884815481106123a9576123a9612e36565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611dfe565b925061241d60046000600884815481106123f1576123f1612e36565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611dfe565b91508061242981612e79565b9150506122ec565b50600b54600c5461244191611d0e565b82101561245857600c54600b549350935050509091565b90939092509050565b600081836124825760405162461bcd60e51b81526004016109849190612c2d565b506000611ce28486612ee2565b60008060008061249e85612b10565b905060006124ab86612b32565b905060006124c3826124bd8986611dfe565b90611dfe565b979296509094509092505050565b60008080806124e08886612521565b905060006124ee8887612521565b905060006124fc8888612521565b9050600061250e826124bd8686611dfe565b939b939a50919850919650505050505050565b60008261253057506000610a51565b600061253c8385612e17565b9050826125498583612ee2565b14610ca35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610984565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125d5576125d5612e36565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561264e57600080fd5b505afa158015612662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126869190612f04565b8160018151811061269957612699612e36565b60200260200101906001600160a01b031690816001600160a01b0316815250506126e4307f00000000000000000000000000000000000000000000000000000000000000008461180b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612739908590600090869030904290600401612f21565b600060405180830381600087803b15801561275357600080fd5b505af1158015611ca9573d6000803e3d6000fd5b612792307f00000000000000000000000000000000000000000000000000000000000000008461180b565b60105460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b15801561281c57600080fd5b505af1158015612830573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128559190612f92565b5050505050565b60145415801561286c5750601654155b1561287357565b601480546015556016805460175560009182905555565b60008060008060008061289c87611daf565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128ce9088611dfe565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546128fd9087611dfe565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461292c9086611d50565b6001600160a01b03891660009081526003602052604090205561294e81612b4e565b6129588483612bd7565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161299d91815260200190565b60405180910390a3505050505050505050565b6000806000806000806129c287611daf565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129f49087611dfe565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612a2a9084611d50565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461292c9086611d50565b600080600080600080612a6b87611daf565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506128fd9087611dfe565b600080600080600080612aaf87611daf565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612ae19088611dfe565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129f49087611dfe565b6000610a516064612b2c6014548561252190919063ffffffff16565b90611d0e565b6000610a516064612b2c6016548561252190919063ffffffff16565b6000612b58611ceb565b90506000612b668383612521565b30600090815260036020526040902054909150612b839082611d50565b3060009081526003602090815260408083209390935560079052205460ff1615612bd25730600090815260046020526040902054612bc19084611d50565b306000908152600460205260409020555b505050565b600c54612be49083611dfe565b600c55600d54612bf49082611d50565b600d555050565b6001600160a01b038116811461119957600080fd5b600060208284031215612c2257600080fd5b8135610ca381612bfb565b600060208083528351808285015260005b81811015612c5a57858101830151858201604001528201612c3e565b81811115612c6c576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612c9557600080fd5b8235612ca081612bfb565b946020939093013593505050565b600080600060608486031215612cc357600080fd5b8335612cce81612bfb565b92506020840135612cde81612bfb565b929592945050506040919091013590565b600060208284031215612d0157600080fd5b5035919050565b801515811461119957600080fd5b60008060408385031215612d2957600080fd5b823591506020830135612d3b81612d08565b809150509250929050565b600060208284031215612d5857600080fd5b8135610ca381612d08565b60008060408385031215612d7657600080fd5b8235612d8181612bfb565b91506020830135612d3b81612bfb565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612dda57607f821691505b60208210811415612dfb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612e3157612e31612e01565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015612e5e57612e5e612e01565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612e8d57612e8d612e01565b5060010190565b600060208284031215612ea657600080fd5b5051919050565b600060208284031215612ebf57600080fd5b8151610ca381612d08565b60008219821115612edd57612edd612e01565b500190565b600082612eff57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612f1657600080fd5b8151610ca381612bfb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f715784516001600160a01b031683529383019391830191600101612f4c565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612fa757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ec9bb9a3719f0f630e4417bd8d722726a5034ffa19347b518c0327e6f5114d0d64736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c80635342acb411610175578063a457c2d7116100dc578063d12a768811610095578063dd62ed3e1161006f578063dd62ed3e146108bf578063e8c4c43c14610905578063ea2f0b371461091a578063f2fde38b1461093a57600080fd5b8063d12a768814610873578063dc4b7f2a14610889578063dd4670641461089f57600080fd5b8063a457c2d7146107d4578063a6334231146107f4578063a69df4b514610809578063a9059cbb1461081e578063b6c523241461083e578063c49b9a801461085357600080fd5b806375f0a8741161012e57806375f0a874146107125780637d1db4a51461073257806388f82020146107485780638da5cb5b146107815780638ea5220f1461079f57806395d89b41146107bf57600080fd5b80635342acb4146106355780635d098b381461066e57806360d484891461068e5780636bc87c3a146106c757806370a08231146106dd578063715018a6146106fd57600080fd5b80632f05205c11610234578063405a66da116101ed57806348c54b9d116101c757806348c54b9d146105ad57806349bd5a5e146105c25780634a74bb02146105f657806352390c021461061557600080fd5b8063405a66da1461054d578063437823ec1461056d5780634549b0391461058d57600080fd5b80632f05205c14610496578063313ce567146104b55780633685d419146104d757806339509351146104f75780633b124fe7146105175780633bd5d1731461052d57600080fd5b80631f53ac02116102865780631f53ac02146103d657806323b872dd146103f657806327a14fc21461041657806329e04b4a146104365780632a360631146104565780632d8381191461047657600080fd5b80630305caff146102d957806306fdde03146102fb578063095ea7b31461032657806313114a9d146103565780631694505e1461037557806318160ddd146103c157600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102f96102f4366004612c10565b61095a565b005b34801561030757600080fd5b506103106109ae565b60405161031d9190612c2d565b60405180910390f35b34801561033257600080fd5b50610346610341366004612c82565b610a40565b604051901515815260200161031d565b34801561036257600080fd5b50600d545b60405190815260200161031d565b34801561038157600080fd5b506103a97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161031d565b3480156103cd57600080fd5b50600b54610367565b3480156103e257600080fd5b506102f96103f1366004612c10565b610a57565b34801561040257600080fd5b50610346610411366004612cae565b610aa3565b34801561042257600080fd5b506102f9610431366004612cef565b610b0c565b34801561044257600080fd5b506102f9610451366004612cef565b610b96565b34801561046257600080fd5b506102f9610471366004612c10565b610bd8565b34801561048257600080fd5b50610367610491366004612cef565b610c26565b3480156104a257600080fd5b50600a5461034690610100900460ff1681565b3480156104c157600080fd5b5060135460405160ff909116815260200161031d565b3480156104e357600080fd5b506102f96104f2366004612c10565b610caa565b34801561050357600080fd5b50610346610512366004612c82565b610e61565b34801561052357600080fd5b5061036760145481565b34801561053957600080fd5b506102f9610548366004612cef565b610e97565b34801561055957600080fd5b506102f9610568366004612c10565b610f81565b34801561057957600080fd5b506102f9610588366004612c10565b611085565b34801561059957600080fd5b506103676105a8366004612d16565b6110d3565b3480156105b957600080fd5b506102f9611160565b3480156105ce57600080fd5b506103a97f00000000000000000000000067c47885b6882d768f55f57c11f2d4580c00809181565b34801561060257600080fd5b5060185461034690610100900460ff1681565b34801561062157600080fd5b506102f9610630366004612c10565b61119c565b34801561064157600080fd5b50610346610650366004612c10565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561067a57600080fd5b506102f9610689366004612c10565b6112ef565b34801561069a57600080fd5b506103466106a9366004612c10565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156106d357600080fd5b5061036760165481565b3480156106e957600080fd5b506103676106f8366004612c10565b61133b565b34801561070957600080fd5b506102f961139a565b34801561071e57600080fd5b50600f546103a9906001600160a01b031681565b34801561073e57600080fd5b5061036760195481565b34801561075457600080fd5b50610346610763366004612c10565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561078d57600080fd5b506000546001600160a01b03166103a9565b3480156107ab57600080fd5b506010546103a9906001600160a01b031681565b3480156107cb57600080fd5b506103106113fc565b3480156107e057600080fd5b506103466107ef366004612c82565b61140b565b34801561080057600080fd5b506102f961145a565b34801561081557600080fd5b506102f9611495565b34801561082a57600080fd5b50610346610839366004612c82565b61159b565b34801561084a57600080fd5b50600254610367565b34801561085f57600080fd5b506102f961086e366004612d46565b6115a8565b34801561087f57600080fd5b50610367601a5481565b34801561089557600080fd5b50610367600e5481565b3480156108ab57600080fd5b506102f96108ba366004612cef565b611626565b3480156108cb57600080fd5b506103676108da366004612d63565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561091157600080fd5b506102f96116ab565b34801561092657600080fd5b506102f9610935366004612c10565b6116e8565b34801561094657600080fd5b506102f9610955366004612c10565b611733565b6000546001600160a01b0316331461098d5760405162461bcd60e51b815260040161098490612d91565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b6060601180546109bd90612dc6565b80601f01602080910402602001604051908101604052809291908181526020018280546109e990612dc6565b8015610a365780601f10610a0b57610100808354040283529160200191610a36565b820191906000526020600020905b815481529060010190602001808311610a1957829003601f168201915b5050505050905090565b6000610a4d33848461180b565b5060015b92915050565b6000546001600160a01b03163314610a815760405162461bcd60e51b815260040161098490612d91565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ab084848461192f565b610b028433610afd85604051806060016040528060288152602001612fc1602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190611cb1565b61180b565b5060019392505050565b6000546001600160a01b03163314610b365760405162461bcd60e51b815260040161098490612d91565b6b019d971e4fe8401e740000008111610b915760405162461bcd60e51b815260206004820152601f60248201527f63616e6e6f74206265206c657373207468616e20353030206d696c6c696f6e006044820152606401610984565b600e55565b6000546001600160a01b03163314610bc05760405162461bcd60e51b815260040161098490612d91565b610bd281670de0b6b3a7640000612e17565b601a5550565b6000546001600160a01b03163314610c025760405162461bcd60e51b815260040161098490612d91565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000600c54821115610c8d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610984565b6000610c97611ceb565b9050610ca38382611d0e565b9392505050565b6000546001600160a01b03163314610cd45760405162461bcd60e51b815260040161098490612d91565b6001600160a01b03811660009081526007602052604090205460ff16610d3c5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610984565b60005b600854811015610e5d57816001600160a01b031660088281548110610d6657610d66612e36565b6000918252602090912001546001600160a01b03161415610e4b5760088054610d9190600190612e4c565b81548110610da157610da1612e36565b600091825260209091200154600880546001600160a01b039092169183908110610dcd57610dcd612e36565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610e2557610e25612e63565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610e5581612e79565b915050610d3f565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610a4d918590610afd9086611d50565b3360008181526007602052604090205460ff1615610f0c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610984565b6000610f1783611daf565b505050506001600160a01b038416600090815260036020526040902054919250610f4391905082611dfe565b6001600160a01b038316600090815260036020526040902055600c54610f699082611dfe565b600c55600d54610f799084611d50565b600d55505050565b6010546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a082319060240160206040518083038186803b158015610fcf57600080fd5b505afa158015610fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110079190612e94565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561104d57600080fd5b505af1158015611061573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5d9190612ead565b6000546001600160a01b031633146110af5760405162461bcd60e51b815260040161098490612d91565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600b548311156111275760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610984565b8161114657600061113784611daf565b50939550610a51945050505050565b600061115184611daf565b50929550610a51945050505050565b6010546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611199573d6000803e3d6000fd5b50565b6000546001600160a01b031633146111c65760405162461bcd60e51b815260040161098490612d91565b6001600160a01b03811660009081526007602052604090205460ff161561122f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610984565b6001600160a01b03811660009081526003602052604090205415611289576001600160a01b03811660009081526003602052604090205461126f90610c26565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113195760405162461bcd60e51b815260040161098490612d91565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561137857506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610a5190610c26565b6000546001600160a01b031633146113c45760405162461bcd60e51b815260040161098490612d91565b600080546040516001600160a01b0390911690600080516020612fe9833981519152908390a3600080546001600160a01b0319169055565b6060601280546109bd90612dc6565b6000610a4d3384610afd85604051806060016040528060258152602001613009602591393360009081526005602090815260408083206001600160a01b038d1684529091529020549190611cb1565b6000546001600160a01b031633146114845760405162461bcd60e51b815260040161098490612d91565b600a805461ff001916610100179055565b6001546001600160a01b031633146114fb5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610984565b600254421161154c5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610984565b600154600080546040516001600160a01b039384169390911691600080516020612fe983398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a4d33848461192f565b6000546001600160a01b031633146115d25760405162461bcd60e51b815260040161098490612d91565b601880548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061161b90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146116505760405162461bcd60e51b815260040161098490612d91565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561167f8142612eca565b600255600080546040516001600160a01b0390911690600080516020612fe9833981519152908390a350565b6000546001600160a01b031633146116d55760405162461bcd60e51b815260040161098490612d91565b6c01431e0fae6d7217caa0000000601955565b6000546001600160a01b031633146117125760405162461bcd60e51b815260040161098490612d91565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b0316331461175d5760405162461bcd60e51b815260040161098490612d91565b6001600160a01b0381166117c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610984565b600080546040516001600160a01b0380851693921691600080516020612fe983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661186d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610984565b6001600160a01b0382166118ce5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610984565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119935760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610984565b6001600160a01b0382166119f55760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610984565b60008111611a575760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610984565b6000546001600160a01b03848116911614801590611a8357506000546001600160a01b03838116911614155b15611aeb57601954811115611aeb5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610984565b6000546001600160a01b03838116911614801590611b3a57507f00000000000000000000000067c47885b6882d768f55f57c11f2d4580c0080916001600160a01b0316836001600160a01b0316145b15611bb6576000611b4a8361133b565b600e54909150611b5a8383612eca565b1115611bb45760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610984565b505b6000611bc13061133b565b90506019548110611bd157506019545b601a5481108015908190611be8575060185460ff16155b8015611c2657507f00000000000000000000000067c47885b6882d768f55f57c11f2d4580c0080916001600160a01b0316856001600160a01b031614155b8015611c395750601854610100900460ff165b15611c5257611c473061133b565b9150611c5282611e40565b6001600160a01b03851660009081526006602052604090205460019060ff1680611c9457506001600160a01b03851660009081526006602052604090205460ff165b15611c9d575060005b611ca986868684611fa5565b505050505050565b60008184841115611cd55760405162461bcd60e51b81526004016109849190612c2d565b506000611ce28486612e4c565b95945050505050565b6000806000611cf86122df565b9092509050611d078282611d0e565b9250505090565b6000610ca383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612461565b600080611d5d8385612eca565b905083811015610ca35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610984565b6000806000806000806000806000611dc68a61248f565b9250925092506000806000611de48d8686611ddf611ceb565b6124d1565b919f909e50909c50959a5093985091965092945050505050565b6000610ca383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611cb1565b6018805460ff191660011790556000611e656005611e5f846006611d0e565b90612521565b90506000611e738383611dfe565b905047611e7f836125a0565b6000611e8b4783611dfe565b90506000611e9f6002611e5f846005611d0e565b600f546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611eda573d6000803e3d6000fd5b506000611ee78383611dfe565b90506000611efb6002611e5f846003611d0e565b6010546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611f36573d6000803e3d6000fd5b506000611f438383611dfe565b9050611f4f8782612767565b60408051888152602081018390529081018890527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506018805460ff1916905550505050505050565b600a54610100900460ff16611fce576000546001600160a01b03858116911614611fce57600080fd5b6001600160a01b03841660009081526009602052604090205460ff168061200d57506001600160a01b03831660009081526009602052604090205460ff165b1561206457600a5460ff166120645760405162461bcd60e51b815260206004820152601b60248201527f626f7473206172656e7420616c6c6f77656420746f20747261646500000000006044820152606401610984565b6010546001600160a01b0385811691161480156120885750600a54610100900460ff165b1561209b57601b805460ff191660011790555b6010546001600160a01b0385811691161480156120c057506001600160a01b03831630145b156120d057601b805460ff191690555b7f00000000000000000000000067c47885b6882d768f55f57c11f2d4580c0080916001600160a01b0316836001600160a01b03161480156121135750601b5460ff165b1561216257601b5460ff16156121625760405162461bcd60e51b815260206004820152601460248201527318dbdbdb191bdddb881b9bdd08195b185c1cd95960621b6044820152606401610984565b8061216f5761216f61285c565b6001600160a01b03841660009081526007602052604090205460ff1680156121b057506001600160a01b03831660009081526007602052604090205460ff16155b156121c5576121c084848461288a565b6122c3565b6001600160a01b03841660009081526007602052604090205460ff1615801561220657506001600160a01b03831660009081526007602052604090205460ff165b15612216576121c08484846129b0565b6001600160a01b03841660009081526007602052604090205460ff1615801561225857506001600160a01b03831660009081526007602052604090205460ff16155b15612268576121c0848484612a59565b6001600160a01b03841660009081526007602052604090205460ff1680156122a857506001600160a01b03831660009081526007602052604090205460ff165b156122b8576121c0848484612a9d565b6122c3848484612a59565b806122d9576122d9601554601455601754601655565b50505050565b600c54600b546000918291825b6008548110156124315782600360006008848154811061230e5761230e612e36565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612379575081600460006008848154811061235257612352612e36565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561238f57600c54600b54945094505050509091565b6123d560036000600884815481106123a9576123a9612e36565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611dfe565b925061241d60046000600884815481106123f1576123f1612e36565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611dfe565b91508061242981612e79565b9150506122ec565b50600b54600c5461244191611d0e565b82101561245857600c54600b549350935050509091565b90939092509050565b600081836124825760405162461bcd60e51b81526004016109849190612c2d565b506000611ce28486612ee2565b60008060008061249e85612b10565b905060006124ab86612b32565b905060006124c3826124bd8986611dfe565b90611dfe565b979296509094509092505050565b60008080806124e08886612521565b905060006124ee8887612521565b905060006124fc8888612521565b9050600061250e826124bd8686611dfe565b939b939a50919850919650505050505050565b60008261253057506000610a51565b600061253c8385612e17565b9050826125498583612ee2565b14610ca35760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610984565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125d5576125d5612e36565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561264e57600080fd5b505afa158015612662573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126869190612f04565b8160018151811061269957612699612e36565b60200260200101906001600160a01b031690816001600160a01b0316815250506126e4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461180b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612739908590600090869030904290600401612f21565b600060405180830381600087803b15801561275357600080fd5b505af1158015611ca9573d6000803e3d6000fd5b612792307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461180b565b60105460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c4016060604051808303818588803b15801561281c57600080fd5b505af1158015612830573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128559190612f92565b5050505050565b60145415801561286c5750601654155b1561287357565b601480546015556016805460175560009182905555565b60008060008060008061289c87611daf565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506128ce9088611dfe565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546128fd9087611dfe565b6001600160a01b03808b1660009081526003602052604080822093909355908a168152205461292c9086611d50565b6001600160a01b03891660009081526003602052604090205561294e81612b4e565b6129588483612bd7565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161299d91815260200190565b60405180910390a3505050505050505050565b6000806000806000806129c287611daf565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129f49087611dfe565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612a2a9084611d50565b6001600160a01b03891660009081526004602090815260408083209390935560039052205461292c9086611d50565b600080600080600080612a6b87611daf565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506128fd9087611dfe565b600080600080600080612aaf87611daf565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612ae19088611dfe565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129f49087611dfe565b6000610a516064612b2c6014548561252190919063ffffffff16565b90611d0e565b6000610a516064612b2c6016548561252190919063ffffffff16565b6000612b58611ceb565b90506000612b668383612521565b30600090815260036020526040902054909150612b839082611d50565b3060009081526003602090815260408083209390935560079052205460ff1615612bd25730600090815260046020526040902054612bc19084611d50565b306000908152600460205260409020555b505050565b600c54612be49083611dfe565b600c55600d54612bf49082611d50565b600d555050565b6001600160a01b038116811461119957600080fd5b600060208284031215612c2257600080fd5b8135610ca381612bfb565b600060208083528351808285015260005b81811015612c5a57858101830151858201604001528201612c3e565b81811115612c6c576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215612c9557600080fd5b8235612ca081612bfb565b946020939093013593505050565b600080600060608486031215612cc357600080fd5b8335612cce81612bfb565b92506020840135612cde81612bfb565b929592945050506040919091013590565b600060208284031215612d0157600080fd5b5035919050565b801515811461119957600080fd5b60008060408385031215612d2957600080fd5b823591506020830135612d3b81612d08565b809150509250929050565b600060208284031215612d5857600080fd5b8135610ca381612d08565b60008060408385031215612d7657600080fd5b8235612d8181612bfb565b91506020830135612d3b81612bfb565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612dda57607f821691505b60208210811415612dfb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612e3157612e31612e01565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015612e5e57612e5e612e01565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612e8d57612e8d612e01565b5060010190565b600060208284031215612ea657600080fd5b5051919050565b600060208284031215612ebf57600080fd5b8151610ca381612d08565b60008219821115612edd57612edd612e01565b500190565b600082612eff57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612f1657600080fd5b8151610ca381612bfb565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f715784516001600160a01b031683529383019391830191600101612f4c565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612fa757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ec9bb9a3719f0f630e4417bd8d722726a5034ffa19347b518c0327e6f5114d0d64736f6c63430008090033
Deployed Bytecode Sourcemap
25672:21075:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34440:113;;;;;;;;;;-1:-1:-1;34440:113:0;;;;;:::i;:::-;;:::i;:::-;;28431:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29343:161;;;;;;;;;;-1:-1:-1;29343:161:0;;;;;:::i;:::-;;:::i;:::-;;;1489:14:1;;1482:22;1464:41;;1452:2;1437:18;29343:161:0;1324:187:1;30464:87:0;;;;;;;;;;-1:-1:-1;30533:10:0;;30464:87;;;1662:25:1;;;1650:2;1635:18;30464:87:0;1516:177:1;26990:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1889:32:1;;;1871:51;;1859:2;1844:18;26990:51:0;1698:230:1;28708:95:0;;;;;;;;;;-1:-1:-1;28788:7:0;;28708:95;;33648:106;;;;;;;;;;-1:-1:-1;33648:106:0;;;;;:::i;:::-;;:::i;29512:313::-;;;;;;;;;;-1:-1:-1;29512:313:0;;;;;:::i;:::-;;:::i;34788:216::-;;;;;;;;;;-1:-1:-1;34788:216:0;;;;;:::i;:::-;;:::i;33876:161::-;;;;;;;;;;-1:-1:-1;33876:161:0;;;;;:::i;:::-;;:::i;34319:109::-;;;;;;;;;;-1:-1:-1;34319:109:0;;;;;:::i;:::-;;:::i;31422:253::-;;;;;;;;;;-1:-1:-1;31422:253:0;;;;;:::i;:::-;;:::i;26214:28::-;;;;;;;;;;-1:-1:-1;26214:28:0;;;;;;;;;;;28617:83;;;;;;;;;;-1:-1:-1;28683:9:0;;28617:83;;28683:9;;;;2721:36:1;;2709:2;2694:18;28617:83:0;2579:184:1;32138:479:0;;;;;;;;;;-1:-1:-1;32138:479:0;;;;;:::i;:::-;;:::i;29833:218::-;;;;;;;;;;-1:-1:-1;29833:218:0;;;;;:::i;:::-;;:::i;26801:26::-;;;;;;;;;;;;;;;;30593:377;;;;;;;;;;-1:-1:-1;30593:377:0;;;;;:::i;:::-;;:::i;34161:146::-;;;;;;;;;;-1:-1:-1;34161:146:0;;;;;:::i;:::-;;:::i;33281:111::-;;;;;;;;;;-1:-1:-1;33281:111:0;;;;;:::i;:::-;;:::i;30978:436::-;;;;;;;;;;-1:-1:-1;30978:436:0;;;;;:::i;:::-;;:::i;34049:100::-;;;;;;;;;;;;;:::i;27048:38::-;;;;;;;;;;;;;;;27127:40;;;;;;;;;;-1:-1:-1;27127:40:0;;;;;;;;;;;31683:447;;;;;;;;;;-1:-1:-1;31683:447:0;;;;;:::i;:::-;;:::i;38496:123::-;;;;;;;;;;-1:-1:-1;38496:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;38584:27:0;38560:4;38584:27;;;:18;:27;;;;;;;;;38496:123;33522:118;;;;;;;;;;-1:-1:-1;33522:118:0;;;;;:::i;:::-;;:::i;34565:121::-;;;;;;;;;;-1:-1:-1;34565:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;34657:21:0;34633:4;34657:21;;;:10;:21;;;;;;;;;34565:121;26888:33;;;;;;;;;;;;;;;;28811:198;;;;;;;;;;-1:-1:-1;28811:198:0;;;;;:::i;:::-;;:::i;16357:148::-;;;;;;;;;;;;;:::i;26505:84::-;;;;;;;;;;-1:-1:-1;26505:84:0;;;;-1:-1:-1;;;;;26505:84:0;;;27180:49;;;;;;;;;;;;;;;;30336:120;;;;;;;;;;-1:-1:-1;30336:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;30428:20:0;30404:4;30428:20;;;:11;:20;;;;;;;;;30336:120;15714:79;;;;;;;;;;-1:-1:-1;15752:7:0;15779:6;-1:-1:-1;;;;;15779:6:0;15714:79;;26593:78;;;;;;;;;;-1:-1:-1;26593:78:0;;;;-1:-1:-1;;;;;26593:78:0;;;28522:87;;;;;;;;;;;;;:::i;30059:269::-;;;;;;;;;;-1:-1:-1;30059:269:0;;;;;:::i;:::-;;:::i;34698:78::-;;;;;;;;;;;;;:::i;17379:305::-;;;;;;;;;;;;;:::i;29017:167::-;;;;;;;;;;-1:-1:-1;29017:167:0;;;;;:::i;:::-;;:::i;16912:89::-;;;;;;;;;;-1:-1:-1;16984:9:0;;16912:89;;35012:171;;;;;;;;;;-1:-1:-1;35012:171:0;;;;;:::i;:::-;;:::i;27236:64::-;;;;;;;;;;;;;;;;26446:52;;;;;;;;;;;;;;;;17077:226;;;;;;;;;;-1:-1:-1;17077:226:0;;;;;:::i;:::-;;:::i;29192:143::-;;;;;;;;;;-1:-1:-1;29192:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;29300:18:0;;;29273:7;29300:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29192:143;33762:102;;;;;;;;;;;;;:::i;33404:110::-;;;;;;;;;;-1:-1:-1;33404:110:0;;;;;:::i;:::-;;:::i;16660:244::-;;;;;;;;;;-1:-1:-1;16660:244:0;;;;;:::i;:::-;;:::i;34440:113::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;34516:21:0::1;34540:5;34516:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;34516:29:0::1;::::0;;34440:113::o;28431:83::-;28468:13;28501:5;28494:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28431:83;:::o;29343:161::-;29418:4;29435:39;8185:10;29458:7;29467:6;29435:8;:39::i;:::-;-1:-1:-1;29492:4:0;29343:161;;;;;:::o;33648:106::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;33721:9:::1;:25:::0;;-1:-1:-1;;;;;;33721:25:0::1;-1:-1:-1::0;;;;;33721:25:0;;;::::1;::::0;;;::::1;::::0;;33648:106::o;29512:313::-;29610:4;29627:36;29637:6;29645:9;29656:6;29627:9;:36::i;:::-;29674:121;29683:6;8185:10;29705:89;29743:6;29705:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29705:19:0;;;;;;:11;:19;;;;;;;;8185:10;29705:33;;;;;;;;;;:37;:89::i;:::-;29674:8;:121::i;:::-;-1:-1:-1;29813:4:0;29512:313;;;;;:::o;34788:216::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;34897:18:::1;34878:16;:37;34870:81;;;::::0;-1:-1:-1;;;34870:81:0;;5265:2:1;34870:81:0::1;::::0;::::1;5247:21:1::0;5304:2;5284:18;;;5277:30;5343:33;5323:18;;;5316:61;5394:18;;34870:81:0::1;5063:355:1::0;34870:81:0::1;34962:15;:34:::0;34788:216::o;33876:161::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;34001:28:::1;:19:::0;34023:6:::1;34001:28;:::i;:::-;33969:29;:60:::0;-1:-1:-1;33876:161:0:o;34319:109::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34392:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;34392:28:0::1;34416:4;34392:28;::::0;;34319:109::o;31422:253::-;31488:7;31527;;31516;:18;;31508:73;;;;-1:-1:-1;;;31508:73:0;;5930:2:1;31508:73:0;;;5912:21:1;5969:2;5949:18;;;5942:30;6008:34;5988:18;;;5981:62;-1:-1:-1;;;6059:18:1;;;6052:40;6109:19;;31508:73:0;5728:406:1;31508:73:0;31592:19;31615:10;:8;:10::i;:::-;31592:33;-1:-1:-1;31643:24:0;:7;31592:33;31643:11;:24::i;:::-;31636:31;31422:253;-1:-1:-1;;;31422:253:0:o;32138:479::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32220:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32212:60;;;::::0;-1:-1:-1;;;32212:60:0;;6341:2:1;32212:60:0::1;::::0;::::1;6323:21:1::0;6380:2;6360:18;;;6353:30;6419:29;6399:18;;;6392:57;6466:18;;32212:60:0::1;6139:351:1::0;32212:60:0::1;32288:9;32283:327;32307:9;:16:::0;32303:20;::::1;32283:327;;;32365:7;-1:-1:-1::0;;;;;32349:23:0::1;:9;32359:1;32349:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32349:12:0::1;:23;32345:254;;;32408:9;32418:16:::0;;:20:::1;::::0;32437:1:::1;::::0;32418:20:::1;:::i;:::-;32408:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;32393:9:::1;:12:::0;;-1:-1:-1;;;;;32408:31:0;;::::1;::::0;32403:1;;32393:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;32393:46:0::1;-1:-1:-1::0;;;;;32393:46:0;;::::1;;::::0;;32458:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;32497:11:::1;:20:::0;;;;:28;;-1:-1:-1;;32497:28:0::1;::::0;;32544:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;32544:15:0;;;;;-1:-1:-1;;;;;;32544:15:0::1;::::0;;;;;32283:327:::1;32138:479:::0;:::o;32345:254::-:1;32325:3:::0;::::1;::::0;::::1;:::i;:::-;;;;32283:327;;;;32138:479:::0;:::o;29833:218::-;8185:10;29921:4;29970:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;29970:34:0;;;;;;;;;;29921:4;;29938:83;;29961:7;;29970:50;;30009:10;29970:38;:50::i;30593:377::-;8185:10;30645:14;30694:19;;;:11;:19;;;;;;;;30693:20;30685:77;;;;-1:-1:-1;;;30685:77:0;;7231:2:1;30685:77:0;;;7213:21:1;7270:2;7250:18;;;7243:30;7309:34;7289:18;;;7282:62;-1:-1:-1;;;7360:18:1;;;7353:42;7412:19;;30685:77:0;7029:408:1;30685:77:0;30774:15;30798:19;30809:7;30798:10;:19::i;:::-;-1:-1:-1;;;;;;;;;30846:15:0;;;;;;:7;:15;;;;;;30773:44;;-1:-1:-1;30846:28:0;;:15;-1:-1:-1;30773:44:0;30846:19;:28::i;:::-;-1:-1:-1;;;;;30828:15:0;;;;;;:7;:15;;;;;:46;30895:7;;:20;;30907:7;30895:11;:20::i;:::-;30885:7;:30;30939:10;;:23;;30954:7;30939:14;:23::i;:::-;30926:10;:36;-1:-1:-1;;;30593:377:0:o;34161:146::-;34250:9;;34261:37;;-1:-1:-1;;;34261:37:0;;34292:4;34261:37;;;1871:51:1;-1:-1:-1;;;;;34228:21:0;;;;;;34250:9;;;34228:21;;34261:22;;1844:18:1;;34261:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34228:71;;-1:-1:-1;;;;;;34228:71:0;;;;;;;-1:-1:-1;;;;;7823:32:1;;;34228:71:0;;;7805:51:1;7872:18;;;7865:34;7778:18;;34228:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33281:111::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33350:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;33350:34:0::1;33380:4;33350:34;::::0;;33281:111::o;30978:436::-;31068:7;31107;;31096;:18;;31088:62;;;;-1:-1:-1;;;31088:62:0;;8362:2:1;31088:62:0;;;8344:21:1;8401:2;8381:18;;;8374:30;8440:33;8420:18;;;8413:61;8491:18;;31088:62:0;8160:355:1;31088:62:0;31166:17;31161:246;;31201:15;31225:19;31236:7;31225:10;:19::i;:::-;-1:-1:-1;31200:44:0;;-1:-1:-1;31259:14:0;;-1:-1:-1;;;;;31259:14:0;31161:246;31308:23;31339:19;31350:7;31339:10;:19::i;:::-;-1:-1:-1;31306:52:0;;-1:-1:-1;31373:22:0;;-1:-1:-1;;;;;31373:22:0;34049:100;34099:9;;34091:50;;-1:-1:-1;;;;;34099:9:0;;;;34119:21;34091:50;;;;;34099:9;34091:50;34099:9;34091:50;34119:21;34099:9;34091:50;;;;;;;;;;;;;;;;;;;;;34049:100::o;31683:447::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31880:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31879:21;31871:61;;;::::0;-1:-1:-1;;;31871:61:0;;6341:2:1;31871:61:0::1;::::0;::::1;6323:21:1::0;6380:2;6360:18;;;6353:30;6419:29;6399:18;;;6392:57;6466:18;;31871:61:0::1;6139:351:1::0;31871:61:0::1;-1:-1:-1::0;;;;;31946:16:0;::::1;31965:1;31946:16:::0;;;:7:::1;:16;::::0;;;;;:20;31943:108:::1;;-1:-1:-1::0;;;;;32022:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32002:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;31983:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;31943:108:::1;-1:-1:-1::0;;;;;32061:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32061:27:0::1;32084:4;32061:27:::0;;::::1;::::0;;;32099:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32099:23:0::1;::::0;;::::1;::::0;;31683:447::o;33522:118::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;33601:15:::1;:31:::0;;-1:-1:-1;;;;;;33601:31:0::1;-1:-1:-1::0;;;;;33601:31:0;;;::::1;::::0;;;::::1;::::0;;33522:118::o;28811:198::-;-1:-1:-1;;;;;28901:20:0;;28877:7;28901:20;;;:11;:20;;;;;;;;28897:49;;;-1:-1:-1;;;;;;28930:16:0;;;;;:7;:16;;;;;;;28811:198::o;28897:49::-;-1:-1:-1;;;;;28984:16:0;;;;;;:7;:16;;;;;;28964:37;;:19;:37::i;16357:148::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;16464:1:::1;16448:6:::0;;16427:40:::1;::::0;-1:-1:-1;;;;;16448:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16427:40:0;16464:1;;16427:40:::1;16495:1;16478:19:::0;;-1:-1:-1;;;;;;16478:19:0::1;::::0;;16357:148::o;28522:87::-;28561:13;28594:7;28587:14;;;;;:::i;30059:269::-;30152:4;30169:129;8185:10;30192:7;30201:96;30240:15;30201:96;;;;;;;;;;;;;;;;;8185:10;30201:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30201:34:0;;;;;;;;;;;;:38;:96::i;34698:78::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;34753:8:::1;:15:::0;;-1:-1:-1;;34753:15:0::1;;;::::0;;34698:78::o;17379:305::-;17431:14;;-1:-1:-1;;;;;17431:14:0;17449:10;17431:28;17423:76;;;;-1:-1:-1;;;17423:76:0;;8722:2:1;17423:76:0;;;8704:21:1;8761:2;8741:18;;;8734:30;8800:34;8780:18;;;8773:62;-1:-1:-1;;;8851:18:1;;;8844:33;8894:19;;17423:76:0;8520:399:1;17423:76:0;17536:9;;17518:15;:27;17510:72;;;;-1:-1:-1;;;17510:72:0;;9126:2:1;17510:72:0;;;9108:21:1;9165:2;9145:18;;;9138:30;9204:33;9184:18;;;9177:61;9255:18;;17510:72:0;8924:355:1;17510:72:0;17627:14;;;17619:6;;17598:44;;-1:-1:-1;;;;;17627:14:0;;;;17619:6;;;;-1:-1:-1;;;;;;;;;;;17598:44:0;;17662:14;;;17653:23;;-1:-1:-1;;;;;;17653:23:0;-1:-1:-1;;;;;17662:14:0;;;17653:23;;;;;;17379:305::o;29017:167::-;29095:4;29112:42;8185:10;29136:9;29147:6;29112:9;:42::i;35012:171::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;35089:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;35089:32:0;;::::1;;::::0;;35137:38:::1;::::0;::::1;::::0;::::1;::::0;35113:8;1489:14:1;1482:22;1464:41;;1452:2;1437:18;;1324:187;35137:38:0::1;;;;;;;;35012:171:::0;:::o;17077:226::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;17158:6:::1;::::0;;;17141:23;;-1:-1:-1;;;;;;17141:23:0;;::::1;-1:-1:-1::0;;;;;17158:6:0;::::1;17141:23;::::0;;;17175:19:::1;::::0;;17217:22:::1;17235:4:::0;17217:15:::1;:22;:::i;:::-;17205:9;:34:::0;17292:1:::1;17276:6:::0;;17255:40:::1;::::0;-1:-1:-1;;;;;17276:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17255:40:0;17292:1;;17255:40:::1;17077:226:::0;:::o;33762:102::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;33835:21:::1;33820:12;:36:::0;33762:102::o;33404:110::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33471:27:0::1;33501:5;33471:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;33471:35:0::1;::::0;;33404:110::o;16660:244::-;15926:6;;-1:-1:-1;;;;;15926:6:0;8185:10;15926:22;15918:67;;;;-1:-1:-1;;;15918:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16749:22:0;::::1;16741:73;;;::::0;-1:-1:-1;;;16741:73:0;;9619:2:1;16741:73:0::1;::::0;::::1;9601:21:1::0;9658:2;9638:18;;;9631:30;9697:34;9677:18;;;9670:62;-1:-1:-1;;;9748:18:1;;;9741:36;9794:19;;16741:73:0::1;9417:402:1::0;16741:73:0::1;16851:6;::::0;;16830:38:::1;::::0;-1:-1:-1;;;;;16830:38:0;;::::1;::::0;16851:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16830:38:0;::::1;16879:6;:17:::0;;-1:-1:-1;;;;;;16879:17:0::1;-1:-1:-1::0;;;;;16879:17:0;;;::::1;::::0;;;::::1;::::0;;16660:244::o;38627:337::-;-1:-1:-1;;;;;38720:19:0;;38712:68;;;;-1:-1:-1;;;38712:68:0;;10026:2:1;38712:68:0;;;10008:21:1;10065:2;10045:18;;;10038:30;10104:34;10084:18;;;10077:62;-1:-1:-1;;;10155:18:1;;;10148:34;10199:19;;38712:68:0;9824:400:1;38712:68:0;-1:-1:-1;;;;;38799:21:0;;38791:68;;;;-1:-1:-1;;;38791:68:0;;10431:2:1;38791:68:0;;;10413:21:1;10470:2;10450:18;;;10443:30;10509:34;10489:18;;;10482:62;-1:-1:-1;;;10560:18:1;;;10553:32;10602:19;;38791:68:0;10229:398:1;38791:68:0;-1:-1:-1;;;;;38872:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;38924:32;;1662:25:1;;;38924:32:0;;1635:18:1;38924:32:0;;;;;;;38627:337;;;:::o;38972:2096::-;-1:-1:-1;;;;;39094:18:0;;39086:68;;;;-1:-1:-1;;;39086:68:0;;10834:2:1;39086:68:0;;;10816:21:1;10873:2;10853:18;;;10846:30;10912:34;10892:18;;;10885:62;-1:-1:-1;;;10963:18:1;;;10956:35;11008:19;;39086:68:0;10632:401:1;39086:68:0;-1:-1:-1;;;;;39173:16:0;;39165:64;;;;-1:-1:-1;;;39165:64:0;;11240:2:1;39165:64:0;;;11222:21:1;11279:2;11259:18;;;11252:30;11318:34;11298:18;;;11291:62;-1:-1:-1;;;11369:18:1;;;11362:33;11412:19;;39165:64:0;11038:399:1;39165:64:0;39257:1;39248:6;:10;39240:64;;;;-1:-1:-1;;;39240:64:0;;11644:2:1;39240:64:0;;;11626:21:1;11683:2;11663:18;;;11656:30;11722:34;11702:18;;;11695:62;-1:-1:-1;;;11773:18:1;;;11766:39;11822:19;;39240:64:0;11442:405:1;39240:64:0;15752:7;15779:6;-1:-1:-1;;;;;39318:15:0;;;15779:6;;39318:15;;;;:32;;-1:-1:-1;15752:7:0;15779:6;-1:-1:-1;;;;;39337:13:0;;;15779:6;;39337:13;;39318:32;39315:125;;;39383:12;;39373:6;:22;;39365:75;;;;-1:-1:-1;;;39365:75:0;;12054:2:1;39365:75:0;;;12036:21:1;12093:2;12073:18;;;12066:30;12132:34;12112:18;;;12105:62;-1:-1:-1;;;12183:18:1;;;12176:38;12231:19;;39365:75:0;11852:404:1;39365:75:0;15752:7;15779:6;-1:-1:-1;;;;;39465:13:0;;;15779:6;;39465:13;;;;:38;;;39490:13;-1:-1:-1;;;;;39482:21:0;:4;-1:-1:-1;;;;;39482:21:0;;39465:38;39461:268;;;39520:24;39547:13;39557:2;39547:9;:13::i;:::-;39630:15;;39520:40;;-1:-1:-1;39601:25:0;39620:6;39520:40;39601:25;:::i;:::-;:44;;39575:142;;;;-1:-1:-1;;;39575:142:0;;12463:2:1;39575:142:0;;;12445:21:1;12502:2;12482:18;;;12475:30;12541:34;12521:18;;;12514:62;-1:-1:-1;;;12592:18:1;;;12585:34;12636:19;;39575:142:0;12261:400:1;39575:142:0;39505:224;39461:268;40023:28;40054:24;40072:4;40054:9;:24::i;:::-;40023:55;;40126:12;;40102:20;:36;40099:112;;-1:-1:-1;40187:12:0;;40099:112;40282:29;;40258:53;;;;;;;40340;;-1:-1:-1;40377:16:0;;;;40376:17;40340:53;:91;;;;;40418:13;-1:-1:-1;;;;;40410:21:0;:4;-1:-1:-1;;;;;40410:21:0;;;40340:91;:129;;;;-1:-1:-1;40448:21:0;;;;;;;40340:129;40322:313;;;40519:24;40537:4;40519:9;:24::i;:::-;40496:47;;40587:36;40602:20;40587:14;:36::i;:::-;-1:-1:-1;;;;;40843:24:0;;40716:12;40843:24;;;:18;:24;;;;;;40731:4;;40843:24;;;:50;;-1:-1:-1;;;;;;40871:22:0;;;;;;:18;:22;;;;;;;;40843:50;40840:96;;;-1:-1:-1;40919:5:0;40840:96;41022:38;41037:4;41042:2;41045:6;41052:7;41022:14;:38::i;:::-;39075:1993;;;38972:2096;;;:::o;4436:192::-;4522:7;4558:12;4550:6;;;;4542:29;;;;-1:-1:-1;;;4542:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4582:9:0;4594:5;4598:1;4594;:5;:::i;:::-;4582:17;4436:192;-1:-1:-1;;;;;4436:192:0:o;36646:163::-;36687:7;36708:15;36725;36744:19;:17;:19::i;:::-;36707:56;;-1:-1:-1;36707:56:0;-1:-1:-1;36781:20:0;36707:56;;36781:11;:20::i;:::-;36774:27;;;;36646:163;:::o;5834:132::-;5892:7;5919:39;5923:1;5926;5919:39;;;;;;;;;;;;;;;;;:3;:39::i;3533:181::-;3591:7;;3623:5;3627:1;3623;:5;:::i;:::-;3611:17;;3652:1;3647;:6;;3639:46;;;;-1:-1:-1;;;3639:46:0;;12868:2:1;3639:46:0;;;12850:21:1;12907:2;12887:18;;;12880:30;12946:29;12926:18;;;12919:57;12993:18;;3639:46:0;12666:351:1;35444:419:0;35503:7;35512;35521;35530;35539;35548;35569:23;35594:12;35608:18;35630:20;35642:7;35630:11;:20::i;:::-;35568:82;;;;;;35662:15;35679:23;35704:12;35720:50;35732:7;35741:4;35747:10;35759;:8;:10::i;:::-;35720:11;:50::i;:::-;35661:109;;;;-1:-1:-1;35661:109:0;;-1:-1:-1;35821:15:0;;-1:-1:-1;35838:4:0;;-1:-1:-1;35844:10:0;;-1:-1:-1;35444:419:0;;-1:-1:-1;;;;;35444:419:0:o;3997:136::-;4055:7;4082:43;4086:1;4089;4082:43;;;;;;;;;;;;;;;;;:3;:43::i;41078:1356::-;27607:16;:23;;-1:-1:-1;;27607:23:0;27626:4;27607:23;;;:16;41270:34:::1;41302:1;41270:27;:20:::0;41295:1:::1;41270:24;:27::i;:::-;:31:::0;::::1;:34::i;:::-;41247:57:::0;-1:-1:-1;41315:16:0::1;41334:38;:20:::0;41247:57;41334:24:::1;:38::i;:::-;41315:57:::0;-1:-1:-1;41679:21:0::1;41749:30;41766:12:::0;41749:16:::1;:30::i;:::-;41841:18;41862:41;:21;41888:14:::0;41862:25:::1;:41::i;:::-;41841:62:::0;-1:-1:-1;41914:22:0::1;41939:24;41961:1;41939:17;41841:62:::0;41954:1:::1;41939:14;:17::i;:24::-;41982:15;::::0;41974:49:::1;::::0;41914;;-1:-1:-1;;;;;;41982:15:0::1;::::0;41974:49;::::1;;;::::0;41914;;41982:15:::1;41974:49:::0;41982:15;41974:49;41914;41982:15;41974:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;42028:26:0::1;42057:30;:10:::0;42072:14;42057::::1;:30::i;:::-;42028:59:::0;-1:-1:-1;42092:16:0::1;42111:32;42141:1;42111:25;42028:59:::0;42134:1:::1;42111:22;:25::i;:32::-;42156:9;::::0;42148:37:::1;::::0;42092:51;;-1:-1:-1;;;;;;42156:9:0::1;::::0;42148:37;::::1;;;::::0;42092:51;;42156:9:::1;42148:37:::0;42156:9;42148:37;42092:51;42156:9;42148:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;42190:23:0::1;42216:32;:18:::0;42239:8;42216:22:::1;:32::i;:::-;42190:58;;42310:39;42323:8;42333:15;42310:12;:39::i;:::-;42375:51;::::0;;13224:25:1;;;13280:2;13265:18;;13258:34;;;13308:18;;;13301:34;;;42375:51:0::1;::::0;13212:2:1;13197:18;42375:51:0::1;;;;;;;-1:-1:-1::0;;27653:16:0;:24;;-1:-1:-1;;27653:24:0;;;-1:-1:-1;;;;;;;41078:1356:0:o;43635:1429::-;43746:8;;;;;;;43742:114;;15752:7;15779:6;-1:-1:-1;;;;;43778:17:0;;;15779:6;;43778:17;43770:26;;;;;;-1:-1:-1;;;;;43879:18:0;;;;;;:10;:18;;;;;;;;;:43;;-1:-1:-1;;;;;;43901:21:0;;;;;;:10;:21;;;;;;;;43879:43;43876:126;;;43946:12;;;;43938:52;;;;-1:-1:-1;;;43938:52:0;;13548:2:1;43938:52:0;;;13530:21:1;13587:2;13567:18;;;13560:30;13626:29;13606:18;;;13599:57;13673:18;;43938:52:0;13346:351:1;43938:52:0;44026:9;;-1:-1:-1;;;;;44016:19:0;;;44026:9;;44016:19;:31;;;;-1:-1:-1;44039:8:0;;;;;;;44016:31;44012:79;;;44064:8;:15;;-1:-1:-1;;44064:15:0;44075:4;44064:15;;;44012:79;44115:9;;-1:-1:-1;;;;;44105:19:0;;;44115:9;;44105:19;:49;;;;-1:-1:-1;;;;;;44128:26:0;;44149:4;44128:26;44105:49;44101:98;;;44171:8;:16;;-1:-1:-1;;44171:16:0;;;44101:98;44226:13;-1:-1:-1;;;;;44213:26:0;:9;-1:-1:-1;;;;;44213:26:0;;:38;;;;-1:-1:-1;44243:8:0;;;;44213:38;44209:114;;;44278:8;;;;44277:9;44269:42;;;;-1:-1:-1;;;44269:42:0;;13904:2:1;44269:42:0;;;13886:21:1;13943:2;13923:18;;;13916:30;-1:-1:-1;;;13962:18:1;;;13955:50;14022:18;;44269:42:0;13702:344:1;44269:42:0;44337:7;44333:40;;44359:14;:12;:14::i;:::-;-1:-1:-1;;;;;44402:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;44426:22:0;;;;;;:11;:22;;;;;;;;44425:23;44402:46;44398:597;;;44465:48;44487:6;44495:9;44506:6;44465:21;:48::i;:::-;44398:597;;;-1:-1:-1;;;;;44536:19:0;;;;;;:11;:19;;;;;;;;44535:20;:46;;;;-1:-1:-1;;;;;;44559:22:0;;;;;;:11;:22;;;;;;;;44535:46;44531:464;;;44598:46;44618:6;44626:9;44637:6;44598:19;:46::i;44531:464::-;-1:-1:-1;;;;;44667:19:0;;;;;;:11;:19;;;;;;;;44666:20;:47;;;;-1:-1:-1;;;;;;44691:22:0;;;;;;:11;:22;;;;;;;;44690:23;44666:47;44662:333;;;44730:44;44748:6;44756:9;44767:6;44730:17;:44::i;44662:333::-;-1:-1:-1;;;;;44796:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;44819:22:0;;;;;;:11;:22;;;;;;;;44796:45;44792:203;;;44858:48;44880:6;44888:9;44899:6;44858:21;:48::i;44792:203::-;44939:44;44957:6;44965:9;44976:6;44939:17;:44::i;:::-;45019:7;45015:41;;45041:15;38413;;38403:7;:25;38455:21;;38439:13;:37;38359:125;45041:15;43635:1429;;;;:::o;36817:561::-;36914:7;;36950;;36867;;;;;36974:289;36998:9;:16;36994:20;;36974:289;;;37064:7;37040;:21;37048:9;37058:1;37048:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37048:12:0;37040:21;;;;;;;;;;;;;:31;;:66;;;37099:7;37075;:21;37083:9;37093:1;37083:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37083:12:0;37075:21;;;;;;;;;;;;;:31;37040:66;37036:97;;;37116:7;;37125;;37108:25;;;;;;;36817:561;;:::o;37036:97::-;37158:34;37170:7;:21;37178:9;37188:1;37178:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37178:12:0;37170:21;;;;;;;;;;;;;37158:7;;:11;:34::i;:::-;37148:44;;37217:34;37229:7;:21;37237:9;37247:1;37237:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37237:12:0;37229:21;;;;;;;;;;;;;37217:7;;:11;:34::i;:::-;37207:44;-1:-1:-1;37016:3:0;;;;:::i;:::-;;;;36974:289;;;-1:-1:-1;37299:7:0;;37287;;:20;;:11;:20::i;:::-;37277:7;:30;37273:61;;;37317:7;;37326;;37309:25;;;;;;36817:561;;:::o;37273:61::-;37353:7;;37362;;-1:-1:-1;36817:561:0;-1:-1:-1;36817:561:0:o;6462:278::-;6548:7;6583:12;6576:5;6568:28;;;;-1:-1:-1;;;6568:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6607:9:0;6619:5;6623:1;6619;:5;:::i;35871:330::-;35931:7;35940;35949;35969:12;35984:24;36000:7;35984:15;:24::i;:::-;35969:39;;36019:18;36040:30;36062:7;36040:21;:30::i;:::-;36019:51;-1:-1:-1;36081:23:0;36107:33;36019:51;36107:17;:7;36119:4;36107:11;:17::i;:::-;:21;;:33::i;:::-;36081:59;36176:4;;-1:-1:-1;36182:10:0;;-1:-1:-1;35871:330:0;;-1:-1:-1;;;35871:330:0:o;36209:429::-;36324:7;;;;36380:24;:7;36392:11;36380;:24::i;:::-;36362:42;-1:-1:-1;36415:12:0;36430:21;:4;36439:11;36430:8;:21::i;:::-;36415:36;-1:-1:-1;36462:18:0;36483:27;:10;36498:11;36483:14;:27::i;:::-;36462:48;-1:-1:-1;36521:23:0;36547:33;36462:48;36547:17;:7;36559:4;36547:11;:17::i;:33::-;36599:7;;;;-1:-1:-1;36625:4:0;;-1:-1:-1;36209:429:0;;-1:-1:-1;;;;;;;36209:429:0:o;4887:471::-;4945:7;5190:6;5186:47;;-1:-1:-1;5220:1:0;5213:8;;5186:47;5245:9;5257:5;5261:1;5257;:5;:::i;:::-;5245:17;-1:-1:-1;5290:1:0;5281:5;5285:1;5245:17;5281:5;:::i;:::-;:10;5273:56;;;;-1:-1:-1;;;5273:56:0;;14475:2:1;5273:56:0;;;14457:21:1;14514:2;14494:18;;;14487:30;14553:34;14533:18;;;14526:62;-1:-1:-1;;;14604:18:1;;;14597:31;14645:19;;5273:56:0;14273:397:1;42442:589:0;42592:16;;;42606:1;42592:16;;;;;;;;42568:21;;42592:16;;;;;;;;;;-1:-1:-1;42592:16:0;42568:40;;42637:4;42619;42624:1;42619:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;42619:23:0;;;-1:-1:-1;;;;;42619:23:0;;;;;42663:15;-1:-1:-1;;;;;42663:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42653:4;42658:1;42653:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;42653:32:0;;;-1:-1:-1;;;;;42653:32:0;;;;;42698:62;42715:4;42730:15;42748:11;42698:8;:62::i;:::-;42799:224;;-1:-1:-1;;;42799:224:0;;-1:-1:-1;;;;;42799:15:0;:66;;;;:224;;42880:11;;42906:1;;42950:4;;42977;;42997:15;;42799:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43039:515;43187:62;43204:4;43219:15;43237:11;43187:8;:62::i;:::-;43496:9;;43292:254;;-1:-1:-1;;;43292:254:0;;43364:4;43292:254;;;16389:34:1;16439:18;;;16432:34;;;43410:1:0;16482:18:1;;;16475:34;;;16525:18;;;16518:34;-1:-1:-1;;;;;43496:9:0;;;16568:19:1;;;16561:44;43520:15:0;16621:19:1;;;16614:35;43292:15:0;:31;;;;;;43331:9;;16323:19:1;;43292:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43039:515;;:::o;38097:250::-;38143:7;;:12;:34;;;;-1:-1:-1;38159:13:0;;:18;38143:34;38140:46;;;38097:250::o;38140:46::-;38224:7;;;38206:15;:25;38266:13;;;38242:21;:37;-1:-1:-1;38300:11:0;;;;38322:17;38097:250::o;46176:566::-;46279:15;46296:23;46321:12;46335:23;46360:12;46374:18;46396:19;46407:7;46396:10;:19::i;:::-;-1:-1:-1;;;;;46444:15:0;;;;;;:7;:15;;;;;;46278:137;;-1:-1:-1;46278:137:0;;-1:-1:-1;46278:137:0;;-1:-1:-1;46278:137:0;-1:-1:-1;46278:137:0;-1:-1:-1;46278:137:0;-1:-1:-1;46444:28:0;;46464:7;46444:19;:28::i;:::-;-1:-1:-1;;;;;46426:15:0;;;;;;:7;:15;;;;;;;;:46;;;;46501:7;:15;;;;:28;;46521:7;46501:19;:28::i;:::-;-1:-1:-1;;;;;46483:15:0;;;;;;;:7;:15;;;;;;:46;;;;46561:18;;;;;;;:39;;46584:15;46561:22;:39::i;:::-;-1:-1:-1;;;;;46540:18:0;;;;;;:7;:18;;;;;:60;46614:26;46629:10;46614:14;:26::i;:::-;46651:23;46663:4;46669;46651:11;:23::i;:::-;46707:9;-1:-1:-1;;;;;46690:44:0;46699:6;-1:-1:-1;;;;;46690:44:0;;46718:15;46690:44;;;;1662:25:1;;1650:2;1635:18;;1516:177;46690:44:0;;;;;;;;46267:475;;;;;;46176:566;;;:::o;45582:586::-;45683:15;45700:23;45725:12;45739:23;45764:12;45778:18;45800:19;45811:7;45800:10;:19::i;:::-;-1:-1:-1;;;;;45848:15:0;;;;;;:7;:15;;;;;;45682:137;;-1:-1:-1;45682:137:0;;-1:-1:-1;45682:137:0;;-1:-1:-1;45682:137:0;-1:-1:-1;45682:137:0;-1:-1:-1;45682:137:0;-1:-1:-1;45848:28:0;;45682:137;45848:19;:28::i;:::-;-1:-1:-1;;;;;45830:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;45908:18;;;;;:7;:18;;;;;:39;;45931:15;45908:22;:39::i;:::-;-1:-1:-1;;;;;45887:18:0;;;;;;:7;:18;;;;;;;;:60;;;;45979:7;:18;;;;:39;;46002:15;45979:22;:39::i;45072:502::-;45171:15;45188:23;45213:12;45227:23;45252:12;45266:18;45288:19;45299:7;45288:10;:19::i;:::-;-1:-1:-1;;;;;45336:15:0;;;;;;:7;:15;;;;;;45170:137;;-1:-1:-1;45170:137:0;;-1:-1:-1;45170:137:0;;-1:-1:-1;45170:137:0;-1:-1:-1;45170:137:0;-1:-1:-1;45170:137:0;-1:-1:-1;45336:28:0;;45170:137;45336:19;:28::i;32627:642::-;32730:15;32747:23;32772:12;32786:23;32811:12;32825:18;32847:19;32858:7;32847:10;:19::i;:::-;-1:-1:-1;;;;;32895:15:0;;;;;;:7;:15;;;;;;32729:137;;-1:-1:-1;32729:137:0;;-1:-1:-1;32729:137:0;;-1:-1:-1;32729:137:0;-1:-1:-1;32729:137:0;-1:-1:-1;32729:137:0;-1:-1:-1;32895:28:0;;32915:7;32895:19;:28::i;:::-;-1:-1:-1;;;;;32877:15:0;;;;;;:7;:15;;;;;;;;:46;;;;32952:7;:15;;;;:28;;32972:7;32952:19;:28::i;37757:154::-;37821:7;37848:55;37887:5;37848:20;37860:7;;37848;:11;;:20;;;;:::i;:::-;:24;;:55::i;37919:166::-;37989:7;38016:61;38061:5;38016:26;38028:13;;38016:7;:11;;:26;;;;:::i;37390:355::-;37453:19;37476:10;:8;:10::i;:::-;37453:33;-1:-1:-1;37497:18:0;37518:27;:10;37453:33;37518:14;:27::i;:::-;37597:4;37581:22;;;;:7;:22;;;;;;37497:48;;-1:-1:-1;37581:38:0;;37497:48;37581:26;:38::i;:::-;37572:4;37556:22;;;;:7;:22;;;;;;;;:63;;;;37633:11;:26;;;;;;37630:107;;;37715:4;37699:22;;;;:7;:22;;;;;;:38;;37726:10;37699:26;:38::i;:::-;37690:4;37674:22;;;;:7;:22;;;;;:63;37630:107;37442:303;;37390:355;:::o;35289:147::-;35367:7;;:17;;35379:4;35367:11;:17::i;:::-;35357:7;:27;35408:10;;:20;;35423:4;35408:14;:20::i;:::-;35395:10;:33;-1:-1:-1;;35289:147:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:597::-;514:4;543:2;572;561:9;554:21;604:6;598:13;647:6;642:2;631:9;627:18;620:34;672:1;682:140;696:6;693:1;690:13;682:140;;;791:14;;;787:23;;781:30;757:17;;;776:2;753:26;746:66;711:10;;682:140;;;840:6;837:1;834:13;831:91;;;910:1;905:2;896:6;885:9;881:22;877:31;870:42;831:91;-1:-1:-1;983:2:1;962:15;-1:-1:-1;;958:29:1;943:45;;;;990:2;939:54;;402:597;-1:-1:-1;;;402:597:1:o;1004:315::-;1072:6;1080;1133:2;1121:9;1112:7;1108:23;1104:32;1101:52;;;1149:1;1146;1139:12;1101:52;1188:9;1175:23;1207:31;1232:5;1207:31;:::i;:::-;1257:5;1309:2;1294:18;;;;1281:32;;-1:-1:-1;;;1004:315:1:o;1933:456::-;2010:6;2018;2026;2079:2;2067:9;2058:7;2054:23;2050:32;2047:52;;;2095:1;2092;2085:12;2047:52;2134:9;2121:23;2153:31;2178:5;2153:31;:::i;:::-;2203:5;-1:-1:-1;2260:2:1;2245:18;;2232:32;2273:33;2232:32;2273:33;:::i;:::-;1933:456;;2325:7;;-1:-1:-1;;;2379:2:1;2364:18;;;;2351:32;;1933:456::o;2394:180::-;2453:6;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;-1:-1:-1;2545:23:1;;2394:180;-1:-1:-1;2394:180:1:o;3033:118::-;3119:5;3112:13;3105:21;3098:5;3095:32;3085:60;;3141:1;3138;3131:12;3156:309;3221:6;3229;3282:2;3270:9;3261:7;3257:23;3253:32;3250:52;;;3298:1;3295;3288:12;3250:52;3334:9;3321:23;3311:33;;3394:2;3383:9;3379:18;3366:32;3407:28;3429:5;3407:28;:::i;:::-;3454:5;3444:15;;;3156:309;;;;;:::o;3678:241::-;3734:6;3787:2;3775:9;3766:7;3762:23;3758:32;3755:52;;;3803:1;3800;3793:12;3755:52;3842:9;3829:23;3861:28;3883:5;3861:28;:::i;3924:388::-;3992:6;4000;4053:2;4041:9;4032:7;4028:23;4024:32;4021:52;;;4069:1;4066;4059:12;4021:52;4108:9;4095:23;4127:31;4152:5;4127:31;:::i;:::-;4177:5;-1:-1:-1;4234:2:1;4219:18;;4206:32;4247:33;4206:32;4247:33;:::i;4317:356::-;4519:2;4501:21;;;4538:18;;;4531:30;4597:34;4592:2;4577:18;;4570:62;4664:2;4649:18;;4317:356::o;4678:380::-;4757:1;4753:12;;;;4800;;;4821:61;;4875:4;4867:6;4863:17;4853:27;;4821:61;4928:2;4920:6;4917:14;4897:18;4894:38;4891:161;;;4974:10;4969:3;4965:20;4962:1;4955:31;5009:4;5006:1;4999:15;5037:4;5034:1;5027:15;4891:161;;4678:380;;;:::o;5423:127::-;5484:10;5479:3;5475:20;5472:1;5465:31;5515:4;5512:1;5505:15;5539:4;5536:1;5529:15;5555:168;5595:7;5661:1;5657;5653:6;5649:14;5646:1;5643:21;5638:1;5631:9;5624:17;5620:45;5617:71;;;5668:18;;:::i;:::-;-1:-1:-1;5708:9:1;;5555:168::o;6495:127::-;6556:10;6551:3;6547:20;6544:1;6537:31;6587:4;6584:1;6577:15;6611:4;6608:1;6601:15;6627:125;6667:4;6695:1;6692;6689:8;6686:34;;;6700:18;;:::i;:::-;-1:-1:-1;6737:9:1;;6627:125::o;6757:127::-;6818:10;6813:3;6809:20;6806:1;6799:31;6849:4;6846:1;6839:15;6873:4;6870:1;6863:15;6889:135;6928:3;-1:-1:-1;;6949:17:1;;6946:43;;;6969:18;;:::i;:::-;-1:-1:-1;7016:1:1;7005:13;;6889:135::o;7442:184::-;7512:6;7565:2;7553:9;7544:7;7540:23;7536:32;7533:52;;;7581:1;7578;7571:12;7533:52;-1:-1:-1;7604:16:1;;7442:184;-1:-1:-1;7442:184:1:o;7910:245::-;7977:6;8030:2;8018:9;8009:7;8005:23;8001:32;7998:52;;;8046:1;8043;8036:12;7998:52;8078:9;8072:16;8097:28;8119:5;8097:28;:::i;9284:128::-;9324:3;9355:1;9351:6;9348:1;9345:13;9342:39;;;9361:18;;:::i;:::-;-1:-1:-1;9397:9:1;;9284:128::o;14051:217::-;14091:1;14117;14107:132;;14161:10;14156:3;14152:20;14149:1;14142:31;14196:4;14193:1;14186:15;14224:4;14221:1;14214:15;14107:132;-1:-1:-1;14253:9:1;;14051:217::o;14807:251::-;14877:6;14930:2;14918:9;14909:7;14905:23;14901:32;14898:52;;;14946:1;14943;14936:12;14898:52;14978:9;14972:16;14997:31;15022:5;14997:31;:::i;15063:980::-;15325:4;15373:3;15362:9;15358:19;15404:6;15393:9;15386:25;15430:2;15468:6;15463:2;15452:9;15448:18;15441:34;15511:3;15506:2;15495:9;15491:18;15484:31;15535:6;15570;15564:13;15601:6;15593;15586:22;15639:3;15628:9;15624:19;15617:26;;15678:2;15670:6;15666:15;15652:29;;15699:1;15709:195;15723:6;15720:1;15717:13;15709:195;;;15788:13;;-1:-1:-1;;;;;15784:39:1;15772:52;;15879:15;;;;15844:12;;;;15820:1;15738:9;15709:195;;;-1:-1:-1;;;;;;;15960:32:1;;;;15955:2;15940:18;;15933:60;-1:-1:-1;;;16024:3:1;16009:19;16002:35;15921:3;15063:980;-1:-1:-1;;;15063:980:1:o;16660:306::-;16748:6;16756;16764;16817:2;16805:9;16796:7;16792:23;16788:32;16785:52;;;16833:1;16830;16823:12;16785:52;16862:9;16856:16;16846:26;;16912:2;16901:9;16897:18;16891:25;16881:35;;16956:2;16945:9;16941:18;16935:25;16925:35;;16660:306;;;;;:::o
Swarm Source
ipfs://ec9bb9a3719f0f630e4417bd8d722726a5034ffa19347b518c0327e6f5114d0d
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.