ERC-20
Overview
Max Total Supply
10,000,000 EDTH
Holders
112
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 5 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Edith
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-23 */ // SPDX-License-Identifier: MIT pragma solidity =0.8.13; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, 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); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { 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); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract Edith is ERC20, Ownable { mapping (address => uint256) private _rOwned; mapping (address => bool) private _isHolder; address[] private _holders; //mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; //recieves no reflections, transfers from are untaxed mapping (address => bool) private _isExcluded; //recieves no reflections, all transfers are untaxed. All items on this list need to also be on _isExcluded. mapping (address => bool) private _isCompletelyExcluded; //address[] private _holders; address[] private _excluded; uint256 private constant MAX = 2**128 - 1; uint256 private constant _tTotal = 10 * 10**6 * 10**5; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _rTotalInitial = _rTotal; uint256 private _tFeeTotal; uint256 private _taxLowerBound = 0; uint256 private _taxUpperBound = 0; uint256 private constant _taxMaximum = 50; //sets the absolute max tax uint256 private _taxMaximumCutoff = 50; bool private _rSupplyNeedsReset = false; string private constant _name = "Edith"; string private constant _symbol = "EDTH"; uint8 private constant _decimals = 5; constructor () ERC20("Edith", "EDTH") { address sender = _msgSender(); _rOwned[sender] = _rTotal; _isHolder[sender] = true; _holders.push(sender); setTaxRates(2, 20); emit Transfer(address(0), sender, _tTotal); } function min(uint256 a, uint256 b) private pure returns(uint256) { if (a <= b) { return a; } else { return b; } } function setTaxRates(uint256 LB, uint256 UB) public onlyOwner returns(bool) { require(LB <= UB, "lower bound must be less than or equal to upper bound"); require(UB <= _taxMaximum, "upper bound must be less than or equal to _taxMaximum"); require(!_rSupplyNeedsReset, "the tax functionality has been permenantly disabled for this contract"); _taxLowerBound = LB; _taxUpperBound = UB; return true; } function setTaxMaximumCutoff(uint256 cutoff) public onlyOwner returns(bool) { require(cutoff >= _tTotal/10, "cutoff must be >= 1/10th of the total supply"); _taxMaximumCutoff = cutoff; return true; } function getTaxMaximumCutoff() public view returns(uint256) { return _taxMaximumCutoff; } function getTaxRates() public view returns(uint256, uint256) { return(_taxLowerBound, _taxUpperBound); } function getTaxableState() public view returns(bool){ return !_rSupplyNeedsReset; } function name() public pure override returns (string memory) { return _name; } function symbol() public pure override returns (string memory) { return _symbol; } function decimals() public pure override returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function rSupply() public view returns(uint256) { return _rTotal; } function rOwned(address account) public view returns(uint256) { return _rOwned[account]; } function balanceOf(address account) public view override returns (uint256) { // uint256 rAmount = _rOwned[account]; // uint256 currentRate = _getRate(); // return rAmount/currentRate; return (_rOwned[account]*_tTotal)/_rTotal; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); if (!_isHolder[recipient]) { _isHolder[recipient] = true; _holders.push(recipient); } 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) { uint256 allowed = _allowances[sender][_msgSender()]; require(amount <= allowed, "transferring too much edith"); _approve(sender, _msgSender(), allowed - amount); _transfer(sender, recipient, amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public override returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public override returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue); return true; } function isExcluded(address account) public view returns (bool) { return _isExcluded[account]; } function isCompletelyExcluded(address account) public view returns (bool) { return _isCompletelyExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function excludeAccount(address account) external onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); _isExcluded[account] = true; _excluded.push(account); } function completelyExcludeAccount(address account) external onlyOwner() { require(!_isCompletelyExcluded[account], "Account is already completely excluded"); _isCompletelyExcluded[account] = true; // check if already on excluded list. if not, add it. if (!_isExcluded[account]){ _isExcluded[account] = true; _excluded.push(account); } } function numExcluded() public view returns(uint256) { return _excluded.length; } function viewExcluded(uint256 n) public view returns(address) { require(n < _excluded.length, "n is too big"); return _excluded[n]; } function includeAccount(address account) external onlyOwner() { require(_isExcluded[account], "Account is already included"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; //_tOwned[account] = 0; _isExcluded[account] = false; _isCompletelyExcluded[account] = false; _excluded.pop(); break; } } } function _approve(address owner, address spender, uint256 amount) internal override { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address sender, address recipient, uint256 amount) internal override{ require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if (_isExcluded[sender] || _isCompletelyExcluded[recipient] || _rSupplyNeedsReset || _taxUpperBound == 0) { //sender excluded or both excluded, or recipient completely excluded _transferTaxFree(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else { uint256 excludedRowned = 0; if (!_isExcluded[sender]){ excludedRowned += _rOwned[sender]; } if (!_isExcluded[recipient]){ excludedRowned += _rOwned[recipient]; } for (uint256 i = 0; i < _excluded.length; i++){ excludedRowned += _rOwned[_excluded[i]]; } if (excludedRowned > (99*_rTotal)/100){ _transferTaxFree(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } } } //struct needed to avoid "stack too deep" compile error struct stackTooDeepStruct { uint256 n1; uint256 n2; uint256 n3; uint256 temp; uint256 a; uint256 b; uint256 c; } struct accountInfo { address account; uint256 rOwned; } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount); //, rSupply, tSupply); uint256 ne = numExcluded(); uint256[] memory excludedROwned = new uint256[](ne); uint256 totalExcluded = 0; for (uint i = 0; i < ne; i++){ excludedROwned[i] = _rOwned[_excluded[i]]; totalExcluded += excludedROwned[i]; } stackTooDeepStruct memory std; std.n1 = _rOwned[sender] - rAmount; std.n2 = _rOwned[recipient] + rTransferAmount; std.n3 = totalExcluded; std.temp = _rTotal- std.n1 - std.n2 - std.n3; std.a = (rFee*std.n1)/std.temp; std.b = (rFee*std.n2)/std.temp; std.c = (rFee*std.n3)/std.temp; _rOwned[sender] = std.n1 - std.a; _rOwned[recipient] = std.n2 - std.b; uint256 subtractedTotal = 0; uint256 toSubtract; if (totalExcluded > 0){ for (uint i=0; i < ne; i++){ toSubtract = (std.c*excludedROwned[i])/totalExcluded; _rOwned[_excluded[i]] = excludedROwned[i] - toSubtract; subtractedTotal += toSubtract; } //_rOwned[_excluded[ne-1]] = excludedROwned[ne-1] - (std.c - subtractedTotal); } _reflectFee(rFee + std.a + std.b + subtractedTotal, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount); //, rSupply, tSupply); uint256 ne = numExcluded(); // for this one, excludedInfo refers to accounts *other than* the recipient. // otherwise, this function is the same as transferStandard. // i.e. the recipient is just another excluded account. accountInfo[] memory excludedInfo = new accountInfo[](ne - 1); uint256 totalExcluded = 0; uint256 arrayIndex = 0; for (uint i = 0; i < ne; i++){ if (_excluded[i] != recipient){ excludedInfo[arrayIndex].account = _excluded[i]; excludedInfo[arrayIndex].rOwned = _rOwned[excludedInfo[arrayIndex].account]; totalExcluded += excludedInfo[arrayIndex].rOwned; arrayIndex += 1; } } stackTooDeepStruct memory std; std.n1 = _rOwned[sender] - rAmount; std.n2 = _rOwned[recipient] + rTransferAmount; std.n3 = totalExcluded; std.temp = _rTotal - std.n1 - std.n2 - std.n3; std.a = (rFee*std.n1)/std.temp; std.b = (rFee*std.n2)/std.temp; std.c = (rFee*std.n3)/std.temp; _rOwned[sender] = std.n1 - std.a; _rOwned[recipient] = std.n2 - std.b; uint256 subtractedTotal = 0; uint256 toSubtract; if (totalExcluded > 0){ for (uint i = 0; i < excludedInfo.length; i++){ toSubtract = (std.c * excludedInfo[i].rOwned) / totalExcluded; _rOwned[excludedInfo[i].account] = excludedInfo[i].rOwned - toSubtract; subtractedTotal += toSubtract; } //_rOwned[excludedInfo[excludedInfo.length - 1].account] = excludedInfo[excludedInfo.length - 1].rOwned - (std.c - subtractedTotal); } _reflectFee(rFee + std.a + std.b + subtractedTotal, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferTaxFree(address sender, address recipient, uint256 tAmount) private { // uint256 currentRate = _rTotal / _tTotal; // uint256 rAmount = tAmount * currentRate; uint256 rAmount = (tAmount * _rTotal) / _tTotal; _rOwned[sender] = _rOwned[sender] - rAmount; _rOwned[recipient] = _rOwned[recipient] + rAmount; emit Transfer(sender, recipient, tAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal -= rFee; _tFeeTotal += tFee; } function calculateTax(uint256 tAmount) public view returns (uint256) { uint256 cutoffTSupply = (_tTotal * _taxMaximumCutoff) / 100; uint256 taxTemp = _taxLowerBound + ((_taxUpperBound - _taxLowerBound)*tAmount)/cutoffTSupply; return min(taxTemp, _taxUpperBound); } function _getValues(uint256 tAmount) private returns (uint256, uint256, uint256, uint256, uint256) { //check for rSupply depletion if (!_rSupplyNeedsReset) { if (_rTotal < 15 * _tTotal){ _rSupplyNeedsReset = true; } } //calculates tax based on amount being transferred uint256 tax = calculateTax(tAmount); //_taxLowerBound + (_taxUpperBound - _taxLowerBound) * tAmount.div(tSupply); (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount, tax); //uint256 currentRate = _getRate(); //uint256 currentRate = _getRate(); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee); } function _getTValues(uint256 tAmount, uint256 tax) private pure returns (uint256, uint256) { uint256 tFee = (tAmount * tax) / 100; uint256 tTransferAmount = tAmount - tFee; return (tTransferAmount, tFee); } function _getRValues(uint256 tAmount, uint256 tFee) private view returns (uint256, uint256, uint256) { uint256 rAmount = (tAmount * _rTotal) / _tTotal; uint256 rFee = (tFee * _rTotal) / _tTotal; uint256 rTransferAmount = rAmount - rFee; return (rAmount, rTransferAmount, rFee); } function resetRSupply() public onlyOwner returns(bool) { uint256 newROwned; uint256 totalNewROwned; for (uint256 i = 0; i < _holders.length; i++) { newROwned = (_rOwned[_holders[i]]*_rTotalInitial)/_rTotal; totalNewROwned += newROwned; _rOwned[_holders[i]] = newROwned; } _rTotal = totalNewROwned; _rSupplyNeedsReset = false; return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"calculateTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"completelyExcludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTaxMaximumCutoff","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxRates","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxableState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isCompletelyExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numExcluded","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":"address","name":"account","type":"address"}],"name":"rOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetRSupply","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cutoff","type":"uint256"}],"name":"setTaxMaximumCutoff","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"LB","type":"uint256"},{"internalType":"uint256","name":"UB","type":"uint256"}],"name":"setTaxRates","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"pure","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":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"viewExcluded","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526200001c64e8d4a510006001600160801b036200048c565b6200002f906001600160801b03620004af565b600d819055600e556000601081905560115560326012556013805460ff191690553480156200005d57600080fd5b50604080518082018252600581526408ac8d2e8d60db1b60208083019182528351808501909452600484526308a88a8960e31b908401528151919291620000a791600391620003e6565b508051620000bd906004906020840190620003e6565b505050620000da620000d4620001a460201b60201c565b620001a8565b600d543360008181526006602090815260408083209490945560079052918220805460ff191660019081179091556008805491820181559092527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390910180546001600160a01b031916821790556200015660026014620001fa565b5060405164e8d4a5100081526001600160a01b038216906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35062000511565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546000906001600160a01b031633146200025d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b81831115620002d55760405162461bcd60e51b815260206004820152603560248201527f6c6f77657220626f756e64206d757374206265206c657373207468616e206f7260448201527f20657175616c20746f20757070657220626f756e640000000000000000000000606482015260840162000254565b60328211156200034e5760405162461bcd60e51b815260206004820152603560248201527f757070657220626f756e64206d757374206265206c657373207468616e206f7260448201527f20657175616c20746f205f7461784d6178696d756d0000000000000000000000606482015260840162000254565b60135460ff1615620003d75760405162461bcd60e51b815260206004820152604560248201527f746865207461782066756e6374696f6e616c69747920686173206265656e207060448201527f65726d656e616e746c792064697361626c656420666f72207468697320636f6e6064820152641d1c9858dd60da1b608482015260a40162000254565b50601091909155601155600190565b828054620003f490620004d5565b90600052602060002090601f01602090048101928262000418576000855562000463565b82601f106200043357805160ff191683800117855562000463565b8280016001018555821562000463579182015b828111156200046357825182559160200191906001019062000446565b506200047192915062000475565b5090565b5b8082111562000471576000815560010162000476565b600082620004aa57634e487b7160e01b600052601260045260246000fd5b500690565b600082821015620004d057634e487b7160e01b600052601160045260246000fd5b500390565b600181811c90821680620004ea57607f821691505b6020821081036200050b57634e487b7160e01b600052602260045260246000fd5b50919050565b6121e880620005216000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806384a3f5c01161010f578063c80dfa1d116100a2578063e1c2bbd111610071578063e1c2bbd114610472578063f2cc0c181461047a578063f2fde38b1461048d578063f84354f1146104a057600080fd5b8063c80dfa1d146103ce578063cba0e996146103fa578063cd22b0f014610426578063dd62ed3e1461043957600080fd5b80639bc2e1b3116100de5780639bc2e1b31461037a578063a457c2d71461038d578063a9059cbb146103a0578063b8a7d108146103b357600080fd5b806384a3f5c01461030457806388a06f8b1461030c5780638da5cb5b1461033557806395d89b411461035a57600080fd5b8063395093511161018757806370a082311161015657806370a08231146102cc578063715018a6146102df5780637ded8aae146102e95780637e2940d8146102f157600080fd5b8063395093511461028b5780633986ed6e1461029e578063483a9310146102a65780635cb23e12146102b957600080fd5b806318160ddd116101c357806318160ddd1461025257806323b872dd1461025d5780632acb7d2014610270578063313ce5671461027c57600080fd5b806306fdde03146101ea578063095ea7b31461021d57806313114a9d14610240575b600080fd5b60408051808201909152600581526408ac8d2e8d60db1b60208201525b6040516102149190611f3a565b60405180910390f35b61023061022b366004611fa6565b6104b3565b6040519015158152602001610214565b600f545b604051908152602001610214565b64e8d4a51000610244565b61023061026b366004611fd0565b6104ca565b60135460ff1615610230565b60405160058152602001610214565b610230610299366004611fa6565b61056d565b6102306105a4565b6102446102b436600461200c565b6106a9565b6102306102c7366004612025565b610718565b6102446102da366004612047565b6108b8565b6102e76108f1565b005b600c54610244565b6102e76102ff366004612047565b610927565b600d54610244565b61024461031a366004612047565b6001600160a01b031660009081526006602052604090205490565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610214565b60408051808201909152600481526308a88a8960e31b6020820152610207565b61034261038836600461200c565b610a67565b61023061039b366004611fa6565b610ad8565b6102306103ae366004611fa6565b610b0f565b60105460115460408051928352602083019190915201610214565b6102306103dc366004612047565b6001600160a01b03166000908152600b602052604090205460ff1690565b610230610408366004612047565b6001600160a01b03166000908152600a602052604090205460ff1690565b61023061043436600461200c565b610ba7565b610244610447366004612069565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b601254610244565b6102e7610488366004612047565b610c56565b6102e761049b366004612047565b610d4f565b6102e76104ae366004612047565b610de7565b60006104c0338484610fa5565b5060015b92915050565b6001600160a01b0383166000908152600960209081526040808320338452909152812054808311156105435760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657272696e6720746f6f206d756368206564697468000000000060448201526064015b60405180910390fd5b610557853361055286856120b2565b610fa5565b6105628585856110c9565b506001949350505050565b3360008181526009602090815260408083206001600160a01b038716845290915281205490916104c09185906105529086906120c9565b6005546000906001600160a01b031633146105d15760405162461bcd60e51b815260040161053a906120e1565b60008060005b60085481101561069457600d54600e5460066000600885815481106105fe576105fe612116565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461062d919061212c565b610637919061214b565b925061064383836120c9565b915082600660006008848154811061065d5761065d612116565b60009182526020808320909101546001600160a01b031683528201929092526040019020558061068c8161216d565b9150506105d7565b50600d5550506013805460ff19169055600190565b600080606460125464e8d4a510006106c1919061212c565b6106cb919061214b565b9050600081846010546011546106e191906120b2565b6106eb919061212c565b6106f5919061214b565b60105461070291906120c9565b9050610710816011546113e5565b949350505050565b6005546000906001600160a01b031633146107455760405162461bcd60e51b815260040161053a906120e1565b818311156107b35760405162461bcd60e51b815260206004820152603560248201527f6c6f77657220626f756e64206d757374206265206c657373207468616e206f7260448201527408195c5d585b081d1bc81d5c1c195c88189bdd5b99605a1b606482015260840161053a565b60328211156108225760405162461bcd60e51b815260206004820152603560248201527f757070657220626f756e64206d757374206265206c657373207468616e206f7260448201527420657175616c20746f205f7461784d6178696d756d60581b606482015260840161053a565b60135460ff16156108a95760405162461bcd60e51b815260206004820152604560248201527f746865207461782066756e6374696f6e616c69747920686173206265656e207060448201527f65726d656e616e746c792064697361626c656420666f72207468697320636f6e6064820152641d1c9858dd60da1b608482015260a40161053a565b50601091909155601155600190565b600d546001600160a01b0382166000908152600660205260408120549091906108e79064e8d4a510009061212c565b6104c4919061214b565b6005546001600160a01b0316331461091b5760405162461bcd60e51b815260040161053a906120e1565b61092560006113fc565b565b6005546001600160a01b031633146109515760405162461bcd60e51b815260040161053a906120e1565b6001600160a01b0381166000908152600b602052604090205460ff16156109c95760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420697320616c726561647920636f6d706c6574656c7920657860448201526518db1d59195960d21b606482015260840161053a565b6001600160a01b0381166000908152600b60209081526040808320805460ff19166001179055600a90915290205460ff16610a64576001600160a01b0381166000818152600a60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b03191690911790555b50565b600c546000908210610aaa5760405162461bcd60e51b815260206004820152600c60248201526b6e20697320746f6f2062696760a01b604482015260640161053a565b600c8281548110610abd57610abd612116565b6000918252602090912001546001600160a01b031692915050565b3360008181526009602090815260408083206001600160a01b038716845290915281205490916104c09185906105529086906120b2565b6000610b1c3384846110c9565b6001600160a01b03831660009081526007602052604090205460ff166104c05750506001600160a01b03166000818152600760205260408120805460ff1916600190811790915560088054808301825592527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390910180546001600160a01b03191690921790915590565b6005546000906001600160a01b03163314610bd45760405162461bcd60e51b815260040161053a906120e1565b610be4600a64e8d4a5100061214b565b821015610c485760405162461bcd60e51b815260206004820152602c60248201527f6375746f6666206d757374206265203e3d20312f31307468206f66207468652060448201526b746f74616c20737570706c7960a01b606482015260840161053a565b50601281905560015b919050565b6005546001600160a01b03163314610c805760405162461bcd60e51b815260040161053a906120e1565b6001600160a01b0381166000908152600a602052604090205460ff1615610ce95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161053a565b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6005546001600160a01b03163314610d795760405162461bcd60e51b815260040161053a906120e1565b6001600160a01b038116610dde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161053a565b610a64816113fc565b6005546001600160a01b03163314610e115760405162461bcd60e51b815260040161053a906120e1565b6001600160a01b0381166000908152600a602052604090205460ff16610e795760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015260640161053a565b60005b600c54811015610fa157816001600160a01b0316600c8281548110610ea357610ea3612116565b6000918252602090912001546001600160a01b031603610f8f57600c8054610ecd906001906120b2565b81548110610edd57610edd612116565b600091825260209091200154600c80546001600160a01b039092169183908110610f0957610f09612116565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600a82526040808220805460ff19908116909155600b909352902080549091169055600c805480610f6957610f69612186565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f998161216d565b915050610e7c565b5050565b6001600160a01b0383166110075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161053a565b6001600160a01b0382166110685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161053a565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661112d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161053a565b6001600160a01b03821661118f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161053a565b600081116111f15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161053a565b6001600160a01b0383166000908152600a602052604090205460ff168061123057506001600160a01b0382166000908152600b602052604090205460ff165b8061123d575060135460ff165b806112485750601154155b1561125d5761125883838361144e565b505050565b6001600160a01b0383166000908152600a602052604090205460ff1615801561129e57506001600160a01b0382166000908152600a602052604090205460ff165b156112ae57611258838383611527565b6001600160a01b0383166000908152600a602052604081205460ff166112f4576001600160a01b0384166000908152600660205260409020546112f190826120c9565b90505b6001600160a01b0383166000908152600a602052604090205460ff1661133a576001600160a01b03831660009081526006602052604090205461133790826120c9565b90505b60005b600c548110156113a15760066000600c838154811061135e5761135e612116565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461138d90836120c9565b9150806113998161216d565b91505061133d565b506064600d5460636113b3919061212c565b6113bd919061214b565b8111156113d4576113cf84848461144e565b6113df565b6113df8484846119ff565b50505050565b60008183116113f55750816104c4565b50806104c4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600064e8d4a51000600d5483611464919061212c565b61146e919061214b565b6001600160a01b0385166000908152600660205260409020549091506114959082906120b2565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546114c59082906120c9565b6001600160a01b0380851660008181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115199086815260200190565b60405180910390a350505050565b600080600080600061153886611ded565b94509450945094509450600061154d600c5490565b9050600061155c6001836120b2565b67ffffffffffffffff8111156115745761157461219c565b6040519080825280602002602001820160405280156115b957816020015b60408051808201909152600080825260208201528152602001906001900390816115925790505b50905060008060005b84811015611718578b6001600160a01b0316600c82815481106115e7576115e7612116565b6000918252602090912001546001600160a01b03161461170657600c818154811061161457611614612116565b9060005260206000200160009054906101000a90046001600160a01b031684838151811061164457611644612116565b6020026020010151600001906001600160a01b031690816001600160a01b0316815250506006600085848151811061167e5761167e612116565b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020548483815181106116bd576116bd612116565b602002602001015160200181815250508382815181106116df576116df612116565b602002602001015160200151836116f691906120c9565b92506117036001836120c9565b91505b806117108161216d565b9150506115c2565b506117596040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038d1660009081526006602052604090205461177d908b906120b2565b81526001600160a01b038c166000908152600660205260409020546117a3908a906120c9565b60208201819052604082018490528151600d548592916117c2916120b2565b6117cc91906120b2565b6117d691906120b2565b6060820181905281516117e9908a61212c565b6117f3919061214b565b60808201526060810151602082015161180c908a61212c565b611816919061214b565b60a08201526060810151604082015161182f908a61212c565b611839919061214b565b60c08201526080810151815161184f91906120b2565b6001600160a01b038e1660009081526006602090815260409091209190915560a08201519082015161188191906120b2565b6001600160a01b038d1660009081526006602052604081209190915580841561196e5760005b865181101561196c57858782815181106118c3576118c3612116565b6020026020010151602001518560c001516118de919061212c565b6118e8919061214b565b9150818782815181106118fd576118fd612116565b60200260200101516020015161191391906120b2565b6006600089848151811061192957611929612116565b602090810291909101810151516001600160a01b031682528101919091526040016000205561195882846120c9565b9250806119648161216d565b9150506118a7565b505b6119a1828460a0015185608001518d61198791906120c9565b61199191906120c9565b61199b91906120c9565b89611e6e565b8d6001600160a01b03168f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b6040516119e691815260200190565b60405180910390a3505050505050505050505050505050565b6000806000806000611a1086611ded565b945094509450945094506000611a25600c5490565b905060008167ffffffffffffffff811115611a4257611a4261219c565b604051908082528060200260200182016040528015611a6b578160200160208202803683370190505b5090506000805b83811015611b0f5760066000600c8381548110611a9157611a91612116565b60009182526020808320909101546001600160a01b031683528201929092526040019020548351849083908110611aca57611aca612116565b602002602001018181525050828181518110611ae857611ae8612116565b602002602001015182611afb91906120c9565b915080611b078161216d565b915050611a72565b50611b506040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038c16600090815260066020526040902054611b74908a906120b2565b81526001600160a01b038b16600090815260066020526040902054611b9a9089906120c9565b60208201819052604082018390528151600d54849291611bb9916120b2565b611bc391906120b2565b611bcd91906120b2565b606082018190528151611be0908961212c565b611bea919061214b565b608082015260608101516020820151611c03908961212c565b611c0d919061214b565b60a082015260608101516040820151611c26908961212c565b611c30919061214b565b60c082015260808101518151611c4691906120b2565b6001600160a01b038d1660009081526006602090815260409091209190915560a082015190820151611c7891906120b2565b6001600160a01b038c16600090815260066020526040812091909155808315611d5d5760005b86811015611d5b5784868281518110611cb957611cb9612116565b60200260200101518560c00151611cd0919061212c565b611cda919061214b565b915081868281518110611cef57611cef612116565b6020026020010151611d0191906120b2565b60066000600c8481548110611d1857611d18612116565b60009182526020808320909101546001600160a01b03168352820192909252604001902055611d4782846120c9565b925080611d538161216d565b915050611c9e565b505b611d90828460a0015185608001518c611d7691906120c9565b611d8091906120c9565b611d8a91906120c9565b88611e6e565b8c6001600160a01b03168e6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051611dd591815260200190565b60405180910390a35050505050505050505050505050565b601354600090819081908190819060ff16611e2957611e1264e8d4a51000600f61212c565b600d541015611e29576013805460ff191660011790555b6000611e34876106a9565b9050600080611e438984611ea2565b915091506000806000611e568c85611ed6565b919e909d50909b509499509297509295505050505050565b81600d6000828254611e8091906120b2565b9250508190555080600f6000828254611e9991906120c9565b90915550505050565b600080806064611eb2858761212c565b611ebc919061214b565b90506000611eca82876120b2565b96919550909350505050565b60008060008064e8d4a51000600d5487611ef0919061212c565b611efa919061214b565b9050600064e8d4a51000600d5487611f12919061212c565b611f1c919061214b565b90506000611f2a82846120b2565b9295509193509150509250925092565b600060208083528351808285015260005b81811015611f6757858101830151858201604001528201611f4b565b81811115611f79576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610c5157600080fd5b60008060408385031215611fb957600080fd5b611fc283611f8f565b946020939093013593505050565b600080600060608486031215611fe557600080fd5b611fee84611f8f565b9250611ffc60208501611f8f565b9150604084013590509250925092565b60006020828403121561201e57600080fd5b5035919050565b6000806040838503121561203857600080fd5b50508035926020909101359150565b60006020828403121561205957600080fd5b61206282611f8f565b9392505050565b6000806040838503121561207c57600080fd5b61208583611f8f565b915061209360208401611f8f565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b6000828210156120c4576120c461209c565b500390565b600082198211156120dc576120dc61209c565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008160001904831182151516156121465761214661209c565b500290565b60008261216857634e487b7160e01b600052601260045260246000fd5b500490565b60006001820161217f5761217f61209c565b5060010190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220bdf0ca3fbf03a0db8659018da9ac16932d7a4709b8c2175c82391a5b5980fb0364736f6c634300080d0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806384a3f5c01161010f578063c80dfa1d116100a2578063e1c2bbd111610071578063e1c2bbd114610472578063f2cc0c181461047a578063f2fde38b1461048d578063f84354f1146104a057600080fd5b8063c80dfa1d146103ce578063cba0e996146103fa578063cd22b0f014610426578063dd62ed3e1461043957600080fd5b80639bc2e1b3116100de5780639bc2e1b31461037a578063a457c2d71461038d578063a9059cbb146103a0578063b8a7d108146103b357600080fd5b806384a3f5c01461030457806388a06f8b1461030c5780638da5cb5b1461033557806395d89b411461035a57600080fd5b8063395093511161018757806370a082311161015657806370a08231146102cc578063715018a6146102df5780637ded8aae146102e95780637e2940d8146102f157600080fd5b8063395093511461028b5780633986ed6e1461029e578063483a9310146102a65780635cb23e12146102b957600080fd5b806318160ddd116101c357806318160ddd1461025257806323b872dd1461025d5780632acb7d2014610270578063313ce5671461027c57600080fd5b806306fdde03146101ea578063095ea7b31461021d57806313114a9d14610240575b600080fd5b60408051808201909152600581526408ac8d2e8d60db1b60208201525b6040516102149190611f3a565b60405180910390f35b61023061022b366004611fa6565b6104b3565b6040519015158152602001610214565b600f545b604051908152602001610214565b64e8d4a51000610244565b61023061026b366004611fd0565b6104ca565b60135460ff1615610230565b60405160058152602001610214565b610230610299366004611fa6565b61056d565b6102306105a4565b6102446102b436600461200c565b6106a9565b6102306102c7366004612025565b610718565b6102446102da366004612047565b6108b8565b6102e76108f1565b005b600c54610244565b6102e76102ff366004612047565b610927565b600d54610244565b61024461031a366004612047565b6001600160a01b031660009081526006602052604090205490565b6005546001600160a01b03165b6040516001600160a01b039091168152602001610214565b60408051808201909152600481526308a88a8960e31b6020820152610207565b61034261038836600461200c565b610a67565b61023061039b366004611fa6565b610ad8565b6102306103ae366004611fa6565b610b0f565b60105460115460408051928352602083019190915201610214565b6102306103dc366004612047565b6001600160a01b03166000908152600b602052604090205460ff1690565b610230610408366004612047565b6001600160a01b03166000908152600a602052604090205460ff1690565b61023061043436600461200c565b610ba7565b610244610447366004612069565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b601254610244565b6102e7610488366004612047565b610c56565b6102e761049b366004612047565b610d4f565b6102e76104ae366004612047565b610de7565b60006104c0338484610fa5565b5060015b92915050565b6001600160a01b0383166000908152600960209081526040808320338452909152812054808311156105435760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657272696e6720746f6f206d756368206564697468000000000060448201526064015b60405180910390fd5b610557853361055286856120b2565b610fa5565b6105628585856110c9565b506001949350505050565b3360008181526009602090815260408083206001600160a01b038716845290915281205490916104c09185906105529086906120c9565b6005546000906001600160a01b031633146105d15760405162461bcd60e51b815260040161053a906120e1565b60008060005b60085481101561069457600d54600e5460066000600885815481106105fe576105fe612116565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461062d919061212c565b610637919061214b565b925061064383836120c9565b915082600660006008848154811061065d5761065d612116565b60009182526020808320909101546001600160a01b031683528201929092526040019020558061068c8161216d565b9150506105d7565b50600d5550506013805460ff19169055600190565b600080606460125464e8d4a510006106c1919061212c565b6106cb919061214b565b9050600081846010546011546106e191906120b2565b6106eb919061212c565b6106f5919061214b565b60105461070291906120c9565b9050610710816011546113e5565b949350505050565b6005546000906001600160a01b031633146107455760405162461bcd60e51b815260040161053a906120e1565b818311156107b35760405162461bcd60e51b815260206004820152603560248201527f6c6f77657220626f756e64206d757374206265206c657373207468616e206f7260448201527408195c5d585b081d1bc81d5c1c195c88189bdd5b99605a1b606482015260840161053a565b60328211156108225760405162461bcd60e51b815260206004820152603560248201527f757070657220626f756e64206d757374206265206c657373207468616e206f7260448201527420657175616c20746f205f7461784d6178696d756d60581b606482015260840161053a565b60135460ff16156108a95760405162461bcd60e51b815260206004820152604560248201527f746865207461782066756e6374696f6e616c69747920686173206265656e207060448201527f65726d656e616e746c792064697361626c656420666f72207468697320636f6e6064820152641d1c9858dd60da1b608482015260a40161053a565b50601091909155601155600190565b600d546001600160a01b0382166000908152600660205260408120549091906108e79064e8d4a510009061212c565b6104c4919061214b565b6005546001600160a01b0316331461091b5760405162461bcd60e51b815260040161053a906120e1565b61092560006113fc565b565b6005546001600160a01b031633146109515760405162461bcd60e51b815260040161053a906120e1565b6001600160a01b0381166000908152600b602052604090205460ff16156109c95760405162461bcd60e51b815260206004820152602660248201527f4163636f756e7420697320616c726561647920636f6d706c6574656c7920657860448201526518db1d59195960d21b606482015260840161053a565b6001600160a01b0381166000908152600b60209081526040808320805460ff19166001179055600a90915290205460ff16610a64576001600160a01b0381166000818152600a60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b03191690911790555b50565b600c546000908210610aaa5760405162461bcd60e51b815260206004820152600c60248201526b6e20697320746f6f2062696760a01b604482015260640161053a565b600c8281548110610abd57610abd612116565b6000918252602090912001546001600160a01b031692915050565b3360008181526009602090815260408083206001600160a01b038716845290915281205490916104c09185906105529086906120b2565b6000610b1c3384846110c9565b6001600160a01b03831660009081526007602052604090205460ff166104c05750506001600160a01b03166000818152600760205260408120805460ff1916600190811790915560088054808301825592527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee390910180546001600160a01b03191690921790915590565b6005546000906001600160a01b03163314610bd45760405162461bcd60e51b815260040161053a906120e1565b610be4600a64e8d4a5100061214b565b821015610c485760405162461bcd60e51b815260206004820152602c60248201527f6375746f6666206d757374206265203e3d20312f31307468206f66207468652060448201526b746f74616c20737570706c7960a01b606482015260840161053a565b50601281905560015b919050565b6005546001600160a01b03163314610c805760405162461bcd60e51b815260040161053a906120e1565b6001600160a01b0381166000908152600a602052604090205460ff1615610ce95760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640161053a565b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600c805491820181559091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319169091179055565b6005546001600160a01b03163314610d795760405162461bcd60e51b815260040161053a906120e1565b6001600160a01b038116610dde5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161053a565b610a64816113fc565b6005546001600160a01b03163314610e115760405162461bcd60e51b815260040161053a906120e1565b6001600160a01b0381166000908152600a602052604090205460ff16610e795760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c756465640000000000604482015260640161053a565b60005b600c54811015610fa157816001600160a01b0316600c8281548110610ea357610ea3612116565b6000918252602090912001546001600160a01b031603610f8f57600c8054610ecd906001906120b2565b81548110610edd57610edd612116565b600091825260209091200154600c80546001600160a01b039092169183908110610f0957610f09612116565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600a82526040808220805460ff19908116909155600b909352902080549091169055600c805480610f6957610f69612186565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610f998161216d565b915050610e7c565b5050565b6001600160a01b0383166110075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161053a565b6001600160a01b0382166110685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161053a565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661112d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161053a565b6001600160a01b03821661118f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161053a565b600081116111f15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161053a565b6001600160a01b0383166000908152600a602052604090205460ff168061123057506001600160a01b0382166000908152600b602052604090205460ff165b8061123d575060135460ff165b806112485750601154155b1561125d5761125883838361144e565b505050565b6001600160a01b0383166000908152600a602052604090205460ff1615801561129e57506001600160a01b0382166000908152600a602052604090205460ff165b156112ae57611258838383611527565b6001600160a01b0383166000908152600a602052604081205460ff166112f4576001600160a01b0384166000908152600660205260409020546112f190826120c9565b90505b6001600160a01b0383166000908152600a602052604090205460ff1661133a576001600160a01b03831660009081526006602052604090205461133790826120c9565b90505b60005b600c548110156113a15760066000600c838154811061135e5761135e612116565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461138d90836120c9565b9150806113998161216d565b91505061133d565b506064600d5460636113b3919061212c565b6113bd919061214b565b8111156113d4576113cf84848461144e565b6113df565b6113df8484846119ff565b50505050565b60008183116113f55750816104c4565b50806104c4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600064e8d4a51000600d5483611464919061212c565b61146e919061214b565b6001600160a01b0385166000908152600660205260409020549091506114959082906120b2565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546114c59082906120c9565b6001600160a01b0380851660008181526006602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115199086815260200190565b60405180910390a350505050565b600080600080600061153886611ded565b94509450945094509450600061154d600c5490565b9050600061155c6001836120b2565b67ffffffffffffffff8111156115745761157461219c565b6040519080825280602002602001820160405280156115b957816020015b60408051808201909152600080825260208201528152602001906001900390816115925790505b50905060008060005b84811015611718578b6001600160a01b0316600c82815481106115e7576115e7612116565b6000918252602090912001546001600160a01b03161461170657600c818154811061161457611614612116565b9060005260206000200160009054906101000a90046001600160a01b031684838151811061164457611644612116565b6020026020010151600001906001600160a01b031690816001600160a01b0316815250506006600085848151811061167e5761167e612116565b6020026020010151600001516001600160a01b03166001600160a01b03168152602001908152602001600020548483815181106116bd576116bd612116565b602002602001015160200181815250508382815181106116df576116df612116565b602002602001015160200151836116f691906120c9565b92506117036001836120c9565b91505b806117108161216d565b9150506115c2565b506117596040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038d1660009081526006602052604090205461177d908b906120b2565b81526001600160a01b038c166000908152600660205260409020546117a3908a906120c9565b60208201819052604082018490528151600d548592916117c2916120b2565b6117cc91906120b2565b6117d691906120b2565b6060820181905281516117e9908a61212c565b6117f3919061214b565b60808201526060810151602082015161180c908a61212c565b611816919061214b565b60a08201526060810151604082015161182f908a61212c565b611839919061214b565b60c08201526080810151815161184f91906120b2565b6001600160a01b038e1660009081526006602090815260409091209190915560a08201519082015161188191906120b2565b6001600160a01b038d1660009081526006602052604081209190915580841561196e5760005b865181101561196c57858782815181106118c3576118c3612116565b6020026020010151602001518560c001516118de919061212c565b6118e8919061214b565b9150818782815181106118fd576118fd612116565b60200260200101516020015161191391906120b2565b6006600089848151811061192957611929612116565b602090810291909101810151516001600160a01b031682528101919091526040016000205561195882846120c9565b9250806119648161216d565b9150506118a7565b505b6119a1828460a0015185608001518d61198791906120c9565b61199191906120c9565b61199b91906120c9565b89611e6e565b8d6001600160a01b03168f6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b6040516119e691815260200190565b60405180910390a3505050505050505050505050505050565b6000806000806000611a1086611ded565b945094509450945094506000611a25600c5490565b905060008167ffffffffffffffff811115611a4257611a4261219c565b604051908082528060200260200182016040528015611a6b578160200160208202803683370190505b5090506000805b83811015611b0f5760066000600c8381548110611a9157611a91612116565b60009182526020808320909101546001600160a01b031683528201929092526040019020548351849083908110611aca57611aca612116565b602002602001018181525050828181518110611ae857611ae8612116565b602002602001015182611afb91906120c9565b915080611b078161216d565b915050611a72565b50611b506040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038c16600090815260066020526040902054611b74908a906120b2565b81526001600160a01b038b16600090815260066020526040902054611b9a9089906120c9565b60208201819052604082018390528151600d54849291611bb9916120b2565b611bc391906120b2565b611bcd91906120b2565b606082018190528151611be0908961212c565b611bea919061214b565b608082015260608101516020820151611c03908961212c565b611c0d919061214b565b60a082015260608101516040820151611c26908961212c565b611c30919061214b565b60c082015260808101518151611c4691906120b2565b6001600160a01b038d1660009081526006602090815260409091209190915560a082015190820151611c7891906120b2565b6001600160a01b038c16600090815260066020526040812091909155808315611d5d5760005b86811015611d5b5784868281518110611cb957611cb9612116565b60200260200101518560c00151611cd0919061212c565b611cda919061214b565b915081868281518110611cef57611cef612116565b6020026020010151611d0191906120b2565b60066000600c8481548110611d1857611d18612116565b60009182526020808320909101546001600160a01b03168352820192909252604001902055611d4782846120c9565b925080611d538161216d565b915050611c9e565b505b611d90828460a0015185608001518c611d7691906120c9565b611d8091906120c9565b611d8a91906120c9565b88611e6e565b8c6001600160a01b03168e6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051611dd591815260200190565b60405180910390a35050505050505050505050505050565b601354600090819081908190819060ff16611e2957611e1264e8d4a51000600f61212c565b600d541015611e29576013805460ff191660011790555b6000611e34876106a9565b9050600080611e438984611ea2565b915091506000806000611e568c85611ed6565b919e909d50909b509499509297509295505050505050565b81600d6000828254611e8091906120b2565b9250508190555080600f6000828254611e9991906120c9565b90915550505050565b600080806064611eb2858761212c565b611ebc919061214b565b90506000611eca82876120b2565b96919550909350505050565b60008060008064e8d4a51000600d5487611ef0919061212c565b611efa919061214b565b9050600064e8d4a51000600d5487611f12919061212c565b611f1c919061214b565b90506000611f2a82846120b2565b9295509193509150509250925092565b600060208083528351808285015260005b81811015611f6757858101830151858201604001528201611f4b565b81811115611f79576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610c5157600080fd5b60008060408385031215611fb957600080fd5b611fc283611f8f565b946020939093013593505050565b600080600060608486031215611fe557600080fd5b611fee84611f8f565b9250611ffc60208501611f8f565b9150604084013590509250925092565b60006020828403121561201e57600080fd5b5035919050565b6000806040838503121561203857600080fd5b50508035926020909101359150565b60006020828403121561205957600080fd5b61206282611f8f565b9392505050565b6000806040838503121561207c57600080fd5b61208583611f8f565b915061209360208401611f8f565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b6000828210156120c4576120c461209c565b500390565b600082198211156120dc576120dc61209c565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60008160001904831182151516156121465761214661209c565b500290565b60008261216857634e487b7160e01b600052601260045260246000fd5b500490565b60006001820161217f5761217f61209c565b5060010190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220bdf0ca3fbf03a0db8659018da9ac16932d7a4709b8c2175c82391a5b5980fb0364736f6c634300080d0033
Deployed Bytecode Sourcemap
16846:15501:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19661:92;19740:5;;;;;;;;;;;;-1:-1:-1;;;19740:5:0;;;;19661:92;;;;;;;:::i;:::-;;;;;;;;21003:161;;;;;;:::i;:::-;;:::i;:::-;;;1218:14:1;;1211:22;1193:41;;1181:2;1166:18;21003:161:0;1053:187:1;22264:87:0;22333:10;;22264:87;;;1391:25:1;;;1379:2;1364:18;22264:87:0;1245:177:1;19965:95:0;17604:18;19965:95;;21172:370;;;;;;:::i;:::-;;:::i;19556:97::-;19627:18;;;;19626:19;19556:97;;19865:92;;;18147:1;1902:36:1;;1890:2;1875:18;19865:92:0;1760:184:1;21550:216:0;;;;;;:::i;:::-;;:::i;31897:447::-;;;:::i;30192:296::-;;;;;;:::i;:::-;;:::i;18615:457::-;;;;;;:::i;:::-;;:::i;20269:270::-;;;;;;:::i;:::-;;:::i;4450:103::-;;;:::i;:::-;;23001:94;23071:9;:16;23001:94;;22581:412;;;;;;:::i;:::-;;:::i;20068:81::-;20134:7;;20068:81;;20157:104;;;;;;:::i;:::-;-1:-1:-1;;;;;20237:16:0;20210:7;20237:16;;;:7;:16;;;;;;;20157:104;3799:87;3872:6;;-1:-1:-1;;;;;3872:6:0;3799:87;;;-1:-1:-1;;;;;2742:32:1;;;2724:51;;2712:2;2697:18;3799:87:0;2578:203:1;19761:96:0;19842:7;;;;;;;;;;;;-1:-1:-1;;;19842:7:0;;;;19761:96;;23103:156;;;;;;:::i;:::-;;:::i;21774:226::-;;;;;;:::i;:::-;;:::i;20547:297::-;;;;;;:::i;:::-;;:::i;19430:118::-;19509:14;;19525;;19430:118;;;2960:25:1;;;3016:2;3001:18;;2994:34;;;;2933:18;19430:118:0;2786:248:1;22126:130:0;;;;;;:::i;:::-;-1:-1:-1;;;;;22218:30:0;22194:4;22218:30;;;:21;:30;;;;;;;;;22126:130;22008:110;;;;;;:::i;:::-;-1:-1:-1;;;;;22090:20:0;22066:4;22090:20;;;:11;:20;;;;;;;;;22008:110;19080:231;;;;;;:::i;:::-;;:::i;20852:143::-;;;;;;:::i;:::-;-1:-1:-1;;;;;20960:18:0;;;20933:7;20960:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20852:143;19319:103;19397:17;;19319:103;;22359:214;;;;;;:::i;:::-;;:::i;4708:201::-;;;;;;:::i;:::-;;:::i;23267:537::-;;;;;;:::i;:::-;;:::i;21003:161::-;21078:4;21095:39;3249:10;21118:7;21127:6;21095:8;:39::i;:::-;-1:-1:-1;21152:4:0;21003:161;;;;;:::o;21172:370::-;-1:-1:-1;;;;;21305:19:0;;21270:4;21305:19;;;:11;:19;;;;;;;;3249:10;21305:33;;;;;;;;21357:17;;;;21349:57;;;;-1:-1:-1;;;21349:57:0;;3506:2:1;21349:57:0;;;3488:21:1;3545:2;3525:18;;;3518:30;3584:29;3564:18;;;3557:57;3631:18;;21349:57:0;;;;;;;;;21417:48;21426:6;3249:10;21448:16;21458:6;21448:7;:16;:::i;:::-;21417:8;:48::i;:::-;21476:36;21486:6;21494:9;21505:6;21476:9;:36::i;:::-;-1:-1:-1;21530:4:0;;21172:370;-1:-1:-1;;;;21172:370:0:o;21550:216::-;3249:10;21639:4;21688:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21688:34:0;;;;;;;;;;21639:4;;21656:80;;21679:7;;21688:47;;21725:10;;21688:47;:::i;31897:447::-;3872:6;;31946:4;;-1:-1:-1;;;;;3872:6:0;3249:10;4019:23;4011:68;;;;-1:-1:-1;;;4011:68:0;;;;;;;:::i;:::-;31963:17:::1;31991:22:::0;32029:9:::1;32024:219;32048:8;:15:::0;32044:19;::::1;32024:219;;;32135:7;;32119:14;;32098:7;:20;32106:8;32115:1;32106:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;32106:11:0::1;32098:20:::0;;;::::1;::::0;;;;;;;;;:35:::1;::::0;;::::1;:::i;:::-;32097:45;;;;:::i;:::-;32085:57:::0;-1:-1:-1;32157:27:0::1;32085:57:::0;32157:27;::::1;:::i;:::-;;;32222:9;32199:7;:20;32207:8;32216:1;32207:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;32207:11:0::1;32199:20:::0;;;::::1;::::0;;;;;;;;:32;32065:3;::::1;::::0;::::1;:::i;:::-;;;;32024:219;;;-1:-1:-1::0;32253:7:0::1;:24:::0;-1:-1:-1;;32288:18:0::1;:26:::0;;-1:-1:-1;;32288:26:0::1;::::0;;;31897:447;:::o;30192:296::-;30252:7;30272:21;30328:3;30307:17;;17604:18;30297:27;;;;:::i;:::-;30296:35;;;;:::i;:::-;30272:59;;30342:15;30421:13;30412:7;30396:14;;30379;;:31;;;;:::i;:::-;30378:41;;;;:::i;:::-;30377:57;;;;:::i;:::-;30360:14;;:74;;;;:::i;:::-;30342:92;;30452:28;30456:7;30465:14;;30452:3;:28::i;:::-;30445:35;30192:296;-1:-1:-1;;;;30192:296:0:o;18615:457::-;3872:6;;18685:4;;-1:-1:-1;;;;;3872:6:0;3249:10;4019:23;4011:68;;;;-1:-1:-1;;;4011:68:0;;;;;;;:::i;:::-;18716:2:::1;18710;:8;;18702:74;;;::::0;-1:-1:-1;;;18702:74:0;;5285:2:1;18702:74:0::1;::::0;::::1;5267:21:1::0;5324:2;5304:18;;;5297:30;5363:34;5343:18;;;5336:62;-1:-1:-1;;;5414:18:1;;;5407:51;5475:19;;18702:74:0::1;5083:417:1::0;18702:74:0::1;17888:2;18795;:17;;18787:83;;;::::0;-1:-1:-1;;;18787:83:0;;5707:2:1;18787:83:0::1;::::0;::::1;5689:21:1::0;5746:2;5726:18;;;5719:30;5785:34;5765:18;;;5758:62;-1:-1:-1;;;5836:18:1;;;5829:51;5897:19;;18787:83:0::1;5505:417:1::0;18787:83:0::1;18890:18;::::0;::::1;;18889:19;18881:101;;;::::0;-1:-1:-1;;;18881:101:0;;6129:2:1;18881:101:0::1;::::0;::::1;6111:21:1::0;6168:2;6148:18;;;6141:30;6207:34;6187:18;;;6180:62;6278:34;6258:18;;;6251:62;-1:-1:-1;;;6329:19:1;;;6322:36;6375:19;;18881:101:0::1;5927:473:1::0;18881:101:0::1;-1:-1:-1::0;18993:14:0::1;:19:::0;;;;19023:14:::1;:19:::0;19060:4:::1;::::0;18615:457::o;20269:270::-;20524:7;;-1:-1:-1;;;;;20498:16:0;;20335:7;20498:16;;;:7;:16;;;;;;20335:7;;20524;20498:24;;17604:18;;20498:24;:::i;:::-;20497:34;;;;:::i;4450:103::-;3872:6;;-1:-1:-1;;;;;3872:6:0;3249:10;4019:23;4011:68;;;;-1:-1:-1;;;4011:68:0;;;;;;;:::i;:::-;4515:30:::1;4542:1;4515:18;:30::i;:::-;4450:103::o:0;22581:412::-;3872:6;;-1:-1:-1;;;;;3872:6:0;3249:10;4019:23;4011:68;;;;-1:-1:-1;;;4011:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22673:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;22672:31;22664:82;;;::::0;-1:-1:-1;;;22664:82:0;;6607:2:1;22664:82:0::1;::::0;::::1;6589:21:1::0;6646:2;6626:18;;;6619:30;6685:34;6665:18;;;6658:62;-1:-1:-1;;;6736:18:1;;;6729:36;6782:19;;22664:82:0::1;6405:402:1::0;22664:82:0::1;-1:-1:-1::0;;;;;22757:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;;;:37;;-1:-1:-1;;22757:37:0::1;22790:4;22757:37;::::0;;22873:11:::1;:20:::0;;;;;;22757:37:::1;22873:20;22868:118;;-1:-1:-1::0;;;;;22909:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22909:27:0::1;22932:4;22909:27:::0;;::::1;::::0;;;22951:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22951:23:0::1;::::0;;::::1;::::0;;22868:118:::1;22581:412:::0;:::o;23103:156::-;23188:9;:16;23156:7;;23184:20;;23176:45;;;;-1:-1:-1;;;23176:45:0;;7014:2:1;23176:45:0;;;6996:21:1;7053:2;7033:18;;;7026:30;-1:-1:-1;;;7072:18:1;;;7065:42;7124:18;;23176:45:0;6812:336:1;23176:45:0;23239:9;23249:1;23239:12;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23239:12:0;;23103:156;-1:-1:-1;;23103:156:0:o;21774:226::-;3249:10;21868:4;21917:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21917:34:0;;;;;;;;;;21868:4;;21885:85;;21908:7;;21917:52;;21954:15;;21917:52;:::i;20547:297::-;20625:4;20642:42;3249:10;20666:9;20677:6;20642:9;:42::i;:::-;-1:-1:-1;;;;;20700:20:0;;;;;;:9;:20;;;;;;;;20695:120;;-1:-1:-1;;;;;;;20737:20:0;;;;;:9;:20;;;;;:27;;-1:-1:-1;;20737:27:0;20760:4;20737:27;;;;;;20779:8;:24;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20779:24:0;;;;;;;20760:4;20547:297::o;19080:231::-;3872:6;;19150:4;;-1:-1:-1;;;;;3872:6:0;3249:10;4019:23;4011:68;;;;-1:-1:-1;;;4011:68:0;;;;;;;:::i;:::-;19185:10:::1;19193:2;17604:18;19185:10;:::i;:::-;19175:6;:20;;19167:77;;;::::0;-1:-1:-1;;;19167:77:0;;7355:2:1;19167:77:0::1;::::0;::::1;7337:21:1::0;7394:2;7374:18;;;7367:30;7433:34;7413:18;;;7406:62;-1:-1:-1;;;7484:18:1;;;7477:42;7536:19;;19167:77:0::1;7153:408:1::0;19167:77:0::1;-1:-1:-1::0;19255:17:0::1;:26:::0;;;19299:4:::1;4090:1;19080:231:::0;;;:::o;22359:214::-;3872:6;;-1:-1:-1;;;;;3872:6:0;3249:10;4019:23;4011:68;;;;-1:-1:-1;;;4011:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22441:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22440:21;22432:61;;;::::0;-1:-1:-1;;;22432:61:0;;7768:2:1;22432:61:0::1;::::0;::::1;7750:21:1::0;7807:2;7787:18;;;7780:30;7846:29;7826:18;;;7819:57;7893:18;;22432:61:0::1;7566:351:1::0;22432:61:0::1;-1:-1:-1::0;;;;;22504:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22504:27:0::1;22527:4;22504:27:::0;;::::1;::::0;;;22542:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22542:23:0::1;::::0;;::::1;::::0;;22359:214::o;4708:201::-;3872:6;;-1:-1:-1;;;;;3872:6:0;3249:10;4019:23;4011:68;;;;-1:-1:-1;;;4011:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4797:22:0;::::1;4789:73;;;::::0;-1:-1:-1;;;4789:73:0;;8124:2:1;4789:73:0::1;::::0;::::1;8106:21:1::0;8163:2;8143:18;;;8136:30;8202:34;8182:18;;;8175:62;-1:-1:-1;;;8253:18:1;;;8246:36;8299:19;;4789:73:0::1;7922:402:1::0;4789:73:0::1;4873:28;4892:8;4873:18;:28::i;23267:537::-:0;3872:6;;-1:-1:-1;;;;;3872:6:0;3249:10;4019:23;4011:68;;;;-1:-1:-1;;;4011:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23348:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23340:60;;;::::0;-1:-1:-1;;;23340:60:0;;8531:2:1;23340:60:0::1;::::0;::::1;8513:21:1::0;8570:2;8550:18;;;8543:30;8609:29;8589:18;;;8582:57;8656:18;;23340:60:0::1;8329:351:1::0;23340:60:0::1;23416:9;23411:386;23435:9;:16:::0;23431:20;::::1;23411:386;;;23493:7;-1:-1:-1::0;;;;;23477:23:0::1;:9;23487:1;23477:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23477:12:0::1;:23:::0;23473:313:::1;;23536:9;23546:16:::0;;:20:::1;::::0;23565:1:::1;::::0;23546:20:::1;:::i;:::-;23536:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23521:9:::1;:12:::0;;-1:-1:-1;;;;;23536:31:0;;::::1;::::0;23531:1;;23521:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23521:46:0::1;-1:-1:-1::0;;;;;23521:46:0;;::::1;;::::0;;23627:20;;::::1;::::0;;:11:::1;:20:::0;;;;;;:28;;-1:-1:-1;;23627:28:0;;::::1;::::0;;;23674:21:::1;:30:::0;;;;;:38;;;;::::1;::::0;;23731:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23731:15:0;;;;;-1:-1:-1;;;;;;23731:15:0::1;::::0;;;;;23411:386:::1;23267:537:::0;:::o;23473:313::-:1;23453:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23411:386;;;;23267:537:::0;:::o;23812:347::-;-1:-1:-1;;;;;23915:19:0;;23907:68;;;;-1:-1:-1;;;23907:68:0;;9019:2:1;23907:68:0;;;9001:21:1;9058:2;9038:18;;;9031:30;9097:34;9077:18;;;9070:62;-1:-1:-1;;;9148:18:1;;;9141:34;9192:19;;23907:68:0;8817:400:1;23907:68:0;-1:-1:-1;;;;;23994:21:0;;23986:68;;;;-1:-1:-1;;;23986:68:0;;9424:2:1;23986:68:0;;;9406:21:1;9463:2;9443:18;;;9436:30;9502:34;9482:18;;;9475:62;-1:-1:-1;;;9553:18:1;;;9546:32;9595:19;;23986:68:0;9222:398:1;23986:68:0;-1:-1:-1;;;;;24067:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24119:32;;1391:25:1;;;24119:32:0;;1364:18:1;24119:32:0;;;;;;;23812:347;;;:::o;24167:1378::-;-1:-1:-1;;;;;24273:20:0;;24265:70;;;;-1:-1:-1;;;24265:70:0;;9827:2:1;24265:70:0;;;9809:21:1;9866:2;9846:18;;;9839:30;9905:34;9885:18;;;9878:62;-1:-1:-1;;;9956:18:1;;;9949:35;10001:19;;24265:70:0;9625:401:1;24265:70:0;-1:-1:-1;;;;;24354:23:0;;24346:71;;;;-1:-1:-1;;;24346:71:0;;10233:2:1;24346:71:0;;;10215:21:1;10272:2;10252:18;;;10245:30;10311:34;10291:18;;;10284:62;-1:-1:-1;;;10362:18:1;;;10355:33;10405:19;;24346:71:0;10031:399:1;24346:71:0;24445:1;24436:6;:10;24428:64;;;;-1:-1:-1;;;24428:64:0;;10637:2:1;24428:64:0;;;10619:21:1;10676:2;10656:18;;;10649:30;10715:34;10695:18;;;10688:62;-1:-1:-1;;;10766:18:1;;;10759:39;10815:19;;24428:64:0;10435:405:1;24428:64:0;-1:-1:-1;;;;;24511:19:0;;;;;;:11;:19;;;;;;;;;:55;;-1:-1:-1;;;;;;24534:32:0;;;;;;:21;:32;;;;;;;;24511:55;:77;;;-1:-1:-1;24570:18:0;;;;24511:77;:100;;;-1:-1:-1;24592:14:0;;:19;24511:100;24507:1031;;;24710:43;24727:6;24735:9;24746:6;24710:16;:43::i;:::-;24167:1378;;;:::o;24507:1031::-;-1:-1:-1;;;;;24776:19:0;;;;;;:11;:19;;;;;;;;24775:20;:46;;;;-1:-1:-1;;;;;;24799:22:0;;;;;;:11;:22;;;;;;;;24775:46;24771:767;;;24838:46;24858:6;24866:9;24877:6;24838:19;:46::i;24771:767::-;-1:-1:-1;;;;;24963:19:0;;24917:22;24963:19;;;:11;:19;;;;;;;;24958:93;;-1:-1:-1;;;;;25020:15:0;;;;;;:7;:15;;;;;;25002:33;;;;:::i;:::-;;;24958:93;-1:-1:-1;;;;;25070:22:0;;;;;;:11;:22;;;;;;;;25065:99;;-1:-1:-1;;;;;25130:18:0;;;;;;:7;:18;;;;;;25112:36;;;;:::i;:::-;;;25065:99;25183:9;25178:120;25202:9;:16;25198:20;;25178:120;;;25261:7;:21;25269:9;25279:1;25269:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25269:12:0;25261:21;;;;;;;;;;;;;25243:39;;;;:::i;:::-;;-1:-1:-1;25220:3:0;;;;:::i;:::-;;;;25178:120;;;;25346:3;25337:7;;25334:2;:10;;;;:::i;:::-;25333:16;;;;:::i;:::-;25316:14;:33;25312:201;;;25369:43;25386:6;25394:9;25405:6;25369:16;:43::i;:::-;25312:201;;;25453:44;25471:6;25479:9;25490:6;25453:17;:44::i;:::-;24902:636;24167:1378;;;:::o;18436:171::-;18492:7;18521:1;18516;:6;18512:88;;-1:-1:-1;18546:1:0;18539:8;;18512:88;-1:-1:-1;18587:1:0;18580:8;;5069:191;5162:6;;;-1:-1:-1;;;;;5179:17:0;;;-1:-1:-1;;;;;;5179:17:0;;;;;;;5212:40;;5162:6;;;5179:17;5162:6;;5212:40;;5143:16;;5212:40;5132:128;5069:191;:::o;29631:425::-;29834:15;17604:18;29863:7;;29853;:17;;;;:::i;:::-;29852:29;;;;:::i;:::-;-1:-1:-1;;;;;29910:15:0;;;;;;:7;:15;;;;;;29834:47;;-1:-1:-1;29910:25:0;;29834:47;;29910:25;:::i;:::-;-1:-1:-1;;;;;29892:15:0;;;;;;;:7;:15;;;;;;:43;;;;29967:18;;;;;;;:28;;29988:7;;29967:28;:::i;:::-;-1:-1:-1;;;;;29946:18:0;;;;;;;:7;:18;;;;;;;:49;;;;30012:36;;;;;;;;;;30040:7;1391:25:1;;1379:2;1364:18;;1245:177;30012:36:0;;;;;;;;29717:339;29631:425;;;:::o;27468:2153::-;27569:15;27586:23;27611:12;27625:23;27650:12;27666:19;27677:7;27666:10;:19::i;:::-;27568:117;;;;;;;;;;27721:10;27734:13;23071:9;:16;;23001:94;27734:13;27721:26;-1:-1:-1;27981:33:0;28035:6;28040:1;27721:26;28035:6;:::i;:::-;28017:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;28017:25:0;;;;;;;;;;;;;;;;27981:61;;28053:21;28091:18;28129:6;28124:362;28145:2;28141:1;:6;28124:362;;;28188:9;-1:-1:-1;;;;;28172:25:0;:9;28182:1;28172:12;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;28172:12:0;:25;28168:307;;28252:9;28262:1;28252:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28252:12:0;28217;28230:10;28217:24;;;;;;;;:::i;:::-;;;;;;;:32;;:47;-1:-1:-1;;;;;28217:47:0;;;-1:-1:-1;;;;;28217:47:0;;;;;28317:7;:41;28325:12;28338:10;28325:24;;;;;;;;:::i;:::-;;;;;;;:32;;;-1:-1:-1;;;;;28317:41:0;-1:-1:-1;;;;;28317:41:0;;;;;;;;;;;;;28283:12;28296:10;28283:24;;;;;;;;:::i;:::-;;;;;;;:31;;:75;;;;;28394:12;28407:10;28394:24;;;;;;;;:::i;:::-;;;;;;;:31;;;28377:48;;;;;:::i;:::-;;-1:-1:-1;28444:15:0;28458:1;28444:15;;:::i;:::-;;;28168:307;28149:3;;;;:::i;:::-;;;;28124:362;;;;28498:29;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28498:29:0;-1:-1:-1;;;;;28547:15:0;;;;;;:7;:15;;;;;;:25;;28565:7;;28547:25;:::i;:::-;28538:34;;-1:-1:-1;;;;;28592:18:0;;28538:6;28592:18;;;:7;:18;;;;;;:36;;28613:15;;28592:36;:::i;:::-;28583:6;;;:45;;;28639:6;;;:22;;;28693:6;;28683:7;;28648:13;;28583:45;28683:16;;;:::i;:::-;:25;;;;:::i;:::-;:34;;;;:::i;:::-;28672:8;;;:45;;;28744:6;;28739:11;;:4;:11;:::i;:::-;28738:22;;;;:::i;:::-;28730:5;;;:30;28793:8;;;;28785:6;;;;28780:11;;:4;:11;:::i;:::-;28779:22;;;;:::i;:::-;28771:5;;;:30;28834:8;;;;28826:6;;;;28821:11;;:4;:11;:::i;:::-;28820:22;;;;:::i;:::-;28812:5;;;:30;28882:5;;;;28873:6;;:14;;28882:5;28873:14;:::i;:::-;-1:-1:-1;;;;;28855:15:0;;;;;;:7;:15;;;;;;;;:32;;;;28928:5;;;;28919:6;;;;:14;;28928:5;28919:14;:::i;:::-;-1:-1:-1;;;;;28898:18:0;;;;;;:7;:18;;;;;:35;;;;:18;29017:17;;29013:473;;29055:6;29050:279;29071:12;:19;29067:1;:23;29050:279;;;29163:13;29137:12;29150:1;29137:15;;;;;;;;:::i;:::-;;;;;;;:22;;;29129:3;:5;;;:30;;;;:::i;:::-;29128:48;;;;:::i;:::-;29115:61;;29255:10;29230:12;29243:1;29230:15;;;;;;;;:::i;:::-;;;;;;;:22;;;:35;;;;:::i;:::-;29195:7;:32;29203:12;29216:1;29203:15;;;;;;;;:::i;:::-;;;;;;;;;;;;:23;-1:-1:-1;;;;;29195:32:0;;;;;;;;;;;29203:23;29195:32;:70;29284:29;29303:10;29284:29;;:::i;:::-;;-1:-1:-1;29092:3:0;;;;:::i;:::-;;;;29050:279;;;;29013:473;29496:57;29531:15;29523:3;:5;;;29515:3;:5;;;29508:4;:12;;;;:::i;:::-;:20;;;;:::i;:::-;:38;;;;:::i;:::-;29548:4;29496:11;:57::i;:::-;29586:9;-1:-1:-1;;;;;29569:44:0;29578:6;-1:-1:-1;;;;;29569:44:0;;29597:15;29569:44;;;;1391:25:1;;1379:2;1364:18;;1245:177;29569:44:0;;;;;;;;27557:2064;;;;;;;;;;;;27468:2153;;;:::o;25888:1572::-;25987:15;26004:23;26029:12;26043:23;26068:12;26084:19;26095:7;26084:10;:19::i;:::-;25986:117;;;;;;;;;;26137:10;26150:13;23071:9;:16;;23001:94;26150:13;26137:26;;26176:31;26224:2;26210:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26210:17:0;;26176:51;;26238:21;26281:6;26276:146;26297:2;26293:1;:6;26276:146;;;26340:7;:21;26348:9;26358:1;26348:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26348:12:0;26340:21;;;;;;;;;;;;;26320:17;;:14;;26335:1;;26320:17;;;;;;:::i;:::-;;;;;;:41;;;;;26393:14;26408:1;26393:17;;;;;;;;:::i;:::-;;;;;;;26376:34;;;;;:::i;:::-;;-1:-1:-1;26301:3:0;;;;:::i;:::-;;;;26276:146;;;;26434:29;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26434:29:0;-1:-1:-1;;;;;26483:15:0;;;;;;:7;:15;;;;;;:25;;26501:7;;26483:25;:::i;:::-;26474:34;;-1:-1:-1;;;;;26528:18:0;;26474:6;26528:18;;;:7;:18;;;;;;:36;;26549:15;;26528:36;:::i;:::-;26519:6;;;:45;;;26575:6;;;:22;;;26628:6;;26619:7;;26584:13;;26519:45;26619:15;;;:::i;:::-;:24;;;;:::i;:::-;:33;;;;:::i;:::-;26608:8;;;:44;;;26679:6;;26674:11;;:4;:11;:::i;:::-;26673:22;;;;:::i;:::-;26665:5;;;:30;26728:8;;;;26720:6;;;;26715:11;;:4;:11;:::i;:::-;26714:22;;;;:::i;:::-;26706:5;;;:30;26769:8;;;;26761:6;;;;26756:11;;:4;:11;:::i;:::-;26755:22;;;;:::i;:::-;26747:5;;;:30;26819:5;;;;26810:6;;:14;;26819:5;26810:14;:::i;:::-;-1:-1:-1;;;;;26792:15:0;;;;;;:7;:15;;;;;;;;:32;;;;26865:5;;;;26856:6;;;;:14;;26865:5;26856:14;:::i;:::-;-1:-1:-1;;;;;26835:18:0;;;;;;:7;:18;;;;;:35;;;;:18;26952:17;;26948:375;;26990:6;26985:235;27004:2;27000:1;:6;26985:235;;;27070:13;27051:14;27066:1;27051:17;;;;;;;;:::i;:::-;;;;;;;27045:3;:5;;;:23;;;;:::i;:::-;27044:39;;;;:::i;:::-;27031:52;;27146:10;27126:14;27141:1;27126:17;;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;27102:7;:21;27110:9;27120:1;27110:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27110:12:0;27102:21;;;;;;;;;;;;:54;27175:29;27194:10;27175:29;;:::i;:::-;;-1:-1:-1;27008:3:0;;;;:::i;:::-;;;;26985:235;;;;26948:375;27333:57;27368:15;27360:3;:5;;;27352:3;:5;;;27345:4;:12;;;;:::i;:::-;:20;;;;:::i;:::-;:38;;;;:::i;:::-;27385:4;27333:11;:57::i;:::-;27423:9;-1:-1:-1;;;;;27406:44:0;27415:6;-1:-1:-1;;;;;27406:44:0;;27434:15;27406:44;;;;1391:25:1;;1379:2;1364:18;;1245:177;27406:44:0;;;;;;;;25975:1485;;;;;;;;;;;25888:1572;;;:::o;30496:819::-;30650:18;;30550:7;;;;;;;;;;30650:18;;30645:138;;30699:12;17604:18;30699:2;:12;:::i;:::-;30689:7;;:22;30685:87;;;30731:18;:25;;-1:-1:-1;;30731:25:0;30752:4;30731:25;;;30685:87;30855:11;30869:21;30882:7;30869:12;:21::i;:::-;30855:35;;30981:23;31006:12;31022:25;31034:7;31043:3;31022:11;:25::i;:::-;30980:67;;;;31150:15;31167:23;31192:12;31208:26;31220:7;31229:4;31208:11;:26::i;:::-;31149:85;;;;-1:-1:-1;31149:85:0;;-1:-1:-1;31285:15:0;;-1:-1:-1;31302:4:0;;-1:-1:-1;30496:819:0;;-1:-1:-1;;;;;;30496:819:0:o;30064:120::-;30143:4;30132:7;;:15;;;;;;;:::i;:::-;;;;;;;;30172:4;30158:10;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;30064:120:0:o;31323:238::-;31396:7;;;31458:3;31441:13;31451:3;31441:7;:13;:::i;:::-;31440:21;;;;:::i;:::-;31425:36;-1:-1:-1;31472:23:0;31498:14;31425:36;31498:7;:14;:::i;:::-;31472:40;31548:4;;-1:-1:-1;31323:238:0;;-1:-1:-1;;;;31323:238:0:o;31569:320::-;31643:7;31652;31661;31681:15;17604:18;31710:7;;31700;:17;;;;:::i;:::-;31699:29;;;;:::i;:::-;31681:47;;31739:12;17604:18;31762:7;;31755:4;:14;;;;:::i;:::-;31754:26;;;;:::i;:::-;31739:41;-1:-1:-1;31791:23:0;31817:14;31739:41;31817:7;:14;:::i;:::-;31850:7;;-1:-1:-1;31791:40:0;;-1:-1:-1;31876:4:0;-1:-1:-1;;31569:320:0;;;;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:173::-;684:20;;-1:-1:-1;;;;;733:31:1;;723:42;;713:70;;779:1;776;769:12;794:254;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;1038:2;1023:18;;;;1010:32;;-1:-1:-1;;;794:254:1:o;1427:328::-;1504:6;1512;1520;1573:2;1561:9;1552:7;1548:23;1544:32;1541:52;;;1589:1;1586;1579:12;1541:52;1612:29;1631:9;1612:29;:::i;:::-;1602:39;;1660:38;1694:2;1683:9;1679:18;1660:38;:::i;:::-;1650:48;;1745:2;1734:9;1730:18;1717:32;1707:42;;1427:328;;;;;:::o;1949:180::-;2008:6;2061:2;2049:9;2040:7;2036:23;2032:32;2029:52;;;2077:1;2074;2067:12;2029:52;-1:-1:-1;2100:23:1;;1949:180;-1:-1:-1;1949:180:1:o;2134:248::-;2202:6;2210;2263:2;2251:9;2242:7;2238:23;2234:32;2231:52;;;2279:1;2276;2269:12;2231:52;-1:-1:-1;;2302:23:1;;;2372:2;2357:18;;;2344:32;;-1:-1:-1;2134:248:1:o;2387:186::-;2446:6;2499:2;2487:9;2478:7;2474:23;2470:32;2467:52;;;2515:1;2512;2505:12;2467:52;2538:29;2557:9;2538:29;:::i;:::-;2528:39;2387:186;-1:-1:-1;;;2387:186:1:o;3039:260::-;3107:6;3115;3168:2;3156:9;3147:7;3143:23;3139:32;3136:52;;;3184:1;3181;3174:12;3136:52;3207:29;3226:9;3207:29;:::i;:::-;3197:39;;3255:38;3289:2;3278:9;3274:18;3255:38;:::i;:::-;3245:48;;3039:260;;;;;:::o;3660:127::-;3721:10;3716:3;3712:20;3709:1;3702:31;3752:4;3749:1;3742:15;3776:4;3773:1;3766:15;3792:125;3832:4;3860:1;3857;3854:8;3851:34;;;3865:18;;:::i;:::-;-1:-1:-1;3902:9:1;;3792:125::o;3922:128::-;3962:3;3993:1;3989:6;3986:1;3983:13;3980:39;;;3999:18;;:::i;:::-;-1:-1:-1;4035:9:1;;3922:128::o;4055:356::-;4257:2;4239:21;;;4276:18;;;4269:30;4335:34;4330:2;4315:18;;4308:62;4402:2;4387:18;;4055:356::o;4416:127::-;4477:10;4472:3;4468:20;4465:1;4458:31;4508:4;4505:1;4498:15;4532:4;4529:1;4522:15;4548:168;4588:7;4654:1;4650;4646:6;4642:14;4639:1;4636:21;4631:1;4624:9;4617:17;4613:45;4610:71;;;4661:18;;:::i;:::-;-1:-1:-1;4701:9:1;;4548:168::o;4721:217::-;4761:1;4787;4777:132;;4831:10;4826:3;4822:20;4819:1;4812:31;4866:4;4863:1;4856:15;4894:4;4891:1;4884:15;4777:132;-1:-1:-1;4923:9:1;;4721:217::o;4943:135::-;4982:3;5003:17;;;5000:43;;5023:18;;:::i;:::-;-1:-1:-1;5070:1:1;5059:13;;4943:135::o;8685:127::-;8746:10;8741:3;8737:20;8734:1;8727:31;8777:4;8774:1;8767:15;8801:4;8798:1;8791:15;10845:127;10906:10;10901:3;10897:20;10894:1;10887:31;10937:4;10934:1;10927:15;10961:4;10958:1;10951:15
Swarm Source
ipfs://bdf0ca3fbf03a0db8659018da9ac16932d7a4709b8c2175c82391a5b5980fb03
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.