Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
NABC
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-06-22
*/
// SPDX-License-Identifier: None
pragma solidity 0.8.19;
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
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);
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev 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);
}
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
contract NABC is IERC20, Ownable, ReentrancyGuard {
string private _name = "Noahs Ark BC";
string private _symbol = "NOAH";
uint8 private _decimals = 18;
uint256 private _totalSupply = 2_222_222_222 * 10 ** 18;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => uint256) private _balances;
mapping(address => bool) private _isExcludedFromFee;
uint256 public buyTax = 0;
uint256 public sellTax = 2;
address payable private _marketingAddress = payable(0x40495CAb984c2533CC908C311C6387df7B6c23C5);
IUniswapV2Router02 public uniswapRouter;
mapping(address => bool) public pairs;
bool private _inSwap;
bool public swapEnabled = true;
// The basis points of the current supply before swapping
uint256 private _currentSupplyBpsBeforeSwap = 100;
event BuyTaxUpdated(uint256 tax);
event MarketingAddressUpdated(address marketingAddress);
event SellTaxUpdated(uint256 tax);
event SwapEnabledUpdated(bool enabled);
modifier lockTheSwap() {
_inSwap = true;
_;
_inSwap = false;
}
constructor() {
IUniswapV2Router02 newRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
// Create a uniswap pair for the new token
address newPair = IUniswapV2Factory(newRouter.factory()).createPair(
address(this),
newRouter.WETH()
);
pairs[newPair] = true;
uniswapRouter = newRouter;
// exclude owner and this contract from fees
_isExcludedFromFee[msg.sender] = true;
_isExcludedFromFee[address(this)] = true;
_balances[msg.sender] = _totalSupply;
emit Transfer(address(0), msg.sender, _totalSupply);
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual 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 {_setupDecimals} is
* called.
*
* 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 returns (uint8) {
return _decimals;
}
/**
* @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 Gets a rough estimate of the current supply by checking tokens that have been sent to
* inaccessible addresses
*/
function currentSupply() public view returns (uint256) {
uint256 deadSupply = balanceOf(0x000000000000000000000000000000000000dEaD);
uint256 zeroSupply = balanceOf(0x0000000000000000000000000000000000000000);
return _totalSupply - deadSupply - zeroSupply;
}
/**
* @dev Gets the amount of tokens before a swap to ETH is performed
*/
function getNumTokensBeforeSwap() public view returns (uint256) {
return (currentSupply() * _currentSupplyBpsBeforeSwap) / 10_000;
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, 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}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), 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}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(
sender, _msgSender(), _allowances[sender][_msgSender()] - 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) {
_approve(
_msgSender(), spender, _allowances[_msgSender()][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) {
_approve(
_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue
);
return true;
}
function includeInFee(address account) public onlyOwner {
_isExcludedFromFee[account] = false;
}
function excludeFromFee(address account) public onlyOwner {
_isExcludedFromFee[account] = true;
}
function isExcludedFromFee(address account) public view returns (bool) {
return _isExcludedFromFee[account];
}
/**
* @dev Sets the basis points of the current supply before tokens are swapped
*/
function setCurrentSupplyBpsBeforeSwap(uint256 newCurrentSupplyBpsBeforeSwap) external onlyOwner {
require(newCurrentSupplyBpsBeforeSwap >= 10, "Cannot set num tokens per mille to lower than 0.1%");
require(newCurrentSupplyBpsBeforeSwap <= 300, "Cannot set num tokens per mille to higher than 3%");
_currentSupplyBpsBeforeSwap = newCurrentSupplyBpsBeforeSwap;
}
/**
* @dev Sets address where all marketing funds are sent
*/
function setMarketingAddress(address payable newMarketingAddress) external onlyOwner {
if (newMarketingAddress == address(0)) {
require(buyTax == 0 && sellTax == 0, "Buy/Sell tax must be zero if using zero address");
}
_marketingAddress = newMarketingAddress;
emit MarketingAddressUpdated(newMarketingAddress);
}
/**
* @dev Restores the buy tax to the original value
*/
function restoreBuyTax() external onlyOwner {
require(_marketingAddress != address(0));
buyTax = 2;
emit BuyTaxUpdated(2);
}
/**
* @dev Removes the buy tax
*/
function removeBuyTax() external onlyOwner {
buyTax = 0;
emit BuyTaxUpdated(0);
}
/**
* @dev Restores the sell tax to the original value
*/
function restoreSellTax() external onlyOwner {
require(_marketingAddress != address(0));
sellTax = 2;
emit SellTaxUpdated(2);
}
/**
* @dev Removes the sell tax
*/
function removeSellTax() external onlyOwner {
sellTax = 0;
emit SellTaxUpdated(0);
}
/**
* @dev Allows updating the UniswapRouter in cases where liquidity is moved
*/
function updateUniswapRouter(address newRouterAddress) external onlyOwner {
IUniswapV2Router02 newRouter = IUniswapV2Router02(newRouterAddress);
IUniswapV2Factory newFactory = IUniswapV2Factory(newRouter.factory());
// Create a uniswap pair for the new token
address newPair = newFactory.getPair(
address(this),
newRouter.WETH()
);
if (newPair == address(0)) {
newPair = newFactory.createPair(
address(this),
newRouter.WETH()
);
}
uniswapRouter = newRouter;
pairs[newPair] = true;
}
/**
* @dev Add new pairs to determine if a buy or sell occurred
*/
function addPair(address newPair) external onlyOwner {
require(IUniswapV2Pair(newPair).token0() == address(this) || IUniswapV2Pair(newPair).token1() == address(this));
pairs[newPair] = true;
}
/**
* @dev Remove pair if added incorrectly or pair is now not valid
*/
function removePair(address pair) external onlyOwner {
pairs[pair] = false;
}
/**
* @dev Allows turning off the swapping additional tokens to marketing funds
*/
function setSwapEnabled(bool _enabled) public onlyOwner {
swapEnabled = _enabled;
emit SwapEnabledUpdated(_enabled);
}
/**
* @dev Withdraws any excess ETH that is stored on the contract through swapping
*/
function withdrawExcessETH(address payable ethReceiver, uint256 ethToWithdraw) external nonReentrant onlyOwner {
require(ethToWithdraw < address(this).balance, "Not enough ETH stored on the contract");
(bool success, ) = ethReceiver.call{value: ethToWithdraw}("");
require(success, "Unable to send to given address");
}
// allow receiving ETH from uniswapRouter after swapping
receive() external payable {}
function _swapTokensAndDistributeETH(uint256 tokensToSwap) private lockTheSwap returns (bool) {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapRouter.WETH();
_approve(address(this), address(uniswapRouter), tokensToSwap);
try uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokensToSwap,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
) {
uint256 newETH = address(this).balance;
if (newETH > 0) {
(bool success, ) = _marketingAddress.call{value: newETH}("");
return success;
}
} catch {
_balances[address(this)] -= tokensToSwap;
_balances[_marketingAddress] += tokensToSwap;
}
return true;
}
function _swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapRouter.WETH();
_approve(address(this), address(uniswapRouter), tokenAmount);
// make the swap
uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
/**
* @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);
}
function _transfer(address from, address to, uint256 amount) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
uint256 contractTokenBalance = balanceOf(address(this));
uint256 numTokensBeforeSwap = getNumTokensBeforeSwap();
bool isOverMinBalanceBeforeSwap = contractTokenBalance >= numTokensBeforeSwap;
// Only swap/send to marketing when the balance has been reached, another swap is not in progress,
// it is performed on a sell and the swap is actually enabled
if (isOverMinBalanceBeforeSwap && !_inSwap && !pairs[from] && swapEnabled) {
_swapTokensAndDistributeETH(numTokensBeforeSwap);
}
uint256 amountToTransfer = amount;
uint256 feesToTake = 0;
// if neither address is excluded from taking a fee then calculate the marketing fees
if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
// Different fees for a buy and a sell
if (pairs[from]) {
feesToTake = (amount * buyTax) / 100;
} else if (pairs[to]) {
feesToTake = (amount * sellTax) / 100;
}
amountToTransfer = amountToTransfer - feesToTake;
}
_balances[from] = _balances[from] - amount;
_balances[to] = _balances[to] + amountToTransfer;
// Add the fees to the contract token balance
_balances[address(this)] = _balances[address(this)] + feesToTake;
if (feesToTake > 0) {
emit Transfer(from, address(this), feesToTake);
}
emit Transfer(from, to, amountToTransfer);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"BuyTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingAddress","type":"address"}],"name":"MarketingAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"SellTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","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":"newPair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getNumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"removePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCurrentSupplyBpsBeforeSwap","type":"uint256"}],"name":"setCurrentSupplyBpsBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newMarketingAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"updateUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"ethReceiver","type":"address"},{"internalType":"uint256","name":"ethToWithdraw","type":"uint256"}],"name":"withdrawExcessETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526040518060400160405280600c81526020017f4e6f6168732041726b2042430000000000000000000000000000000000000000815250600290816200004a91906200083b565b506040518060400160405280600481526020017f4e4f414800000000000000000000000000000000000000000000000000000000815250600390816200009191906200083b565b506012600460006101000a81548160ff021916908360ff1602179055506b072e2ddc0ab9d7eda578000060055560006009556002600a557340495cab984c2533cc908c311c6387df7b6c23c5600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60016101000a81548160ff0219169083151502179055506064600f553480156200014a57600080fd5b506200016b6200015f620004f560201b60201c565b620004fd60201b60201c565b600180819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ff91906200098c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000267573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028d91906200098c565b6040518363ffffffff1660e01b8152600401620002ac929190620009cf565b6020604051808303816000875af1158015620002cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f291906200098c565b90506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600554600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600554604051620004e5919062000a0d565b60405180910390a3505062000a2a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200064357607f821691505b602082108103620006595762000658620005fb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000684565b620006cf868362000684565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200071c620007166200071084620006e7565b620006f1565b620006e7565b9050919050565b6000819050919050565b6200073883620006fb565b62000750620007478262000723565b84845462000691565b825550505050565b600090565b6200076762000758565b620007748184846200072d565b505050565b5b818110156200079c57620007906000826200075d565b6001810190506200077a565b5050565b601f821115620007eb57620007b5816200065f565b620007c08462000674565b81016020851015620007d0578190505b620007e8620007df8562000674565b83018262000779565b50505b505050565b600082821c905092915050565b60006200081060001984600802620007f0565b1980831691505092915050565b60006200082b8383620007fd565b9150826002028217905092915050565b6200084682620005c1565b67ffffffffffffffff811115620008625762000861620005cc565b5b6200086e82546200062a565b6200087b828285620007a0565b600060209050601f831160018114620008b357600084156200089e578287015190505b620008aa85826200081d565b8655506200091a565b601f198416620008c3866200065f565b60005b82811015620008ed57848901518255600182019150602085019450602081019050620008c6565b868310156200090d578489015162000909601f891682620007fd565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009548262000927565b9050919050565b620009668162000947565b81146200097257600080fd5b50565b60008151905062000986816200095b565b92915050565b600060208284031215620009a557620009a462000922565b5b6000620009b58482850162000975565b91505092915050565b620009c98162000947565b82525050565b6000604082019050620009e66000830185620009be565b620009f56020830184620009be565b9392505050565b62000a0781620006e7565b82525050565b600060208201905062000a246000830184620009fc565b92915050565b613d848062000a3a6000396000f3fe6080604052600436106102085760003560e01c806389c06bb011610118578063af6c9c1d116100a0578063e01af92c1161006f578063e01af92c14610750578063ea2f0b3714610779578063f2fde38b146107a2578063fe33b302146107cb578063ffe68fd7146108085761020f565b8063af6c9c1d14610696578063c2b7bbb6146106bf578063cc1776d3146106e8578063dd62ed3e146107135761020f565b806390c060eb116100e757806390c060eb146105b157806395d89b41146105c8578063a457c2d7146105f3578063a629205414610630578063a9059cbb146106595761020f565b806389c06bb01461051d5780638da5cb5b14610534578063906e9dd01461055f578063908bb2ae146105885761020f565b8063437823ec1161019b5780636ddd17131161016a5780636ddd17131461044857806370a0823114610473578063715018a6146104b0578063735de9f7146104c7578063771282f6146104f25761020f565b8063437823ec1461038e5780634f7041a5146103b75780635342acb4146103e25780636ade98341461041f5761020f565b806323b872dd116101d757806323b872dd146102be5780632b32c3ef146102fb578063313ce5671461032657806339509351146103515761020f565b806306fdde0314610214578063095ea7b31461023f5780630fdeb2921461027c57806318160ddd146102935761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961081f565b6040516102369190612d87565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190612e42565b6108b1565b6040516102739190612e9d565b60405180910390f35b34801561028857600080fd5b506102916108cf565b005b34801561029f57600080fd5b506102a861098d565b6040516102b59190612ec7565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190612ee2565b610997565b6040516102f29190612e9d565b60405180910390f35b34801561030757600080fd5b50610310610a4f565b60405161031d9190612ec7565b60405180910390f35b34801561033257600080fd5b5061033b610a78565b6040516103489190612f51565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190612e42565b610a8f565b6040516103859190612e9d565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190612f6c565b610b3b565b005b3480156103c357600080fd5b506103cc610c12565b6040516103d99190612ec7565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190612f6c565b610c18565b6040516104169190612e9d565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612fd7565b610c6e565b005b34801561045457600080fd5b5061045d610e31565b60405161046a9190612e9d565b60405180910390f35b34801561047f57600080fd5b5061049a60048036038101906104959190612f6c565b610e44565b6040516104a79190612ec7565b60405180910390f35b3480156104bc57600080fd5b506104c5610e8d565b005b3480156104d357600080fd5b506104dc610f15565b6040516104e99190613076565b60405180910390f35b3480156104fe57600080fd5b50610507610f3b565b6040516105149190612ec7565b60405180910390f35b34801561052957600080fd5b50610532610f79565b005b34801561054057600080fd5b50610549611037565b60405161055691906130a0565b60405180910390f35b34801561056b57600080fd5b50610586600480360381019061058191906130bb565b611060565b005b34801561059457600080fd5b506105af60048036038101906105aa9190612f6c565b6111df565b005b3480156105bd57600080fd5b506105c6611583565b005b3480156105d457600080fd5b506105dd61169c565b6040516105ea9190612d87565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190612e42565b61172e565b6040516106279190612e9d565b60405180910390f35b34801561063c57600080fd5b50610657600480360381019061065291906130e8565b6117da565b005b34801561066557600080fd5b50610680600480360381019061067b9190612e42565b6118e9565b60405161068d9190612e9d565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190612f6c565b611907565b005b3480156106cb57600080fd5b506106e660048036038101906106e19190612f6c565b6119de565b005b3480156106f457600080fd5b506106fd611bff565b60405161070a9190612ec7565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190613115565b611c05565b6040516107479190612ec7565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613181565b611c8c565b005b34801561078557600080fd5b506107a0600480360381019061079b9190612f6c565b611d5c565b005b3480156107ae57600080fd5b506107c960048036038101906107c49190612f6c565b611e33565b005b3480156107d757600080fd5b506107f260048036038101906107ed9190612f6c565b611f2a565b6040516107ff9190612e9d565b60405180910390f35b34801561081457600080fd5b5061081d611f4a565b005b60606002805461082e906131dd565b80601f016020809104026020016040519081016040528092919081815260200182805461085a906131dd565b80156108a75780601f1061087c576101008083540402835291602001916108a7565b820191906000526020600020905b81548152906001019060200180831161088a57829003601f168201915b5050505050905090565b60006108c56108be612063565b848461206b565b6001905092915050565b6108d7612063565b73ffffffffffffffffffffffffffffffffffffffff166108f5611037565b73ffffffffffffffffffffffffffffffffffffffff161461094b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109429061325a565b60405180910390fd5b60006009819055507f7a758dc8e99047b028278b3e2ff1416d8493a7aacee7a5dc30b6bf93270eccce600060405161098391906132b5565b60405180910390a1565b6000600554905090565b60006109a4848484612234565b610a44846109b0612063565b84600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109fa612063565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a3f91906132ff565b61206b565b600190509392505050565b6000612710600f54610a5f610f3b565b610a699190613333565b610a7391906133a4565b905090565b6000600460009054906101000a900460ff16905090565b6000610b31610a9c612063565b848460066000610aaa612063565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b2c91906133d5565b61206b565b6001905092915050565b610b43612063565b73ffffffffffffffffffffffffffffffffffffffff16610b61611037565b73ffffffffffffffffffffffffffffffffffffffff1614610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae9061325a565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60095481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600260015403610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613455565b60405180910390fd5b6002600181905550610cc3612063565b73ffffffffffffffffffffffffffffffffffffffff16610ce1611037565b73ffffffffffffffffffffffffffffffffffffffff1614610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e9061325a565b60405180910390fd5b478110610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d70906134e7565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610d9f90613538565b60006040518083038185875af1925050503d8060008114610ddc576040519150601f19603f3d011682016040523d82523d6000602084013e610de1565b606091505b5050905080610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90613599565b60405180910390fd5b50600180819055505050565b600e60019054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e95612063565b73ffffffffffffffffffffffffffffffffffffffff16610eb3611037565b73ffffffffffffffffffffffffffffffffffffffff1614610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f009061325a565b60405180910390fd5b610f136000612838565b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610f4961dead610e44565b90506000610f576000610e44565b90508082600554610f6891906132ff565b610f7291906132ff565b9250505090565b610f81612063565b73ffffffffffffffffffffffffffffffffffffffff16610f9f611037565b73ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec9061325a565b60405180910390fd5b6000600a819055507fa6255338a5f732d64ceba7f4c18182567f9d1067eb984b46d478b37d72a52d11600060405161102d91906132b5565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611068612063565b73ffffffffffffffffffffffffffffffffffffffff16611086611037565b73ffffffffffffffffffffffffffffffffffffffff16146110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d39061325a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361116457600060095414801561112457506000600a54145b611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a9061362b565b60405180910390fd5b5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0c5dca4975009b82f989b2f70aef27e88d40a772c4661bf9c76767eebdd4ec75816040516111d4919061366c565b60405180910390a150565b6111e7612063565b73ffffffffffffffffffffffffffffffffffffffff16611205611037565b73ffffffffffffffffffffffffffffffffffffffff161461125b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112529061325a565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d1919061369c565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a43905308573ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561133d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611361919061369c565b6040518363ffffffff1660e01b815260040161137e9291906136c9565b602060405180830381865afa15801561139b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bf919061369c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114e4578173ffffffffffffffffffffffffffffffffffffffff1663c9c65396308573ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561145d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611481919061369c565b6040518363ffffffff1660e01b815260040161149e9291906136c9565b6020604051808303816000875af11580156114bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e1919061369c565b90505b82600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b61158b612063565b73ffffffffffffffffffffffffffffffffffffffff166115a9611037565b73ffffffffffffffffffffffffffffffffffffffff16146115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f69061325a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361165a57600080fd5b6002600a819055507fa6255338a5f732d64ceba7f4c18182567f9d1067eb984b46d478b37d72a52d116002604051611692919061372d565b60405180910390a1565b6060600380546116ab906131dd565b80601f01602080910402602001604051908101604052809291908181526020018280546116d7906131dd565b80156117245780601f106116f957610100808354040283529160200191611724565b820191906000526020600020905b81548152906001019060200180831161170757829003601f168201915b5050505050905090565b60006117d061173b612063565b848460066000611749612063565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117cb91906132ff565b61206b565b6001905092915050565b6117e2612063565b73ffffffffffffffffffffffffffffffffffffffff16611800611037565b73ffffffffffffffffffffffffffffffffffffffff1614611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d9061325a565b60405180910390fd5b600a81101561189a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611891906137ba565b60405180910390fd5b61012c8111156118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d69061384c565b60405180910390fd5b80600f8190555050565b60006118fd6118f6612063565b8484612234565b6001905092915050565b61190f612063565b73ffffffffffffffffffffffffffffffffffffffff1661192d611037565b73ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a9061325a565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6119e6612063565b73ffffffffffffffffffffffffffffffffffffffff16611a04611037565b73ffffffffffffffffffffffffffffffffffffffff1614611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a519061325a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae0919061369c565b73ffffffffffffffffffffffffffffffffffffffff161480611b9b57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b83919061369c565b73ffffffffffffffffffffffffffffffffffffffff16145b611ba457600080fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600a5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c94612063565b73ffffffffffffffffffffffffffffffffffffffff16611cb2611037565b73ffffffffffffffffffffffffffffffffffffffff1614611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff9061325a565b60405180910390fd5b80600e60016101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1281604051611d519190612e9d565b60405180910390a150565b611d64612063565b73ffffffffffffffffffffffffffffffffffffffff16611d82611037565b73ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf9061325a565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e3b612063565b73ffffffffffffffffffffffffffffffffffffffff16611e59611037565b73ffffffffffffffffffffffffffffffffffffffff1614611eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea69061325a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f15906138de565b60405180910390fd5b611f2781612838565b50565b600d6020528060005260406000206000915054906101000a900460ff1681565b611f52612063565b73ffffffffffffffffffffffffffffffffffffffff16611f70611037565b73ffffffffffffffffffffffffffffffffffffffff1614611fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbd9061325a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361202157600080fd5b60026009819055507f7a758dc8e99047b028278b3e2ff1416d8493a7aacee7a5dc30b6bf93270eccce6002604051612059919061372d565b60405180910390a1565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d190613970565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214090613a02565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122279190612ec7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229a90613a94565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230990613b26565b60405180910390fd5b60008111612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c90613bb8565b60405180910390fd5b600061236030610e44565b9050600061236c610a4f565b905060008183101590508080156123905750600e60009054906101000a900460ff16155b80156123e65750600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123fe5750600e60019054906101000a900460ff165b1561240e5761240c826128fc565b505b60008490506000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124b95750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125b057600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612531576064600954876125209190613333565b61252a91906133a4565b90506125a1565b600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125a0576064600a54876125939190613333565b61259d91906133a4565b90505b5b80826125ad91906132ff565b91505b85600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125fb91906132ff565b600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461268991906133d5565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461271791906133d5565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008111156127c9573073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127c09190612ec7565b60405180910390a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128269190612ec7565b60405180910390a35050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001600e60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561293657612935613bd8565b5b6040519080825280602002602001820160405280156129645781602001602082028036833780820191505090505b509050308160008151811061297c5761297b613c07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a47919061369c565b81600181518110612a5b57612a5a613c07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ac230600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561206b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401612b26959493929190613cf4565b600060405180830381600087803b158015612b4057600080fd5b505af1925050508015612b51575060015b612c285782600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ba491906132ff565b925050819055508260076000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c1c91906133d5565b92505081905550612cd1565b60004790506000811115612ccf576000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612c7e90613538565b60006040518083038185875af1925050503d8060008114612cbb576040519150601f19603f3d011682016040523d82523d6000602084013e612cc0565b606091505b50509050809350505050612cd7565b505b60019150505b6000600e60006101000a81548160ff021916908315150217905550919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d31578082015181840152602081019050612d16565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d5982612cf7565b612d638185612d02565b9350612d73818560208601612d13565b612d7c81612d3d565b840191505092915050565b60006020820190508181036000830152612da18184612d4e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dd982612dae565b9050919050565b612de981612dce565b8114612df457600080fd5b50565b600081359050612e0681612de0565b92915050565b6000819050919050565b612e1f81612e0c565b8114612e2a57600080fd5b50565b600081359050612e3c81612e16565b92915050565b60008060408385031215612e5957612e58612da9565b5b6000612e6785828601612df7565b9250506020612e7885828601612e2d565b9150509250929050565b60008115159050919050565b612e9781612e82565b82525050565b6000602082019050612eb26000830184612e8e565b92915050565b612ec181612e0c565b82525050565b6000602082019050612edc6000830184612eb8565b92915050565b600080600060608486031215612efb57612efa612da9565b5b6000612f0986828701612df7565b9350506020612f1a86828701612df7565b9250506040612f2b86828701612e2d565b9150509250925092565b600060ff82169050919050565b612f4b81612f35565b82525050565b6000602082019050612f666000830184612f42565b92915050565b600060208284031215612f8257612f81612da9565b5b6000612f9084828501612df7565b91505092915050565b6000612fa482612dae565b9050919050565b612fb481612f99565b8114612fbf57600080fd5b50565b600081359050612fd181612fab565b92915050565b60008060408385031215612fee57612fed612da9565b5b6000612ffc85828601612fc2565b925050602061300d85828601612e2d565b9150509250929050565b6000819050919050565b600061303c61303761303284612dae565b613017565b612dae565b9050919050565b600061304e82613021565b9050919050565b600061306082613043565b9050919050565b61307081613055565b82525050565b600060208201905061308b6000830184613067565b92915050565b61309a81612dce565b82525050565b60006020820190506130b56000830184613091565b92915050565b6000602082840312156130d1576130d0612da9565b5b60006130df84828501612fc2565b91505092915050565b6000602082840312156130fe576130fd612da9565b5b600061310c84828501612e2d565b91505092915050565b6000806040838503121561312c5761312b612da9565b5b600061313a85828601612df7565b925050602061314b85828601612df7565b9150509250929050565b61315e81612e82565b811461316957600080fd5b50565b60008135905061317b81613155565b92915050565b60006020828403121561319757613196612da9565b5b60006131a58482850161316c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131f557607f821691505b602082108103613208576132076131ae565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613244602083612d02565b915061324f8261320e565b602082019050919050565b6000602082019050818103600083015261327381613237565b9050919050565b6000819050919050565b600061329f61329a6132958461327a565b613017565b612e0c565b9050919050565b6132af81613284565b82525050565b60006020820190506132ca60008301846132a6565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061330a82612e0c565b915061331583612e0c565b925082820390508181111561332d5761332c6132d0565b5b92915050565b600061333e82612e0c565b915061334983612e0c565b925082820261335781612e0c565b9150828204841483151761336e5761336d6132d0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133af82612e0c565b91506133ba83612e0c565b9250826133ca576133c9613375565b5b828204905092915050565b60006133e082612e0c565b91506133eb83612e0c565b9250828201905080821115613403576134026132d0565b5b92915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061343f601f83612d02565b915061344a82613409565b602082019050919050565b6000602082019050818103600083015261346e81613432565b9050919050565b7f4e6f7420656e6f756768204554482073746f726564206f6e2074686520636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b60006134d1602583612d02565b91506134dc82613475565b604082019050919050565b60006020820190508181036000830152613500816134c4565b9050919050565b600081905092915050565b50565b6000613522600083613507565b915061352d82613512565b600082019050919050565b600061354382613515565b9150819050919050565b7f556e61626c6520746f2073656e6420746f20676976656e206164647265737300600082015250565b6000613583601f83612d02565b915061358e8261354d565b602082019050919050565b600060208201905081810360008301526135b281613576565b9050919050565b7f4275792f53656c6c20746178206d757374206265207a65726f2069662075736960008201527f6e67207a65726f20616464726573730000000000000000000000000000000000602082015250565b6000613615602f83612d02565b9150613620826135b9565b604082019050919050565b6000602082019050818103600083015261364481613608565b9050919050565b600061365682613043565b9050919050565b6136668161364b565b82525050565b6000602082019050613681600083018461365d565b92915050565b60008151905061369681612de0565b92915050565b6000602082840312156136b2576136b1612da9565b5b60006136c084828501613687565b91505092915050565b60006040820190506136de6000830185613091565b6136eb6020830184613091565b9392505050565b6000819050919050565b600061371761371261370d846136f2565b613017565b612e0c565b9050919050565b613727816136fc565b82525050565b6000602082019050613742600083018461371e565b92915050565b7f43616e6e6f7420736574206e756d20746f6b656e7320706572206d696c6c652060008201527f746f206c6f776572207468616e20302e31250000000000000000000000000000602082015250565b60006137a4603283612d02565b91506137af82613748565b604082019050919050565b600060208201905081810360008301526137d381613797565b9050919050565b7f43616e6e6f7420736574206e756d20746f6b656e7320706572206d696c6c652060008201527f746f20686967686572207468616e203325000000000000000000000000000000602082015250565b6000613836603183612d02565b9150613841826137da565b604082019050919050565b6000602082019050818103600083015261386581613829565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006138c8602683612d02565b91506138d38261386c565b604082019050919050565b600060208201905081810360008301526138f7816138bb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061395a602483612d02565b9150613965826138fe565b604082019050919050565b600060208201905081810360008301526139898161394d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139ec602283612d02565b91506139f782613990565b604082019050919050565b60006020820190508181036000830152613a1b816139df565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613a7e602583612d02565b9150613a8982613a22565b604082019050919050565b60006020820190508181036000830152613aad81613a71565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b10602383612d02565b9150613b1b82613ab4565b604082019050919050565b60006020820190508181036000830152613b3f81613b03565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613ba2602983612d02565b9150613bad82613b46565b604082019050919050565b60006020820190508181036000830152613bd181613b95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c6b81612dce565b82525050565b6000613c7d8383613c62565b60208301905092915050565b6000602082019050919050565b6000613ca182613c36565b613cab8185613c41565b9350613cb683613c52565b8060005b83811015613ce7578151613cce8882613c71565b9750613cd983613c89565b925050600181019050613cba565b5085935050505092915050565b600060a082019050613d096000830188612eb8565b613d1660208301876132a6565b8181036040830152613d288186613c96565b9050613d376060830185613091565b613d446080830184612eb8565b969550505050505056fea264697066735822122063272fae6b4fd6118014f90b42b45a0b398f86ff4fee1dd3d0782a47b805d97664736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102085760003560e01c806389c06bb011610118578063af6c9c1d116100a0578063e01af92c1161006f578063e01af92c14610750578063ea2f0b3714610779578063f2fde38b146107a2578063fe33b302146107cb578063ffe68fd7146108085761020f565b8063af6c9c1d14610696578063c2b7bbb6146106bf578063cc1776d3146106e8578063dd62ed3e146107135761020f565b806390c060eb116100e757806390c060eb146105b157806395d89b41146105c8578063a457c2d7146105f3578063a629205414610630578063a9059cbb146106595761020f565b806389c06bb01461051d5780638da5cb5b14610534578063906e9dd01461055f578063908bb2ae146105885761020f565b8063437823ec1161019b5780636ddd17131161016a5780636ddd17131461044857806370a0823114610473578063715018a6146104b0578063735de9f7146104c7578063771282f6146104f25761020f565b8063437823ec1461038e5780634f7041a5146103b75780635342acb4146103e25780636ade98341461041f5761020f565b806323b872dd116101d757806323b872dd146102be5780632b32c3ef146102fb578063313ce5671461032657806339509351146103515761020f565b806306fdde0314610214578063095ea7b31461023f5780630fdeb2921461027c57806318160ddd146102935761020f565b3661020f57005b600080fd5b34801561022057600080fd5b5061022961081f565b6040516102369190612d87565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190612e42565b6108b1565b6040516102739190612e9d565b60405180910390f35b34801561028857600080fd5b506102916108cf565b005b34801561029f57600080fd5b506102a861098d565b6040516102b59190612ec7565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e09190612ee2565b610997565b6040516102f29190612e9d565b60405180910390f35b34801561030757600080fd5b50610310610a4f565b60405161031d9190612ec7565b60405180910390f35b34801561033257600080fd5b5061033b610a78565b6040516103489190612f51565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190612e42565b610a8f565b6040516103859190612e9d565b60405180910390f35b34801561039a57600080fd5b506103b560048036038101906103b09190612f6c565b610b3b565b005b3480156103c357600080fd5b506103cc610c12565b6040516103d99190612ec7565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190612f6c565b610c18565b6040516104169190612e9d565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612fd7565b610c6e565b005b34801561045457600080fd5b5061045d610e31565b60405161046a9190612e9d565b60405180910390f35b34801561047f57600080fd5b5061049a60048036038101906104959190612f6c565b610e44565b6040516104a79190612ec7565b60405180910390f35b3480156104bc57600080fd5b506104c5610e8d565b005b3480156104d357600080fd5b506104dc610f15565b6040516104e99190613076565b60405180910390f35b3480156104fe57600080fd5b50610507610f3b565b6040516105149190612ec7565b60405180910390f35b34801561052957600080fd5b50610532610f79565b005b34801561054057600080fd5b50610549611037565b60405161055691906130a0565b60405180910390f35b34801561056b57600080fd5b50610586600480360381019061058191906130bb565b611060565b005b34801561059457600080fd5b506105af60048036038101906105aa9190612f6c565b6111df565b005b3480156105bd57600080fd5b506105c6611583565b005b3480156105d457600080fd5b506105dd61169c565b6040516105ea9190612d87565b60405180910390f35b3480156105ff57600080fd5b5061061a60048036038101906106159190612e42565b61172e565b6040516106279190612e9d565b60405180910390f35b34801561063c57600080fd5b50610657600480360381019061065291906130e8565b6117da565b005b34801561066557600080fd5b50610680600480360381019061067b9190612e42565b6118e9565b60405161068d9190612e9d565b60405180910390f35b3480156106a257600080fd5b506106bd60048036038101906106b89190612f6c565b611907565b005b3480156106cb57600080fd5b506106e660048036038101906106e19190612f6c565b6119de565b005b3480156106f457600080fd5b506106fd611bff565b60405161070a9190612ec7565b60405180910390f35b34801561071f57600080fd5b5061073a60048036038101906107359190613115565b611c05565b6040516107479190612ec7565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613181565b611c8c565b005b34801561078557600080fd5b506107a0600480360381019061079b9190612f6c565b611d5c565b005b3480156107ae57600080fd5b506107c960048036038101906107c49190612f6c565b611e33565b005b3480156107d757600080fd5b506107f260048036038101906107ed9190612f6c565b611f2a565b6040516107ff9190612e9d565b60405180910390f35b34801561081457600080fd5b5061081d611f4a565b005b60606002805461082e906131dd565b80601f016020809104026020016040519081016040528092919081815260200182805461085a906131dd565b80156108a75780601f1061087c576101008083540402835291602001916108a7565b820191906000526020600020905b81548152906001019060200180831161088a57829003601f168201915b5050505050905090565b60006108c56108be612063565b848461206b565b6001905092915050565b6108d7612063565b73ffffffffffffffffffffffffffffffffffffffff166108f5611037565b73ffffffffffffffffffffffffffffffffffffffff161461094b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109429061325a565b60405180910390fd5b60006009819055507f7a758dc8e99047b028278b3e2ff1416d8493a7aacee7a5dc30b6bf93270eccce600060405161098391906132b5565b60405180910390a1565b6000600554905090565b60006109a4848484612234565b610a44846109b0612063565b84600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109fa612063565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610a3f91906132ff565b61206b565b600190509392505050565b6000612710600f54610a5f610f3b565b610a699190613333565b610a7391906133a4565b905090565b6000600460009054906101000a900460ff16905090565b6000610b31610a9c612063565b848460066000610aaa612063565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b2c91906133d5565b61206b565b6001905092915050565b610b43612063565b73ffffffffffffffffffffffffffffffffffffffff16610b61611037565b73ffffffffffffffffffffffffffffffffffffffff1614610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae9061325a565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60095481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600260015403610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613455565b60405180910390fd5b6002600181905550610cc3612063565b73ffffffffffffffffffffffffffffffffffffffff16610ce1611037565b73ffffffffffffffffffffffffffffffffffffffff1614610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e9061325a565b60405180910390fd5b478110610d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d70906134e7565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610d9f90613538565b60006040518083038185875af1925050503d8060008114610ddc576040519150601f19603f3d011682016040523d82523d6000602084013e610de1565b606091505b5050905080610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90613599565b60405180910390fd5b50600180819055505050565b600e60019054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e95612063565b73ffffffffffffffffffffffffffffffffffffffff16610eb3611037565b73ffffffffffffffffffffffffffffffffffffffff1614610f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f009061325a565b60405180910390fd5b610f136000612838565b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610f4961dead610e44565b90506000610f576000610e44565b90508082600554610f6891906132ff565b610f7291906132ff565b9250505090565b610f81612063565b73ffffffffffffffffffffffffffffffffffffffff16610f9f611037565b73ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec9061325a565b60405180910390fd5b6000600a819055507fa6255338a5f732d64ceba7f4c18182567f9d1067eb984b46d478b37d72a52d11600060405161102d91906132b5565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611068612063565b73ffffffffffffffffffffffffffffffffffffffff16611086611037565b73ffffffffffffffffffffffffffffffffffffffff16146110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d39061325a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361116457600060095414801561112457506000600a54145b611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a9061362b565b60405180910390fd5b5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f0c5dca4975009b82f989b2f70aef27e88d40a772c4661bf9c76767eebdd4ec75816040516111d4919061366c565b60405180910390a150565b6111e7612063565b73ffffffffffffffffffffffffffffffffffffffff16611205611037565b73ffffffffffffffffffffffffffffffffffffffff161461125b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112529061325a565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d1919061369c565b905060008173ffffffffffffffffffffffffffffffffffffffff1663e6a43905308573ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561133d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611361919061369c565b6040518363ffffffff1660e01b815260040161137e9291906136c9565b602060405180830381865afa15801561139b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bf919061369c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114e4578173ffffffffffffffffffffffffffffffffffffffff1663c9c65396308573ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561145d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611481919061369c565b6040518363ffffffff1660e01b815260040161149e9291906136c9565b6020604051808303816000875af11580156114bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e1919061369c565b90505b82600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505050565b61158b612063565b73ffffffffffffffffffffffffffffffffffffffff166115a9611037565b73ffffffffffffffffffffffffffffffffffffffff16146115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f69061325a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361165a57600080fd5b6002600a819055507fa6255338a5f732d64ceba7f4c18182567f9d1067eb984b46d478b37d72a52d116002604051611692919061372d565b60405180910390a1565b6060600380546116ab906131dd565b80601f01602080910402602001604051908101604052809291908181526020018280546116d7906131dd565b80156117245780601f106116f957610100808354040283529160200191611724565b820191906000526020600020905b81548152906001019060200180831161170757829003601f168201915b5050505050905090565b60006117d061173b612063565b848460066000611749612063565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117cb91906132ff565b61206b565b6001905092915050565b6117e2612063565b73ffffffffffffffffffffffffffffffffffffffff16611800611037565b73ffffffffffffffffffffffffffffffffffffffff1614611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d9061325a565b60405180910390fd5b600a81101561189a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611891906137ba565b60405180910390fd5b61012c8111156118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d69061384c565b60405180910390fd5b80600f8190555050565b60006118fd6118f6612063565b8484612234565b6001905092915050565b61190f612063565b73ffffffffffffffffffffffffffffffffffffffff1661192d611037565b73ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a9061325a565b60405180910390fd5b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6119e6612063565b73ffffffffffffffffffffffffffffffffffffffff16611a04611037565b73ffffffffffffffffffffffffffffffffffffffff1614611a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a519061325a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae0919061369c565b73ffffffffffffffffffffffffffffffffffffffff161480611b9b57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b83919061369c565b73ffffffffffffffffffffffffffffffffffffffff16145b611ba457600080fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600a5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c94612063565b73ffffffffffffffffffffffffffffffffffffffff16611cb2611037565b73ffffffffffffffffffffffffffffffffffffffff1614611d08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cff9061325a565b60405180910390fd5b80600e60016101000a81548160ff0219169083151502179055507f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1281604051611d519190612e9d565b60405180910390a150565b611d64612063565b73ffffffffffffffffffffffffffffffffffffffff16611d82611037565b73ffffffffffffffffffffffffffffffffffffffff1614611dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcf9061325a565b60405180910390fd5b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e3b612063565b73ffffffffffffffffffffffffffffffffffffffff16611e59611037565b73ffffffffffffffffffffffffffffffffffffffff1614611eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea69061325a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f15906138de565b60405180910390fd5b611f2781612838565b50565b600d6020528060005260406000206000915054906101000a900460ff1681565b611f52612063565b73ffffffffffffffffffffffffffffffffffffffff16611f70611037565b73ffffffffffffffffffffffffffffffffffffffff1614611fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbd9061325a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361202157600080fd5b60026009819055507f7a758dc8e99047b028278b3e2ff1416d8493a7aacee7a5dc30b6bf93270eccce6002604051612059919061372d565b60405180910390a1565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d190613970565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214090613a02565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122279190612ec7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229a90613a94565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230990613b26565b60405180910390fd5b60008111612355576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234c90613bb8565b60405180910390fd5b600061236030610e44565b9050600061236c610a4f565b905060008183101590508080156123905750600e60009054906101000a900460ff16155b80156123e65750600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123fe5750600e60019054906101000a900460ff165b1561240e5761240c826128fc565b505b60008490506000600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156124b95750600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125b057600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612531576064600954876125209190613333565b61252a91906133a4565b90506125a1565b600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156125a0576064600a54876125939190613333565b61259d91906133a4565b90505b5b80826125ad91906132ff565b91505b85600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125fb91906132ff565b600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461268991906133d5565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461271791906133d5565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008111156127c9573073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127c09190612ec7565b60405180910390a35b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128269190612ec7565b60405180910390a35050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001600e60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561293657612935613bd8565b5b6040519080825280602002602001820160405280156129645781602001602082028036833780820191505090505b509050308160008151811061297c5761297b613c07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a47919061369c565b81600181518110612a5b57612a5a613c07565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ac230600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561206b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b8152600401612b26959493929190613cf4565b600060405180830381600087803b158015612b4057600080fd5b505af1925050508015612b51575060015b612c285782600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ba491906132ff565b925050819055508260076000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c1c91906133d5565b92505081905550612cd1565b60004790506000811115612ccf576000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612c7e90613538565b60006040518083038185875af1925050503d8060008114612cbb576040519150601f19603f3d011682016040523d82523d6000602084013e612cc0565b606091505b50509050809350505050612cd7565b505b60019150505b6000600e60006101000a81548160ff021916908315150217905550919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d31578082015181840152602081019050612d16565b60008484015250505050565b6000601f19601f8301169050919050565b6000612d5982612cf7565b612d638185612d02565b9350612d73818560208601612d13565b612d7c81612d3d565b840191505092915050565b60006020820190508181036000830152612da18184612d4e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612dd982612dae565b9050919050565b612de981612dce565b8114612df457600080fd5b50565b600081359050612e0681612de0565b92915050565b6000819050919050565b612e1f81612e0c565b8114612e2a57600080fd5b50565b600081359050612e3c81612e16565b92915050565b60008060408385031215612e5957612e58612da9565b5b6000612e6785828601612df7565b9250506020612e7885828601612e2d565b9150509250929050565b60008115159050919050565b612e9781612e82565b82525050565b6000602082019050612eb26000830184612e8e565b92915050565b612ec181612e0c565b82525050565b6000602082019050612edc6000830184612eb8565b92915050565b600080600060608486031215612efb57612efa612da9565b5b6000612f0986828701612df7565b9350506020612f1a86828701612df7565b9250506040612f2b86828701612e2d565b9150509250925092565b600060ff82169050919050565b612f4b81612f35565b82525050565b6000602082019050612f666000830184612f42565b92915050565b600060208284031215612f8257612f81612da9565b5b6000612f9084828501612df7565b91505092915050565b6000612fa482612dae565b9050919050565b612fb481612f99565b8114612fbf57600080fd5b50565b600081359050612fd181612fab565b92915050565b60008060408385031215612fee57612fed612da9565b5b6000612ffc85828601612fc2565b925050602061300d85828601612e2d565b9150509250929050565b6000819050919050565b600061303c61303761303284612dae565b613017565b612dae565b9050919050565b600061304e82613021565b9050919050565b600061306082613043565b9050919050565b61307081613055565b82525050565b600060208201905061308b6000830184613067565b92915050565b61309a81612dce565b82525050565b60006020820190506130b56000830184613091565b92915050565b6000602082840312156130d1576130d0612da9565b5b60006130df84828501612fc2565b91505092915050565b6000602082840312156130fe576130fd612da9565b5b600061310c84828501612e2d565b91505092915050565b6000806040838503121561312c5761312b612da9565b5b600061313a85828601612df7565b925050602061314b85828601612df7565b9150509250929050565b61315e81612e82565b811461316957600080fd5b50565b60008135905061317b81613155565b92915050565b60006020828403121561319757613196612da9565b5b60006131a58482850161316c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131f557607f821691505b602082108103613208576132076131ae565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613244602083612d02565b915061324f8261320e565b602082019050919050565b6000602082019050818103600083015261327381613237565b9050919050565b6000819050919050565b600061329f61329a6132958461327a565b613017565b612e0c565b9050919050565b6132af81613284565b82525050565b60006020820190506132ca60008301846132a6565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061330a82612e0c565b915061331583612e0c565b925082820390508181111561332d5761332c6132d0565b5b92915050565b600061333e82612e0c565b915061334983612e0c565b925082820261335781612e0c565b9150828204841483151761336e5761336d6132d0565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006133af82612e0c565b91506133ba83612e0c565b9250826133ca576133c9613375565b5b828204905092915050565b60006133e082612e0c565b91506133eb83612e0c565b9250828201905080821115613403576134026132d0565b5b92915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061343f601f83612d02565b915061344a82613409565b602082019050919050565b6000602082019050818103600083015261346e81613432565b9050919050565b7f4e6f7420656e6f756768204554482073746f726564206f6e2074686520636f6e60008201527f7472616374000000000000000000000000000000000000000000000000000000602082015250565b60006134d1602583612d02565b91506134dc82613475565b604082019050919050565b60006020820190508181036000830152613500816134c4565b9050919050565b600081905092915050565b50565b6000613522600083613507565b915061352d82613512565b600082019050919050565b600061354382613515565b9150819050919050565b7f556e61626c6520746f2073656e6420746f20676976656e206164647265737300600082015250565b6000613583601f83612d02565b915061358e8261354d565b602082019050919050565b600060208201905081810360008301526135b281613576565b9050919050565b7f4275792f53656c6c20746178206d757374206265207a65726f2069662075736960008201527f6e67207a65726f20616464726573730000000000000000000000000000000000602082015250565b6000613615602f83612d02565b9150613620826135b9565b604082019050919050565b6000602082019050818103600083015261364481613608565b9050919050565b600061365682613043565b9050919050565b6136668161364b565b82525050565b6000602082019050613681600083018461365d565b92915050565b60008151905061369681612de0565b92915050565b6000602082840312156136b2576136b1612da9565b5b60006136c084828501613687565b91505092915050565b60006040820190506136de6000830185613091565b6136eb6020830184613091565b9392505050565b6000819050919050565b600061371761371261370d846136f2565b613017565b612e0c565b9050919050565b613727816136fc565b82525050565b6000602082019050613742600083018461371e565b92915050565b7f43616e6e6f7420736574206e756d20746f6b656e7320706572206d696c6c652060008201527f746f206c6f776572207468616e20302e31250000000000000000000000000000602082015250565b60006137a4603283612d02565b91506137af82613748565b604082019050919050565b600060208201905081810360008301526137d381613797565b9050919050565b7f43616e6e6f7420736574206e756d20746f6b656e7320706572206d696c6c652060008201527f746f20686967686572207468616e203325000000000000000000000000000000602082015250565b6000613836603183612d02565b9150613841826137da565b604082019050919050565b6000602082019050818103600083015261386581613829565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006138c8602683612d02565b91506138d38261386c565b604082019050919050565b600060208201905081810360008301526138f7816138bb565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061395a602483612d02565b9150613965826138fe565b604082019050919050565b600060208201905081810360008301526139898161394d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139ec602283612d02565b91506139f782613990565b604082019050919050565b60006020820190508181036000830152613a1b816139df565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613a7e602583612d02565b9150613a8982613a22565b604082019050919050565b60006020820190508181036000830152613aad81613a71565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b10602383612d02565b9150613b1b82613ab4565b604082019050919050565b60006020820190508181036000830152613b3f81613b03565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613ba2602983612d02565b9150613bad82613b46565b604082019050919050565b60006020820190508181036000830152613bd181613b95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c6b81612dce565b82525050565b6000613c7d8383613c62565b60208301905092915050565b6000602082019050919050565b6000613ca182613c36565b613cab8185613c41565b9350613cb683613c52565b8060005b83811015613ce7578151613cce8882613c71565b9750613cd983613c89565b925050600181019050613cba565b5085935050505092915050565b600060a082019050613d096000830188612eb8565b613d1660208301876132a6565b8181036040830152613d288186613c96565b9050613d376060830185613091565b613d446080830184612eb8565b969550505050505056fea264697066735822122063272fae6b4fd6118014f90b42b45a0b398f86ff4fee1dd3d0782a47b805d97664736f6c63430008130033
Deployed Bytecode Sourcemap
16919:15485:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18813:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21655:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25627:104;;;;;;;;;;;;;:::i;:::-;;19912:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22306:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20756:146;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19756:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23013:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24130:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17343:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24249:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27788:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17631:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20083:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2603:103;;;;;;;;;;;;;:::i;:::-;;17512:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20366:291;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26033:107;;;;;;;;;;;;;:::i;:::-;;1952:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24962:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26247:685;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25814:159;;;;;;;;;;;;;:::i;:::-;;19023:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23755:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24482:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21119:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27336:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27024:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17375:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21357:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27535:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24012:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2861:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17558:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25412:156;;;;;;;;;;;;;:::i;:::-;;18813:91;18858:13;18891:5;18884:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18813:91;:::o;21655:169::-;21738:4;21755:39;21764:12;:10;:12::i;:::-;21778:7;21787:6;21755:8;:39::i;:::-;21812:4;21805:11;;21655:169;;;;:::o;25627:104::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25690:1:::1;25681:6;:10;;;;25707:16;25721:1;25707:16;;;;;;:::i;:::-;;;;;;;;25627:104::o:0;19912:108::-;19973:7;20000:12;;19993:19;;19912:108;:::o;22306:298::-;22412:4;22429:36;22439:6;22447:9;22458:6;22429:9;:36::i;:::-;22476:98;22499:6;22507:12;:10;:12::i;:::-;22557:6;22521:11;:19;22533:6;22521:19;;;;;;;;;;;;;;;:33;22541:12;:10;:12::i;:::-;22521:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;22476:8;:98::i;:::-;22592:4;22585:11;;22306:298;;;;;:::o;20756:146::-;20811:7;20888:6;20857:27;;20839:15;:13;:15::i;:::-;:45;;;;:::i;:::-;20838:56;;;;:::i;:::-;20831:63;;20756:146;:::o;19756:91::-;19805:5;19830:9;;;;;;;;;;;19823:16;;19756:91;:::o;23013:239::-;23101:4;23118:104;23141:12;:10;:12::i;:::-;23155:7;23201:10;23164:11;:25;23176:12;:10;:12::i;:::-;23164:25;;;;;;;;;;;;;;;:34;23190:7;23164:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;23118:8;:104::i;:::-;23240:4;23233:11;;23013:239;;;;:::o;24130:111::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24229:4:::1;24199:18;:27;24218:7;24199:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;24130:111:::0;:::o;17343:25::-;;;;:::o;24249:124::-;24314:4;24338:18;:27;24357:7;24338:27;;;;;;;;;;;;;;;;;;;;;;;;;24331:34;;24249:124;;;:::o;27788:353::-;8049:1;8647:7;;:19;8639:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;8049:1;8780:7;:18;;;;2183:12:::1;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27934:21:::2;27918:13;:37;27910:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;28011:12;28029:11;:16;;28053:13;28029:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28010:61;;;28090:7;28082:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;27899:242;8005:1:::0;8959:7;:22;;;;27788:353;;:::o;17631:30::-;;;;;;;;;;;;;:::o;20083:127::-;20157:7;20184:9;:18;20194:7;20184:18;;;;;;;;;;;;;;;;20177:25;;20083:127;;;:::o;2603:103::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2668:30:::1;2695:1;2668:18;:30::i;:::-;2603:103::o:0;17512:39::-;;;;;;;;;;;;;:::o;20366:291::-;20412:7;20432:18;20453:53;20463:42;20453:9;:53::i;:::-;20432:74;;20517:18;20538:53;20548:42;20538:9;:53::i;:::-;20517:74;;20639:10;20626;20611:12;;:25;;;;:::i;:::-;:38;;;;:::i;:::-;20604:45;;;;20366:291;:::o;26033:107::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26098:1:::1;26088:7;:11;;;;26115:17;26130:1;26115:17;;;;;;:::i;:::-;;;;;;;;26033:107::o:0;1952:87::-;1998:7;2025:6;;;;;;;;;;;2018:13;;1952:87;:::o;24962:368::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25093:1:::1;25062:33;;:19;:33;;::::0;25058:153:::1;;25130:1;25120:6;;:11;:27;;;;;25146:1;25135:7;;:12;25120:27;25112:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;25058:153;25243:19;25223:17;;:39;;;;;;;;;;;;;;;;;;25278:44;25302:19;25278:44;;;;;;:::i;:::-;;;;;;;;24962:368:::0;:::o;26247:685::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26332:28:::1;26382:16;26332:67;;26420:28;26469:9;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26420:69;;26553:15;26571:10;:18;;;26612:4;26632:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26571:88;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26553:106;;26703:1;26684:21;;:7;:21;;::::0;26680:167:::1;;26732:10;:21;;;26780:4;26804:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26732:103;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26722:113;;26680:167;26883:9;26867:13;;:25;;;;;;;;;;;;;;;;;;26920:4;26903:5;:14;26909:7;26903:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26321:611;;;26247:685:::0;:::o;25814:159::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25907:1:::1;25878:31;;:17;;;;;;;;;;;:31;;::::0;25870:40:::1;;;::::0;::::1;;25931:1;25921:7;:11;;;;25948:17;25963:1;25948:17;;;;;;:::i;:::-;;;;;;;;25814:159::o:0;19023:95::-;19070:13;19103:7;19096:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19023:95;:::o;23755:249::-;23848:4;23865:109;23888:12;:10;:12::i;:::-;23902:7;23948:15;23911:11;:25;23923:12;:10;:12::i;:::-;23911:25;;;;;;;;;;;;;;;:34;23937:7;23911:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;23865:8;:109::i;:::-;23992:4;23985:11;;23755:249;;;;:::o;24482:393::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24631:2:::1;24598:29;:35;;24590:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;24740:3;24707:29;:36;;24699:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;24838:29;24808:27;:59;;;;24482:393:::0;:::o;21119:175::-;21205:4;21222:42;21232:12;:10;:12::i;:::-;21246:9;21257:6;21222:9;:42::i;:::-;21282:4;21275:11;;21119:175;;;;:::o;27336:91::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27414:5:::1;27400;:11;27406:4;27400:11;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;27336:91:::0;:::o;27024:215::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27140:4:::1;27096:49;;27111:7;27096:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;:102;;;;27193:4;27149:49;;27164:7;27149:30;;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;27096:102;27088:111;;;::::0;::::1;;27227:4;27210:5;:14;27216:7;27210:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27024:215:::0;:::o;17375:26::-;;;;:::o;21357:151::-;21446:7;21473:11;:18;21485:5;21473:18;;;;;;;;;;;;;;;:27;21492:7;21473:27;;;;;;;;;;;;;;;;21466:34;;21357:151;;;;:::o;27535:141::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27616:8:::1;27602:11;;:22;;;;;;;;;;;;;;;;;;27640:28;27659:8;27640:28;;;;;;:::i;:::-;;;;;;;;27535:141:::0;:::o;24012:110::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24109:5:::1;24079:18;:27;24098:7;24079:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;24012:110:::0;:::o;2861:201::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2970:1:::1;2950:22;;:8;:22;;::::0;2942:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3026:28;3045:8;3026:18;:28::i;:::-;2861:201:::0;:::o;17558:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;25412:156::-;2183:12;:10;:12::i;:::-;2172:23;;:7;:5;:7::i;:::-;:23;;;2164:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25504:1:::1;25475:31;;:17;;;;;;;;;;;:31;;::::0;25467:40:::1;;;::::0;::::1;;25527:1;25518:6;:10;;;;25544:16;25558:1;25544:16;;;;;;:::i;:::-;;;;;;;;25412:156::o:0;709:98::-;762:7;789:10;782:17;;709:98;:::o;30202:346::-;30321:1;30304:19;;:5;:19;;;30296:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30402:1;30383:21;;:7;:21;;;30375:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30486:6;30456:11;:18;30468:5;30456:18;;;;;;;;;;;;;;;:27;30475:7;30456:27;;;;;;;;;;;;;;;:36;;;;30524:7;30508:32;;30517:5;30508:32;;;30533:6;30508:32;;;;;;:::i;:::-;;;;;;;;30202:346;;;:::o;30556:1845::-;30660:1;30644:18;;:4;:18;;;30636:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30737:1;30723:16;;:2;:16;;;30715:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30807:1;30798:6;:10;30790:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30867:28;30898:24;30916:4;30898:9;:24::i;:::-;30867:55;;30935:27;30965:24;:22;:24::i;:::-;30935:54;;31002:31;31060:19;31036:20;:43;;31002:77;;31275:26;:38;;;;;31306:7;;;;;;;;;;;31305:8;31275:38;:54;;;;;31318:5;:11;31324:4;31318:11;;;;;;;;;;;;;;;;;;;;;;;;;31317:12;31275:54;:69;;;;;31333:11;;;;;;;;;;;31275:69;31271:150;;;31361:48;31389:19;31361:27;:48::i;:::-;;31271:150;31433:24;31460:6;31433:33;;31477:18;31612;:24;31631:4;31612:24;;;;;;;;;;;;;;;;;;;;;;;;;31611:25;:52;;;;;31641:18;:22;31660:2;31641:22;;;;;;;;;;;;;;;;;;;;;;;;;31640:23;31611:52;31607:382;;;31736:5;:11;31742:4;31736:11;;;;;;;;;;;;;;;;;;;;;;;;;31732:181;;;31801:3;31791:6;;31782;:15;;;;:::i;:::-;31781:23;;;;:::i;:::-;31768:36;;31732:181;;;31830:5;:9;31836:2;31830:9;;;;;;;;;;;;;;;;;;;;;;;;;31826:87;;;31894:3;31883:7;;31874:6;:16;;;;:::i;:::-;31873:24;;;;:::i;:::-;31860:37;;31826:87;31732:181;31967:10;31948:16;:29;;;;:::i;:::-;31929:48;;31607:382;32037:6;32019:9;:15;32029:4;32019:15;;;;;;;;;;;;;;;;:24;;;;:::i;:::-;32001:9;:15;32011:4;32001:15;;;;;;;;;;;;;;;:42;;;;32086:16;32070:9;:13;32080:2;32070:13;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;32054:9;:13;32064:2;32054:13;;;;;;;;;;;;;;;:48;;;;32224:10;32197:9;:24;32215:4;32197:24;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;32170:9;:24;32188:4;32170:24;;;;;;;;;;;;;;;:64;;;;32264:1;32251:10;:14;32247:93;;;32310:4;32287:41;;32296:4;32287:41;;;32317:10;32287:41;;;;;;:::i;:::-;;;;;;;;32247:93;32372:2;32357:36;;32366:4;32357:36;;;32376:16;32357:36;;;;;;:::i;:::-;;;;;;;;30625:1776;;;;;30556:1845;;;:::o;3222:191::-;3296:16;3315:6;;;;;;;;;;;3296:25;;3341:8;3332:6;;:17;;;;;;;;;;;;;;;;;;3396:8;3365:40;;3386:8;3365:40;;;;;;;;;;;;3285:128;3222:191;:::o;28248:924::-;28336:4;18023;18013:7;;:14;;;;;;;;;;;;;;;;;;28353:21:::1;28391:1;28377:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28353:40;;28422:4;28404;28409:1;28404:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;28448:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28438:4;28443:1;28438:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;::::0;::::1;28481:61;28498:4;28513:13;;;;;;;;;;;28529:12;28481:8;:61::i;:::-;28559:13;;;;;;;;;;;:64;;;28638:12;28665:1;28709:4;28736;28756:15;28559:223;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;28555:586;;29058:12;29030:9;:24;29048:4;29030:24;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;29117:12;29085:9;:28;29095:17;;;;;;;;;;;29085:28;;;;;;;;;;;;;;;;:44;;;;;;;:::i;:::-;;;;;;;;28555:586;;;28798:14;28815:21;28798:38;;28866:1;28857:6;:10;28853:144;;;28889:12;28907:17;;;;;;;;;;;:22;;28937:6;28907:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28888:60;;;28974:7;28967:14;;;;;;;28853:144;28783:225;28555:586;29160:4;29153:11;;;18038:1;18060:5:::0;18050:7;;:15;;;;;;;;;;;;;;;;;;28248:924;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:104::-;5233:7;5262:24;5280:5;5262:24;:::i;:::-;5251:35;;5188:104;;;:::o;5298:138::-;5379:32;5405:5;5379:32;:::i;:::-;5372:5;5369:43;5359:71;;5426:1;5423;5416:12;5359:71;5298:138;:::o;5442:155::-;5496:5;5534:6;5521:20;5512:29;;5550:41;5585:5;5550:41;:::i;:::-;5442:155;;;;:::o;5603:490::-;5679:6;5687;5736:2;5724:9;5715:7;5711:23;5707:32;5704:119;;;5742:79;;:::i;:::-;5704:119;5862:1;5887:61;5940:7;5931:6;5920:9;5916:22;5887:61;:::i;:::-;5877:71;;5833:125;5997:2;6023:53;6068:7;6059:6;6048:9;6044:22;6023:53;:::i;:::-;6013:63;;5968:118;5603:490;;;;;:::o;6099:60::-;6127:3;6148:5;6141:12;;6099:60;;;:::o;6165:142::-;6215:9;6248:53;6266:34;6275:24;6293:5;6275:24;:::i;:::-;6266:34;:::i;:::-;6248:53;:::i;:::-;6235:66;;6165:142;;;:::o;6313:126::-;6363:9;6396:37;6427:5;6396:37;:::i;:::-;6383:50;;6313:126;;;:::o;6445:152::-;6521:9;6554:37;6585:5;6554:37;:::i;:::-;6541:50;;6445:152;;;:::o;6603:183::-;6716:63;6773:5;6716:63;:::i;:::-;6711:3;6704:76;6603:183;;:::o;6792:274::-;6911:4;6949:2;6938:9;6934:18;6926:26;;6962:97;7056:1;7045:9;7041:17;7032:6;6962:97;:::i;:::-;6792:274;;;;:::o;7072:118::-;7159:24;7177:5;7159:24;:::i;:::-;7154:3;7147:37;7072:118;;:::o;7196:222::-;7289:4;7327:2;7316:9;7312:18;7304:26;;7340:71;7408:1;7397:9;7393:17;7384:6;7340:71;:::i;:::-;7196:222;;;;:::o;7424:345::-;7491:6;7540:2;7528:9;7519:7;7515:23;7511:32;7508:119;;;7546:79;;:::i;:::-;7508:119;7666:1;7691:61;7744:7;7735:6;7724:9;7720:22;7691:61;:::i;:::-;7681:71;;7637:125;7424:345;;;;:::o;7775:329::-;7834:6;7883:2;7871:9;7862:7;7858:23;7854:32;7851:119;;;7889:79;;:::i;:::-;7851:119;8009:1;8034:53;8079:7;8070:6;8059:9;8055:22;8034:53;:::i;:::-;8024:63;;7980:117;7775:329;;;;:::o;8110:474::-;8178:6;8186;8235:2;8223:9;8214:7;8210:23;8206:32;8203:119;;;8241:79;;:::i;:::-;8203:119;8361:1;8386:53;8431:7;8422:6;8411:9;8407:22;8386:53;:::i;:::-;8376:63;;8332:117;8488:2;8514:53;8559:7;8550:6;8539:9;8535:22;8514:53;:::i;:::-;8504:63;;8459:118;8110:474;;;;;:::o;8590:116::-;8660:21;8675:5;8660:21;:::i;:::-;8653:5;8650:32;8640:60;;8696:1;8693;8686:12;8640:60;8590:116;:::o;8712:133::-;8755:5;8793:6;8780:20;8771:29;;8809:30;8833:5;8809:30;:::i;:::-;8712:133;;;;:::o;8851:323::-;8907:6;8956:2;8944:9;8935:7;8931:23;8927:32;8924:119;;;8962:79;;:::i;:::-;8924:119;9082:1;9107:50;9149:7;9140:6;9129:9;9125:22;9107:50;:::i;:::-;9097:60;;9053:114;8851:323;;;;:::o;9180:180::-;9228:77;9225:1;9218:88;9325:4;9322:1;9315:15;9349:4;9346:1;9339:15;9366:320;9410:6;9447:1;9441:4;9437:12;9427:22;;9494:1;9488:4;9484:12;9515:18;9505:81;;9571:4;9563:6;9559:17;9549:27;;9505:81;9633:2;9625:6;9622:14;9602:18;9599:38;9596:84;;9652:18;;:::i;:::-;9596:84;9417:269;9366:320;;;:::o;9692:182::-;9832:34;9828:1;9820:6;9816:14;9809:58;9692:182;:::o;9880:366::-;10022:3;10043:67;10107:2;10102:3;10043:67;:::i;:::-;10036:74;;10119:93;10208:3;10119:93;:::i;:::-;10237:2;10232:3;10228:12;10221:19;;9880:366;;;:::o;10252:419::-;10418:4;10456:2;10445:9;10441:18;10433:26;;10505:9;10499:4;10495:20;10491:1;10480:9;10476:17;10469:47;10533:131;10659:4;10533:131;:::i;:::-;10525:139;;10252:419;;;:::o;10677:85::-;10722:7;10751:5;10740:16;;10677:85;;;:::o;10768:158::-;10826:9;10859:61;10877:42;10886:32;10912:5;10886:32;:::i;:::-;10877:42;:::i;:::-;10859:61;:::i;:::-;10846:74;;10768:158;;;:::o;10932:147::-;11027:45;11066:5;11027:45;:::i;:::-;11022:3;11015:58;10932:147;;:::o;11085:238::-;11186:4;11224:2;11213:9;11209:18;11201:26;;11237:79;11313:1;11302:9;11298:17;11289:6;11237:79;:::i;:::-;11085:238;;;;:::o;11329:180::-;11377:77;11374:1;11367:88;11474:4;11471:1;11464:15;11498:4;11495:1;11488:15;11515:194;11555:4;11575:20;11593:1;11575:20;:::i;:::-;11570:25;;11609:20;11627:1;11609:20;:::i;:::-;11604:25;;11653:1;11650;11646:9;11638:17;;11677:1;11671:4;11668:11;11665:37;;;11682:18;;:::i;:::-;11665:37;11515:194;;;;:::o;11715:410::-;11755:7;11778:20;11796:1;11778:20;:::i;:::-;11773:25;;11812:20;11830:1;11812:20;:::i;:::-;11807:25;;11867:1;11864;11860:9;11889:30;11907:11;11889:30;:::i;:::-;11878:41;;12068:1;12059:7;12055:15;12052:1;12049:22;12029:1;12022:9;12002:83;11979:139;;12098:18;;:::i;:::-;11979:139;11763:362;11715:410;;;;:::o;12131:180::-;12179:77;12176:1;12169:88;12276:4;12273:1;12266:15;12300:4;12297:1;12290:15;12317:185;12357:1;12374:20;12392:1;12374:20;:::i;:::-;12369:25;;12408:20;12426:1;12408:20;:::i;:::-;12403:25;;12447:1;12437:35;;12452:18;;:::i;:::-;12437:35;12494:1;12491;12487:9;12482:14;;12317:185;;;;:::o;12508:191::-;12548:3;12567:20;12585:1;12567:20;:::i;:::-;12562:25;;12601:20;12619:1;12601:20;:::i;:::-;12596:25;;12644:1;12641;12637:9;12630:16;;12665:3;12662:1;12659:10;12656:36;;;12672:18;;:::i;:::-;12656:36;12508:191;;;;:::o;12705:181::-;12845:33;12841:1;12833:6;12829:14;12822:57;12705:181;:::o;12892:366::-;13034:3;13055:67;13119:2;13114:3;13055:67;:::i;:::-;13048:74;;13131:93;13220:3;13131:93;:::i;:::-;13249:2;13244:3;13240:12;13233:19;;12892:366;;;:::o;13264:419::-;13430:4;13468:2;13457:9;13453:18;13445:26;;13517:9;13511:4;13507:20;13503:1;13492:9;13488:17;13481:47;13545:131;13671:4;13545:131;:::i;:::-;13537:139;;13264:419;;;:::o;13689:224::-;13829:34;13825:1;13817:6;13813:14;13806:58;13898:7;13893:2;13885:6;13881:15;13874:32;13689:224;:::o;13919:366::-;14061:3;14082:67;14146:2;14141:3;14082:67;:::i;:::-;14075:74;;14158:93;14247:3;14158:93;:::i;:::-;14276:2;14271:3;14267:12;14260:19;;13919:366;;;:::o;14291:419::-;14457:4;14495:2;14484:9;14480:18;14472:26;;14544:9;14538:4;14534:20;14530:1;14519:9;14515:17;14508:47;14572:131;14698:4;14572:131;:::i;:::-;14564:139;;14291:419;;;:::o;14716:147::-;14817:11;14854:3;14839:18;;14716:147;;;;:::o;14869:114::-;;:::o;14989:398::-;15148:3;15169:83;15250:1;15245:3;15169:83;:::i;:::-;15162:90;;15261:93;15350:3;15261:93;:::i;:::-;15379:1;15374:3;15370:11;15363:18;;14989:398;;;:::o;15393:379::-;15577:3;15599:147;15742:3;15599:147;:::i;:::-;15592:154;;15763:3;15756:10;;15393:379;;;:::o;15778:181::-;15918:33;15914:1;15906:6;15902:14;15895:57;15778:181;:::o;15965:366::-;16107:3;16128:67;16192:2;16187:3;16128:67;:::i;:::-;16121:74;;16204:93;16293:3;16204:93;:::i;:::-;16322:2;16317:3;16313:12;16306:19;;15965:366;;;:::o;16337:419::-;16503:4;16541:2;16530:9;16526:18;16518:26;;16590:9;16584:4;16580:20;16576:1;16565:9;16561:17;16554:47;16618:131;16744:4;16618:131;:::i;:::-;16610:139;;16337:419;;;:::o;16762:234::-;16902:34;16898:1;16890:6;16886:14;16879:58;16971:17;16966:2;16958:6;16954:15;16947:42;16762:234;:::o;17002:366::-;17144:3;17165:67;17229:2;17224:3;17165:67;:::i;:::-;17158:74;;17241:93;17330:3;17241:93;:::i;:::-;17359:2;17354:3;17350:12;17343:19;;17002:366;;;:::o;17374:419::-;17540:4;17578:2;17567:9;17563:18;17555:26;;17627:9;17621:4;17617:20;17613:1;17602:9;17598:17;17591:47;17655:131;17781:4;17655:131;:::i;:::-;17647:139;;17374:419;;;:::o;17799:134::-;17857:9;17890:37;17921:5;17890:37;:::i;:::-;17877:50;;17799:134;;;:::o;17939:147::-;18034:45;18073:5;18034:45;:::i;:::-;18029:3;18022:58;17939:147;;:::o;18092:238::-;18193:4;18231:2;18220:9;18216:18;18208:26;;18244:79;18320:1;18309:9;18305:17;18296:6;18244:79;:::i;:::-;18092:238;;;;:::o;18336:143::-;18393:5;18424:6;18418:13;18409:22;;18440:33;18467:5;18440:33;:::i;:::-;18336:143;;;;:::o;18485:351::-;18555:6;18604:2;18592:9;18583:7;18579:23;18575:32;18572:119;;;18610:79;;:::i;:::-;18572:119;18730:1;18755:64;18811:7;18802:6;18791:9;18787:22;18755:64;:::i;:::-;18745:74;;18701:128;18485:351;;;;:::o;18842:332::-;18963:4;19001:2;18990:9;18986:18;18978:26;;19014:71;19082:1;19071:9;19067:17;19058:6;19014:71;:::i;:::-;19095:72;19163:2;19152:9;19148:18;19139:6;19095:72;:::i;:::-;18842:332;;;;;:::o;19180:85::-;19225:7;19254:5;19243:16;;19180:85;;;:::o;19271:158::-;19329:9;19362:61;19380:42;19389:32;19415:5;19389:32;:::i;:::-;19380:42;:::i;:::-;19362:61;:::i;:::-;19349:74;;19271:158;;;:::o;19435:147::-;19530:45;19569:5;19530:45;:::i;:::-;19525:3;19518:58;19435:147;;:::o;19588:238::-;19689:4;19727:2;19716:9;19712:18;19704:26;;19740:79;19816:1;19805:9;19801:17;19792:6;19740:79;:::i;:::-;19588:238;;;;:::o;19832:237::-;19972:34;19968:1;19960:6;19956:14;19949:58;20041:20;20036:2;20028:6;20024:15;20017:45;19832:237;:::o;20075:366::-;20217:3;20238:67;20302:2;20297:3;20238:67;:::i;:::-;20231:74;;20314:93;20403:3;20314:93;:::i;:::-;20432:2;20427:3;20423:12;20416:19;;20075:366;;;:::o;20447:419::-;20613:4;20651:2;20640:9;20636:18;20628:26;;20700:9;20694:4;20690:20;20686:1;20675:9;20671:17;20664:47;20728:131;20854:4;20728:131;:::i;:::-;20720:139;;20447:419;;;:::o;20872:236::-;21012:34;21008:1;21000:6;20996:14;20989:58;21081:19;21076:2;21068:6;21064:15;21057:44;20872:236;:::o;21114:366::-;21256:3;21277:67;21341:2;21336:3;21277:67;:::i;:::-;21270:74;;21353:93;21442:3;21353:93;:::i;:::-;21471:2;21466:3;21462:12;21455:19;;21114:366;;;:::o;21486:419::-;21652:4;21690:2;21679:9;21675:18;21667:26;;21739:9;21733:4;21729:20;21725:1;21714:9;21710:17;21703:47;21767:131;21893:4;21767:131;:::i;:::-;21759:139;;21486:419;;;:::o;21911:225::-;22051:34;22047:1;22039:6;22035:14;22028:58;22120:8;22115:2;22107:6;22103:15;22096:33;21911:225;:::o;22142:366::-;22284:3;22305:67;22369:2;22364:3;22305:67;:::i;:::-;22298:74;;22381:93;22470:3;22381:93;:::i;:::-;22499:2;22494:3;22490:12;22483:19;;22142:366;;;:::o;22514:419::-;22680:4;22718:2;22707:9;22703:18;22695:26;;22767:9;22761:4;22757:20;22753:1;22742:9;22738:17;22731:47;22795:131;22921:4;22795:131;:::i;:::-;22787:139;;22514:419;;;:::o;22939:223::-;23079:34;23075:1;23067:6;23063:14;23056:58;23148:6;23143:2;23135:6;23131:15;23124:31;22939:223;:::o;23168:366::-;23310:3;23331:67;23395:2;23390:3;23331:67;:::i;:::-;23324:74;;23407:93;23496:3;23407:93;:::i;:::-;23525:2;23520:3;23516:12;23509:19;;23168:366;;;:::o;23540:419::-;23706:4;23744:2;23733:9;23729:18;23721:26;;23793:9;23787:4;23783:20;23779:1;23768:9;23764:17;23757:47;23821:131;23947:4;23821:131;:::i;:::-;23813:139;;23540:419;;;:::o;23965:221::-;24105:34;24101:1;24093:6;24089:14;24082:58;24174:4;24169:2;24161:6;24157:15;24150:29;23965:221;:::o;24192:366::-;24334:3;24355:67;24419:2;24414:3;24355:67;:::i;:::-;24348:74;;24431:93;24520:3;24431:93;:::i;:::-;24549:2;24544:3;24540:12;24533:19;;24192:366;;;:::o;24564:419::-;24730:4;24768:2;24757:9;24753:18;24745:26;;24817:9;24811:4;24807:20;24803:1;24792:9;24788:17;24781:47;24845:131;24971:4;24845:131;:::i;:::-;24837:139;;24564:419;;;:::o;24989:224::-;25129:34;25125:1;25117:6;25113:14;25106:58;25198:7;25193:2;25185:6;25181:15;25174:32;24989:224;:::o;25219:366::-;25361:3;25382:67;25446:2;25441:3;25382:67;:::i;:::-;25375:74;;25458:93;25547:3;25458:93;:::i;:::-;25576:2;25571:3;25567:12;25560:19;;25219:366;;;:::o;25591:419::-;25757:4;25795:2;25784:9;25780:18;25772:26;;25844:9;25838:4;25834:20;25830:1;25819:9;25815:17;25808:47;25872:131;25998:4;25872:131;:::i;:::-;25864:139;;25591:419;;;:::o;26016:222::-;26156:34;26152:1;26144:6;26140:14;26133:58;26225:5;26220:2;26212:6;26208:15;26201:30;26016:222;:::o;26244:366::-;26386:3;26407:67;26471:2;26466:3;26407:67;:::i;:::-;26400:74;;26483:93;26572:3;26483:93;:::i;:::-;26601:2;26596:3;26592:12;26585:19;;26244:366;;;:::o;26616:419::-;26782:4;26820:2;26809:9;26805:18;26797:26;;26869:9;26863:4;26859:20;26855:1;26844:9;26840:17;26833:47;26897:131;27023:4;26897:131;:::i;:::-;26889:139;;26616:419;;;:::o;27041:228::-;27181:34;27177:1;27169:6;27165:14;27158:58;27250:11;27245:2;27237:6;27233:15;27226:36;27041:228;:::o;27275:366::-;27417:3;27438:67;27502:2;27497:3;27438:67;:::i;:::-;27431:74;;27514:93;27603:3;27514:93;:::i;:::-;27632:2;27627:3;27623:12;27616:19;;27275:366;;;:::o;27647:419::-;27813:4;27851:2;27840:9;27836:18;27828:26;;27900:9;27894:4;27890:20;27886:1;27875:9;27871:17;27864:47;27928:131;28054:4;27928:131;:::i;:::-;27920:139;;27647:419;;;:::o;28072:180::-;28120:77;28117:1;28110:88;28217:4;28214:1;28207:15;28241:4;28238:1;28231:15;28258:180;28306:77;28303:1;28296:88;28403:4;28400:1;28393:15;28427:4;28424:1;28417:15;28444:114;28511:6;28545:5;28539:12;28529:22;;28444:114;;;:::o;28564:184::-;28663:11;28697:6;28692:3;28685:19;28737:4;28732:3;28728:14;28713:29;;28564:184;;;;:::o;28754:132::-;28821:4;28844:3;28836:11;;28874:4;28869:3;28865:14;28857:22;;28754:132;;;:::o;28892:108::-;28969:24;28987:5;28969:24;:::i;:::-;28964:3;28957:37;28892:108;;:::o;29006:179::-;29075:10;29096:46;29138:3;29130:6;29096:46;:::i;:::-;29174:4;29169:3;29165:14;29151:28;;29006:179;;;;:::o;29191:113::-;29261:4;29293;29288:3;29284:14;29276:22;;29191:113;;;:::o;29340:732::-;29459:3;29488:54;29536:5;29488:54;:::i;:::-;29558:86;29637:6;29632:3;29558:86;:::i;:::-;29551:93;;29668:56;29718:5;29668:56;:::i;:::-;29747:7;29778:1;29763:284;29788:6;29785:1;29782:13;29763:284;;;29864:6;29858:13;29891:63;29950:3;29935:13;29891:63;:::i;:::-;29884:70;;29977:60;30030:6;29977:60;:::i;:::-;29967:70;;29823:224;29810:1;29807;29803:9;29798:14;;29763:284;;;29767:14;30063:3;30056:10;;29464:608;;;29340:732;;;;:::o;30078:831::-;30341:4;30379:3;30368:9;30364:19;30356:27;;30393:71;30461:1;30450:9;30446:17;30437:6;30393:71;:::i;:::-;30474:80;30550:2;30539:9;30535:18;30526:6;30474:80;:::i;:::-;30601:9;30595:4;30591:20;30586:2;30575:9;30571:18;30564:48;30629:108;30732:4;30723:6;30629:108;:::i;:::-;30621:116;;30747:72;30815:2;30804:9;30800:18;30791:6;30747:72;:::i;:::-;30829:73;30897:3;30886:9;30882:19;30873:6;30829:73;:::i;:::-;30078:831;;;;;;;;:::o
Swarm Source
ipfs://63272fae6b4fd6118014f90b42b45a0b398f86ff4fee1dd3d0782a47b805d976
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.