Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x60c06040 | 16103173 | 1183 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ReflectToken
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-12-03
*/
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
//pragma experimental ABIEncoderV2;
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) {
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 public _owner;
address private _previousOwner;
uint256 private _lockTime;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @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 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;
}
}
// pragma solidity >=0.5.0;
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;
}
// pragma solidity >=0.5.0;
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;
}
// pragma solidity >=0.6.2;
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);
}
// pragma solidity >=0.6.2;
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;
}
interface ISaleToken {
//
function isFree(address account) external view returns (bool);
//
function setFree(address account, bool free) external;
//
function switchFee(bool enable) external;
//
function setSaleMasters(address masters) external;
}
interface ISaleAntiBot {
//
function checkAntiBot(address token, address from, address to, uint256 amount) external returns (bool);
}
contract ReflectToken is Context, IERC20, Ownable,ISaleToken {
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;
uint256 private constant MAX = ~uint256(0);
uint256 private _tTotal;
uint256 private _rTotal;
uint256 private _tFeeTotal;
uint256 private constant version = 2; //version
string private _name;
string private _symbol;
uint256 private _decimals;
address private _masters;
bool public noFee = false;
struct FeeTier {
uint256 marketFee;
uint256 liquidityFee;
uint256 taxFee;
uint256 burnFee;
address market;
}
struct FeeValues {
uint256 rAmount;
uint256 rTransferAmount;
uint256 rFee;
uint256 tTransferAmount;
uint256 tMarket;
uint256 tLiquidity;
uint256 tFee;
uint256 tBurn;
}
struct tFeeValues {
uint256 tTransferAmount;
uint256 tMarket;
uint256 tLiquidity;
uint256 tFee;
uint256 tBurn;
}
FeeTier public _defaultFees;
FeeTier private _emptyFees;
FeeTier private feeTier;
address private _burnAddress = 0x000000000000000000000000000000000000dEaD;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
bool inSwapAndLiquify;
bool public swapAndLiquifyEnabled = true;
uint256 public numTokensSellToAddToLiquidity;
event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
event SwapAndLiquifyEnabledUpdated(bool enabled);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
modifier lockTheSwap {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
constructor (string memory name_, string memory symbol_, uint8 decimals_, address[] memory addrs, uint256[] memory params256 ) {
_owner = addrs[0];
_masters = addrs[1];
_name = name_;
_symbol = symbol_;
_decimals = decimals_;
_tTotal = params256[0];
_rTotal = (MAX - (MAX % _tTotal));
feeTier = FeeTier(
params256[1],
params256[2],
params256[3],
params256[4],
addrs[3]
);
_defaultFees = feeTier;
numTokensSellToAddToLiquidity = _tTotal/10000;
_rOwned[_owner] = _rTotal;
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(addrs[2]);
// 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;
//
excludeFromReward(_owner);
excludeFromReward(_burnAddress);
excludeFromReward(address(this));
emit Transfer(address(0), _owner, _tTotal);
}
function init() external view {
//excludeFromReward(uniswapV2Pair);
require(feeTier.marketFee+feeTier.liquidityFee+feeTier.taxFee+feeTier.burnFee<=2500, "total fee <= 25%");
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint256) {
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 totalFees() public view returns (uint256) {
return _tFeeTotal;
}
function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
require(tAmount <= _tTotal, "Amount must be less than supply");
if (!deductTransferFee) {
FeeValues memory _values = _getValues(tAmount);
return _values.rAmount;
} else {
FeeValues memory _values = _getValues(tAmount);
return _values.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) internal {
// 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 isFree(address account) external virtual override view returns (bool) {
return _isExcludedFromFee[account];
}
//
function setFree(address account, bool free) external virtual override onlyOwner{
_isExcludedFromFee[account] = free;
}
//
function switchFee(bool enable) external virtual override onlyOwner{
noFee = enable;
}
//
function setSaleMasters(address masters) external virtual override {
require(_masters == _msgSender(), "not master");
_masters = masters;
}
function sweep() public onlyOwner {
payable(_owner).transfer(address(this).balance);
}
//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 (FeeValues memory) {
tFeeValues memory tValues = _getTValues(tAmount);
uint256 tTransferFee = tValues.tLiquidity.add(tValues.tMarket).add(tValues.tBurn);
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tValues.tFee, tTransferFee, _getRate());
return FeeValues(rAmount, rTransferAmount, rFee, tValues.tTransferAmount, tValues.tMarket, tValues.tLiquidity, tValues.tFee, tValues.tBurn);
}
function _getTValues(uint256 tAmount) private view returns (tFeeValues memory) {
tFeeValues memory tValues = tFeeValues(
0,
calculateFee(tAmount, feeTier.marketFee),
calculateFee(tAmount, feeTier.liquidityFee),
calculateFee(tAmount, feeTier.taxFee),
calculateFee(tAmount, feeTier.burnFee)
);
tValues.tTransferAmount = tAmount.sub(tValues.tMarket).sub(tValues.tFee).sub(tValues.tLiquidity).sub(tValues.tBurn);
return tValues;
}
function _getRValues(uint256 tAmount, uint256 tFee, uint256 tTransferFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
uint256 rAmount = tAmount.mul(currentRate);
uint256 rFee = tFee.mul(currentRate);
uint256 rTransferFee = tTransferFee.mul(currentRate);
uint256 rTransferAmount = rAmount.sub(rFee).sub(rTransferFee);
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 calculateFee(uint256 _amount, uint256 _fee) private pure returns (uint256) {
if(_fee == 0) return 0;
return _amount.mul(_fee).div(
10**4
);
}
function removeAllFee() private {
feeTier = _emptyFees;
}
function restoreAllFee() private {
feeTier = _defaultFees;
}
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 (_masters != address(0)) {
bool bResult = ISaleAntiBot(_masters).checkAntiBot(address(this), from, to, amount);
require(bResult, "anti bot error");
}
// 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));
bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
if (
overMinTokenBalance &&
!inSwapAndLiquify &&
from != uniswapV2Pair &&
swapAndLiquifyEnabled
) {
contractTokenBalance = numTokensSellToAddToLiquidity;
//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;
}
if(noFee) {
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 halves
uint256 half = contractTokenBalance.div(2);
uint256 otherHalf = contractTokenBalance.sub(half);
// 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(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
// how much ETH did we just swap into?
uint256 newBalance = address(this).balance.sub(initialBalance);
// add liquidity to uniswap
addLiquidity(otherHalf, newBalance);
emit SwapAndLiquify(half, newBalance, otherHalf);
}
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
owner(),
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(!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 _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
FeeValues memory _values = _getValues(tAmount);
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(_values.rAmount);
_tOwned[recipient] = _tOwned[recipient].add(_values.tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(_values.rTransferAmount);
_takeFees(_values);
_reflectFee(_values.rFee, _values.tFee);
emit Transfer(sender, recipient, _values.tTransferAmount);
}
function _transferStandard(address sender, address recipient, uint256 tAmount) private {
FeeValues memory _values = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender].sub(_values.rAmount);
_rOwned[recipient] = _rOwned[recipient].add(_values.rTransferAmount);
_takeFees(_values);
_reflectFee(_values.rFee, _values.tFee);
emit Transfer(sender, recipient, _values.tTransferAmount);
}
function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
FeeValues memory _values = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender].sub(_values.rAmount);
_tOwned[recipient] = _tOwned[recipient].add(_values.tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(_values.rTransferAmount);
_takeFees(_values);
_reflectFee(_values.rFee, _values.tFee);
emit Transfer(sender, recipient, _values.tTransferAmount);
}
function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
FeeValues memory _values = _getValues(tAmount);
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(_values.rAmount);
_rOwned[recipient] = _rOwned[recipient].add(_values.rTransferAmount);
_takeFees(_values);
_reflectFee(_values.rFee, _values.tFee);
emit Transfer(sender, recipient, _values.tTransferAmount);
}
function _takeFees(FeeValues memory values) private {
_takeFee(values.tLiquidity, address(this));
_takeFee(values.tMarket, feeTier.market);
_takeFee(values.tBurn, _burnAddress);
}
function _takeFee(uint256 tAmount, address recipient) private {
if(recipient == address(0)) return;
if(tAmount == 0) return;
uint256 currentRate = _getRate();
uint256 rAmount = tAmount.mul(currentRate);
_rOwned[recipient] = _rOwned[recipient].add(rAmount);
if(_isExcluded[recipient])
_tOwned[recipient] = _tOwned[recipient].add(tAmount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"address[]","name":"addrs","type":"address[]"},{"internalType":"uint256[]","name":"params256","type":"uint256[]"}],"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":"_defaultFees","outputs":[{"internalType":"uint256","name":"marketFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"address","name":"market","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"init","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"noFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"account","type":"address"},{"internalType":"bool","name":"free","type":"bool"}],"name":"setFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"masters","type":"address"}],"name":"setSaleMasters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"switchFee","outputs":[],"stateMutability":"nonpayable","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"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c0604052600f805460ff60a01b19169055601f8054600161ff0160a01b031916750100000000000000000000000000000000000000dead1790553480156200004757600080fd5b5060405162003249380380620032498339810160408190526200006a9162000c3c565b8160008151811062000080576200008062000ea0565b60200260200101516000806101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600181518110620000c357620000c362000ea0565b602090810291909101810151600f80546001600160a01b0319166001600160a01b0390921691909117905585516200010291600c9190880190620009fd565b5083516200011890600d906020870190620009fd565b5060ff8316600e558051819060009062000136576200013662000ea0565b60209081029190910101516009819055620001549060001962000e5d565b620001629060001962000db5565b600a819055506040518060a001604052808260018151811062000189576200018962000ea0565b6020026020010151815260200182600281518110620001ac57620001ac62000ea0565b6020026020010151815260200182600381518110620001cf57620001cf62000ea0565b6020026020010151815260200182600481518110620001f257620001f262000ea0565b602002602001015181526020018360038151811062000215576200021562000ea0565b6020908102919091018101516001600160a01b039081169092528251601a81905590830151601b8190556040840151601c8190556060850151601d819055608090950151601e8054919095166001600160a01b0319918216811790955560109390935560119190915560125560139290925560148054909216179055600954620002a3906127109062000d9e565b6020908155600a54600080546001600160a01b0316815260039092526040822055825183906002908110620002dc57620002dc62000ea0565b60200260200101519050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032057600080fd5b505afa15801562000335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035b919062000c1e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a457600080fd5b505afa158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000c1e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200042857600080fd5b505af11580156200043d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000463919062000c1e565b6001600160601b0319606091821b811660a0529082901b16608052600080546001600160a01b03908116825260066020526040808320805460ff19908116600190811790925530855291842080549092161790559054620004c591166200053a565b601f54620004dc906001600160a01b03166200053a565b620004e7306200053a565b600080546009546040519081526001600160a01b0390911691907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050505062000ecc565b6001600160a01b03811660009081526007602052604090205460ff1615620005a95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152600360205260409020541562000606576001600160a01b038116600090815260036020526040902054620005ec906200066c565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000600a54821115620006d55760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620005a0565b6000620006e162000704565b9050620006fd81846200073760201b62000bfb1790919060201c565b9392505050565b600080806200071262000781565b915091506200073081836200073760201b62000bfb1790919060201c565b9250505090565b6000620006fd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200094160201b60201c565b600a546009546000918291825b6008548110156200090157826003600060088481548110620007b457620007b462000ea0565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620008235750816004600060088481548110620007fc57620007fc62000ea0565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200083a57600a54600954945094505050509091565b62000891600360006008848154811062000858576200085862000ea0565b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054859162000c3d6200097d821b17901c565b9250620008ea6004600060088481548110620008b157620008b162000ea0565b60009182526020808320909101546001600160a01b03168352828101939093526040909101902054849162000c3d6200097d821b17901c565b915080620008f88162000e3f565b9150506200078e565b5062000920600954600a546200073760201b62000bfb1790919060201c565b8210156200093857600a546009549350935050509091565b90939092509050565b60008183620009655760405162461bcd60e51b8152600401620005a0919062000d10565b50600062000974848662000d9e565b95945050505050565b6000620006fd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250620009c760201b60201c565b60008184841115620009ee5760405162461bcd60e51b8152600401620005a0919062000d10565b50600062000974848662000db5565b82805462000a0b9062000e02565b90600052602060002090601f01602090048101928262000a2f576000855562000a7a565b82601f1062000a4a57805160ff191683800117855562000a7a565b8280016001018555821562000a7a579182015b8281111562000a7a57825182559160200191906001019062000a5d565b5062000a8892915062000a8c565b5090565b5b8082111562000a88576000815560010162000a8d565b80516001600160a01b038116811462000abb57600080fd5b919050565b600082601f83011262000ad257600080fd5b8151602062000aeb62000ae58362000d78565b62000d45565b80838252828201915082860187848660051b890101111562000b0c57600080fd5b60005b8581101562000b365762000b238262000aa3565b8452928401929084019060010162000b0f565b5090979650505050505050565b600082601f83011262000b5557600080fd5b8151602062000b6862000ae58362000d78565b80838252828201915082860187848660051b890101111562000b8957600080fd5b60005b8581101562000b365781518452928401929084019060010162000b8c565b600082601f83011262000bbc57600080fd5b81516001600160401b0381111562000bd85762000bd862000eb6565b62000bed601f8201601f191660200162000d45565b81815284602083860101111562000c0357600080fd5b62000c1682602083016020870162000dcf565b949350505050565b60006020828403121562000c3157600080fd5b620006fd8262000aa3565b600080600080600060a0868803121562000c5557600080fd5b85516001600160401b038082111562000c6d57600080fd5b62000c7b89838a0162000baa565b9650602088015191508082111562000c9257600080fd5b62000ca089838a0162000baa565b95506040880151915060ff8216821462000cb957600080fd5b60608801519194508082111562000ccf57600080fd5b62000cdd89838a0162000ac0565b9350608088015191508082111562000cf457600080fd5b5062000d038882890162000b43565b9150509295509295909350565b602081526000825180602084015262000d3181604085016020870162000dcf565b601f01601f19169190910160400192915050565b604051601f8201601f191681016001600160401b038111828210171562000d705762000d7062000eb6565b604052919050565b60006001600160401b0382111562000d945762000d9462000eb6565b5060051b60200190565b60008262000db05762000db062000e8a565b500490565b60008282101562000dca5762000dca62000e74565b500390565b60005b8381101562000dec57818101518382015260200162000dd2565b8381111562000dfc576000848401525b50505050565b600181811c9082168062000e1757607f821691505b6020821081141562000e3957634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141562000e565762000e5662000e74565b5060010190565b60008262000e6f5762000e6f62000e8a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160601c60a05160601c61232762000f22600039600081816103ab0152610fe801526000818161028001528181611827015281816118ef0152818161192b0152818161199d01526119c401526123276000f3fe6080604052600436106101c65760003560e01c80634a74bb02116100f7578063b2bdfa7b11610095578063dfd66cb311610064578063dfd66cb314610557578063e1c7392a146105b8578063e671da5a146105cd578063f2fde38b146105ed57600080fd5b8063b2bdfa7b146104ba578063ca395e49146104da578063d12a7688146104fb578063dd62ed3e1461051157600080fd5b806395d89b41116100d157806395d89b411461042c578063a457c2d714610441578063a9059cbb14610461578063ace117831461048157600080fd5b80634a74bb02146103cd57806370a08231146103ee5780638da5cb5b1461040e57600080fd5b806326c081fc1161016457806335faa4161161013e57806335faa4161461034457806339509351146103595780634549b0391461037957806349bd5a5e1461039957600080fd5b806326c081fc146102ef5780632d8381191461030f578063313ce5671461032f57600080fd5b806313114a9d116101a057806313114a9d1461024f5780631694505e1461026e57806318160ddd146102ba57806323b872dd146102cf57600080fd5b806301f048e8146101d257806306fdde03146101f4578063095ea7b31461021f57600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101f26101ed366004611fee565b61060d565b005b34801561020057600080fd5b5061020961065e565b6040516102169190612094565b60405180910390f35b34801561022b57600080fd5b5061023f61023a366004611fc2565b6106f0565b6040519015158152602001610216565b34801561025b57600080fd5b50600b545b604051908152602001610216565b34801561027a57600080fd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610216565b3480156102c657600080fd5b50600954610260565b3480156102db57600080fd5b5061023f6102ea366004611f53565b610707565b3480156102fb57600080fd5b506101f261030a366004611f94565b610770565b34801561031b57600080fd5b5061026061032a366004612028565b6107c5565b34801561033b57600080fd5b50600e54610260565b34801561035057600080fd5b506101f2610849565b34801561036557600080fd5b5061023f610374366004611fc2565b6108b0565b34801561038557600080fd5b50610260610394366004612041565b6108e6565b3480156103a557600080fd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d957600080fd5b50601f5461023f90600160a81b900460ff1681565b3480156103fa57600080fd5b50610260610409366004611ee0565b61096c565b34801561041a57600080fd5b506000546001600160a01b03166102a2565b34801561043857600080fd5b506102096109cb565b34801561044d57600080fd5b5061023f61045c366004611fc2565b6109da565b34801561046d57600080fd5b5061023f61047c366004611fc2565b610a29565b34801561048d57600080fd5b5061023f61049c366004611ee0565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104c657600080fd5b506000546102a2906001600160a01b031681565b3480156104e657600080fd5b50600f5461023f90600160a01b900460ff1681565b34801561050757600080fd5b5061026060205481565b34801561051d57600080fd5b5061026061052c366004611f1a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561056357600080fd5b5060105460115460125460135460145461058794939291906001600160a01b031685565b6040805195865260208601949094529284019190915260608301526001600160a01b0316608082015260a001610216565b3480156105c457600080fd5b506101f2610a36565b3480156105d957600080fd5b506101f26105e8366004611ee0565b610aa8565b3480156105f957600080fd5b506101f2610608366004611ee0565b610b11565b6000546001600160a01b031633146106405760405162461bcd60e51b8152600401610637906120e9565b60405180910390fd5b600f8054911515600160a01b0260ff60a01b19909216919091179055565b6060600c805461066d906121ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906121ff565b80156106e65780601f106106bb576101008083540402835291602001916106e6565b820191906000526020600020905b8154815290600101906020018083116106c957829003601f168201915b5050505050905090565b60006106fd338484610c7f565b5060015b92915050565b6000610714848484610da3565b6107668433610761856040518060600160405280602881526020016122a5602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906110ba565b610c7f565b5060019392505050565b6000546001600160a01b0316331461079a5760405162461bcd60e51b8152600401610637906120e9565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000600a5482111561082c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610637565b60006108366110f4565b90506108428382610bfb565b9392505050565b6000546001600160a01b031633146108735760405162461bcd60e51b8152600401610637906120e9565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156108ad573d6000803e3d6000fd5b50565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916106fd9185906107619086611117565b600060095483111561093a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610637565b8161095457600061094a84611176565b5191506107019050565b600061095f84611176565b6020015191506107019050565b6001600160a01b03811660009081526007602052604081205460ff16156109a957506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610701906107c5565b6060600d805461066d906121ff565b60006106fd3384610761856040518060600160405280602581526020016122cd602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906110ba565b60006106fd338484610da3565b601d54601c54601b54601a546109c4939291610a519161218f565b610a5b919061218f565b610a65919061218f565b1115610aa65760405162461bcd60e51b815260206004820152601060248201526f746f74616c20666565203c3d2032352560801b6044820152606401610637565b565b600f546001600160a01b03163314610aef5760405162461bcd60e51b815260206004820152600a6024820152693737ba1036b0b9ba32b960b11b6044820152606401610637565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b3b5760405162461bcd60e51b8152600401610637906120e9565b6001600160a01b038116610ba05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610637565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061084283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611274565b600061084283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110ba565b6001600160a01b038316610ce15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610637565b6001600160a01b038216610d425760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610637565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e075760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610637565b6001600160a01b038216610e695760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610637565b60008111610ecb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610637565b600f546001600160a01b031615610fb357600f5460405163bad92bef60e01b81523060048201526001600160a01b038581166024830152848116604483015260648201849052600092169063bad92bef90608401602060405180830381600087803b158015610f3957600080fd5b505af1158015610f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f71919061200b565b905080610fb15760405162461bcd60e51b815260206004820152600e60248201526d30b73a34903137ba1032b93937b960911b6044820152606401610637565b505b6000610fbe3061096c565b60205490915081108015908190610fdf5750601f54600160a01b900460ff16155b801561101d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156110325750601f54600160a81b900460ff165b15611045576020549150611045826112a2565b6001600160a01b03851660009081526006602052604090205460019060ff168061108757506001600160a01b03851660009081526006602052604090205460ff165b15611090575060005b600f54600160a01b900460ff16156110a6575060005b6110b286868684611349565b505050505050565b600081848411156110de5760405162461bcd60e51b81526004016106379190612094565b5060006110eb84866121e8565b95945050505050565b600080600061110161152b565b90925090506111108282610bfb565b9250505090565b600080611124838561218f565b9050838110156108425760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610637565b6111be60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006111c9836116ad565b905060006111f682608001516111f08460200151856040015161111790919063ffffffff16565b90611117565b905060008060006112148786606001518661120f6110f4565b611780565b92509250925060405180610100016040528084815260200183815260200182815260200186600001518152602001866020015181526020018660400151815260200186606001518152602001866080015181525095505050505050919050565b600081836112955760405162461bcd60e51b81526004016106379190612094565b5060006110eb84866121a7565b601f805460ff60a01b1916600160a01b17905560006112c2826002610bfb565b905060006112d08383610c3d565b9050476112dc836117d0565b60006112e84783610c3d565b90506112f48382611997565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601f805460ff60a01b19169055505050565b8061138d5761138d601554601a55601654601b55601754601c55601854601d55601954601e80546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b03841660009081526007602052604090205460ff1680156113ce57506001600160a01b03831660009081526007602052604090205460ff16155b156113e3576113de848484611aac565b6114e1565b6001600160a01b03841660009081526007602052604090205460ff1615801561142457506001600160a01b03831660009081526007602052604090205460ff165b15611434576113de848484611bd1565b6001600160a01b03841660009081526007602052604090205460ff1615801561147657506001600160a01b03831660009081526007602052604090205460ff16155b15611486576113de848484611c75565b6001600160a01b03841660009081526007602052604090205460ff1680156114c657506001600160a01b03831660009081526007602052604090205460ff165b156114d6576113de848484611ca8565b6114e1848484611c75565b8061152557611525601054601a55601154601b55601254601c55601354601d55601454601e80546001600160a01b0319166001600160a01b03909216919091179055565b50505050565b600a546009546000918291825b60085481101561167d5782600360006008848154811061155a5761155a61226b565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806115c5575081600460006008848154811061159e5761159e61226b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156115db57600a54600954945094505050509091565b61162160036000600884815481106115f5576115f561226b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490610c3d565b9250611669600460006008848154811061163d5761163d61226b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390610c3d565b9150806116758161223a565b915050611538565b50600954600a5461168d91610bfb565b8210156116a457600a546009549350935050509091565b90939092509050565b6116df6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60006040518060a001604052806000815260200161170285601a60000154611d0c565b815260200161171685601a60010154611d0c565b815260200161172a85601a60020154611d0c565b815260200161173e85601a60030154611d0c565b815250905061177881608001516117728360400151611772856060015161177287602001518a610c3d90919063ffffffff16565b90610c3d565b815292915050565b600080808061178f8886611d31565b9050600061179d8887611d31565b905060006117ab8888611d31565b905060006117bd826117728686610c3d565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106118055761180561226b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561187e57600080fd5b505afa158015611892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b69190611efd565b816001815181106118c9576118c961226b565b60200260200101906001600160a01b031690816001600160a01b031681525050611914307f000000000000000000000000000000000000000000000000000000000000000084610c7f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061196990859060009086903090429060040161211e565b600060405180830381600087803b15801561198357600080fd5b505af11580156110b2573d6000803e3d6000fd5b6119c2307f000000000000000000000000000000000000000000000000000000000000000084610c7f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080611a096000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611a6c57600080fd5b505af1158015611a80573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611aa59190612066565b5050505050565b6000611ab782611176565b6001600160a01b038516600090815260046020526040902054909150611add9083610c3d565b6001600160a01b0385166000908152600460209081526040808320939093558351600390915291902054611b1091610c3d565b6001600160a01b0380861660009081526003602090815260408083209490945584015191861681529190912054611b4691611117565b6001600160a01b038416600090815260036020526040902055611b6881611db0565b611b7a81604001518260c00151611df4565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360600151604051611bc391815260200190565b60405180910390a350505050565b6000611bdc82611176565b80516001600160a01b038616600090815260036020526040902054919250611c049190610c3d565b6001600160a01b0380861660009081526003602090815260408083209490945560608501519287168252600490529190912054611c4091611117565b6001600160a01b03841660009081526004602090815260408083209390935583810151600390915291902054611b4691611117565b6000611c8082611176565b80516001600160a01b038616600090815260036020526040902054919250611b109190610c3d565b6000611cb382611176565b6001600160a01b038516600090815260046020526040902054909150611cd99083610c3d565b6001600160a01b0385166000908152600460209081526040808320939093558351600390915291902054611c0491610c3d565b600081611d1b57506000610701565b610842612710611d2b8585611d31565b90610bfb565b600082611d4057506000610701565b6000611d4c83856121c9565b905082611d5985836121a7565b146108425760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610637565b611dbe8160a0015130611e18565b6080810151601e54611dd991906001600160a01b0316611e18565b60e0810151601f546108ad91906001600160a01b0316611e18565b600a54611e019083610c3d565b600a55600b54611e119082611117565b600b555050565b6001600160a01b038116611e2a575050565b81611e33575050565b6000611e3d6110f4565b90506000611e4b8483611d31565b6001600160a01b038416600090815260036020526040902054909150611e719082611117565b6001600160a01b03841660009081526003602090815260408083209390935560079052205460ff1615611525576001600160a01b038316600090815260046020526040902054611ec19085611117565b6001600160a01b03841660009081526004602052604090205550505050565b600060208284031215611ef257600080fd5b813561084281612281565b600060208284031215611f0f57600080fd5b815161084281612281565b60008060408385031215611f2d57600080fd5b8235611f3881612281565b91506020830135611f4881612281565b809150509250929050565b600080600060608486031215611f6857600080fd5b8335611f7381612281565b92506020840135611f8381612281565b929592945050506040919091013590565b60008060408385031215611fa757600080fd5b8235611fb281612281565b91506020830135611f4881612296565b60008060408385031215611fd557600080fd5b8235611fe081612281565b946020939093013593505050565b60006020828403121561200057600080fd5b813561084281612296565b60006020828403121561201d57600080fd5b815161084281612296565b60006020828403121561203a57600080fd5b5035919050565b6000806040838503121561205457600080fd5b823591506020830135611f4881612296565b60008060006060848603121561207b57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156120c1578581018301518582016040015282016120a5565b818111156120d3576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561216e5784516001600160a01b031683529383019391830191600101612149565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156121a2576121a2612255565b500190565b6000826121c457634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156121e3576121e3612255565b500290565b6000828210156121fa576121fa612255565b500390565b600181811c9082168061221357607f821691505b6020821081141561223457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561224e5761224e612255565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146108ad57600080fd5b80151581146108ad57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122027a482c1c55afe59c5138710c1a59dbbbc547b2b55fe12090f3fd9613c41973a64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000f5265666c656374696f6e546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003524654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000001c8047ceba60e668c4faaeee844a48c11bdb5f2600000000000000000000000012c05326852ca750c81e0c7ce54d0a451c810a250000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000001c8047ceba60e668c4faaeee844a48c11bdb5f26000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode
0x6080604052600436106101c65760003560e01c80634a74bb02116100f7578063b2bdfa7b11610095578063dfd66cb311610064578063dfd66cb314610557578063e1c7392a146105b8578063e671da5a146105cd578063f2fde38b146105ed57600080fd5b8063b2bdfa7b146104ba578063ca395e49146104da578063d12a7688146104fb578063dd62ed3e1461051157600080fd5b806395d89b41116100d157806395d89b411461042c578063a457c2d714610441578063a9059cbb14610461578063ace117831461048157600080fd5b80634a74bb02146103cd57806370a08231146103ee5780638da5cb5b1461040e57600080fd5b806326c081fc1161016457806335faa4161161013e57806335faa4161461034457806339509351146103595780634549b0391461037957806349bd5a5e1461039957600080fd5b806326c081fc146102ef5780632d8381191461030f578063313ce5671461032f57600080fd5b806313114a9d116101a057806313114a9d1461024f5780631694505e1461026e57806318160ddd146102ba57806323b872dd146102cf57600080fd5b806301f048e8146101d257806306fdde03146101f4578063095ea7b31461021f57600080fd5b366101cd57005b600080fd5b3480156101de57600080fd5b506101f26101ed366004611fee565b61060d565b005b34801561020057600080fd5b5061020961065e565b6040516102169190612094565b60405180910390f35b34801561022b57600080fd5b5061023f61023a366004611fc2565b6106f0565b6040519015158152602001610216565b34801561025b57600080fd5b50600b545b604051908152602001610216565b34801561027a57600080fd5b506102a27f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610216565b3480156102c657600080fd5b50600954610260565b3480156102db57600080fd5b5061023f6102ea366004611f53565b610707565b3480156102fb57600080fd5b506101f261030a366004611f94565b610770565b34801561031b57600080fd5b5061026061032a366004612028565b6107c5565b34801561033b57600080fd5b50600e54610260565b34801561035057600080fd5b506101f2610849565b34801561036557600080fd5b5061023f610374366004611fc2565b6108b0565b34801561038557600080fd5b50610260610394366004612041565b6108e6565b3480156103a557600080fd5b506102a27f000000000000000000000000e04942c955741596c40072fd5ff971acd27216c181565b3480156103d957600080fd5b50601f5461023f90600160a81b900460ff1681565b3480156103fa57600080fd5b50610260610409366004611ee0565b61096c565b34801561041a57600080fd5b506000546001600160a01b03166102a2565b34801561043857600080fd5b506102096109cb565b34801561044d57600080fd5b5061023f61045c366004611fc2565b6109da565b34801561046d57600080fd5b5061023f61047c366004611fc2565b610a29565b34801561048d57600080fd5b5061023f61049c366004611ee0565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104c657600080fd5b506000546102a2906001600160a01b031681565b3480156104e657600080fd5b50600f5461023f90600160a01b900460ff1681565b34801561050757600080fd5b5061026060205481565b34801561051d57600080fd5b5061026061052c366004611f1a565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b34801561056357600080fd5b5060105460115460125460135460145461058794939291906001600160a01b031685565b6040805195865260208601949094529284019190915260608301526001600160a01b0316608082015260a001610216565b3480156105c457600080fd5b506101f2610a36565b3480156105d957600080fd5b506101f26105e8366004611ee0565b610aa8565b3480156105f957600080fd5b506101f2610608366004611ee0565b610b11565b6000546001600160a01b031633146106405760405162461bcd60e51b8152600401610637906120e9565b60405180910390fd5b600f8054911515600160a01b0260ff60a01b19909216919091179055565b6060600c805461066d906121ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610699906121ff565b80156106e65780601f106106bb576101008083540402835291602001916106e6565b820191906000526020600020905b8154815290600101906020018083116106c957829003601f168201915b5050505050905090565b60006106fd338484610c7f565b5060015b92915050565b6000610714848484610da3565b6107668433610761856040518060600160405280602881526020016122a5602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906110ba565b610c7f565b5060019392505050565b6000546001600160a01b0316331461079a5760405162461bcd60e51b8152600401610637906120e9565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000600a5482111561082c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610637565b60006108366110f4565b90506108428382610bfb565b9392505050565b6000546001600160a01b031633146108735760405162461bcd60e51b8152600401610637906120e9565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156108ad573d6000803e3d6000fd5b50565b3360008181526005602090815260408083206001600160a01b038716845290915281205490916106fd9185906107619086611117565b600060095483111561093a5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610637565b8161095457600061094a84611176565b5191506107019050565b600061095f84611176565b6020015191506107019050565b6001600160a01b03811660009081526007602052604081205460ff16156109a957506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610701906107c5565b6060600d805461066d906121ff565b60006106fd3384610761856040518060600160405280602581526020016122cd602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906110ba565b60006106fd338484610da3565b601d54601c54601b54601a546109c4939291610a519161218f565b610a5b919061218f565b610a65919061218f565b1115610aa65760405162461bcd60e51b815260206004820152601060248201526f746f74616c20666565203c3d2032352560801b6044820152606401610637565b565b600f546001600160a01b03163314610aef5760405162461bcd60e51b815260206004820152600a6024820152693737ba1036b0b9ba32b960b11b6044820152606401610637565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b3b5760405162461bcd60e51b8152600401610637906120e9565b6001600160a01b038116610ba05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610637565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600061084283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611274565b600061084283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506110ba565b6001600160a01b038316610ce15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610637565b6001600160a01b038216610d425760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610637565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610e075760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610637565b6001600160a01b038216610e695760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610637565b60008111610ecb5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610637565b600f546001600160a01b031615610fb357600f5460405163bad92bef60e01b81523060048201526001600160a01b038581166024830152848116604483015260648201849052600092169063bad92bef90608401602060405180830381600087803b158015610f3957600080fd5b505af1158015610f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f71919061200b565b905080610fb15760405162461bcd60e51b815260206004820152600e60248201526d30b73a34903137ba1032b93937b960911b6044820152606401610637565b505b6000610fbe3061096c565b60205490915081108015908190610fdf5750601f54600160a01b900460ff16155b801561101d57507f000000000000000000000000e04942c955741596c40072fd5ff971acd27216c16001600160a01b0316856001600160a01b031614155b80156110325750601f54600160a81b900460ff165b15611045576020549150611045826112a2565b6001600160a01b03851660009081526006602052604090205460019060ff168061108757506001600160a01b03851660009081526006602052604090205460ff165b15611090575060005b600f54600160a01b900460ff16156110a6575060005b6110b286868684611349565b505050505050565b600081848411156110de5760405162461bcd60e51b81526004016106379190612094565b5060006110eb84866121e8565b95945050505050565b600080600061110161152b565b90925090506111108282610bfb565b9250505090565b600080611124838561218f565b9050838110156108425760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610637565b6111be60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006111c9836116ad565b905060006111f682608001516111f08460200151856040015161111790919063ffffffff16565b90611117565b905060008060006112148786606001518661120f6110f4565b611780565b92509250925060405180610100016040528084815260200183815260200182815260200186600001518152602001866020015181526020018660400151815260200186606001518152602001866080015181525095505050505050919050565b600081836112955760405162461bcd60e51b81526004016106379190612094565b5060006110eb84866121a7565b601f805460ff60a01b1916600160a01b17905560006112c2826002610bfb565b905060006112d08383610c3d565b9050476112dc836117d0565b60006112e84783610c3d565b90506112f48382611997565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601f805460ff60a01b19169055505050565b8061138d5761138d601554601a55601654601b55601754601c55601854601d55601954601e80546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b03841660009081526007602052604090205460ff1680156113ce57506001600160a01b03831660009081526007602052604090205460ff16155b156113e3576113de848484611aac565b6114e1565b6001600160a01b03841660009081526007602052604090205460ff1615801561142457506001600160a01b03831660009081526007602052604090205460ff165b15611434576113de848484611bd1565b6001600160a01b03841660009081526007602052604090205460ff1615801561147657506001600160a01b03831660009081526007602052604090205460ff16155b15611486576113de848484611c75565b6001600160a01b03841660009081526007602052604090205460ff1680156114c657506001600160a01b03831660009081526007602052604090205460ff165b156114d6576113de848484611ca8565b6114e1848484611c75565b8061152557611525601054601a55601154601b55601254601c55601354601d55601454601e80546001600160a01b0319166001600160a01b03909216919091179055565b50505050565b600a546009546000918291825b60085481101561167d5782600360006008848154811061155a5761155a61226b565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806115c5575081600460006008848154811061159e5761159e61226b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156115db57600a54600954945094505050509091565b61162160036000600884815481106115f5576115f561226b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490610c3d565b9250611669600460006008848154811061163d5761163d61226b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390610c3d565b9150806116758161223a565b915050611538565b50600954600a5461168d91610bfb565b8210156116a457600a546009549350935050509091565b90939092509050565b6116df6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b60006040518060a001604052806000815260200161170285601a60000154611d0c565b815260200161171685601a60010154611d0c565b815260200161172a85601a60020154611d0c565b815260200161173e85601a60030154611d0c565b815250905061177881608001516117728360400151611772856060015161177287602001518a610c3d90919063ffffffff16565b90610c3d565b815292915050565b600080808061178f8886611d31565b9050600061179d8887611d31565b905060006117ab8888611d31565b905060006117bd826117728686610c3d565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106118055761180561226b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561187e57600080fd5b505afa158015611892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b69190611efd565b816001815181106118c9576118c961226b565b60200260200101906001600160a01b031690816001600160a01b031681525050611914307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610c7f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061196990859060009086903090429060040161211e565b600060405180830381600087803b15801561198357600080fd5b505af11580156110b2573d6000803e3d6000fd5b6119c2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610c7f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d719823085600080611a096000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015611a6c57600080fd5b505af1158015611a80573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611aa59190612066565b5050505050565b6000611ab782611176565b6001600160a01b038516600090815260046020526040902054909150611add9083610c3d565b6001600160a01b0385166000908152600460209081526040808320939093558351600390915291902054611b1091610c3d565b6001600160a01b0380861660009081526003602090815260408083209490945584015191861681529190912054611b4691611117565b6001600160a01b038416600090815260036020526040902055611b6881611db0565b611b7a81604001518260c00151611df4565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360600151604051611bc391815260200190565b60405180910390a350505050565b6000611bdc82611176565b80516001600160a01b038616600090815260036020526040902054919250611c049190610c3d565b6001600160a01b0380861660009081526003602090815260408083209490945560608501519287168252600490529190912054611c4091611117565b6001600160a01b03841660009081526004602090815260408083209390935583810151600390915291902054611b4691611117565b6000611c8082611176565b80516001600160a01b038616600090815260036020526040902054919250611b109190610c3d565b6000611cb382611176565b6001600160a01b038516600090815260046020526040902054909150611cd99083610c3d565b6001600160a01b0385166000908152600460209081526040808320939093558351600390915291902054611c0491610c3d565b600081611d1b57506000610701565b610842612710611d2b8585611d31565b90610bfb565b600082611d4057506000610701565b6000611d4c83856121c9565b905082611d5985836121a7565b146108425760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610637565b611dbe8160a0015130611e18565b6080810151601e54611dd991906001600160a01b0316611e18565b60e0810151601f546108ad91906001600160a01b0316611e18565b600a54611e019083610c3d565b600a55600b54611e119082611117565b600b555050565b6001600160a01b038116611e2a575050565b81611e33575050565b6000611e3d6110f4565b90506000611e4b8483611d31565b6001600160a01b038416600090815260036020526040902054909150611e719082611117565b6001600160a01b03841660009081526003602090815260408083209390935560079052205460ff1615611525576001600160a01b038316600090815260046020526040902054611ec19085611117565b6001600160a01b03841660009081526004602052604090205550505050565b600060208284031215611ef257600080fd5b813561084281612281565b600060208284031215611f0f57600080fd5b815161084281612281565b60008060408385031215611f2d57600080fd5b8235611f3881612281565b91506020830135611f4881612281565b809150509250929050565b600080600060608486031215611f6857600080fd5b8335611f7381612281565b92506020840135611f8381612281565b929592945050506040919091013590565b60008060408385031215611fa757600080fd5b8235611fb281612281565b91506020830135611f4881612296565b60008060408385031215611fd557600080fd5b8235611fe081612281565b946020939093013593505050565b60006020828403121561200057600080fd5b813561084281612296565b60006020828403121561201d57600080fd5b815161084281612296565b60006020828403121561203a57600080fd5b5035919050565b6000806040838503121561205457600080fd5b823591506020830135611f4881612296565b60008060006060848603121561207b57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156120c1578581018301518582016040015282016120a5565b818111156120d3576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561216e5784516001600160a01b031683529383019391830191600101612149565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156121a2576121a2612255565b500190565b6000826121c457634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156121e3576121e3612255565b500290565b6000828210156121fa576121fa612255565b500390565b600181811c9082168061221357607f821691505b6020821081141561223457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561224e5761224e612255565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146108ad57600080fd5b80151581146108ad57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122027a482c1c55afe59c5138710c1a59dbbbc547b2b55fe12090f3fd9613c41973a64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000f5265666c656374696f6e546f6b656e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003524654000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000001c8047ceba60e668c4faaeee844a48c11bdb5f2600000000000000000000000012c05326852ca750c81e0c7ce54d0a451c810a250000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000001c8047ceba60e668c4faaeee844a48c11bdb5f26000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000012c000000000000000000000000000000000000000000000000000000000000019000000000000000000000000000000000000000000000000000000000000001f4
-----Decoded View---------------
Arg [0] : name_ (string): ReflectionToken
Arg [1] : symbol_ (string): RFT
Arg [2] : decimals_ (uint8): 18
Arg [3] : addrs (address[]): 0x1c8047ceBa60e668C4faAeEe844A48c11bDb5f26,0x12C05326852Ca750c81E0C7CE54d0a451C810A25,0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D,0x1c8047ceBa60e668C4faAeEe844A48c11bDb5f26
Arg [4] : params256 (uint256[]): 1000000000000000000000000,200,300,400,500
-----Encoded View---------------
20 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [6] : 5265666c656374696f6e546f6b656e0000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [8] : 5246540000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [10] : 0000000000000000000000001c8047ceba60e668c4faaeee844a48c11bdb5f26
Arg [11] : 00000000000000000000000012c05326852ca750c81e0c7ce54d0a451c810a25
Arg [12] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [13] : 0000000000000000000000001c8047ceba60e668c4faaeee844a48c11bdb5f26
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [15] : 00000000000000000000000000000000000000000000d3c21bcecceda1000000
Arg [16] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [17] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000190
Arg [19] : 00000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode Sourcemap
24634:18510:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31980:100;;;;;;;;;;-1:-1:-1;31980:100:0;;;;;:::i;:::-;;:::i;:::-;;28511:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29425:161;;;;;;;;;;-1:-1:-1;29425:161:0;;;;;:::i;:::-;;:::i;:::-;;;4835:14:1;;4828:22;4810:41;;4798:2;4783:18;29425:161:0;4670:187:1;30418:87:0;;;;;;;;;;-1:-1:-1;30487:10:0;;30418:87;;;11197:25:1;;;11185:2;11170:18;30418:87:0;11051:177:1;26226:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3553:32:1;;;3535:51;;3523:2;3508:18;26226:51:0;3389:203:1;28790:95:0;;;;;;;;;;-1:-1:-1;28870:7:0;;28790:95;;29594:313;;;;;;;;;;-1:-1:-1;29594:313:0;;;;;:::i;:::-;;:::i;31831:133::-;;;;;;;;;;-1:-1:-1;31831:133:0;;;;;:::i;:::-;;:::i;30969:253::-;;;;;;;;;;-1:-1:-1;30969:253:0;;;;;:::i;:::-;;:::i;28697:85::-;;;;;;;;;;-1:-1:-1;28765:9:0;;28697:85;;32269:100;;;;;;;;;;;;;:::i;29915:218::-;;;;;;;;;;-1:-1:-1;29915:218:0;;;;;:::i;:::-;;:::i;30513:448::-;;;;;;;;;;-1:-1:-1;30513:448:0;;;;;:::i;:::-;;:::i;26284:38::-;;;;;;;;;;;;;;;26363:40;;;;;;;;;;-1:-1:-1;26363:40:0;;;;-1:-1:-1;;;26363:40:0;;;;;;28893:198;;;;;;;;;;-1:-1:-1;28893:198:0;;;;;:::i;:::-;;:::i;15396:79::-;;;;;;;;;;-1:-1:-1;15434:7:0;15461:6;-1:-1:-1;;;;;15461:6:0;15396:79;;28602:87;;;;;;;;;;;;;:::i;30141:269::-;;;;;;;;;;-1:-1:-1;30141:269:0;;;;;:::i;:::-;;:::i;29099:167::-;;;;;;;;;;-1:-1:-1;29099:167:0;;;;;:::i;:::-;;:::i;31683:132::-;;;;;;;;;;-1:-1:-1;31683:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;31780:27:0;31756:4;31780:27;;;:18;:27;;;;;;;;;31683:132;15130:21;;;;;;;;;;-1:-1:-1;15130:21:0;;;;-1:-1:-1;;;;;15130:21:0;;;25421:25;;;;;;;;;;-1:-1:-1;25421:25:0;;;;-1:-1:-1;;;25421:25:0;;;;;;26416:44;;;;;;;;;;;;;;;;29274:143;;;;;;;;;;-1:-1:-1;29274:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;29382:18:0;;;29355:7;29382:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29274:143;26043:27;;;;;;;;;;-1:-1:-1;26043:27:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26043:27:0;;;;;;;12801:25:1;;;12857:2;12842:18;;12835:34;;;;12885:18;;;12878:34;;;;12943:2;12928:18;;12921:34;-1:-1:-1;;;;;12992:32:1;12986:3;12971:19;;12964:61;12788:3;12773:19;26043:27:0;12542:489:1;28293:208:0;;;;;;;;;;;;;:::i;32096:162::-;;;;;;;;;;-1:-1:-1;32096:162:0;;;;;:::i;:::-;;:::i;15842:244::-;;;;;;;;;;-1:-1:-1;15842:244:0;;;;;:::i;:::-;;:::i;31980:100::-;15608:6;;-1:-1:-1;;;;;15608:6:0;8161:10;15608:22;15600:67;;;;-1:-1:-1;;;15600:67:0;;;;;;;:::i;:::-;;;;;;;;;32058:5:::1;:14:::0;;;::::1;;-1:-1:-1::0;;;32058:14:0::1;-1:-1:-1::0;;;;32058:14:0;;::::1;::::0;;;::::1;::::0;;31980:100::o;28511:83::-;28548:13;28581:5;28574:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28511:83;:::o;29425:161::-;29500:4;29517:39;8161:10;29540:7;29549:6;29517:8;:39::i;:::-;-1:-1:-1;29574:4:0;29425:161;;;;;:::o;29594:313::-;29692:4;29709:36;29719:6;29727:9;29738:6;29709:9;:36::i;:::-;29756:121;29765:6;8161:10;29787:89;29825:6;29787:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29787:19:0;;;;;;:11;:19;;;;;;;;8161:10;29787:33;;;;;;;;;;:37;:89::i;:::-;29756:8;:121::i;:::-;-1:-1:-1;29895:4:0;29594:313;;;;;:::o;31831:133::-;15608:6;;-1:-1:-1;;;;;15608:6:0;8161:10;15608:22;15600:67;;;;-1:-1:-1;;;15600:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31922:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;31922:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31831:133::o;30969:253::-;31035:7;31074;;31063;:18;;31055:73;;;;-1:-1:-1;;;31055:73:0;;6305:2:1;31055:73:0;;;6287:21:1;6344:2;6324:18;;;6317:30;6383:34;6363:18;;;6356:62;-1:-1:-1;;;6434:18:1;;;6427:40;6484:19;;31055:73:0;6103:406:1;31055:73:0;31139:19;31162:10;:8;:10::i;:::-;31139:33;-1:-1:-1;31190:24:0;:7;31139:33;31190:11;:24::i;:::-;31183:31;30969:253;-1:-1:-1;;;30969:253:0:o;32269:100::-;15608:6;;-1:-1:-1;;;;;15608:6:0;8161:10;15608:22;15600:67;;;;-1:-1:-1;;;15600:67:0;;;;;;;:::i;:::-;32322:6:::1;::::0;;32314:47:::1;::::0;-1:-1:-1;;;;;32322:6:0;;::::1;::::0;32339:21:::1;32314:47:::0;::::1;;;::::0;32339:21;;32314:47;32322:6;32314:47;32339:21;32322:6;32314:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;32269:100::o:0;29915:218::-;8161:10;30003:4;30052:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30052:34:0;;;;;;;;;;30003:4;;30020:83;;30043:7;;30052:50;;30091:10;30052:38;:50::i;30513:448::-;30603:7;30642;;30631;:18;;30623:62;;;;-1:-1:-1;;;30623:62:0;;8225:2:1;30623:62:0;;;8207:21:1;8264:2;8244:18;;;8237:30;8303:33;8283:18;;;8276:61;8354:18;;30623:62:0;8023:355:1;30623:62:0;30701:17;30696:258;;30735:24;30762:19;30773:7;30762:10;:19::i;:::-;30803:15;;-1:-1:-1;30796:22:0;;-1:-1:-1;30796:22:0;30696:258;30851:24;30878:19;30889:7;30878:10;:19::i;:::-;30919:23;;;;-1:-1:-1;30912:30:0;;-1:-1:-1;30912:30:0;28893:198;-1:-1:-1;;;;;28983:20:0;;28959:7;28983:20;;;:11;:20;;;;;;;;28979:49;;;-1:-1:-1;;;;;;29012:16:0;;;;;:7;:16;;;;;;;28893:198::o;28979:49::-;-1:-1:-1;;;;;29066:16:0;;;;;;:7;:16;;;;;;29046:37;;:19;:37::i;28602:87::-;28641:13;28674:7;28667:14;;;;;:::i;30141:269::-;30234:4;30251:129;8161:10;30274:7;30283:96;30322:15;30283:96;;;;;;;;;;;;;;;;;8161:10;30283:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;30283:34:0;;;;;;;;;;;;:38;:96::i;29099:167::-;29177:4;29194:42;8161:10;29218:9;29229:6;29194:9;:42::i;28293:208::-;28441:15;;28426:14;;28405:20;;28441:7;28387:17;28458:4;;28441:15;28426:14;28387:38;;;:::i;:::-;:53;;;;:::i;:::-;:69;;;;:::i;:::-;:75;;28379:104;;;;-1:-1:-1;;;28379:104:0;;10569:2:1;28379:104:0;;;10551:21:1;10608:2;10588:18;;;10581:30;-1:-1:-1;;;10627:18:1;;;10620:46;10683:18;;28379:104:0;10367:340:1;28379:104:0;28293:208::o;32096:162::-;32182:8;;-1:-1:-1;;;;;32182:8:0;8161:10;32182:24;32174:47;;;;-1:-1:-1;;;32174:47:0;;10914:2:1;32174:47:0;;;10896:21:1;10953:2;10933:18;;;10926:30;-1:-1:-1;;;10972:18:1;;;10965:40;11022:18;;32174:47:0;10712:334:1;32174:47:0;32232:8;:18;;-1:-1:-1;;;;;;32232:18:0;-1:-1:-1;;;;;32232:18:0;;;;;;;;;;32096:162::o;15842:244::-;15608:6;;-1:-1:-1;;;;;15608:6:0;8161:10;15608:22;15600:67;;;;-1:-1:-1;;;15600:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15931:22:0;::::1;15923:73;;;::::0;-1:-1:-1;;;15923:73:0;;6716:2:1;15923:73:0::1;::::0;::::1;6698:21:1::0;6755:2;6735:18;;;6728:30;6794:34;6774:18;;;6767:62;-1:-1:-1;;;6845:18:1;;;6838:36;6891:19;;15923:73:0::1;6514:402:1::0;15923:73:0::1;16033:6;::::0;;16012:38:::1;::::0;-1:-1:-1;;;;;16012:38:0;;::::1;::::0;16033:6;::::1;::::0;16012:38:::1;::::0;::::1;16061:6;:17:::0;;-1:-1:-1;;;;;;16061:17:0::1;-1:-1:-1::0;;;;;16061:17:0;;;::::1;::::0;;;::::1;::::0;;15842:244::o;5889:132::-;5947:7;5974:39;5978:1;5981;5974:39;;;;;;;;;;;;;;;;;:3;:39::i;4052:136::-;4110:7;4137:43;4141:1;4144;4137:43;;;;;;;;;;;;;;;;;:3;:43::i;35251:337::-;-1:-1:-1;;;;;35344:19:0;;35336:68;;;;-1:-1:-1;;;35336:68:0;;10164:2:1;35336:68:0;;;10146:21:1;10203:2;10183:18;;;10176:30;10242:34;10222:18;;;10215:62;-1:-1:-1;;;10293:18:1;;;10286:34;10337:19;;35336:68:0;9962:400:1;35336:68:0;-1:-1:-1;;;;;35423:21:0;;35415:68;;;;-1:-1:-1;;;35415:68:0;;7123:2:1;35415:68:0;;;7105:21:1;7162:2;7142:18;;;7135:30;7201:34;7181:18;;;7174:62;-1:-1:-1;;;7252:18:1;;;7245:32;7294:19;;35415:68:0;6921:398:1;35415:68:0;-1:-1:-1;;;;;35496:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;35548:32;;11197:25:1;;;35548:32:0;;11170:18:1;35548:32:0;;;;;;;35251:337;;;:::o;35596:1796::-;-1:-1:-1;;;;;35718:18:0;;35710:68;;;;-1:-1:-1;;;35710:68:0;;9758:2:1;35710:68:0;;;9740:21:1;9797:2;9777:18;;;9770:30;9836:34;9816:18;;;9809:62;-1:-1:-1;;;9887:18:1;;;9880:35;9932:19;;35710:68:0;9556:401:1;35710:68:0;-1:-1:-1;;;;;35797:16:0;;35789:64;;;;-1:-1:-1;;;35789:64:0;;5901:2:1;35789:64:0;;;5883:21:1;5940:2;5920:18;;;5913:30;5979:34;5959:18;;;5952:62;-1:-1:-1;;;6030:18:1;;;6023:33;6073:19;;35789:64:0;5699:399:1;35789:64:0;35881:1;35872:6;:10;35864:64;;;;-1:-1:-1;;;35864:64:0;;9348:2:1;35864:64:0;;;9330:21:1;9387:2;9367:18;;;9360:30;9426:34;9406:18;;;9399:62;-1:-1:-1;;;9477:18:1;;;9470:39;9526:19;;35864:64:0;9146:405:1;35864:64:0;35945:8;;-1:-1:-1;;;;;35945:8:0;:22;35941:187;;36012:8;;35999:68;;-1:-1:-1;;;35999:68:0;;36043:4;35999:68;;;3866:34:1;-1:-1:-1;;;;;3936:15:1;;;3916:18;;;3909:43;3988:15;;;3968:18;;;3961:43;4020:18;;;4013:34;;;35984:12:0;;36012:8;;35999:35;;3800:19:1;;35999:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35984:83;;36090:7;36082:34;;;;-1:-1:-1;;;36082:34:0;;7882:2:1;36082:34:0;;;7864:21:1;7921:2;7901:18;;;7894:30;-1:-1:-1;;;7940:18:1;;;7933:44;7994:18;;36082:34:0;7680:338:1;36082:34:0;35969:159;35941:187;36420:28;36451:24;36469:4;36451:9;:24::i;:::-;36547:29;;36420:55;;-1:-1:-1;36523:53:0;;;;;;;36605;;-1:-1:-1;36642:16:0;;-1:-1:-1;;;36642:16:0;;;;36641:17;36605:53;:91;;;;;36683:13;-1:-1:-1;;;;;36675:21:0;:4;-1:-1:-1;;;;;36675:21:0;;;36605:91;:129;;;;-1:-1:-1;36713:21:0;;-1:-1:-1;;;36713:21:0;;;;36605:129;36587:318;;;36784:29;;36761:52;;36857:36;36872:20;36857:14;:36::i;:::-;-1:-1:-1;;;;;37113:24:0;;36986:12;37113:24;;;:18;:24;;;;;;37001:4;;37113:24;;;:50;;-1:-1:-1;;;;;;37141:22:0;;;;;;:18;:22;;;;;;;;37113:50;37110:96;;;-1:-1:-1;37189:5:0;37110:96;37221:5;;-1:-1:-1;;;37221:5:0;;;;37218:52;;;-1:-1:-1;37253:5:0;37218:52;37346:38;37361:4;37366:2;37369:6;37376:7;37346:14;:38::i;:::-;35699:1693;;;35596:1796;;;:::o;4491:192::-;4577:7;4613:12;4605:6;;;;4597:29;;;;-1:-1:-1;;;4597:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4637:9:0;4649:5;4653:1;4649;:5;:::i;:::-;4637:17;4491:192;-1:-1:-1;;;;;4491:192:0:o;34139:163::-;34180:7;34201:15;34218;34237:19;:17;:19::i;:::-;34200:56;;-1:-1:-1;34200:56:0;-1:-1:-1;34274:20:0;34200:56;;34274:11;:20::i;:::-;34267:27;;;;34139:163;:::o;3588:181::-;3646:7;;3678:5;3682:1;3678;:5;:::i;:::-;3666:17;;3707:1;3702;:6;;3694:46;;;;-1:-1:-1;;;3694:46:0;;7526:2:1;3694:46:0;;;7508:21:1;7565:2;7545:18;;;7538:30;7604:29;7584:18;;;7577:57;7651:18;;3694:46:0;7324:351:1;32626:516:0;32685:16;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32685:16:0;32714:25;32742:20;32754:7;32742:11;:20::i;:::-;32714:48;;32773:20;32796:58;32840:7;:13;;;32796:39;32819:7;:15;;;32796:7;:18;;;:22;;:39;;;;:::i;:::-;:43;;:58::i;:::-;32773:81;;32866:15;32883:23;32908:12;32924:60;32936:7;32945;:12;;;32959;32973:10;:8;:10::i;:::-;32924:11;:60::i;:::-;32865:119;;;;;;33002:132;;;;;;;;33012:7;33002:132;;;;33021:15;33002:132;;;;33038:4;33002:132;;;;33044:7;:23;;;33002:132;;;;33069:7;:15;;;33002:132;;;;33086:7;:18;;;33002:132;;;;33106:7;:12;;;33002:132;;;;33120:7;:13;;;33002:132;;;32995:139;;;;;;;32626:516;;;:::o;6517:278::-;6603:7;6638:12;6631:5;6623:28;;;;-1:-1:-1;;;6623:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6662:9:0;6674:5;6678:1;6674;:5;:::i;37400:985::-;26767:16;:23;;-1:-1:-1;;;;26767:23:0;-1:-1:-1;;;26767:23:0;;;;37551:27:::1;:20:::0;37576:1:::1;37551:24;:27::i;:::-;37536:42:::0;-1:-1:-1;37589:17:0::1;37609:30;:20:::0;37536:42;37609:24:::1;:30::i;:::-;37589:50:::0;-1:-1:-1;37942:21:0::1;38008:22;38025:4:::0;38008:16:::1;:22::i;:::-;38161:18;38182:41;:21;38208:14:::0;38182:25:::1;:41::i;:::-;38161:62;;38273:35;38286:9;38297:10;38273:12;:35::i;:::-;38334:43;::::0;;12420:25:1;;;12476:2;12461:18;;12454:34;;;12504:18;;;12497:34;;;38334:43:0::1;::::0;12408:2:1;12393:18;38334:43:0::1;;;;;;;-1:-1:-1::0;;26813:16:0;:24;;-1:-1:-1;;;;26813:24:0;;;-1:-1:-1;;;37400:985:0:o;39586:819::-;39698:7;39694:40;;39720:14;35143:10;35133:20;:7;:20;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35133:20:0;-1:-1:-1;;;;;35133:20:0;;;;;;;;;35090:71;39720:14;-1:-1:-1;;;;;39751:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;39775:22:0;;;;;;:11;:22;;;;;;;;39774:23;39751:46;39747:597;;;39814:48;39836:6;39844:9;39855:6;39814:21;:48::i;:::-;39747:597;;;-1:-1:-1;;;;;39885:19:0;;;;;;:11;:19;;;;;;;;39884:20;:46;;;;-1:-1:-1;;;;;;39908:22:0;;;;;;:11;:22;;;;;;;;39884:46;39880:464;;;39947:46;39967:6;39975:9;39986:6;39947:19;:46::i;39880:464::-;-1:-1:-1;;;;;40016:19:0;;;;;;:11;:19;;;;;;;;40015:20;:47;;;;-1:-1:-1;;;;;;40040:22:0;;;;;;:11;:22;;;;;;;;40039:23;40015:47;40011:333;;;40079:44;40097:6;40105:9;40116:6;40079:17;:44::i;40011:333::-;-1:-1:-1;;;;;40145:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;40168:22:0;;;;;;:11;:22;;;;;;;;40145:45;40141:203;;;40207:48;40229:6;40237:9;40248:6;40207:21;:48::i;40141:203::-;40288:44;40306:6;40314:9;40325:6;40288:17;:44::i;:::-;40360:7;40356:41;;40382:15;35223:12;35213:22;:7;:22;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35213:22:0;-1:-1:-1;;;;;35213:22:0;;;;;;;;;35169:74;40382:15;39586:819;;;;:::o;34310:561::-;34407:7;;34443;;34360;;;;;34467:289;34491:9;:16;34487:20;;34467:289;;;34557:7;34533;:21;34541:9;34551:1;34541:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34541:12:0;34533:21;;;;;;;;;;;;;:31;;:66;;;34592:7;34568;:21;34576:9;34586:1;34576:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34576:12:0;34568:21;;;;;;;;;;;;;:31;34533:66;34529:97;;;34609:7;;34618;;34601:25;;;;;;;34310:561;;:::o;34529:97::-;34651:34;34663:7;:21;34671:9;34681:1;34671:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34671:12:0;34663:21;;;;;;;;;;;;;34651:7;;:11;:34::i;:::-;34641:44;;34710:34;34722:7;:21;34730:9;34740:1;34730:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34730:12:0;34722:21;;;;;;;;;;;;;34710:7;;:11;:34::i;:::-;34700:44;-1:-1:-1;34509:3:0;;;;:::i;:::-;;;;34467:289;;;-1:-1:-1;34792:7:0;;34780;;:20;;:11;:20::i;:::-;34770:7;:30;34766:61;;;34810:7;;34819;;34802:25;;;;;;34310:561;;:::o;34766:61::-;34846:7;;34855;;-1:-1:-1;34310:561:0;-1:-1:-1;34310:561:0:o;33150:536::-;33210:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33210:17:0;33242:25;33270:255;;;;;;;;33295:1;33270:255;;;;33311:40;33324:7;33333;:17;;;33311:12;:40::i;:::-;33270:255;;;;33366:43;33379:7;33388;:20;;;33366:12;:43::i;:::-;33270:255;;;;33424:37;33437:7;33446;:14;;;33424:12;:37::i;:::-;33270:255;;;;33476:38;33489:7;33498;:15;;;33476:12;:38::i;:::-;33270:255;;;33242:283;;33564:89;33639:7;:13;;;33564:70;33615:7;:18;;;33564:46;33597:7;:12;;;33564:28;33576:7;:15;;;33564:7;:11;;:28;;;;:::i;:::-;:32;;:46::i;:89::-;33538:115;;:7;33150:536;-1:-1:-1;;33150:536:0:o;33694:437::-;33811:7;;;;33867:24;:7;33879:11;33867;:24::i;:::-;33849:42;-1:-1:-1;33902:12:0;33917:21;:4;33926:11;33917:8;:21::i;:::-;33902:36;-1:-1:-1;33949:20:0;33972:29;:12;33989:11;33972:16;:29::i;:::-;33949:52;-1:-1:-1;34012:23:0;34038:35;33949:52;34038:17;:7;34050:4;34038:11;:17::i;:35::-;34092:7;;;;-1:-1:-1;34118:4:0;;-1:-1:-1;33694:437:0;;-1:-1:-1;;;;;;;33694:437:0:o;38393:589::-;38543:16;;;38557:1;38543:16;;;;;;;;38519:21;;38543:16;;;;;;;;;;-1:-1:-1;38543:16:0;38519:40;;38588:4;38570;38575:1;38570:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;38570:23:0;;;-1:-1:-1;;;;;38570:23:0;;;;;38614:15;-1:-1:-1;;;;;38614:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38604:4;38609:1;38604:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;38604:32:0;;;-1:-1:-1;;;;;38604:32:0;;;;;38649:62;38666:4;38681:15;38699:11;38649:8;:62::i;:::-;38750:224;;-1:-1:-1;;;38750:224:0;;-1:-1:-1;;;;;38750:15:0;:66;;;;:224;;38831:11;;38857:1;;38901:4;;38928;;38948:15;;38750:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38990:513;39138:62;39155:4;39170:15;39188:11;39138:8;:62::i;:::-;39243:15;-1:-1:-1;;;;;39243:31:0;;39282:9;39315:4;39335:11;39361:1;39404;39447:7;15434;15461:6;-1:-1:-1;;;;;15461:6:0;;15396:79;39447:7;39243:252;;;;;;-1:-1:-1;;;;;;39243:252:0;;;-1:-1:-1;;;;;4417:15:1;;;39243:252:0;;;4399:34:1;4449:18;;;4442:34;;;;4492:18;;;4485:34;;;;4535:18;;;4528:34;4599:15;;;4578:19;;;4571:44;39469:15:0;4631:19:1;;;4624:35;4333:19;;39243:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;38990:513;;:::o;41987:504::-;42089:24;42116:19;42127:7;42116:10;:19::i;:::-;-1:-1:-1;;;;;42164:15:0;;;;;;:7;:15;;;;;;42089:46;;-1:-1:-1;42164:28:0;;42184:7;42164:19;:28::i;:::-;-1:-1:-1;;;;;42146:15:0;;;;;;:7;:15;;;;;;;;:46;;;;42241:15;;42221:7;:15;;;;;;;:36;;:19;:36::i;:::-;-1:-1:-1;;;;;42203:15:0;;;;;;;:7;:15;;;;;;;;:54;;;;42312:23;;;42289:18;;;;;;;;;;:47;;:22;:47::i;:::-;-1:-1:-1;;;;;42268:18:0;;;;;;:7;:18;;;;;:68;42347:18;42357:7;42347:9;:18::i;:::-;42376:39;42388:7;:12;;;42402:7;:12;;;42376:11;:39::i;:::-;42448:9;-1:-1:-1;;;;;42431:52:0;42440:6;-1:-1:-1;;;;;42431:52:0;;42459:7;:23;;;42431:52;;;;11197:25:1;;11185:2;11170:18;;11051:177;42431:52:0;;;;;;;;42078:413;41987:504;;;:::o;41455:524::-;41555:24;41582:19;41593:7;41582:10;:19::i;:::-;41650:15;;-1:-1:-1;;;;;41630:15:0;;41650;41630;;;:7;:15;;;;;;41555:46;;-1:-1:-1;41630:36:0;;:15;:19;:36::i;:::-;-1:-1:-1;;;;;41612:15:0;;;;;;;:7;:15;;;;;;;;:54;;;;41721:23;;;;41698:18;;;;;:7;:18;;;;;;;:47;;:22;:47::i;:::-;-1:-1:-1;;;;;41677:18:0;;;;;;:7;:18;;;;;;;;:68;;;;41800:23;;;;41777:7;:18;;;;;;;:47;;:22;:47::i;41004:443::-;41102:24;41129:19;41140:7;41129:10;:19::i;:::-;41197:15;;-1:-1:-1;;;;;41177:15:0;;41197;41177;;;:7;:15;;;;;;41102:46;;-1:-1:-1;41177:36:0;;:15;:19;:36::i;40413:583::-;40515:24;40542:19;40553:7;40542:10;:19::i;:::-;-1:-1:-1;;;;;40590:15:0;;;;;;:7;:15;;;;;;40515:46;;-1:-1:-1;40590:28:0;;40610:7;40590:19;:28::i;:::-;-1:-1:-1;;;;;40572:15:0;;;;;;:7;:15;;;;;;;;:46;;;;40667:15;;40647:7;:15;;;;;;;:36;;:19;:36::i;34883:195::-;34958:7;34981:9;34978:22;;-1:-1:-1;34999:1:0;34992:8;;34978:22;35018:52;35054:5;35018:17;:7;35030:4;35018:11;:17::i;:::-;:21;;:52::i;4942:471::-;5000:7;5245:6;5241:47;;-1:-1:-1;5275:1:0;5268:8;;5241:47;5300:9;5312:5;5316:1;5312;:5;:::i;:::-;5300:17;-1:-1:-1;5345:1:0;5336:5;5340:1;5300:17;5336:5;:::i;:::-;:10;5328:56;;;;-1:-1:-1;;;5328:56:0;;8585:2:1;5328:56:0;;;8567:21:1;8624:2;8604:18;;;8597:30;8663:34;8643:18;;;8636:62;-1:-1:-1;;;8714:18:1;;;8707:31;8755:19;;5328:56:0;8383:397:1;42499:211:0;42562:42;42571:6;:17;;;42598:4;42562:8;:42::i;:::-;42624:14;;;;42640;;42615:40;;42624:14;-1:-1:-1;;;;;42640:14:0;42615:8;:40::i;:::-;42675:12;;;;42689;;42666:36;;42675:12;-1:-1:-1;;;;;42689:12:0;42666:8;:36::i;32471:147::-;32549:7;;:17;;32561:4;32549:11;:17::i;:::-;32539:7;:27;32590:10;;:20;;32605:4;32590:14;:20::i;:::-;32577:10;:33;-1:-1:-1;;32471:147:0:o;42718:413::-;-1:-1:-1;;;;;42794:23:0;;42791:35;;42718:413;;:::o;42791:35::-;42839:12;42836:24;;42718:413;;:::o;42836:24::-;42872:19;42894:10;:8;:10::i;:::-;42872:32;-1:-1:-1;42915:15:0;42933:24;:7;42872:32;42933:11;:24::i;:::-;-1:-1:-1;;;;;42989:18:0;;;;;;:7;:18;;;;;;42915:42;;-1:-1:-1;42989:31:0;;42915:42;42989:22;:31::i;:::-;-1:-1:-1;;;;;42968:18:0;;;;;;:7;:18;;;;;;;;:52;;;;43034:11;:22;;;;;;43031:92;;;-1:-1:-1;;;;;43092:18:0;;;;;;:7;:18;;;;;;:31;;43115:7;43092:22;:31::i;:::-;-1:-1:-1;;;;;43071:18:0;;;;;;:7;:18;;;;;:52;42780:351;;42718:413;;:::o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:382::-;1441:6;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:52;;;1518:1;1515;1508:12;1470:52;1557:9;1544:23;1576:31;1601:5;1576:31;:::i;:::-;1626:5;-1:-1:-1;1683:2:1;1668:18;;1655:32;1696:30;1655:32;1696:30;:::i;1763:315::-;1831:6;1839;1892:2;1880:9;1871:7;1867:23;1863:32;1860:52;;;1908:1;1905;1898:12;1860:52;1947:9;1934:23;1966:31;1991:5;1966:31;:::i;:::-;2016:5;2068:2;2053:18;;;;2040:32;;-1:-1:-1;;;1763:315:1:o;2083:241::-;2139:6;2192:2;2180:9;2171:7;2167:23;2163:32;2160:52;;;2208:1;2205;2198:12;2160:52;2247:9;2234:23;2266:28;2288:5;2266:28;:::i;2329:245::-;2396:6;2449:2;2437:9;2428:7;2424:23;2420:32;2417:52;;;2465:1;2462;2455:12;2417:52;2497:9;2491:16;2516:28;2538:5;2516:28;:::i;2579:180::-;2638:6;2691:2;2679:9;2670:7;2666:23;2662:32;2659:52;;;2707:1;2704;2697:12;2659:52;-1:-1:-1;2730:23:1;;2579:180;-1:-1:-1;2579:180:1:o;2764:309::-;2829:6;2837;2890:2;2878:9;2869:7;2865:23;2861:32;2858:52;;;2906:1;2903;2896:12;2858:52;2942:9;2929:23;2919:33;;3002:2;2991:9;2987:18;2974:32;3015:28;3037:5;3015:28;:::i;3078:306::-;3166:6;3174;3182;3235:2;3223:9;3214:7;3210:23;3206:32;3203:52;;;3251:1;3248;3241:12;3203:52;3280:9;3274:16;3264:26;;3330:2;3319:9;3315:18;3309:25;3299:35;;3374:2;3363:9;3359:18;3353:25;3343:35;;3078:306;;;;;:::o;5097:597::-;5209:4;5238:2;5267;5256:9;5249:21;5299:6;5293:13;5342:6;5337:2;5326:9;5322:18;5315:34;5367:1;5377:140;5391:6;5388:1;5385:13;5377:140;;;5486:14;;;5482:23;;5476:30;5452:17;;;5471:2;5448:26;5441:66;5406:10;;5377:140;;;5535:6;5532:1;5529:13;5526:91;;;5605:1;5600:2;5591:6;5580:9;5576:22;5572:31;5565:42;5526:91;-1:-1:-1;5678:2:1;5657:15;-1:-1:-1;;5653:29:1;5638:45;;;;5685:2;5634:54;;5097:597;-1:-1:-1;;;5097:597:1:o;8785:356::-;8987:2;8969:21;;;9006:18;;;8999:30;9065:34;9060:2;9045:18;;9038:62;9132:2;9117:18;;8785:356::o;11233:980::-;11495:4;11543:3;11532:9;11528:19;11574:6;11563:9;11556:25;11600:2;11638:6;11633:2;11622:9;11618:18;11611:34;11681:3;11676:2;11665:9;11661:18;11654:31;11705:6;11740;11734:13;11771:6;11763;11756:22;11809:3;11798:9;11794:19;11787:26;;11848:2;11840:6;11836:15;11822:29;;11869:1;11879:195;11893:6;11890:1;11887:13;11879:195;;;11958:13;;-1:-1:-1;;;;;11954:39:1;11942:52;;12049:15;;;;12014:12;;;;11990:1;11908:9;11879:195;;;-1:-1:-1;;;;;;;12130:32:1;;;;12125:2;12110:18;;12103:60;-1:-1:-1;;;12194:3:1;12179:19;12172:35;12091:3;11233:980;-1:-1:-1;;;11233:980:1:o;13036:128::-;13076:3;13107:1;13103:6;13100:1;13097:13;13094:39;;;13113:18;;:::i;:::-;-1:-1:-1;13149:9:1;;13036:128::o;13169:217::-;13209:1;13235;13225:132;;13279:10;13274:3;13270:20;13267:1;13260:31;13314:4;13311:1;13304:15;13342:4;13339:1;13332:15;13225:132;-1:-1:-1;13371:9:1;;13169:217::o;13391:168::-;13431:7;13497:1;13493;13489:6;13485:14;13482:1;13479:21;13474:1;13467:9;13460:17;13456:45;13453:71;;;13504:18;;:::i;:::-;-1:-1:-1;13544:9:1;;13391:168::o;13564:125::-;13604:4;13632:1;13629;13626:8;13623:34;;;13637:18;;:::i;:::-;-1:-1:-1;13674:9:1;;13564:125::o;13694:380::-;13773:1;13769:12;;;;13816;;;13837:61;;13891:4;13883:6;13879:17;13869:27;;13837:61;13944:2;13936:6;13933:14;13913:18;13910:38;13907:161;;;13990:10;13985:3;13981:20;13978:1;13971:31;14025:4;14022:1;14015:15;14053:4;14050:1;14043:15;13907:161;;13694:380;;;:::o;14079:135::-;14118:3;-1:-1:-1;;14139:17:1;;14136:43;;;14159:18;;:::i;:::-;-1:-1:-1;14206:1:1;14195:13;;14079:135::o;14219:127::-;14280:10;14275:3;14271:20;14268:1;14261:31;14311:4;14308:1;14301:15;14335:4;14332:1;14325:15;14351:127;14412:10;14407:3;14403:20;14400:1;14393:31;14443:4;14440:1;14433:15;14467:4;14464:1;14457:15;14615:131;-1:-1:-1;;;;;14690:31:1;;14680:42;;14670:70;;14736:1;14733;14726:12;14751:118;14837:5;14830:13;14823:21;14816:5;14813:32;14803:60;;14859:1;14856;14849:12
Swarm Source
ipfs://27a482c1c55afe59c5138710c1a59dbbbc547b2b55fe12090f3fd9613c41973a
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.